2014-12-10 3 views
0

다른 간단한 프로젝트에서 사용되는 bean을 사용하여 새 EJB 프로젝트를 만들고 있습니다. GlassFish 4.0과 함께 NetBeans 7.4를 사용하고 있습니다.Glassfish 4를 사용하여 원격 EJB Bean을 만드는 방법은 무엇입니까?

DbBeanInt.java 여기

package com.ejb; 

import javax.ejb.Remote; 

@Remote 
public interface DbBeanInt { 
    public void test(String asd); 
} 

DbBean.java

package com.ejb; 

import javax.ejb.*; 

@Stateless(name = "DbBean", mappedName="B") 
@Remote 
public class DbBean implements DbBeanInt{ 

@Override 
public void test(String asd) { 
    System.out.println(asd); 
} 
} 

그리고 내가 그것을 호출하고있는 코드입니다 : 다음은 EJB 프로젝트 내 인터페이스 및 구현이다. 나는이 프로젝트의 라이브러리 인 EJB 프로젝트에 포함시켰다. 나는이 응용 프로그램을 실행할 때

package bookstoreclient; 

import com.ejb.DbBeanInt; 
import javax.ejb.EJB; 

public class BookStoreClient { 

@EJB 
private static DbBeanInt db; 

public static void main(String[] args) { 
    db.test("Test"); 
} 
} 

그러나 내가 얻을 : 포함되어야한다 뭔가 다른

Exception in thread "main" java.lang.NullPointerException 
at bookstoreclient.BookStoreClient.main(BookStoreClient.java:12) 

있습니까?

+0

EJB 응용 프로그램은 Glassfish 서버에 배포되고 두 번째 응용 프로그램은 간단한 Java 응용 프로그램으로 배포됩니다. – Arnold

답변

1

DbBean 클래스와 DbBeanInt 인터페이스는 괜찮습니다. BookStoreClient 클래스가 올바르지 않습니다.

@EJB를 사용하여 원격 EJB와 통신하기 위해 EJB 프록시를 "삽입"합니다. "Managed Beans"(EJB는 EJB 컨테이너가 관리하는 Managed Bean 임) 만 "Managed Beans"에 삽입 할 수 있습니다. BookStoreClient 클래스는 main() 메소드로 시작하기 때문에 관리 빈이 아닙니다. https://github.com/StefanHeimberg/stackoverflow-27411885

단순히 그것을 복제 및 넷빈즈와 _27411885를 엽니 다

내가 당신에게 당신의 질문에 대한 작업 예를 보여 GitHub의에 저장소를 만들었습니다.

이 저장소 안에는 DBService Bean과 DBServiceRemote 인터페이스가있는 db-ejb 프로젝트가 있습니다. 또한 DBServiceIT와 함께 포함 된 glassfish를 사용하여 로컬 no-interface보기 (@LocalBean)를 통해 DBService를 테스트합니다.

db-client 프로젝트는 단순히 DBService bean을 원격으로 호출합니다. Glassfish로 db-ejb 프로젝트를 먼저 배포 ("실행")하십시오.