2012-10-31 28 views
1

我有一个使用JSF(Primefaces),JPA(Hibernate)和EJB的Web应用程序,并且无法在JBoss上配置数据源。我收到以下错误:错误新的缺失/不满意的依赖关系:(无法配置数据源)

2012/10/31 07:20:17,948 INFO [org.jboss.as.connector.deployers.jdbc] (MSC service thread 1-3) JBAS010404: Deploying non-JDBC-compliant driver class com.mysql.jdbc.Driver (version 5.1) 

2012/10/31 07:20:18,836 INFO [org.jboss.as.server] (DeploymentScanner-threads - 2) JBAS015870: Deploy of deployment "ROOT.war" was rolled back with failure message {"JBAS014771: Services with missing/unavailable dependencies" => ["jboss.persistenceunit.\"ROOT.war#test\"jboss.naming.context.java.jboss.datasources.MysqlDSMissing[jboss.persistenceunit.\"ROOT.war#test\"jboss.naming.context.java.jboss.datasources.MysqlDS]"]} 

2012/10/31 07:20:19,252 INFO [org.jboss.as.server.deployment] (MSC service thread 1-2) JBAS015877: Stopped deployment ROOT.war in 413ms 

2012/10/31 07:20:19,255 INFO [org.jboss.as.controller] (DeploymentScanner-threads - 2) JBAS014774: Service status report 

JBAS014775: New missing/unsatisfied dependencies: 

     service jboss.naming.context.java.jboss.datasources.MysqlDS (missing) dependents: [service jboss.persistenceunit."ROOT.war#test"] 

2012/10/31 07:20:19,334 ERROR [org.jboss.as.server.deployment.scanner] (DeploymentScanner-threads - 1) {"JBAS014653: Composite operation failed and was rolled back. Steps that failed:" => {"Operation step-2" => {"JBAS014771: Services with missing/unavailable dependencies" => ["jboss.persistenceunit.\"ROOT.war#test\"jboss.naming.context.java.jboss.datasources.MysqlDSMissing[jboss.persistenceunit.\"ROOT.war#test\"jboss.naming.context.java.jboss.datasources.MysqlDS]"]}}} 

下面你可以看到我的persistence.xmlstanadlone.xmlpom.xml我是否在pom.xml中缺少一些依赖关系?

的persistence.xml

<provider>org.hibernate.ejb.HibernatePersistence</provider> 

<jta-data-source>java:jboss/datasources/MysqlDS</jta-data-source> 

<properties> 

    <property name="hibernate.dialect" value="org.hibernate.dialect.MySQLDialect"/>  

    <property name="hibernate.show_sql" value="true"/> 

    <property name="hibernate.max_fetch_depth" value="3"/> 

    <property name="hibernate.hbm2ddl.auto" value="update" /> 

</properties> 

Standalone.xml

<datasources> 
      <datasource jndi-name="java:jboss/datasources/ExampleDS" enabled="true" use-java-context="true" pool-name="H2DS"> 
       <connection-url>jdbc:h2:${jboss.server.data.dir}/test;DB_CLOSE_DELAY=-1</connection-url> 
       <driver>h2</driver> 
      <security> 
        <user-name>sa</user-name> 
        <password>sa</password> 
       </security> 
      </datasource> 
      <datasource jndi-name="java:jboss/datasources/MysqlDS" enabled="${mysql.enabled}" use-java-context="true" pool-name="MysqlDS"> 
       <connection-url>jdbc:mysql://127.5.54.1:3306/researchprojects</connection-url> 
       <driver>mysql</driver> 
       <security> 
        <user-name>admin</user-name> 
        <password>*******</password> 
       </security> 
       <validation> 
        <check-valid-connection-sql>SELECT 1</check-valid-connection-sql> 
       </validation> 
      </datasource> 
      <datasource jndi-name="java:jboss/datasources/PostgreSQLDS" enabled="${postgresql.enabled}" use-java-context="true" pool-name="PostgreSQLDS" use-ccm="true"> 
       <connection-url>jdbc:postgresql://${env.OPENSHIFT_DB_HOST}:${env.OPENSHIFT_DB_PORT}/${env.OPENSHIFT_APP_NAME}</connection-url> 
       <driver>postgresql</driver> 
       <security> 
        <user-name>${env.OPENSHIFT_DB_USERNAME}</user-name> 
        <password>${env.OPENSHIFT_DB_PASSWORD}</password> 
       </security> 
       <validation> 
        <check-valid-connection-sql>SELECT 1</check-valid-connection-sql> 
       </validation> 
      </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.jdbc"> 
        <xa-datasource-class>com.mysql.jdbc.jdbc2.optional.MysqlXADataSource</xa-datasource-class> 
       </driver> 
       <driver name="postgresql" module="org.postgresql.jdbc"> 
        <xa-datasource-class>org.postgresql.xa.PGXADataSource</xa-datasource-class> 
       </driver> 
      </drivers> 
     </datasources> 

