2014-01-14 2 views
0

EJB3 + JavaEE6 + JBoss를 사용합니다. 나는 EJB에서 절대적으로 초보자 다. 이 코드 작성 : 내가있어 NullPointerException이 컴파일 후NullPointerException 및 @EJB

import server.ejb.HelloUserBean; 
import javax.ejb.EJB; 

public class Test 
{ 
    @EJB 
    public static HelloUserBean bean; 

    public static void main(String... args) 
    { 
     bean.sayHello("Alex"); 
    } 
} 

:

package server.ejb; 
@Remote 
public interface HelloUser 
{ 
    void sayHello(String name); 
} 

@Stateless 
public class HelloUserBean implements HelloUser 
{ 
    @Override public void sayHello(String name) 
    { 
     System.out.println("Hello " + name); 
    } 
} 

메이븐이 코드를 assebled 데와 제이보스에 배포, 나는 클라이언트를 썼다. 콩은 null이라고했습니다. JDNI + PersistentContext를 사용하면 성공할 수는 있지만 여전히 DI는 사용할 수 없습니다. 제발, 도와주세요


내 코드를 재구성했습니다. 사실 나는 같은 서버와 독립 실행 형 클라이언트 응용 프로그램으로 다른 서버 측 프로젝트를 작성했습니다. 여기 enter image description here

@Remote 
public interface EchoRemote{ 
    String getMessage(); 
} 

@Stateless 
public class EchoBean implements EchoRemote{ 
    @Override 
    public String getMessage(){ 
     return "Hello From Stateless Bean"; 
    } 
} 

public class InvokationClient{ 
    @EJB 
    private EchoRemote bean; 

    public String getMessage(){ 
     return bean.getMessage(); 
    } 
} 

그리고 클라이언트 측 독립 실행 형 응용 프로그램입니다 : 내가 '

import com.steeplesoft.client.InvokationClient; 

public class Main{ 
    public static void main(String... args) throws IOException{ 
     InvokationClient client = new InvokationClient(); 

     FileWriter fileWriter = new FileWriter("D:/invokation_client_test.txt"); 
     fileWriter.write(client.getMessage()); 
     fileWriter.close(); 
    } 
} 

다음은 서버 측 응용 프로그램의 구조는 비어있는 파일과 NullPointerEception을 얻었습니다. in console

나는 당신이 나를 도울 수 있기를 바랍니다 :) 그것은 나를 위해 대단히 중요합니다!

답변

0

그래서 테스트 클래스 독립 실행 형을 별도의 JVM에서 시작합니다. 어떤 JBoss를 연결해야합니까? 어떤 구성 요소가 종속성 주입입니까? 테스트 클래스를 관리하는 DI 컨테이너가 없으며 JBoss에 대한 연결이 어디에도 구성되어 있지 않기 때문에이 방법은 작동하지 않습니다. 그것이 작동되도록하기 위해서는

, 당신은 다음과 같은 작업을 수행 할 수

1) 서블릿에서 @EJB를 사용하고 제이보스에 배포, 서블릿을 작성합니다. EJB와 Servlet을 동일한 WAR에 두어 쉽게 만들 수 있습니다. Servlet은 컨테이너에 의해 관리되고 DI는 작동합니다. EJB를 처음 다루는 초보자로서 나는 이것을 먼저 할 것입니다.

2)는 JNDI-조회를 수행하고 JBOSS와 클라이언트를 호출 할

3 https://docs.jboss.org/author/display/AS71/EJB+invocations+from+a+remote+client+using+JNDI에 설명 된대로 http://blogs.steeplesoft.com/posts/2011/02/22/java-ees-buried-treasure-the-application-client-container/에 설명 된대로 응용 프로그램 클라이언트 컨테이너 (ACC)를 사용) 독립 클라이언트에서 EJB를 호출 EAR 배포 로컬

$JBOSS_HOME/bin/appclient.sh --host remote://localhost:4447 ./local/path/to/enterpriseapplication-0.1-SNAPSHOT.ear#appclient-0.1-SNAPSHOT.jar 

비고 : 나는 blogs.steeplesoft.com에서 예를했을 때, 나는 스윙 클래스에 문제가 있었다,하지만 내가 스윙 클래스를 제거 할 때, 제이보스 EAP 6.2 일을했다.

+0

좋아, 내가 한 일을 설명하겠습니다. 사실, 나는 내가 초보자가 아니라고 믿는다. 나는 JNDI를 통해 그것을 부를 수 있었다 - 그것은 쉬웠다. 엄청난 수의 서블릿 예제를 보았고 하나의 예제를 만들었고 성공했다. 하지만 스윙 앱을 사용하고 싶습니다. 들어 봐, 나는 내 test 클래스를 "server.client"안에 넣었다. 따라서 "클라이언트"와 "ejb"는 패키지 "서버"입니다. maven을 사용하여 프로젝트를 assebled하고 jboss에 배포했습니다. "클라이언트"가 "ejb.HelloUserBean"을 찾을 수 있다고 가정 할 때 클래스 내부에 @EJB없이 새로운 독립 실행 형 응용 프로그램을 작성했습니다. "server.project"를 가져 와서 클라이언트 메소드를 호출하고 실패했습니다.난 NullPointerException있어 : ( –

+0

아, 당신은 응용 프로그램 클라이언트 컨테이너를 사용하려는 참조하십시오. 나는 가능한 해결책으로 이것을 추가했습니다. –