无法在 JBOSS EAP 6.3 中部署应用程序

Unable to deploy an application in JBOSS EAP 6.3

我正在尝试在 jboss EAP 6.3 中部署耳朵,但出现以下错误:

JBAS014775:    New missing/unsatisfied dependencies:
      service jboss.naming.context.java.jdbc.mn572phOraDataSource (missing) dependents: [service jboss.naming.context.java.module.pharma.pharma.env.jdbc.mn572phOraDataSource] 
      service jboss.naming.context.java.jdbc.mn572phaOraDataSource (missing) dependents: [service jboss.naming.context.java.module.pharma.pharma.env.jdbc.mn572phaOraDataSource] 

15:01:38,171 ERROR [org.jboss.as] (Controller Boot Thread) JBAS015875: JBoss EAP 6.3.0.GA (AS 7.4.0.Final-redhat-19) started (with errors) in 66301ms - Started 462 of 659 services (160 services failed or missing dependencies, 64 services are lazy, passive or on-demand)

我的 standlone.xml 文件有这个条目:

<datasource jndi-name="java:/module/env/jdbc/mn572phOraDataSource" pool-name="mn572phOraDataSource" enabled="true" use-java-context="true">
                    <connection-url>jdbc:oracle:thin:@test:1521:mndb11g</connection-url>
                    <driver>oracle.jdbc.driver.OracleDriver</driver>
                    <security>
                        <user-name>test</user-name>
                        <password>test</password>
                    </security>
                </datasource>
                <drivers>
                    <driver name="h2" module="com.h2database.h2">
                        <xa-datasource-class>org.h2.jdbcx.JdbcDataSource</xa-datasource-class>
                    </driver>
                    <driver name="oracle.jdbc.driver.OracleDriver" module="oracle.jdbc.driver.OracleDriver">
                        <datasource-class>oracle.jdbc.driver.OracleDriver</datasource-class>
                    </driver>
                </drivers>
            </datasources>

我的 jboss-web.xml 在 .war 文件中有以下条目:

<resource-ref>
   <res-ref-name>jdbc/mn572phaOraDataSource</res-ref-name>
   <jndi-name>java:/jdbc/mn572phaOraDataSource</jndi-name>
</resource-ref>

任何人都可以解释错误的内容和问题所在。

一般来说 'New missing/unsatisfied dependencies:' 是关于您的 ear 文件的内容与其中的资源以及在服务器上提供的资源的关系。它告诉你的是,有一些你没有提供的对象注入请求:

  • 所需的class;或
  • 您的服务器中没有配置资源。

这可能是由我能想到的六件事造成的。

  1. 您错过了 ear 文件中的一个 jar。
  2. 您在封闭的 jar 文件中有 classes,它们无法访问包含其依赖项的 jar。
  3. 您有一个包含的 jar 文件 beans.xml 丢失。
  4. 您的 classes 依赖于服务器中应该安装但尚未安装的模块。
  5. 您错过了 joss*.xml 文件中第 4 项的依赖声明
  6. 您的应用程序需要一种资源(例如数据源),而您尚未在服务器中定义。

第二点相当复杂,涉及 class 加载程序在 Java EE 应用程序中的范围。基本上:

  1. classes in war files 可以访问lib中的普通jar文件。
  2. EJB jar 可以访问lib 中的jar 文件。
  3. lib 中的 jar 文件可能无法访问其他两个文件。

更新: 很抱歉延迟回复,但我想在回复之前检查一下,因为这个区域非常复杂。

在这种情况下,问题是您在 jboss-web.xml 中提供的名称与您在 standalone.xml 中提供的名称不匹配。

JavaEE6 有几个不同的资源命名空间。

jboss-web.xml 的默认命名空间是作为 java:module///XXXXX 工作的模块命名空间。在您的情况下,您的模块是您的 war 文件 (pharma),除非您实际在名为 pharma JBOSS 的 ear 文件中定义它,否则它会自动将其包装在名为 pharma 的 ear 文件中。所以你得到 java:module/pharma/pharma/XXXXXX.

standalone.xml 的默认命名空间是 java:global 因此您的实际数据源可能安装在 java:global/module/env/jdbc/mn572phaOraDataSource

我已经尝试 运行 使用您提供的配置文件构建一个小的 webapp 应用程序,并为映射提供资源我添加了一个 @Singleton @Startup bean,它定义了 link至 Datasource @Resource.

我设法得到了类似于你的错误消息的东西,虽然不完全

我认为有两个问题:

  • 一个是你的一些 jndi 名称读作 mn572phOraDataSource,一些读作 mn572phaOraDataSource 你可以在错误消息中看到这个,因为这 2 个变体包含在内。
  • 其次是jboss-web中的JNDI名称java:/jdbc/mn572phaOraDataSource与standalone.xml中的java:/module/env/jdbc/mn572phOraDataSource不匹配。我通过将 standalone.xml 中的名称更改为 java:/jdbc/mn572phaOraDataSource.
  • 使其工作