2012-03-07 4 views
2

그래서 glassfish 3.1 서버에 배포 된 간단한 ejb (@stateless)가 있습니다.독립 실행 형 응용 프로그램에서 glassfish ejb를 호출하십시오.

독립 실행 형 응용 프로그램에서 호출하고 싶습니다.

gf-client.jar을 실행 구성에 추가하면 매우 효과적입니다.

하지만 파일이 없으면 (서버가 다른 컴퓨터에 있음) 어떻게 할 수 있습니까?

나는
<dependency> 
    <groupId>org.glassfish.common</groupId> 
    <artifactId>glassfish-naming</artifactId> 
    <version>LATEST</version> 
</dependency> 

를 사용하여 시도하지만

Exception in thread "main" javax.naming.NameNotFoundException: java:global 
at com.sun.enterprise.naming.impl.TransientContext.resolveContext(TransientContext.java:252) 
at com.sun.enterprise.naming.impl.TransientContext.lookup(TransientContext.java:171) 
at com.sun.enterprise.naming.impl.SerialContextProviderImpl.lookup(SerialContextProviderImpl.java:58) 
at com.sun.enterprise.naming.impl.LocalSerialContextProviderImpl.lookup(LocalSerialContextProviderImpl.java:95) 
at com.sun.enterprise.naming.impl.SerialContext.lookup(SerialContext.java:233) 
at javax.naming.InitialContext.lookup(Unknown Source) 
at be.java.tuto.Application.main(Application.java:17) 

감사합니다.

+0

에는 ** minimal ** 의존성 목록이 추가되었습니다. 재미있게 보내십시오! – SimonSez

답변

0

편집은 :

난 그냥 내 Tomcat 서버에서 GF에 배포 된 EJB를 호출하는 데 필요한 내 종속성을 부활. 나 자신을 위해 그들을 다시 유지하려는 해달라고 때문에 :) ... minimal dependencies for gf bean invokation

내 IDE 이클립스그래서 나는 위의 모든 파일을 포함하는 사용자 라이브러리를 만들었습니다.

호프가 문제를 해결할 수 있기를 바랍니다.


나는 같은 문제에 직면했다. GF session-Bean 메소드를 호출하기 위해서 클라이언트 클라이언트의 클래스 패스에 gf-client.jar을 추가해야했습니다.

제 문제는이 라이브러리가 거의 모든 GF-libray-folder를 참조하고 있고 클린업 후에도 클라이언트 클래스 경로에 추가해야하는 15 개 이상의 참조 된 jar 파일이 남아 있다는 것입니다.

나는이 오버 헤드를 원하지 않기 때문에 JAX-WS 웹 서비스를 통해 원격 메소드를 호출하기로 결정했습니다.

webservises를 사용할 때의 장점은 콩 클래스에 @ WebService으로 주석을 달아 웹 서비스 기능을 기존 세션빈에 쉽게 추가 할 수 있다는 것입니다.

Bean을 응용 프로그램 서버에 공개하면 배포 된 끝점을보고 WSDL을 가져올 수 있습니다. 이것을 사용하면 JDK와 함께 제공되는 wsimport -tool을 사용하여 자동으로 웹 서비스 스텁을 생성하고 yor 클라이언트에서이 생성 된 파일을 사용하여 원격 메소드를 호출 할 수 있습니다.

예 : here을 참조하십시오.

일단 만들어진 파일은 이식 가능하며 모든 클라이언트에서 사용할 수 있습니다.

클라이언트가 원격 메소드를 호출하는 방식을 변경하려는 경우이 방법은 휴대 성이 뛰어나고 (약간의 HTTP 오버 헤드 제외) 가볍고 대안을 쉽게 구현할 수 있습니다.

P. EJB 호출을 통해 메소드를 호출 할 수있는 능력을 잃지 않습니다.

희망을 갖고 도움을 받으십시오!

+0

유일한 단점은 호출의 의미가 다르다는 것입니다. EJB를 사용하면 직렬화 가능한 모든 Java 객체를 전송할 수 있으며 웹 서비스에서는 그렇지 않습니다. 예를 들어, 기본 JAX-WS 도구는 모든 것을 객체의 그래프 (부모에 대한 참조가있는 다른 객체를 포함하는 객체)로 보내지는 않습니다. 이것은 주위에 일할 수 있지만, 알고 있어야 할 것입니다. –

+0

고마워요.하지만 제 질문에 답하지 않고 있습니다. 나는 거기에 해결책이 있다고 생각하지 않는다 ... – tweetysat

+0

죄송합니다! 그리고 귀하의 권리 : 클라이언트 클래스 패스에 * gf-client * -file (** 및 ** 참조 항아리)을 추가하지 않고 GF-Bean을 호출 할 수있는 해결책이 없습니다. 그러므로 WebService 접근 방식을 제안했습니다. – SimonSez

관련 문제