JBoss7+(JBoss EAP)配置数据源

前段时间进行了JBoss的各种集群配置,项目也能正常使用了,但多项目同时部署时,会出现C3P0的警告:A C3P0Registry mbean is already registered,大概意思就是说该JBoss下部署了多个启用的C3P0的项目,开始觉得没什么问题,毕竟是个警告而不是错误,但在使用中,出现了死锁的问题(deadlock),所以避免该状况成为了必须处理的问题。
最简单的方法就是放弃使用C3P0,转而使用JBoss的数据源(datasource),这里将配置方法记录下来,以备参考(以MySQL配置为例)。

首先需要配置MySQL的驱动模块(与standalone.xml中的h2配置类似),我们先创建一个自己的模块:
1、在modules下依次建立文件夹com\mysql\main;
2、找到modules\system\layers\base\com\h2database\h2\main下的module.xml,复制到modules\com\mysql\main中;
3、下载MySQL的JDBC驱动,把jar文件解压到modules\com\mysql\main中(这里以mysql-connector-java-5.1.20-bin.jar为例);
4、修改复制来的module.xml,范例如下(name需要和modules下的文件夹路径一致,但不包括main):
<?xml version="1.0" encoding="UTF-8"?>
<module xmlns="urn:jboss:module:1.1" name="com.mysql">
    <resources>
        <resource-root path="mysql-connector-java-5.1.20-bin.jar"/>
    </resources>
    <dependencies>
        <module name="javax.api"/>
        <module name="javax.transaction.api"/>
        <module name="javax.servlet.api" optional="true"/>
    </dependencies>
</module>

至此,已经完成了MySQL的驱动模块的配置,之后修改JBoss配置(以standalone.xml为例)。
1、在配置文件中找到<datasources>节点,加入如下的配置(相关参数需要自行修改):
<datasource enabled="true" jndi-name="java:jboss/datasources/testdb" pool-name="testdb" use-java-context="true">
    <connection-url>jdbc:mysql://localhost:3306/testdb</connection-url>
    <driver>mysql</driver>
    <security>
        <user-name>root</user-name>
        <password>123456</password>
    </security>
</datasource>

2、在<datasources>下的<drivers>节点中,加入如下的配置(以上的<driver>名称即这里的name,需要保证一致,此外驱动模块名称需要和之前配置的一致):
<driver module="com.mysql" name="mysql">
    <driver-class>com.mysql.jdbc.Driver</driver-class>
    <xa-datasource-class>com.mysql.jdbc.jdbc2.optional.MysqlXADataSource</xa-datasource-class>
</driver>

这样配置后,在项目中做如下的配置即可(以Spring配置为范例),注意这里的jndiName需要和JBoss中配置的jndi-name一致。
<bean id="dataSource" class="org.springframework.jndi.JndiObjectFactoryBean">
    <property name="jndiName">
        <value>java:jboss/datasources/cms</value>
    </property>
</bean>

你可能感兴趣的:(jboss7)