有 Java 编程相关的问题?

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

在Glassfish上使用@EJB注释和Maven的java应用程序客户端

NetBeans站点how to create Application Client中有一个使用简单项目(没有Maven)的示例。需要4个项目(EJB、EAR、Lib、Program)。本教程很简单,效果很好

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

EDIT1:

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


共 (2) 个答案

  1. # 1 楼答案

    以下是步骤:

    1. 使用新项目菜单的Maven文件夹创建Java类库以保存接口类。选择Maven文件夹下的Java应用程序
    2. 按照NB的教程创建企业应用程序。唯一的区别是,您必须使用新项目菜单的Maven文件夹
    3. 构建类库
    4. 确保类库是企业应用程序中的依赖项
    5. 运行Enterpise应用程序。NB将把它部署到GF服务器
    6. 使用Maven文件夹创建应用程序客户端。不要在这里使用插入代码的特性注入无状态EJB,因为它会崩溃(至少在我的版本:NB7.2中是这样)。相反,只需复制并粘贴教程中显示的代码。您不需要任何部署/ejb描述符
    7. 修改应用程序客户机的POM,以便使用maven assembly插件获取具有依赖项的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's Buried Treasure: the Application Client Container作者:Jason Lee

    重要提示

    为了将客户端部署到oher JVMyou 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(该文件是必需的,因为它包含目标服务器属性)因此,我认为唯一的方法是根据链接文档使用package-appclient脚本