2011-10-11 5 views
0

Enterprise JavaBeans 3.1 코드에서 코드 4. 더 많은 코드 또는 정보가 필요하면 그냥 물어보십시오!통합 테스트 실행 중 문제 EJB

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 정보 : javadb에 클라이언트 jar 파일을 찾을 수 없습니다, 더비 JDBC 드라이버는 기본적으로 사용할 수 없습니다. java.lang.RuntimeException가 : org.glassfish.enterprise.iiop.api.GlassFishORBHelper.getORB (GlassFishORBHelper.java:180)에서 오브 초기화 erorr com.sun.enterprise.naming.impl.SerialContext.getORB에서 (SerialContext 된 .java : 365) com.sun.enterprise.naming.impl.SerialContext.getProviderCacheKey com.sun.enterprise.naming.impl.SerialContext.getRemoteProvider에서 (SerialContext.java:372) 에서 (SerialContext.java:402)에 012,351 com.sun.enterprise.naming.impl.SerialContext.getProvider com.sun.enterprise.naming.impl.SerialContext.lookup (SerialContext.java:504에서 (SerialContext.java:347) ) 에서 com.sun.enterprise.naming.impl.SerialContext.lookup (SerialContext.java:455) at javax.naming.InitialContext.lookup (InitialContext.java:392) at no.breakpoint.ejbbook.calculator.test.SimpleCalculatorIntegrationTest .obtainProxyReferences (SimpleCalculatorIntegrationTest.java:24) sun.reflect.DelegatingMethodAccessorImpl.invoke에서 sun.reflect.NativeMethodAccessorImpl.invoke (NativeMethodAccessorImpl.java:39) 에서 sun.reflect.NativeMethodAccessorImpl.invoke0 (기본 방법) (DelegatingMethodAccessorImpl에서 .java : 25) at java.lang.reflect.Mavod.invoke (Method.java:597) org.junit.runners.model.FrameworkMethod $ 1.runReflectiveCall (FrameworkMethod.java:44) at org.junit.internal 10 org.junit.internal.runners.model.ReflectiveCallable.run org.junit.runners.model.FrameworkMethod.invokeExplosively (FrameworkMethod.java:41)에서 (ReflectiveCallable.java:15) .runners.statements.RunBefores.evaluate (RunBefores.java:27) at org.junit.runners.ParentRunner.run (ParentRunner.java:236) at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests에서 org.eclipse.jdt.internal.junit.runner.TestExecution.run (TestExecution.java:38)에서 (JUnit4TestReference.java:50) (RemoteTestRunner.java:467) at org.eclipse.jdt.inter nal.junit.runner.RemoteTestRunner.runTests (RemoteTestRunner.java:683) org.eclipse.jdt에서 org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run (RemoteTestRunner.java:390) 에서 . org.glassfish.enterprise.iiop.api.GlassFishORBHelper.getORB (GlassFishORBHelper.java:152) 에서 java.lang.NullPointerException이 .. : internal.junit.runner.RemoteTestRunner.main (RemoteTestRunner.java:197)는 에 의한 .23 개

+0

컨테이너에서 테스트를 실행하고 있습니까 (예 : Arquillian?). 컨테이너 외부에서 실행중인 경우 다른 JVM에서 도달하려고 할 때 로컬 또는 인터페이스 없음 EJB보기를 사용하고 있지 않은지 확인하십시오. –

+0

@PedroKowalski 자바 채팅에 5 분이 있습니까? 나는 다음 장으로 넘어갈 수 있도록 도움을 줄 것이다. – LuckyLuke

답변

4

그냥 다른 관심있는 사용자에 대한 우리의 채팅 대화를 요약합니다 :

당신은 두 가지 방법으로 EJB 년대에서 작동 테스트를 작성할 수 있습니다

  1. 테스트 을 외부 - 중 - -container. 테스트가 다른 JVM에서 다른 응용 프로그램으로 실행됨을 의미합니다. 이 경우 원격 인터페이스 EJB 뷰와 JNDI를 사용하여 EJB를 찾아야합니다. JNDI 좌표는 이식 가능한 JNDI 구문과 관련하여 EJB 3.1 specification으로 작성된 구문입니다 (81 페이지). 글래스 피시의 경우 당신은 다음을 수행해야합니다
    • 가 클래스 패스에 원격 인터페이스를 추가 (그것을 사용할 수 있도록),
    • 는 클래스 패스에 GF-client.jar가를 추가합니다.

그런 다음이 다소 유사한 코드를 호출하여 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의 새로운 인터페이스 없음보기는 로컬보기와 같으므로 응용 프로그램 외부에있는 클라이언트에는 사용할 수 없습니다.

관련 문제