arquillian,wildfly将数据源更改为mysql - 错误丢失/未满足的依赖项

时间:2015-01-21 14:03:25

标签: mysql wildfly wildfly-8 jboss-arquillian

我有使用默认h2 / mem数据库的arquillian测试。现在我想切换到我的SQL。 我首先将mysql-connector-java-5.1.33-bin.jar复制到standalone/deployments。日志确认正确部署。我还尝试通过wildfly的管理控制台设置mysql数据源,它工作正常(我做了连接测试,但没有添加数据源)。 我想将数据源设置保留在项目的测试中。所以我将数据源添加到src/test/resources/test-ds.xml

<datasources xmlns="http://www.jboss.org/ironjacamar/schema"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.jboss.org/ironjacamar/schema http://docs.jboss.org/ironjacamar/schema/datasources_1_0.xsd">

<datasource jndi-name="java:jboss/datasources/moritzTimetrackerTestDSmysql"
    pool-name="moritzTimetracker-test" enabled="true" use-java-context="true">
    <connection-url>jdbc:mysql://localhost:3306/moritztimetracker</connection-url>
    <driver>mysql-connector-java-5.1.33-bin.jar</driver>
    <security>
        <user-name>user</user-name>
        <password>pass</password>
    </security>
</datasource>

src/test/resources/META-INF/test-persistence.xml看起来像这样:

<persistence version="2.1"
   xmlns="http://xmlns.jcp.org/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   xsi:schemaLocation="
        http://xmlns.jcp.org/xml/ns/persistence
        http://xmlns.jcp.org/xml/ns/persistence/persistence_2_1.xsd">
   <persistence-unit name="primary">
      <jta-data-source>java:jboss/datasources/moritzTimetrackerTestDSmysql</jta-data-source>
      <properties>
         <!-- Properties for Hibernate -->
         <property name="hibernate.hbm2ddl.auto" value="create-drop" />
         <property name="hibernate.show_sql" value="false" />
      </properties>
   </persistence-unit>
</persistence>

但如果我运行测试我会得到例外:

org.jboss.arquillian.container.spi.client.container.DeploymentException: Cannot deploy: test.war
...
Caused by: java.lang.Exception: {"JBAS014771: Services with missing/unavailable dependencies" => ["jboss.data-source.java:jboss/datasources/moritzTimetrackerTestDSmysql is missing [jboss.jdbc-driver.mysql-connector-java-5_1_33-bin_jar]"]}

日志说:

JBAS014775:    New missing/unsatisfied dependencies:
      service jboss.data-source.java:jboss/datasources/moritzTimetrackerTestDSmysql (missing) dependents: [service jboss.data-source.reference-factory.java:jboss/datasources/moritzTimetrackerTestDSmysql] 
      service jboss.data-source.reference-factory.java:jboss/datasources/moritzTimetrackerTestDSmysql (missing) dependents: [service jboss.naming.context.java.jboss.datasources.moritzTimetrackerTestDSmysql] 
      service jboss.jdbc-driver.mysql-connector-java-5_1_33-bin_jar (missing) dependents: [service jboss.data-source.java:jboss/datasources/moritzTimetrackerTestDSmysql] 
      service jboss.persistenceunit."test.war#primary".__FIRST_PHASE__ (missing) dependents: [service jboss.deployment.unit."test.war".POST_MODULE] 

如何正确设置mysql作为数据源?

2 个答案:

答案 0 :(得分:0)

您的设置似乎正确(我的意思是数据源和持久性xml)。

但请检查您是否在每个测试用例中部署test-ds.xml文件以及您的应用。我的意思是:

@Deployment
public static Archive<?> createDeployment() {
    return ShrinkWrap.create(WebArchive.class, "test.war")
            .addAsResource("META-INF/test-persistence.xml", "META-INF/persistence.xml")
            .addAsWebInfResource("test-ds.xml")  /* CRUCIAL STEP */
            ...
}

通过这种方式,您的数据源定义将随EJB的每个微部署一起部署。

答案 1 :(得分:-1)

由于记录非常糟糕,我在通过管理员Web界面创建数据源后查看了standalone.xml。以这种方式设置mysql数据源可以正常工作:

<datasource jndi-name="java:jboss/datasources/testDSmysql"
    pool-name="test" enabled="true" use-java-context="true">
    <connection-url>jdbc:mysql://localhost:3306/db</connection-url>
    <driver-class>com.mysql.jdbc.Driver</driver-class>
    <driver>mysql-connector-java-5.1.33-bin.jar_com.mysql.jdbc.Driver_5_1</driver>
    <security>
        <user-name>user</user-name>
        <password>pass</password>
    </security>
</datasource>

请参阅“drive-class”和“driver” - 它与您在文档中阅读的内容非常不同?!