带有 main() 的 EJB——这是怎么回事?

发布于 2024-09-29 22:40:05 字数 789 浏览 9 评论 0原文

在对 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 上执行相同的操作,我会感到不满意。

While doing the original training for EJBs from Sun I came across the rather strange concept of a enterprise application client which has the notion of dependecy injection and a main class:

@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;
   }

I just can't find any background info on this. Like:

  1. How is this supposed to work.
  2. How do you start such an application without NetBeans.
  3. How do you build this construct without NetBeans (i.E. with Maven).

Yes I do use NetBeans - but I am not satisfied if I can not do the same operation on the command-line and/or Maven as well.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

神爱温柔 2024-10-06 22:40:05

这应该如何工作。

这必须是 Java EE 应用程序客户端(另一种类型的 Java EE 模块,允许包装 Java SE 应用程序、将其部署到应用程序服务器并利用已部署的 EJB、平台服务和资源)以及Java EE 应用程序客户端主类确实支持静态带注释的字段或方法中注入资源

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

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

例如,对于 GlassFish,您必须使用 appclient 命令。对于 JBoss,请参阅此 wiki 页面 了解(巨大的)命令。对于其他应用程序服务器,请参阅各自的文档:)

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

应用程序客户端是一个常规 JAR,包含:

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

资源

How is this supposed to work.

This must be a Java EE Application Client (another type of Java EE module that allows to wrap a Java SE application, deploy it to an application server and make use of deployed EJB, platform services and resources) and Java EE Application Client Main-Class does support injection of resources in static annotated fields or methods.

How do you start such an application without NetBeans.

Assuming the Application Client is packaged and deployed to the application server, you need to start the Application Client Container (ACC). The command is application server specific.

For example with GlassFish, you'd have to use the appclient command. With JBoss, see this wiki page for the (huge) command. For other app servers, refer to their respective documentation :)

How do you build this construct without NetBeans (i.E. with Maven).

An Application Client is a regular JAR containing:

  • The Java class to access the bean.
  • A META-INF/application-client.xml - (optional) Java EE application client deployment descriptor.
  • A META-INF/MANIFEST.MF file referencing the main class, which states the complete package prefix and class name of the Java client.
  • App server specific deployment descriptor - (optional)

Resources

初心 2024-10-06 22:40:05

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

  1. 这应该如何工作?

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

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

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

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

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

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

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

Answering my own question (again)

  1. How is this supposed to work?

    The main() class is deployed to the application server which injects the dependencies and calls main (). On glassfish deployment is done with a special command (appclient).

  2. How do you start such an application without NetBeans?

    As said on glassfish ou start the client with the use of appclient. For example:

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

  3. How do you build this construct without NetBeans (i.E. with Maven)?

    You create a normal executable jar. It will only work if your remote interfaces are inside a library as well (which is good praxis anyway) and this library is included inside your executable lib. You can use maven-assembly-plugin to create the executable. Just the same way you create a normal executable jar.

Thanks for all the help. Without SO I would not have found out the details.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文