我正在将带有EJB的耳朵部署到glassfish 3.1上,我想使用appclient脚本调用它。 EJB有一个方法,其参数是一个模型对象,它在一个单独的库中定义。
如果我想使用appclient脚本,我有一个Main类,它有一个调用EJB的main方法。 这也被放入一个单独的罐子里,它也被装在玻璃鱼上。
由于模型对象位于一个单独的库中,我需要它在客户端jar中,但也需要在EJB中。 所以我需要在客户端jar中以某种方式引用它。
客户端jar是一个jar(duh)所以我不能添加其他jar。 Java EE 6文档说我应该用lib创建一个ear,但如果我这样做它就不会部署,因为ear需要至少一个ejb或web模块而我的客户端lib都没有。
我发现的解决方案是使用程序集插件/ jar-with-dependencies。这个插件创建一个新jar,它包含所有依赖项的所有类。
这个解决方案有效,但我想知道这是不是要走了,或者我错过了一些明显的东西,因为我无法想象这是必需的。 EJB通常将模型对象作为参数,因此这种情况会发生很多。
所以我的问题是:有没有办法告诉glassfish引用app client jar和ejb jar之间的共享库。
答案 0 :(得分:0)
我这样做是这样的:
<packaging>bundle</packaging>
将其定义为 OSGi包。我将此项目称为MyAppInterface
。为需要处理模型的其他元素分离Maven项目。就我而言,我有一个带有EJB,数据库外观,REST servlet的Java EE应用程序;我有一个只进行测试的Integration-Test项目; GWT申请; etc ...在那些项目中,我指定了对模型的依赖:
<dependency>
<groupId>com.skalio</groupId>
<artifactId>MyAppInterface</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
将MyAppInterface
部署到Glassfish时,我使用以下语法:
asadmin deploy --type osgi --name MyAppInterface /path/to/MyAppInterface-1.0-SNAPSHOT.jar
我允许所有这些项目由中央jenkins CI服务器构建,该服务器将工件部署到我们的内部maven存储库。然后,我们在每个项目的pom.xml
中添加内部存储库。因此,每个人都自动使用最新的稳定MyAppInterface
,即使他们没有在NetBeans / Eclipse中检出代码。
如果您需要更多示例,请与我们联系。