7

我了解 Apache TomEE 是一个常规的 Tomcat 安装,其中 openejb 作为 Web 应用程序。

我试图了解所有这些引导程序。我会试着问几个有针对性的问题:

  • 有一个应用程序启动顺序重要吗?openejb 应该在我的网络应用程序之前启动,还是相反,或者没关系?
  • 与前面的问题有关。企业应用程序如何向 openejb 注册它的 bean,或者 openejb 是否在同一台服务器中四处寻找企业应用程序,以获取 EJB?
  • 在非常外行的层面上,当 openejb 是一个不同的 Web 应用程序时,他们如何能够提供作为 EJB 容器的 openejb。(IIRC Tomcat 中的每个 webapp 都有一个不同的类路径,它们不能互相影响)

任何其他重要信息。

4

1 回答 1

8

集成是通过以下行引导的conf/server.xml

<Listener className="org.apache.tomee.loader.OpenEJBListener" />

这会在启动任何应用程序之前立即发生。目录中的库<tomcat-home>/webapps/openejb/lib被添加到 Tomcat 系统类加载器,安装另一个侦听器以参与部署,从那时起,一切都使用 Tomcat 生命周期中的事件发生。Tomcat 将在应用程序启动(部署)和关闭时发出几个事件。Tomcat 本身使用它们来部署 servlet,本质上集成只是更多相同。包括 Tomcat 在内的其他供应商也使用这些挂钩。从这个角度来看,集成真的很无聊:)

唯一有趣的转折是将额外的库放在一个战争文件中。这样做实际上只是为了尽可能简单地向现有 Tomcat 安装交付和添加额外的库(并且尽可能容易地删除)。来自的所有库<tomcat-home>/webapps/openejb/lib都可以轻松进入<tomcat-home>/lib. 在这一点上,您可能想要的唯一一件事webapss/openejb/就是能够通过 HTTP 调用 EJB。

所以简短的答案是:

  • 应用程序启动顺序无关紧要
  • EJB 部署与 Servlet 部署并行发生
  • 在 Tomcat 本身启动时,Jars 会立即添加到 Tomcat 系统类加载器中

在另一个答案中要注意的有趣的事情是,Tomcat 实际上在类路径中只有两个 jar 启动。<tomcat-home>/lib/Tomcat 本身实际上会在启动时自动添加所有 jar 。我们基本上在做同样的事情,只是从<tomcat-home>/webapps/openejb/lib

我不认为我们实际上已经测试过将库移动到<tomcat-home>/lib/和删除 openejb webapp(tomee.war在即将到来的最终版本中调用),但我会做一个记录来尝试一下。支持甚至默认情况下似乎是一件好事。您可以删除 Tomcat 管理器和 ROOT Web 应用程序,因此也可以轻松删除 openejb.war 似乎是个好主意。

于 2012-04-19T08:07:25.417 回答