首页 文章

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

提问于
浏览
4

我正在为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的datasources部分:

<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 回答

  • -1

    在我的情况下,这是一个错误的用户:组的目录和文件在../com/mysql/main下

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

  • 0

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

  • 1

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

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

    ...但Wildfly很挑剔,需要这个(直引号):

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

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

    早些时候是

    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
    
  • 2

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

  • 4

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

    <module>
    ...
    </module>
    

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

  • -1

    对您的问题可能有两个解决方案

    • 您忘记了 module.xml 文件中 module 元素的属性 slot ,例如:
    <?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>
    

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


    Change the namespace version of module element in module.xml.

    好好享受 .

相关问题