Wildfly 9无法在启动时加载MySQL驱动程序

时间:2015-07-06 15:54:07

标签: java mysql jboss wildfly

我正在为WildFly创建一个Web应用程序,它将通过JPA(Hibernate)连接到MySQL数据库。目前,我只是想让WildFly启动并以独立模式加载MySQL驱动程序。我使用此页面作为指南:http://wildfly.org/news/2014/02/06/GlassFish-to-WildFly-migration/

我在Windows系统上本地运行WildFly和MySQL:

  • Windows 7 Enterprise SP1
  • Oracle Java SE 1.8.0_45
  • WildFly 9.0.0.Final
  • MySQL Server 5.6

尝试使用推荐的控制台命令没有成功,因此我手动编辑到WildFly配置文件,看起来像上面链接的页面上的示例中的那些。首先,我创建了模块目录,并在其中放置了MySQL连接器JAR和module.xml文件:

    Directory of C:\wildfly-9.0.0.Final\modules\system\layers\base\com\mysql\main

07/06/2015  09:54 AM    <DIR>          .
07/06/2015  09:54 AM    <DIR>          ..
07/06/2015  10:12 AM               334 module.xml
07/01/2015  02:38 PM           968,668 mysql-connector-java-5.1.35.jar

上面的连接器jar是从我当地的Maven存储库复制的,Maven通过以下依赖关系获得了该存储库:

<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>5.1.35</version>
</dependency>

如下手动编辑module.xml文件,类似于我在wildfly.org上找到的示例:

<?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.35-bin.jar"/>
    </resources>
    <dependencies>
        <module name="javax.api"/>
        <module name="javax.transaction.api"/>
    </dependencies>
</module>

最后,我将驱动程序和数据源添加到standalone.xml的数据源部分:

        <datasource jndi-name="java:/MySQLDS" pool-name="MyDS" enabled="true" use-java-context="true">
            <connection-url>jdbc:mysql://localhost:3306/mydb</connection-url>
            <driver>mysql</driver>
            <security>
                <user-name>root</user-name>
                <password>secret</password>
            </security>
        </datasource>
        <drivers>
            <driver name="h2" module="com.h2database.h2">
                <xa-datasource-class>org.h2.jdbcx.JdbcDataSource</xa-datasource-class>
            </driver>
            <driver name="mysql" module="com.mysql">
                <driver-class>com.mysql.jdbc.Driver</driver-class>
            </driver>
        </drivers>

在独立模式下启动WildFly时,通过运行%WILDFLY_HOME%\ bin \ standalone.bat,以下是%WILDFLY_HOME%\ standalone \ logs \ server.log中列出的第一个错误:

2015-07-06 10:25:47,321 ERROR [org.jboss.as.controller.management-operation] (ServerService Thread Pool -- 33) WFLYCTL0013: Operation ("add") failed - address: ([
    ("subsystem" => "datasources"),
    ("jdbc-driver" => "mysql")
]) - failure description: "WFLYJCA0041: Failed to load module for driver [com.mysql]"

我在Stack Overflow和其他问题/答案网站上发布的类似问题通常指向疏忽,例如配置文件中的拼写错误或错误命名的文件。但是,我一遍又一遍地看到这个错误,并且看不到任何这样的错误,即使从Java SE 7和WildFly 8.2升级并从头开始重新创建配置文件,也会发生同样的错误。非常感谢任何帮助。

7 个答案:

答案 0 :(得分:4)

在我的情况下,这是一个错误的用户问题:在../ com / mysql / main

下的目录和文件的组

我将它改为wildlfy,一切都按预期工作。

答案 1 :(得分:2)

module.xml中有一个拼写错误。 module.xml中列出的连接器JAR的名称与modules \ system \ layers \ base \ com \ mysql \ main中的实际JAR文件不匹配。

答案 2 :(得分:2)

就我而言,这是双引号的问题。当我复制了module.xml的WordPress示例时,我得到了(注意引号):

<resource-root path=”postgresql-9.4.1211.jar”/>

...但Wildfly非常挑剔,需要这个(直接引用):

<resource-root path="postgresql-9.4.1211.jar"/>

答案 3 :(得分:1)

在我的情况下,我错过了需要包含module.xml和连接器jar文件的main文件夹。

之前它是

JBOSS_HOME\modules\system\layers\base\com\mysql\module.xml

并且应该是正确的路径,(需要将module.xml和jar包含在main中)

JBOSS_HOME\modules\system\layers\base\com\mysql\main\module.xml

答案 4 :(得分:0)

我知道它已经存在,但这可能对其他人有所帮助。建议的方法是使用wildfly控制台(localhost:9990 / console)部署驱动程序。一旦部署了驱动程序jar,然后使用控制台再次创建DS,那么它将在standalone.xml中自动创建它。有时,手动执行这些操作可能会导致丢失微小的细节,这会让我们发疯。

答案 5 :(得分:-1)

对我来说,这似乎是一个编码问题。在标签之前

<module>
...
</module>

在我的module.xml文件中,有一个神秘的空白,不是utf-8或英语,导致我的失败。删除空白或将其更改为英文空白后。一切都好。另外,我找了一些解决这个问题的方法。其中大多数可以归结为module.xml文件的问题。名称拼写错误或内容编码。希望对别人有益。

答案 6 :(得分:-1)

也许是针对您的问题的两种解决方案:

  • 您忘记了slot文件中module元素上的属性module.xml, 例如:

    <?xml version="1.0" ?> 
    <module xmlns="urn:jboss:module:1.3" name="org.postgresql" slot="main"> 
        <resources>
            <resource-root path="postgresql-9.4.1212.jar"/>
        </resources> 
        <dependencies>
            <module name="javax.api"/>
            <module name="javax.transaction.api"/>
        </dependencies>
    </module>
    

    slot="main"元素中添加代码module,它将生效。


享受吧。