2014-04-17 13 views
6

Tôi mới sử dụng EJB.Ngoại lệ khi khởi tạo EJBContainer

tôi đang tạo ra một ứng dụng web Maven đơn giản sử dụng NetBeans 7.3.1 và phiên bản của máy chủ Glassfish sử dụng là 3.1.2

Tôi đang thực hiện trường hợp thử nghiệm JUnit cho Session Beans và tôi đi theo liên kết này để hội nhập JUnit: https://netbeans.org/kb/73/javaee/maven-entapp-testing.html

Tôi đã làm theo mọi bước được mô tả ở đó nhưng tôi nhận được ngoại lệ trong khi khởi tạo EJBContainer.

EJBContainer container = javax.ejb.embeddable.EJBContainer.createEJBContainer(); 

Dưới đây là lỗi Tôi nhận:

SEVERE: EJB6001:Caught exception instantiating EmbeddedContainer. 
java.lang.NoSuchMethodError: org.jvnet.hk2.component.MultiMap.<init>(Z)V 
    at org.jvnet.hk2.component.Habitat.<init>(Habitat.java:127) 
    at org.jvnet.hk2.component.Habitat.<init>(Habitat.java:120) 
    at com.sun.enterprise.module.common_impl.AbstractModulesRegistryImpl.newHabitat(AbstractModulesRegistryImpl.java:118) 
    at com.sun.enterprise.module.bootstrap.Main.createHabitat(Main.java:444) 
    at com.sun.enterprise.glassfish.bootstrap.StaticGlassFishRuntime.newGlassFish(StaticGlassFishRuntime.java:104) 
    at org.glassfish.ejb.embedded.EJBContainerProviderImpl.createContainer(EJBContainerProviderImpl.java:201) 
    at org.glassfish.ejb.embedded.EJBContainerProviderImpl.createEJBContainer(EJBContainerProviderImpl.java:129) 
    at javax.ejb.embeddable.EJBContainer.createEJBContainer(EJBContainer.java:127) 
    at javax.ejb.embeddable.EJBContainer.createEJBContainer(EJBContainer.java:102) 
    at com.javaee.maven.test.services.LoginServiceTest.testDoLogout(LoginServiceTest.java:75) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    at java.lang.reflect.Method.invoke(Method.java:606) 
    at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:47) 
    at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12) 
    at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:44) 
    at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17) 
    at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:26) 
    at org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:27) 
    at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:271) 
    at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:70) 
    at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:50) 
    at org.junit.runners.ParentRunner$3.run(ParentRunner.java:238) 
    at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:63) 
    at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:236) 
    at org.junit.runners.ParentRunner.access$000(ParentRunner.java:53) 
    at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:229) 
    at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:26) 
    at org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:27) 
    at org.junit.runners.ParentRunner.run(ParentRunner.java:309) 
    at org.apache.maven.surefire.junit4.JUnit4Provider.execute(JUnit4Provider.java:252) 
    at org.apache.maven.surefire.junit4.JUnit4Provider.executeTestSet(JUnit4Provider.java:141) 
    at org.apache.maven.surefire.junit4.JUnit4Provider.invoke(JUnit4Provider.java:112) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    at java.lang.reflect.Method.invoke(Method.java:606) 
    at org.apache.maven.surefire.util.ReflectionUtils.invokeMethodWithArray(ReflectionUtils.java:189) 
    at org.apache.maven.surefire.booter.ProviderFactory$ProviderProxy.invoke(ProviderFactory.java:165) 
    at org.apache.maven.surefire.booter.ProviderFactory.invokeProvider(ProviderFactory.java:85) 
    at org.apache.maven.surefire.booter.ForkedBooter.runSuitesInProcess(ForkedBooter.java:115) 
    at org.apache.maven.surefire.booter.ForkedBooter.main(ForkedBooter.java:75) 

