【问题标题】:EJBs with main() - what is this all about?带有 main() 的 EJB - 这是怎么回事?
【发布时间】:2010-11-14 01:59:31
【问题描述】:

在对 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(即使用 Maven)的情况下构建此构造。

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

【问题讨论】:

    标签: jakarta-ee ejb maven application-client


    【解决方案1】:

    这应该如何工作。

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

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

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

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

    如何在没有 NetBeans 的情况下构建这个结构(即使用 Maven)。

    Application Client 是一个常规 JAR,其中包含:

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

    资源

    【讨论】:

    • 关于与 Sun 工具无关的基本介绍(是否有其他人讨厌他对 J2EE 教程的看法):docstore.mik.ua/orelly/java-ent/ebeans/ch11_04.htm
    • @Tom 是的,这有点烦人。实际上,在 Java EE 教程之外,我根本找不到 Java EE 5+(即使用 DI)的良好在线资源。
    • 似乎没有办法使用 JBoss 4 运行客户端,但这里是使用 JBoss 5 的方法:community.jboss.org/wiki/HowtouseanapplicationclientinJBoss-5
    • 如果将app客户端和web模块都打包成ear包,我如何将app客户端注入web模块来访问它的方法?您知道我们如何使用 Web 模块中的 @EJB 注入 EJB,我该如何使用应用程序客户端来做到这一点?
    【解决方案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 一样。

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

    【讨论】:

      猜你喜欢
      • 2011-07-06
      • 2013-07-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-10-10
      • 2011-12-17
      • 2011-06-28
      相关资源
      最近更新 更多