NetBeans网站how to create Application Client中有一个使用简单项目(没有Maven)的示例。需要4个项目(EJB,EAR,Lib,Program)。本教程很简单,效果很好。
我想问一下如何对Maven做同样的事情?我无法正确地获取所有依赖项,所以当我尝试调用EJB方法时,它会给我NullPointerException
。谁能告诉我,需要完成的关键步骤(使用NetBeans优先)?因为我很困惑,需要创建多少个项目?我知道,我需要Application Project,EAR和EJB项目,这就是它吗?需要在这些项目pom.xml文件中编写哪些特殊配置?
EDIT1:
我不想显式JNDI我希望能够使用@EJB注释。
答案 0 :(得分:3)
以下是步骤:
修改应用程序客户端的POM,以便使用maven-assembly-plugin获取具有依赖关系的jar。如果不执行此步骤,则部署将失败,因为GF无法加载接口类。将以下行添加到plugins
选项卡(根据需要更改主类):
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<version>2.4</version>
<configuration>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
<archive>
<manifest>
<mainClass>com.entapp.entappclient.Main</mainClass>
</manifest>
</archive>
</configuration>
<executions>
<execution>
<id>make-assembly</id>
<phase>package</phase>
<goals>
<goal>single</goal>
</goals>
</execution>
</executions>
</plugin>
使用NB构建应用程序客户端项目
appclient -jar EntAppClient-1.0-SNAPSHOT-jar-with-dependencies.jar
有用的链接:Jason Lee的Java EE's Buried Treasure: the Application Client Container
重要提示
为了将客户端部署到其他JVM you have to install the appclient on each client machine并设置目标服务器属性。 appclient似乎有一个非常复杂的结构,你不能简单地通过添加这些行来生成(加上EclipseLink持久性工件):
<dependency>
<groupId>org.glassfish.appclient</groupId>
<artifactId>gf-client</artifactId>
<version>3.1.1</version>
<type>pom</type>
<scope>compile</scope>
</dependency>
将这些工件添加到客户端可以完美地编译,但jar不起作用。这是可以理解的,因为缺少文件sun-acc.xml(此文件是必需的,因为它包含target-server属性)。 因此我认为唯一的方法是根据链接文档使用package-appclient
脚本。
答案 1 :(得分:0)
有一个有用的EJB FAQ提到了如何使用@EJB
和ejb-ref
一起使用sun-web.xml
来访问远程EJB,现在它是{ {1}}如下链接: -
如果您想在glassfish-web.xml
和ejb-ref
之间进行比较,可以在What is the relationship between @EJB and ejb-ref/ejb-local-ref?
我希望这可能有所帮助。