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

时间:2015-04-14 10:35:21

标签: java jdbc jboss naming

我正在尝试在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>

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

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

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

1 个答案:

答案 0 :(得分:0)

通常,“新的缺失/不满足的依赖关系:”是关于ear文件中与其中的资源相关并在服务器上提供的内容。它告诉你的是,有人要求注射你没有提供的对象:

  • 所需的课程;或
  • 未在服务器中配置资源。

这可能是由我能想到的六件事引起的。

  1. 你错过了耳塞中的一个罐子。
  2. 您在封闭的jar文件中有类无法访问包含其依赖项的jar文件。
  3. 其中一个包含的jar文件中缺少beans.xml。
  4. 您的类依赖于应安装在服务器中但尚未安装的模块。
  5. 您错过了joss * .xml文件
  6. 中第4项中依赖项的声明
  7. 您的应用程序需要资源(例如DataSource),而您尚未在服务器中定义该资源。
  8. 第二点非常复杂,它涉及Java EE应用程序中类加载器的范围。基本上是:

    1. war文件中的类可以访问lib中的普通jar文件。
    2. EJB jar可以访问lib中的jar文件。
    3. lib中的
    4. jar文件可能无法访问其他两个文件。
    5. <强>更新 很抱歉延迟回复,但我想在我回复之前检查这个,因为这个区域非常复杂。

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

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

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

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

      我试图用你提供的配置文件运行一个小的webapp应用程序并为映射提供资源我添加了@Singleton @Startup bean,定义了Datasource {{1}的链接}。

      虽然不是完全

      ,但我设法得到类似于您的错误消息的内容

      我认为有两个问题:

      • 一个是你的一些jndi名称读取mn572phOraDataSource,有些读取mn572ph a OraDataSource你可以在错误消息中看到这个,因为包含了2个变种。
      • 第二个是jboss-web中的JNDI名称@Resource与standalone.xml中的java:/jdbc/mn572phaOraDataSource不匹配。我通过将standalone.xml中的名称更改为java:/module/env/jdbc/mn572phOraDataSource来实现它。