Application client using @EJB annotation and Maven on Glassfish

后端 未结 2 507
天涯浪人
天涯浪人 2021-01-14 19:21

There is an example in NetBeans site how to create Application Client using simple projects (without Maven). There are 4 projects needed (EJB, EAR, Lib, Program). This tutor

相关标签:
2条回答
  • 2021-01-14 20:05

    There is a useful EJB FAQ which mention about how to use the @EJB to access the remote EJB by using the ejb-ref together with sun-web.xml or now it is a glassfish-web.xml as the following link: -

    What if I have multiple instances of the Appserver running and I want to access a Remote EJB component between them?

    If you would like to compare between ejb-ref and ejb-local-ref, you may see further information at What is the relationship between @EJB and ejb-ref/ejb-local-ref?

    I hope this may help.

    0 讨论(0)
  • 2021-01-14 20:07

    Here are the steps:

    1. Create the Java Class library for holding the interface class using Maven's folder of New Project's menu. Choose Java Application under Maven folder.
    2. Create the Enterprise Application following the NB's tutorial. The only difference is that you have to use Maven's folder of New Project's menu
    3. Build the class library
    4. Ensure that the class library is a dependancy in the Enterprise Application.
    5. Run the Enterpise Application. NB will deploy it to GF server
    6. Create the Application Client by use of Maven's folder. Don't use the insert code NB's feature for injecting the Stateless EJB here, because it crashes (at least in my version: NB 7.2). Instead simply copy and paste the code shown in the tutorial. You don't need any deployment / ejb descriptor.
    7. Modify the application client's POM in order to use maven-assembly-plugin for obtaining a jar with dependencies. If you don't to this step, the deploy will fail because GF is not able to load the interface class. Add the following lines to the plugins tab (change the main class as appropriate):

          <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. Build the application client project with NB

    9. Run the application client using the GF's application client command: appclient -jar EntAppClient-1.0-SNAPSHOT-jar-with-dependencies.jar

    Useful link: Java EE's Buried Treasure: the Application Client Container by Jason Lee

    Important Note

    In order to deploy the client to oher JVMs you have to install the appclient on each client machine and set the target-server property. The appclient seems to have a very complicated structure, which you cannot produce simply by adding these lines (plus the EclipseLink persistence artifacts):

    <dependency>
        <groupId>org.glassfish.appclient</groupId>
        <artifactId>gf-client</artifactId>
        <version>3.1.1</version>
        <type>pom</type>
        <scope>compile</scope>
    </dependency>
    

    Adding these artifacts to the client compiles perfectly but the jar doesn't work. And this is understandable, since the file sun-acc.xml is missing (this file is necessary because contains the target-server property). Therefore I think that the only way is using the package-appclient script as per the linked documentation.

    0 讨论(0)
提交回复
热议问题