Enterprise JavaBeans 3.1中的代码第4章。如果您需要更多代码或信息,请询问!
public class SimpleCalculatorIntegrationTest {
private static SimpleCalculatorBean calc;
private static Context namingContext;
private static final String JNDI_NAME_CALC = "java:global/SimpleCalculatorEJB/SimpleCalculatorBean";
@BeforeClass
public static void obtainProxyReferences() throws NamingException {
namingContext = new InitialContext();
calc = (SimpleCalculatorBean) namingContext.lookup(JNDI_NAME_CALC);
}
@Test
public void testAddition() {
int expectedSum = 1 + 2 + 3 + 4; // 10
assertEquals(expectedSum, calc.add(1, 2, 3, 4));
}
}
堆栈跟踪:
11.okt.2011 20:41:28 com.sun.enterprise.v3.server.CommonClassLoaderServiceImpl findDerbyClient INFO:找不到javadb客户端jar文件,derby jdbc 默认情况下,驱动程序不可用。了java.lang.RuntimeException: Orb初始化erorr at org.glassfish.enterprise.iiop.api.GlassFishORBHelper.getORB(GlassFishORBHelper.java:180) 在 com.sun.enterprise.naming.impl.SerialContext.getORB(SerialContext.java:365) 在 com.sun.enterprise.naming.impl.SerialContext.getProviderCacheKey(SerialContext.java:372) 在 com.sun.enterprise.naming.impl.SerialContext.getRemoteProvider(SerialContext.java:402) 在 com.sun.enterprise.naming.impl.SerialContext.getProvider(SerialContext.java:347) 在 com.sun.enterprise.naming.impl.SerialContext.lookup(SerialContext.java:504) 在 com.sun.enterprise.naming.impl.SerialContext.lookup(SerialContext.java:455) 在javax.naming.InitialContext.lookup(InitialContext.java:392)at no.breakpoint.ejbbook.calculator.test.SimpleCalculatorIntegrationTest.obtainProxyReferences(SimpleCalculatorIntegrationTest.java:24) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) 在 sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) 在java.lang.reflect.Method.invoke(Method.java:597)at org.junit.runners.model.FrameworkMethod $ 1.runReflectiveCall(FrameworkMethod.java:44) 在 org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:15) 在 org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:41) 在 org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:27) 在org.junit.runners.ParentRunner.run(ParentRunner.java:236)at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:50) 在 org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38) 在 org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:467) 在 org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683) 在 org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390) 在 org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197) 引起:java.lang.NullPointerException at org.glassfish.enterprise.iiop.api.GlassFishORBHelper.getORB(GlassFishORBHelper.java:152) ......还有23个
答案 0 :(得分:4)
只是为其他感兴趣的用户总结我们的聊天对话:
您可以通过两种方式编写适用于EJB的测试:
然后,您将能够通过调用与此类似的代码来找到EJB的远程接口:
public class Main {
private static final String JNDI =
"java:global/yourApp/YourEJBBean!com.test.YourEJBBeanRemote";
public static void main(String[] args) throws NamingException {
Context ctx = new InitialContext();
YourEJBBeanRemote sr = (YourEJBBeanRemote)ctx.lookup(JNDI);
// Invoke some method on 'sr'
}
}
2。测试容器内部。这意味着您的测试在容器内执行,并且很可能与您的应用程序一起执行。这允许您使用依赖注入,EntityManagers,本地/无接口EJB的视图等。使用JBoss Arquillian,您只需假设已为您提供所有服务即可编写测试。
EJB 3.1新的无界面视图就像本地视图一样,因此它不能用于驻留在应用程序之外的客户端。