Java 在JBoss AS7中使用@DataSourceDefinition配置MySQL数据源

Java 在JBoss AS7中使用@DataSourceDefinition配置MySQL数据源,java,mysql,java-ee-6,jboss7.x,Java,Mysql,Java Ee 6,Jboss7.x,我能够在standalone.xml中配置MySQL数据源,并且工作正常。但是我想使用@DataSourceDefinition注释配置数据源 @DataSourceDefinition( className = "com.mysql.jdbc.Driver", name = "java:global/jdbc/MyDS", serverName="localhost", portNumber=3306, user

我能够在standalone.xml中配置MySQL数据源,并且工作正常。但是我想使用
@DataSourceDefinition
注释配置数据源

@DataSourceDefinition(
        className = "com.mysql.jdbc.Driver",
        name = "java:global/jdbc/MyDS",
        serverName="localhost",
        portNumber=3306,
        user = "root",
        password = "admin",
        databaseName = "test"
)
@Stateless
public class DBConfig {
    public void test() { //there should be atleast one method, so this dummy
    }
}
如何在JBoss AS7中使用@DataSourceDefinition配置MySQL数据源

我已经尝试过的是:

@DataSourceDefinition(
        className = "com.mysql.jdbc.Driver",
        name = "java:global/jdbc/MyDS",
        serverName="localhost",
        portNumber=3306,
        user = "root",
        password = "admin",
        databaseName = "test"
)
@Startup
public class DBConfig {
}
与此persistence.xml一起使用:

<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.0" xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd">
    <persistence-unit name="javaee6-app" transaction-type="JTA">
        <jta-data-source>java:global/jdbc/MyDS</jta-data-source>
        <properties>
            <property name="hibernate.hbm2ddl.auto" value="update"/>
            <property name="hibernate.show_sql" value="true"/>
        </properties>
    </persistence-unit>
</persistence>

java:global/jdbc/MyDS
我在
WEB-INF/lib
中有mysql连接器jar文件

但当我部署应用程序时,会出现以下错误:

(DeploymentScanner线程-2){“JBAS014653:复合操作 失败并被回滚。失败的步骤:“=>{”操作步骤2” =>{“JBAS014771:缺少/不可用依赖项的服务”=>[“jboss.persistenceunit.\“javaee6 app.war#javaee6 app \”jboss.naming.context.java.global.jdbc.MyDSMissing[jboss.persistenceunit.\“javaee6 app.war \”jboss.naming.context.java.global.jdbc.MyDS]}}


一个建议是将jboss中standalone.xml或domain.xml中的数据源名称配置为7。并在jboss模块中配置mysql连接器jar。然后重试

配置Mysql连接器jar请参考此链接

Standalone.xml中的数据源配置请参阅此链接


我自己想出来的

JBossAS7扫描过程似乎有一些缺陷。根据JavaEE6规范,它应该扫描
@DataSourceDefinition
任何类上的注释。但是,如果我们把它放在一个具有
@无状态
注释的类上,它就可以正常工作

@DataSourceDefinition(
        className = "com.mysql.jdbc.Driver",
        name = "java:global/jdbc/MyDS",
        serverName="localhost",
        portNumber=3306,
        user = "root",
        password = "admin",
        databaseName = "test"
)
@Stateless
public class DBConfig {
    public void test() { //there should be atleast one method, so this dummy
    }
}

另外,您可能遇到的下一个问题是:

java.lang.ClassCastException:com.mysql.jdbc.Driver无法转换为javax.sql.DataSource

@DataSourceDefinition
的原因参数
className
必须提供
DataSource
实现(请参见javadoc),而不是驱动程序类

对于MySQL,它可以是:

className = "com.mysql.jdbc.jdbc2.optional.MysqlDataSource"
className = "com.mysql.jdbc.jdbc2.optional.MysqlConnectionPoolDataSource"
className = "com.mysql.jdbc.jdbc2.optional.MysqlXADataSource"    // XA transaction

我已经提到,我能够在standalone.xml中配置DataSource。我正在寻找基于@DataSourceDefinition的配置。您是否在Jboss模块中配置了Mysql连接器Jar?