的pom.xml

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> 
    <modelVersion>4.0.0</modelVersion> 
    <groupId>openshifttest</groupId> 
    <artifactId>openshifttest</artifactId> 
    <packaging>war</packaging> 
    <version>1.0</version> 
    <name>openshifttest</name> 

<repositories> 
    <repository> 
     <id>scala</id> 
     <name>Scala Tools</name> 
     <url>http://scala-tools.org/repo-releases/</url> 
     <releases> 
      <enabled>true</enabled> 
     </releases> 
     <snapshots> 
      <enabled>false</enabled> 
     </snapshots> 
    </repository> 
    <repository> 
    <id>prime-repo</id> 
    <name>PrimeFaces Maven Repository</name> 
    <url>http://repository.primefaces.org</url> 
    <layout>default</layout> 
    </repository> 
</repositories> 

    <pluginRepositories> 
     <pluginRepository> 
      <id>scala</id> 
      <name>Scala Tools</name> 
      <url>http://scala-tools.org/repo-releases/</url> 
      <releases> 
       <enabled>true</enabled> 
      </releases> 
      <snapshots> 
       <enabled>false</enabled> 
      </snapshots> 
     </pluginRepository> 
    </pluginRepositories> 

    <properties> 
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> 
    <maven.compiler.source>1.6</maven.compiler.source> 
    <maven.compiler.target>1.6</maven.compiler.target> 
    </properties> 

    <dependencies> 
    <dependency> 
     <groupId>org.jboss.spec</groupId> 
     <artifactId>jboss-javaee-6.0</artifactId> 
     <version>1.0.0.Final</version> 
     <type>pom</type> 
     <scope>provided</scope> 
    </dependency> 
    <dependency> 
     <groupId>org.scala-lang</groupId> 
     <artifactId>scala-library</artifactId> 
     <version>2.7.2</version> 
    </dependency> 
    <dependency> 
     <groupId>org.primefaces</groupId> 
     <artifactId>primefaces</artifactId> 
     <version>3.4.1</version> 
    </dependency> 
    </dependencies> 

    <profiles> 
    <profile> 
    <!-- When built in OpenShift the 'openshift' profile will be used when invoking mvn. --> 
    <!-- Use this profile for any OpenShift specific customization your app will need. --> 
    <!-- By default that is to put the resulting archive into the 'deployments' folder. --> 
    <!-- http://maven.apache.org/guides/mini/guide-building-for-different-environments.html --> 
    <id>openshift</id> 
    <build> 
     <finalName>openshifttest</finalName> 
     <plugins> 
      <plugin> 
      <artifactId>maven-war-plugin</artifactId> 
      <version>2.1.1</version> 
      <configuration> 
       <outputDirectory>deployments</outputDirectory> 
       <warName>ROOT</warName> 
      </configuration> 
      </plugin> 
      <plugin> 
       <groupId>org.scala-tools</groupId> 
       <artifactId>maven-scala-plugin</artifactId> 

       <executions> 
        <execution> 
         <id>compile</id> 
         <goals> 
         <goal>compile</goal> 
         </goals> 
         <phase>compile</phase> 
        </execution> 

        <execution> 
         <id>test-compile</id> 
         <goals> 
         <goal>testCompile</goal> 
         </goals> 
         <phase>test-compile</phase> 
        </execution> 

        <execution> 
         <phase>process-resources</phase> 
         <goals> 
          <goal>compile</goal> 
         </goals> 
        </execution> 
       </executions> 
      </plugin> 
     </plugins> 
     </build> 
    </profile> 
    </profiles> 
</project> 

有人能告诉我什么我做错了吗?

回答

3

你启动MySQL数据源?因为默认情况下它被禁用。配置

<datasource jndi-name="java:jboss/datasources/MysqlDS" enabled="${mysql.enabled}" use-java-context="true" pool-name="MysqlDS"> 

部分具有标志$ {mysql.enabled}开始的系统属性,使在情况下,它是MySQL的被启用的数据源。

看看导向http://jaitechwriteups.blogspot.com/2011/08/deploy-java-ee-application-on-openshift.html

