从jboss5.1.2eap迁移到JBoss7.2eap:java.lang.NoClassDefFoundError:Lorg / apache / commons / dbcp / BasicDataSource

时间:2019-04-12 06:51:48

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

我已经将我的应用程序从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

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

2 个答案:

答案 0 :(得分:0)

我想应该将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>

答案 1 :(得分:0)

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

<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>