所以我在glassfish 3.1服务器上部署了一个简单的ejb(@stateless)。
我想从独立的应用程序中调用它。
如果我将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 :(得分:0)
修改强>
我只需要从我的Tomcat服务器调用部署在GF上的EJB并重新启动我的依赖项。因为我不想让他们为自己保留:)...
我的IDE是 Eclipse 所以我创建了一个包含上面显示的所有文件的用户库。
希望这能解决您的问题!
我遇到了同样的问题。为了只想调用GF session-Bean方法,我必须将完整的 gf-client.jar 添加到我的客户端类路径中。
我的问题是这个库几乎引用了整个GF-libray文件夹,即使在清理完之后还有15个引用的jars,我必须添加到我的客户端类路径中。
对我来说,我不想要这个开销,所以我决定通过JAX-WS webservice调用远程方法。
使用webservises的优点是,通过使用 @WebService 注释bean类,可以很容易地将web服务功能添加到现有的会话bean中。
将bean发布到appserver后,您就可以查看已部署的端点并获取WSDL。通过这种方式,您可以使用JDK附带的wsimport
- 工具自动生成Web服务存根,并在yor客户端中使用此生成的文件来调用远程方法。
参见示例here。
创建后,这些文件是可移植的,可以在任何客户端使用。
因此,如果您愿意更改客户端调用远程方法的方式,那么这将是一个可移植的,轻量级的(除了更多的http开销)并且易于实现替代方案。
P.S。 您不会失去通过EJB调用调用方法的能力。
希望这有帮助,玩得开心!