从独立应用程序调用glassfish ejb

时间:2012-03-07 14:46:08

标签: java ejb-3.0 glassfish-3

所以我在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)

感谢。

1 个答案:

答案 0 :(得分:0)

修改

我只需要从我的Tomcat服务器调用部署在GF上的EJB并重新启动我的依赖项。因为我不想让他们为自己保留:)... minimal dependencies for gf bean invokation

我的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调用调用方法的能力。

希望这有帮助,玩得开心!