Tests run: 2, Failures: 0, Errors: 1, Skipped: 1, Time elapsed: 44.258 sec <<< FAILURE! 
testDoLogout(com.javaee.maven.test.services.LoginServiceTest) Time elapsed: 44.136 sec <<< ERROR! 
javax.ejb.EJBException: org.jvnet.hk2.component.MultiMap.<init>(Z)V 
    at org.glassfish.ejb.embedded.EJBContainerProviderImpl.createEJBContainer(EJBContainerProviderImpl.java:142) 
    at javax.ejb.embeddable.EJBContainer.createEJBContainer(EJBContainer.java:127) 
    at javax.ejb.embeddable.EJBContainer.createEJBContainer(EJBContainer.java:102) 
    at com.javaee.maven.test.services.LoginServiceTest.testDoLogout(LoginServiceTest.java:75) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    at java.lang.reflect.Method.invoke(Method.java:606) 
    at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:47) 
    at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12) 
    at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:44) 
    at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17) 
    at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:26) 
    at org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:27) 
    at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:271) 
    at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:70) 
    at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:50) 
    at org.junit.runners.ParentRunner$3.run(ParentRunner.java:238) 
    at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:63) 
    at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:236) 
    at org.junit.runners.ParentRunner.access$000(ParentRunner.java:53) 
    at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:229) 
    at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:26) 
    at org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:27) 
    at org.junit.runners.ParentRunner.run(ParentRunner.java:309) 
    at org.apache.maven.surefire.junit4.JUnit4Provider.execute(JUnit4Provider.java:252) 
    at org.apache.maven.surefire.junit4.JUnit4Provider.executeTestSet(JUnit4Provider.java:141) 
    at org.apache.maven.surefire.junit4.JUnit4Provider.invoke(JUnit4Provider.java:112) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    at java.lang.reflect.Method.invoke(Method.java:606) 
    at org.apache.maven.surefire.util.ReflectionUtils.invokeMethodWithArray(ReflectionUtils.java:189) 
    at org.apache.maven.surefire.booter.ProviderFactory$ProviderProxy.invoke(ProviderFactory.java:165) 
    at org.apache.maven.surefire.booter.ProviderFactory.invokeProvider(ProviderFactory.java:85) 
    at org.apache.maven.surefire.booter.ForkedBooter.runSuitesInProcess(ForkedBooter.java:115) 
    at org.apache.maven.surefire.booter.ForkedBooter.main(ForkedBooter.java:75) 

Bất kỳ trợ giúp sẽ được đánh giá cao.

+1

Bạn có tìm thấy giải pháp cho vấn đề này không? – Daniel

+0

Tôi cũng vậy. Bạn đã tìm thấy một giải pháp? – Jaumzera

+0

Tôi nhận được lỗi tương tự này khi thực hiện thử nghiệm đơn vị Arquillian bằng cách sử dụng glassfish nhúng – user763648

Trả lời

-1

Khi thử nghiệm EJB, bạn cần phải phân biệt 2 trường hợp:

  • Đơn vị kiểm tra: Bạn muốn thử nghiệm logic trong EJB. Trong trường hợp đó, bạn viết một trường hợp thử nghiệm đơn vị (ví dụ: với JUnit) và mô phỏng tất cả các tham chiếu bên ngoài cần thiết trong thử nghiệm, ví dụ: tất cả mọi thứ thường được tiêm từ thùng chứa. Đối với điều đó, bạn có thể sử dụng các khuôn khổ mocking như Mockito.
  • Kiểm tra tích hợp: Bạn muốn kiểm tra EJB và môi trường xung quanh và bạn cần các dịch vụ chứa như tiêm hoặc nguồn dữ liệu. Trong trường hợp đó, bạn có thể sử dụng một EmbeddedContainer, nhưng nó thường là cồng kềnh để làm như vậy, cộng thêm, bạn không có hành vi thực sự của container của bạn. Đó là lý do tại sao nó được khuyến khích, sử dụng các khung như Arquillian, cho phép chạy thử nghiệm JUnit thông thường của bạn trong một thùng chứa nhúng hoặc thực.
Các vấn đề liên quan