带main()的EJB - 这是关于什么的?

Mar*_*tin 4 ejb java-ee application-client maven

在对来自Sun的EJB进行原始培训时,我遇到了一个相当奇怪的企业应用程序客户端概念,它具有依赖注入和主类的概念:

@javax.ejb.EJB
private static auctionsystem.ejb.AuctionManagerRemote auctionManager;

public static void main (String[] args)
   {
   TestClient.logger.entering (TestClient.TAG, "main");

   final String message = "hello";
   TestClient.logger.log (Level.INFO, "Sending {0}", message);
   final String reply = auctionManager.communicationTest (message);
   TestClient.logger.log (Level.INFO, "Received {0}", reply);

   TestClient.logger.exiting (TestClient.TAG, "main");
   return;
   }
Run Code Online (Sandbox Code Playgroud)

我只是找不到任何背景信息.喜欢:

  1. 这应该是怎么回事.
  2. 如何在没有NetBeans的情况下启动这样的应用程序.
  3. 如何在没有NetBeans(iE with Maven)的情况下构建此构造.

是的我确实使用NetBeans - 但是如果我不能在命令行和/或Maven上执行相同的操作,我也不满意.

Pas*_*ent 6

这应该是怎么回事.

这必须是Java EE 应用程序客户端(另一种类型的Java EE模块,允许包装Java SE应用程序,将其部署到应用程序服务器并使用已部署的EJB,平台服务和资源)和Java EE Application Client Main-Class确实支持在带注释的字段或方法中注入资源static.

如何在没有NetBeans的情况下启动这样的应用程序.

假设将Application Client打包并部署到应用程序服务器,则需要启动Application Client Container(ACC).该命令是特定于应用程序服务器

例如,使用GlassFish,您必须使用该appclient命令.使用JBoss,请参阅此Wiki页面以获取(huge)命令.对于其他应用服务器,请参阅各自的文档:)

如何在没有NetBeans(iE with Maven)的情况下构建此构造.

一个应用程序客户端是包含一个普通的JAR:

  • 用于访问bean的Java类.
  • A META-INF/application-client.xml- (可选)Java EE应用程序客户端部署描述符.
  • 一个META-INF/MANIFEST.MF文件引用主类,其中列明了Java客户端的完整的包前缀和类名.
  • App服务器特定的部署描述符 - (可选)

资源


Mar*_*tin 2

回答我自己的问题(再次)

  1. 这应该如何运作?

    main() 类部署到应用程序服务器,应用程序服务器注入依赖项并调用 main()。在 glassfish 上,部署是通过特殊命令 ( appclient) 完成的。

  2. 如何在没有 NetBeans 的情况下启动这样的应用程序?

    正如 glassfish 上所说,您可以使用 启动客户端appclient。例如:

    appclient -enableassertions -mainclassuctionapp.TestClient -jar target/AuctionApp-ejb.jar

  3. 如何在没有 NetBeans 的情况下构建此构造(即使用 Maven)?

    您创建一个普通的可执行 jar。仅当您的远程接口也位于库内(无论如何这是一个很好的实践)并且该库包含在可执行库内时,它才会起作用。您可以使用maven-assembly-plugin它来创建可执行文件。就像创建普通的可执行 jar 一样。

感谢您的所有帮助。如果没有这样我就不会发现细节。