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

时间:2010-11-02 13:33:41

标签: java-ee ejb maven application-client

在从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;
   }

我找不到任何关于此的背景信息。像:

  1. 这是怎么回事。
  2. 如何在没有NetBeans的情况下启动此类应用程序。
  3. 如何在没有NetBeans(i.E. with Maven)的情况下构建此构造。
  4. 是的我确实使用NetBeans - 但是如果我不能在命令行和/或Maven上执行相同的操作,我也不满意。

2 个答案:

答案 0 :(得分:5)

  

这应该如何运作。

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

  

如何在没有NetBeans的情况下启动此类应用程序。

假设应用程序客户端打包并部署到应用程序服务器,您需要启动应用程序客户端容器(ACC)。该命令是特定于应用程序服务器

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

  

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

应用程序客户端是包含以下内容的常规JAR:

  • 访问bean的Java类。
  • A META-INF/application-client.xml - (可选)Java EE应用程序客户端部署描述符。
  • 引用主类的META-INF/MANIFEST.MF文件,它指出Java客户端的完整包前缀和类名。
  • App server特定部署描述符 - (可选)

资源

答案 1 :(得分:2)

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

  1. 这应该如何运作?

    main()类部署到应用程序服务器,该服务器注入依赖项并调用main()。使用特殊命令(appclient)完成glassfish部署。

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

    正如在glassfish上所说,你使用appclient启动客户端。例如:

    appclient -enableassertions -mainclass auctionapp.TestClient -jar target / AuctionApp-ejb.jar

  3. 如何在没有NetBeans(i.E. with Maven)的情况下构建此构造?

    您创建一个普通的可执行jar。它只有在您的远程接口也在库内时才能工作(无论如何都是很好的实践)并且这个库包含在您的可执行库中。您可以使用maven-assembly-plugin创建可执行文件。就像创建普通的可执行jar一样。

  4. 感谢所有帮助。如果没有,我就不会发现细节。