【问题标题】:ClassNotFoundException when trying to deploy a DataSource with @DataSourceDefinition尝试使用 @DataSourceDefinition 部署数据源时出现 ClassNotFoundException
【发布时间】:2014-12-11 07:06:13
【问题描述】:

我正在尝试使用 @DataSourceDefinition-Annotation 部署数据源。

当 wildfly 部署 jar 时,它会抛出 ClassNotFoundException。

我将 mysql-jdbc-Driver 放在部署目录中。我已经在standalone.xml 中配置的Datasources 中使用了com.mysql.jdbc.Driver 类。我没有在“modules\system\layers\base”下使用 jdbc-driver 创建模块

这是带有注解的类:

@Stateless
@DataSourceDefinition(name = "java:global/jdbc/testingDS",
    className = "com.mysql.jdbc.Driver",
    portNumber = 3306,
    serverName = "localhost",
    databaseName = "testing",
    user = "testing",
    password = "testing")

public class DataSourceDeployment {
  public void someMethod() { }
}

这里是例外(这是 *.failed 文件):

{
    "JBAS014671: Failed services" => {"jboss.deployment.unit.\"DatasourceDeploymentTest-1.jar\".INSTALL" => "org.jboss.msc.service.StartException in service jboss.deployment.unit.\"DatasourceDeploymentTest-1.jar\".INSTALL: JBAS018733: Failed to process phase INSTALL of deployment \"DatasourceDeploymentTest-1.jar\"
    Caused by: org.jboss.as.server.deployment.DeploymentUnitProcessingException: java.lang.ClassNotFoundException: com.mysql.jdbc.Driver from [Module \"deployment.DatasourceDeploymentTest-1.jar:main\" from Service Module Loader]
    Caused by: java.lang.ClassNotFoundException: com.mysql.jdbc.Driver from [Module \"deployment.DatasourceDeploymentTest-1.jar:main\" from Service Module Loader]"},
    "JBAS014771: Services with missing/unavailable dependencies" => [
        "jboss.naming.context.java.comp.DatasourceDeploymentTest-1.DatasourceDeploymentTest-1.DataSourceDeployment.InstanceName is missing [jboss.naming.context.java.comp.DatasourceDeploymentTest-1.DatasourceDeploymentTest-1.DataSourceDeployment]",
        "jboss.naming.context.java.comp.DatasourceDeploymentTest-1.DatasourceDeploymentTest-1.DataSourceDeployment.ORB is missing [jboss.naming.context.java.comp.DatasourceDeploymentTest-1.DatasourceDeploymentTest-1.DataSourceDeployment]",
        "jboss.deployment.unit.\"DatasourceDeploymentTest-1.jar\".weld.weldClassIntrospector is missing [jboss.deployment.unit.\"DatasourceDeploymentTest-1.jar\".beanmanager]",
        "jboss.naming.context.java.comp.DatasourceDeploymentTest-1.DatasourceDeploymentTest-1.DataSourceDeployment.HandleDelegate is missing [jboss.naming.context.java.comp.DatasourceDeploymentTest-1.DatasourceDeploymentTest-1.DataSourceDeployment]",
        "jboss.naming.context.java.comp.DatasourceDeploymentTest-1.DatasourceDeploymentTest-1.DataSourceDeployment.ValidatorFactory is missing [jboss.naming.context.java.comp.DatasourceDeploymentTest-1.DatasourceDeploymentTest-1.DataSourceDeployment]",
        "jboss.naming.context.java.comp.DatasourceDeploymentTest-1.DatasourceDeploymentTest-1.DataSourceDeployment.InAppClientContainer is missing [jboss.naming.context.java.comp.DatasourceDeploymentTest-1.DatasourceDeploymentTest-1.DataSourceDeployment]",
        "jboss.naming.context.java.comp.DatasourceDeploymentTest-1.DatasourceDeploymentTest-1.DataSourceDeployment.Validator is missing [jboss.naming.context.java.comp.DatasourceDeploymentTest-1.DatasourceDeploymentTest-1.DataSourceDeployment]"
    ]
}

【问题讨论】:

    标签: mysql jakarta-ee wildfly


    【解决方案1】:

    CFNE 应有尽有。

    您在模块中有 mysql jdbc 驱动程序,但您的部署和 @DataSourceDefinition 知道注意到它。

    @DataSourceDefinition 使用部署类加载器加载 jdbc 驱动程序,但它在模块中不可用。

    要解决这个问题,您应该

    1) 通过 manifest.mf / jboss-deployment-structure.xml 将部署的依赖添加到您的 mysql 驱动模块,具体方法见https://docs.jboss.org/author/display/WFLY8/Class+Loading+in+WildFly

    2) 将 jdbc 驱动添加到你的 war 的 lib 目录

    但我肯定会选择 1)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-22
      • 1970-01-01
      相关资源
      最近更新 更多