,并搜索“使用OpenShift快递提供的MySQL数据库”,显示你,你错过了什么配置的一部分章

+1

我应该在哪里粘贴这部分? –

+0

@ctomc:你解决了这个问题吗? –

1

您需要正确安装JDBC驱动程序作为JBoss 7模块。

a。创建文件夹JBOSS_HOME \ modules \ com \ mysql \ main(是的,主子文件夹必须在那里)

b。将JDBC驱动程序复制到该文件夹​​中

c。创建具有以下内容的文件夹module.xml文件:

<?xml version="1.0" encoding="UTF-8"?> 

<module xmlns="urn:jboss:module:1.0" name="com.mysql"> 
    <resources> 
    <resource-root path="mysql-connector-java-5.1.6-bin.jar"/> 
    </resources> 
    <dependencies> 
    <module name="javax.api"/> 
    <module name="javax.transaction.api"/> 
    </dependencies> 
</module> 

其中mysql-connector-java-5.1.6-bin.jar必须由你的驱动程序名称代替。请注意,对于这种模块配置,您需要将驱动程序定义中的module名称更改为com.mysql(这是一种名称约定),或者只需在module.xml中重命名模块名称即可。

重新启动服务器后,您应该在JBOSS_HOME \ modules \ com \ mysql \ main中看到一个新文件.index。

我已经测试了在JBoss 7.1.1.Final

+0

我照你说的做了,但错误坚持。实际上,我试图将它部署在使用JBoss的openshift云平台上。当我在本地JBoss上部署它时,它工作正常。 – panipsilos

3

有点晚了,但得到这个错误并检查的事情加载后,它变成了我想干脆离开了司机的定义standalone.xml

<drivers> <driver name="mysql" module="com.mysql"> <xa-datasource-class>com.mysql.jdbc.Driver</xa-datasource-class> </driver> </drivers>

所以,步骤,检查是:

  1. 加载jar文件的MySQL连接器的Java-5.1.13-bin.jar到JBoss-EAP-6.1 /模块/ COM/MySQL的/主

  2. 加载module.xml文件到JBoss-EAP-6.1 /模块/ COM/MySQL的/主

`

<module xmlns="urn:jboss:module:1.1" name="com.mysql"><resources> 
<resource-root path="mysql-connector-java-5.1.13-bin.jar"/> 
</resources> 
<dependencies> 
<module name="javax.api"/> 
<module name="javax.transaction.api"/> 
<module name="javax.servlet.api" optional="true"/> 
</dependencies> 
</module> 

`

3.添加这standalone.xml `

 <datasource jndi-name="java:jboss/datasources/MySqlDS" 
      pool-name="MySqlDS" enabled="true" 
      use-java-context="true" jta="true" use-ccm="true"> 
      <connection-url>jdbc:mysql://localhost:3306/testDB</connection-url> 
      <driver-class>com.mysql.jdbc.Driver</driver-class> 
      <driver>mysql</driver> 

      <security> 
       <user-name>root</user-name> 
       <password></password> 
      </security> 
     </datasource> 
     <drivers> 
      <driver name="mysql" module="com.mysql"> 
       <xa-datasource-class>com.mysql.jdbc.Driver</xa-datasource-class> 
      </driver> 
     </drivers> 

4. in your web app persistance.xml, add this line

的Java:JBoss的/数据源/ MySqlDS

`

希望这可以帮助别人!

1

如果指定数据源为web.xml资源引用,然后匹配的名称与恰好在 standalone.xml(或domain.xml中):

的web.xml

<resource-ref> 
    <res-ref-name>java:jboss/datasources/OracleDS</res-ref-name> 
    <res-type>javax.sql.DataSource</res-type> 
    <res-auth>Container</res-auth> 
</resource-ref> 

standalone.xml

<datasource jndi-name="java:jboss/datasources/OracleDS" pool-name="OracleDS" enabled="true" use-java-context="false"> 
1

在我的情况有一个拼写问题的persistence.xml

<jta-data-source>java:jboss/datasources/mydb</jta-data-source> 

必须匹配:

<datasource jta="true" jndi-name="java:jboss/datasources/mydb" pool-name="EmployeeDb" enabled="true" use-ccm="false"> 
0

你应该考虑尝试建立不同版本的MySQL驱动程序。

mysql-connector-java-5.1.17-bin worked fine for me. 

我希望你发现这很有用,

感谢。

0

如果你确定你的数据源配置。 确保你安装了jboss开发工具包,以便从eclipse市场上eclipse。 它会工作。

相关问题