有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java在没有EAR的客户端中创建EJB远程引用

这就是我的开发环境:

  • 我正在使用Java1.8和Eclipse4.5.1(Mars),安装J2EE工具和插件,将WildFly 8用作应用服务器

  • 我用一个简单的HelloWorld无状态会话bean类创建了一个JavaEJB项目。它实现了两个接口:@Remote和/或@Local,其中我定义了一个字符串getHelloWorld()存根

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

@EJB 私有HelloWorld本地bean; 或 @EJB 私有helloworldremotebean

如您所见,我将bean声明为HelloWorldLocal/HelloWorldRemote类型。但是,如果我想部署和运行我的应用程序, 我需要首先将EJB和Web项目放入EAR中。这允许Servlet知道并编译HelloWorldLocal或HelloWorldRemotebean类型,只需在上添加EJB项目即可 将构建路径设置为项目,甚至将EJB项目设置为部署程序集指令

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

问题是:

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


共 (3) 个答案

  1. # 1 楼答案

    我不确定自己是否完全理解您的要求,我已经多年没有这样做了,但通常的做法是创建一个只包含客户机bean依赖项和远程接口的EJB客户机JAR。为了最好地实现这一点,您需要使用Maven之类的工具来构建包含EJB plugin for this的项目。如果您不使用Maven,您将受到Eclipse中工具的限制,尽管它一度确实包含EJB client generation支持。EJB客户机上的Wildfly documentation设置可能也有帮助,但明确提到打包客户机超出了范围

  2. # 2 楼答案

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

    这个。罐子会在任何耳朵外面。然而,它需要jboss客户端。因为@annotations而导致jar。所以,我打包了所有接口和jboss客户端。jar,将它们导出到一个。jar和我在EJB和客户端项目中添加了这个新文件作为外部jar!现在我可以在EJB类实现和@EJB客户机变量上使用HelloWorld*类型

    如果我想要一个远程Web客户机,我已经将带有Web项目模块的EJB项目放入了一个EAR中——我们肯定需要一个EAR。Web模块有servlet,servlet处理@EJB变量和响应。所以,在这个EAR之外,我只需要使用Servlet的URL,您就知道了:EJB方法的结果是从远程web客户端获得的

    在使用JNDI的桌面应用程序中,我只是将接口。将类似jar的外部jar导入客户机项目。这样,我就可以投球了。查找()到HelloWorld*类型并使用其方法

    • 我希望有帮助