当前位置: 首页 > 知识库问答 >
问题:

JBoss EAP 6.x了解部署阶段——资源适配器、EJB、jar、war

江鹏飞
2023-03-14

在 JBoss 中,部署阶段的顺序如何?对象被实例化和可用的顺序是什么?考虑企业应用程序 (*.ear),检查所有部署日志(服务器.log),部署阶段如下所示:

    < li >所有库都已部署-。类文件已加载并可用; < li >所有*。jar模块被部署。类文件已加载并可用; < li >如果有的话*。jar是一个EJB Jar,通过配置文件(例如ejb-jar.xml)或注释,创建JNDI树; < li >如果有的话*。jar有一个persistence.xml文件配置,所有实体和到数据源的链接都被加载; < li >所有*。war模块开始部署阶段; < li >通过配置文件(web.xml ),加载侦听器和上下文根,并最终加载安全方面。 < li>Ear部署成功。

问题:

  • 资源适配器模块、持久性上下文和 EJB 池呢?
  • 找到持久性.xml时,是否开始与数据源的连接,从而与数据库池建立连接?
  • 由于数据源 (DB) 是在独立.xml域.xml中配置的,那么何时与数据库池建立第一次连接?当我注入 PersistenceContext 并使用 EntityManager 时?
  • 何时加载 EJB 池并可供使用?
  • 说在 EJB jar 部署期间,JNDI 树被创建然后可用,这种说法是否正确?
  • 当发现 EJB 时,它会加载到池中(作为注入/查找的参考)?

当一个. war模块被部署并准备好时,即使。ear尚未完成,可能从容器中启动了servlet或监听器。

  • 如果其中一些对象(侦听器、servlet)尝试使用EJB或PeristenceContext或其他对象会发生什么?这些对象可用吗?
  • 是否可能出现死锁问题并挂起部署线程/阶段?

共有2个答案

贺英悟
2023-03-14

我将尝试解决您的其余问题:

当找到persistence.xml时,是否会启动与数据源的连接以及与DB池的连接?

是的,必须这样做(如果尚未建立连接),否则无法验证或创建表结构(DDL)。

因为数据源(DB)是在独立模式中配置的。xml或域。xml,何时第一次连接到数据库池?当我注入PersistenceContext并使用EntityManager时?

这个问题的答案是:视情况而定。如果您的JDBC数据源配置了最小池大小MIN_pool_size

EJB 池何时加载并可供使用?

在部署了EJB子模块及其所有依赖项之后,就可以使用它了。

说在 EJB jar 部署期间,JNDI 树被创建然后可用,这种说法是否正确?

我会用以下方式来表述:在检查(而不是在期间)可以部署所有EJB之后(例如,可以解决它们的所有依赖关系),然后创建JNDI条目(在JNDI树中)。根据我注意到的情况,如果单个 EJB 失败,则不会部署任何内容,这让我认为自己就在这里。

[部署.war模块时]如果其中一些对象(侦听器、servlet)尝试使用EJB或PersistenceContext或其他对象,会发生什么情况?这些物品可用吗?

是的,当然。当部署WAR文件时,我们使用该功能从servlet执行一些初始化代码(例如,创建一些具有一些默认值的实体)。

是否有可能出现死锁问题并挂起部署线程/阶段?

从理论上讲,是的,实际上不是(我怀疑RedHat的人没有想到这一点)。

一些提示:如果您使用MySQL,您可以使用show Process list检查与服务器的连接。否则,如果您使用Linux /Unix,您可以使用netstat检查与数据库服务器的所有连接。

佴英奕
2023-03-14
  • 可以使用控制application.xml中罐子和战争的部署顺序

 类似资料:
  • 在保持云不可知的情况下创建一些通用组件来部署入口是否重要? 其他公司如何将它们的入口资源部署到k8s集群?

  • 我是Java EE新手。我使用Eclipse、jBoss/WildFly和Maven。我有一个多模块Maven项目: 父Maven项目(pom) 目前,EJB项目打包在Web应用程序中,整个解决方案部署为一个文件。 我想更改它:我需要将war和jar项目独立地部署到应用服务器(作为两个独立的应用程序)。然后web项目可以通过远程接口访问EJB。 问题是: 我可以使用在Eclipse中部署项目 如何

  • 我有一个关于JavaEE bean的问题。我已经用Spring和Hibernate开发了很长时间,现在我改用JavaEE-所以很抱歉,如果这是一个非常简单的问题,但目前我不知道如何处理我的问题。 我有两个bean,它们在JNDI中注册(在JBoss上--参见上面)。-到目前为止还可以。如果我在Servlet中使用@ejb作为依赖项注入,它工作得很好: 16:39:51,490信息[org.jbos

  • 在忽略Java更新一段时间之后,我现在想从我在某处找到的有点阴暗的Java 10.0.2运行时转移到Java 13。事实证明,在Java 8之后,Oracle停止了“单片”JRE哲学,对于我关于如何进行部署的问题,我似乎找不到任何明确的答案。 以下是我认为保持不变的内容: IDE(eclipse)工作流基本保持不变 现在,我无法理解的棘手部分来了:在其他机器上的部署 创建一个module-info

  • 我需要在weblogic server 10.3.6上部署非常旧的应用程序(10年-生病)。我有一个ear文件,其中包含几个带有EJB类的子部署jar(它们包含weblogic-EJB-jar.xml和EJB-jar.xml)。它通常部署在服务器上,我可以在weblogic中使用“查找”功能。 问题是,还有另一个没有ejb-jar.xml的jar(更旧)需要运行这个应用程序。例如,它有Object

  • 为了设置群容器,我使用以下project-defaults.xml: pom的相关部分如下所示: 测试MDB非常简单: null 但是,基本原因是相同的(未找到依赖项)。我的解释是,maven插件在调用中添加了一个额外的层,该层记录额外的stacktrace,但问题仍然是一样的。