当前位置: 首页 > 工具软件 > JBoss JCA > 使用案例 >

JBoss4 多数据源配置,异常处理

麹渊
2023-12-01

java.lang.ClassCastException: org.jboss.jca.adapters.jdbc.WrapperDataSource cannot be cast to javax.sql.DataSource

java.lang.ClassCastException: org.jboss.jca.adapters.jdbc.WrapperDataSource cannot be cast to javax.sql.Context

问题场景:
本来项目正常,后来添加了一个新的数据源,项目同时使用两个oracle数据源,分别连接两个数据库。于是启动的时候就报上述错误。

解决办法:
1、检查jboss的deploy/lib下面和项目web-inf/lib下面的jdbc驱动是否一致。
2、排除1的情况下,检查数据源的配置

oracle-ds.xml :


<datasources>
  <local-tx-datasource>
    <jndi-name>OracleDS</jndi-name>
    <connection-url>jdbc:oracle:thin:@10.193.129.24:1521:orcl</connection-url>

    <driver-class>oracle.jdbc.driver.OracleDriver</driver-class>
    <user-name>nfdwkf</user-name>
    <password>nfdwkf</password>
    <exception-sorter-class-name>org.jboss.resource.adapter.jdbc.vendor.OracleExceptionSorter</exception-sorter-class-name>
    <metadata>
        <type-mapping>Oracle9i</type-mapping>
    </metadata>
  </local-tx-datasource>

  <local-tx-datasource>
    <jndi-name>ArchiveOracleDS</jndi-name>
    <connection-url>jdbc:oracle:thin:@10.193.129.23:1521:orcl</connection-url>
    <driver-class>oracle.jdbc.driver.OracleDriver</driver-class>
    <user-name>nfdwgd</user-name>
    <password>nfdwgd</password>
    <exception-sorter-class-name>org.jboss.resource.adapter.jdbc.vendor.OracleExceptionSorter</exception-sorter-class-name>
    <metadata>
         <type-mapping>Oracle9i</type-mapping>
      </metadata>
  </local-tx-datasource>

</datasources>

jboss-web.xml :


<resource-ref>
        <res-ref-name>jdbc/cpf/type4</res-ref-name>
        <jndi-name>java:/OracleDS</jndi-name>
    </resource-ref>
    <resource-ref>
        <res-ref-name>jdbc/cpf/archive</res-ref-name>
        <jndi-name>java:/ArchiveOracleDS</jndi-name>
    </resource-ref>

web.xml :


<resource-ref>
    <res-ref-name>jdbc/cpf/type4</res-ref-name>
    <res-type>javax.sql.DataSource</res-type>
    <res-auth>Container</res-auth>
  </resource-ref>
  <resource-ref>
    <res-ref-name>jdbc/cpf/archive</res-ref-name>
    <res-type>javax.sql.DataSource</res-type>
    <res-auth>Container</res-auth>
  </resource-ref>

注意数据源的名字,不要有节点包含关系。我一开始第二个数据源的名字是jdbc/cpf/type4/archive,就一直报上面的java.lang.ClassCastException: org.jboss.jca.adapters.jdbc.WrapperDataSource cannot be cast to javax.sql.Context 异常。查了很久也没查出来原因。

 类似资料: