集成是通过以下行引导的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 似乎是个好主意。