8

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

如何在 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>

我有 mysql 连接器 jar 文件WEB-INF/lib

但是当我部署应用程序时,我收到了这个错误:

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

4

3 回答 3

4

我自己想通了。

看来 JBoss AS7 的扫描过程有一些缺陷。根据 Java EE 6 规范,它应该扫描任何@DataSourceDefinition上的注释。但是如果我们把它放在一个有注释的类上,它就可以正常工作。@Stateless

@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
    }
}
于 2013-02-27T09:11:06.360 回答
0

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

配置 Mysql 连接器 jar 请参阅此链接。

http://www.mastertheboss.com/jboss-datasource/how-to-configure-a-datasource-with-jboss-7

Standalone.xml 中的数据源配置参考这个链接

https://docs.jboss.org/author/display/AS71/DataSource+configuration

于 2013-02-27T05:04:52.753 回答
0

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

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

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

对于 MySQL,它可以是:

className = "com.mysql.jdbc.jdbc2.optional.MysqlDataSource"
className = "com.mysql.jdbc.jdbc2.optional.MysqlConnectionPoolDataSource"
className = "com.mysql.jdbc.jdbc2.optional.MysqlXADataSource"    // XA transaction
于 2016-04-12T23:35:52.787 回答