Настройка источника данных MySQL с помощью @DataSourceDefinition в JBoss AS7

Я могу настроить источник данных MySQL в автономном режиме.XML и работает нормально. Но я хочу настроить источник данных с помощью @DataSourceDefinition Примечание.

как настроить источник данных MySQL с помощью @DataSourceDefinition в JBoss AS7?

то, что я уже пробовал:

@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 {
}

вместе с настойчивость.в 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>

у меня есть файл jar MySQL connector в WEB-INF/lib.

но когда я развернуть приложение, я получаю эту ошибку:

(DeploymentScanner-threads - 2) {"JBAS014653: составная операция потерпел неудачу и был откат. Шаги, которые не удалось: "= > {"шаг операции-2" => {"JBAS014771: услуги отсутствуют/недоступны зависимости" => ["от JBoss.persistenceunit."javaee6-app.war#javaee6-app " jboss.называющий.контекст.Ява.глобальный.интерфейс jdbc.MyDSMissing[от JBoss.persistenceunit."javaee6-app.war#javaee6-app " jboss.называющий.контекст.Ява.глобальный.интерфейс jdbc.MyDS]"]}}}

3 ответов


Я сам догадался.

кажется, процесс сканирования 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
    }
}

также следующая проблема, которую вы можете иметь:

java.ленг.ClassCastException: com.для MySQL.интерфейс jdbc.Драйвер не может быть приведен к javax.язык SQL.Источник

причина param className of @DataSourceDefinition должен предоставить 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

одно предложение-настроить имя источника данных в автономном режиме.XML или домен.xml в jboss как 7. и настройте mysql connector jar в модуле jboss.И попробуй .

настроить MySQL Connector jar см. Эту ссылку.

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

конфигурация источника данных в автономном режиме.xml ссылается на это ссылка

https://docs.jboss.org/author/display/AS71/DataSource + конфигурация