Skip to main content
 首页 » 编程设计

jakarta-ee之使用 Apache TomEE 时应用程序启动和配置的工作流程是什么

2025年01月19日24zhenyulu

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

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

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

  • 任何其他重要信息。

    请您参考如下方法:

    集成通过 conf/server.xml 中的这一行进行引导。 :

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

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

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

    所以简短的答案是:
  • 应用程序启动顺序无关紧要
  • EJB 部署与 Servlet 部署并行发生
  • Tomcat 自身启动时立即将 Jar 添加到 Tomcat 系统类加载器

  • 在另一个答案中要注意的有趣的事情是,Tomcat 实际上在类路径中只有两个 jar 启动。 Tomcat 本身实际上添加了来自 <tomcat-home>/lib/ 的所有 jar。启动时自动。我们基本上在做同样的事情,只是来自 <tomcat-home>/webapps/openejb/lib
    我认为我们实际上没有测试过将库移动到 <tomcat-home>/lib/ 中。并删除 openejb webapp(在即将发布的最终版本中称为 tomee.war),但我会记下尝试一下。支持甚至默认情况下似乎是一件好事。您可以删除 Tomcat 管理器和 ROOT Web 应用程序,因此也可以轻松删除 openejb.war 似乎是个好主意。