【问题标题】:Migration to JBoss7.2eap from jboss5.1.2eap : java.lang.NoClassDefFoundError: Lorg/apache/commons/dbcp/BasicDataSource从 jboss5.1.2eap 迁移到 JBoss7.2eap:java.lang.NoClassDefFoundError: Lorg/apache/commons/dbcp/BasicDataSource
【发布时间】:2019-09-02 21:19:00
【问题描述】:

我已将我的应用程序从jboss5.1.2-eap 迁移到jboss-7.2-eap 和java6 到java8,但是在迁移之后它开始在启动服务器时给我异常。

原因:java.lang.NoClassDefFoundError: Lorg/apache/commons/dbcp/BasicDataSource

我们在服务器的类路径中有一个datasource.xml 文件,具有以下代码行。

<bean id="beanName" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
    <property name="driverClassName" value="oracle.jdbc.OracleDriver"/>
    <property name="maxActive" value="10"/>

此外,我们在类路径中存在commons-dbcp-1.2.2.jar,但它不适用于jboss-7.2-eap。

现在我不确定 jboss7-eap 是否支持 commons-dbcp-1.2.2.jar。 因为它存在于应用程序的类路径中(存在于加载的模块中),但仍然无法使用 spring为数据源创建 bean。

【问题讨论】:

    标签: jboss datasource jboss5.x jboss-eap-7 dbcp


    【解决方案1】:

    我认为 Jboss EAP 中的数据源应该放在standalone.xml 配置文件中,如下所示:

    <datasource jndi-name="java:jboss/datasources/Altis" pool-name="Altis" enabled="true">
      <connection-url>jdbc:oracle:thin:@255.255.255.255:1521:sid</connection-url>
      <driver-class>oracle.jdbc.OracleDriver</driver-class>
      <driver>oracle</driver>
      <security>
        <user-name>username</user-name>
        <password>passwd</password>
      </security>
    </datasource>
    

    【讨论】:

    • 我已经在standalone.xml中给出了模块和驱动程序信息,现在它开始给我“-失败描述:{“WFLYCTL0412:未安装的必需服务:”=> [“jboss.jdbc- driver.com_oracle”,“jboss.jdbc-driver.com_oracle”],“WFLYCTL0180:缺少/不可用依赖项的服务”=> [“org.wildfly.data-source.Altis 丢失 [jboss.jdbc-driver.com_oracle] ", "jboss.driver-demander.java:jboss/datasources/Altis 丢失 [jboss.jdbc-driver.com_oracle]", "org.wildfly.data-source.Altis 丢失 [jboss.jdbc-driver.com_oracle] " ]
    • 将oracle驱动添加到jboss,比如这里:resolvethis.com/jboss-database-driver
    • 我已经遵循了同样的方法,但遇到了这个问题。我不确定ojdbc6-11.2.0.3.jar 是否与 jdk8 兼容。就像我们之前在 jboss5 中为 jdk6 使用相同的 jar 一样。
    • 我认为问题在于commons-dbcp-1.2.2.jar 与jboss 7 eap 的兼容性,因为我已将此 jar 加载到类路径,而且我们正在使用 spring 来创建数据源 bean。所以 jndi 查找不应该是它的解决方案。你说什么?
    【解决方案2】:

    在war 文件的WEB-INF 目录内的jboss-deployment-structure.xml 中给出模块信息。

    <jboss-deployment-structure>  
      <deployment>  
        <dependencies>  
         <module name="com.oracle.sql" export="true"/>
         <module name="org.apache.commons.dbcp" export="true"/>       
         </dependencies>  
       </deployment>  
    </jboss-deployment-structure>
    

    此外,模块目录也应遵循与 jar 中 .class 文件的可用性相同的命名约定,例如在我的情况下,我创建了模块 org.apache.commons.dbcp,因为在打开 commons-dbcp-1.2.2.jar 文件时,.class 文件是出现在org/apache/commons/dbcp 文件夹中。

    注意:在多个模块的情况下,如果一个模块依赖于其他模块,则需要识别其中的依赖关系,并且该信息将在module.xml 文件中给出。喜欢

     <module xmlns="urn:jboss:module:1.1" name="org.apache.commons.dbcp">  
       <resources>  
           <resource-root path="commons-dbcp-1.2.2.jar"/>
       </resources>  
       <dependencies>
          <module name="org.apache.commons.pool"/>
          <module name="com.oracle.jdbc.driver"/>
       </dependencies>
     </module>
    

    【讨论】:

      猜你喜欢
      • 2019-02-10
      • 1970-01-01
      • 2015-11-19
      • 2017-11-11
      • 2014-07-02
      • 1970-01-01
      • 2015-09-23
      • 2011-09-24
      • 1970-01-01
      相关资源
      最近更新 更多