繁体   English   中英

在EAR客户端中创建EJB远程引用

[英]Creating EJB remote references into a client witout EAR

好吧,这是我的开发环境:

  • 我正在使用Java 1.8和Eclipse 4.5.1(Mars),J2EE工具和已安装的插件,以将WildFly 8用作应用程序服务器

  • 我创建了一个Java EJB项目,其中包含一个简单的HelloWorld无状态会话bean类。 它实现2个接口:@Remote和/或@Local,在其中定义了String getHelloWorld()存根。

  • 现在,我有了使用EJB的客户端:具有一个Servlet的动态Web项目。 在Servlet内,我可以使用注释注入ejb类,如下所示:

@EJB私有HelloWorldLocal bean; 或@EJB私有HelloWorldRemote bean;

如您所见,我将bean声明为HelloWorldLocal / HelloWorldRemote类型。 但是,如果要部署和运行应用程序,则需要首先将EJB和Web项目放入EAR。 通过简单地将EJB项目作为项目添加到Build Path上,或者甚至将EJB项目作为Deployment Assembly指令,Servlet即可知道并编译HelloWorldLocal或HelloWorldRemote bean类型。

我想在EAR(远程Swing应用程序或Remote WebSite)之外创建一个客户端。 这意味着我的客户将没有机会像在EAR中一样将EJB项目接口添加为构建路径中的项目引用。 即使我想用JNDI调用远程bean,我也需要将lookup()对象强制转换为那些类型,以便使用bean方法。

问题是:

如果将这些接口声明到单独的EJB项目中,那么如何从没有EAR的远程客户端中获取HelloWorldRemote / HelloWorldLocal Bean类型? (当然,我不想在这里用EJB项目创建.jar)。

那么可移植的JNDI查找呢? https://docs.oracle.com/cd/E19798-01/821-1841/girgn/index.html如果EJB与您的客户端在同一JVM中,则它应该可以工作。

我不确定我是否完全理解您的要求,并且多年以来都没有做到这一点,但是通常的方法是创建仅包含客户端的bean依赖项和远程接口的EJB客户端JAR 为了最好地做到这一点,您需要使用Maven之类的工具来构建您的项目,该项目包含为此EJB插件 如果您不使用Maven,那么您将受到Eclipse中工具的限制,尽管有时它确实包含EJB客户端生成支持。 关于EJB客户端设置的Wildfly文档可能也有帮助,但是明确提到打包客户端超出了范围。

我想分享我发现的唯一解决方案:我必须创建一个.jar文件,其中包含所有EJB接口(@ Remote,@ Local等),并像在远程客户端上引用类型一样使用它。

该.jar将在任何EAR之外。 但是,由于@注释,它需要jboss-client.jar。 因此,我将所有接口和jboss-client.jar打包,将它们导出到.jar,然后将此新文件添加到EJB和客户端项目中作为外部jar! 现在,我可以在EJB类实现和@EJB客户端变量上使用HelloWorld *类型。

如果需要远程Web客户端,则将带有Web Project模块的EJB项目放置到EAR中-肯定需要EAR。 Web模块具有Servlet,而Servlet处理@EJB变量和响应。 因此,在这个EAR之外,我只需要对servlet使用URL,就可以了:EJB方法结果是从远程Web客户端获得的。

在具有JNDI的桌面应用程序中,我只是将接口.jar(如外部jar)放入客户端项目中。 这样,我可以将.lookup()转换为HelloWorld *类型并使用其方法。

  • 希望对您有所帮助。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM