2

NetBeans 站点中有一个示例如何使用简单项目(没有 Maven)创建应用程序客户端。需要 4 个项目(EJB、EAR、Lib、程序)。本教程很简单,而且效果很好。

我想问一下如何对 Maven 做同样的事情?我无法正确获取所有依赖项,因此当我尝试调用 EJB 方法时,它给了我NullPointerException. 谁能告诉我需要完成的关键步骤(最好使用 NetBeans)?因为我很困惑,关于需要创建多少项目?我知道,我需要应用程序项目、EAR 和 EJB 项目,仅此而已?这些项目 pom.xml 文件中需要编写哪些特殊配置?

编辑1:

我不想显式 JNDI 我希望能够使用 @EJB 注释。

4

2 回答 2

3

以下是步骤:

  1. 使用 New Project 菜单的 Maven 文件夹创建用于保存接口类的 Java 类库。选择 Maven 文件夹下的 Java 应用程序。
  2. 按照 NB 的教程创建企业应用程序。唯一的区别是你必须使用新项目菜单的Maven文件夹
  3. 构建类库
  4. 确保类库是企业应用程序中的依赖项。
  5. 运行企业应用程序。NB 将其部署到 GF 服务器
  6. 使用 Maven 的文件夹创建应用程序客户端。不要在此处使用插入代码NB 的功能来注入无状态 EJB,因为它会崩溃(至少在我的版本中:NB 7.2)。相反,只需复制并粘贴教程中显示的代码。您不需要任何部署/ejb 描述符。
  7. 修改应用程序客户端的 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>
    
  8. 用NB构建应用客户端项目

  9. 使用 GF 的应用程序客户端命令运行应用程序客户端:appclient -jar EntAppClient-1.0-SNAPSHOT-jar-with-dependencies.jar

有用的链接:Java EE 埋藏的宝藏: Jason Lee的应用程序客户端容器

重要的提示

为了将客户端部署到其他 JVM ,您必须在每台客户端计算机上安装 appclient并设置 target-server 属性。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按照链接文档使用脚本

于 2013-03-18T22:39:56.643 回答
0

有一个有用的EJB 常见问题解答,其中提到了如何使用@EJB来访问远程 EJB ejb-refsun-web.xml或者现在它是glassfish-web.xml如下链接:-

如果我有多个 Appserver 实例正在运行并且我想访问它们之间的远程 EJB 组件怎么办?

如果您想比较ejb-refejb-local-ref,您可以在 @EJB 和 ejb-ref/ejb-local-ref 之间的关系是什么?

我希望这可能会有所帮助。

于 2013-03-18T00:38:13.233 回答