2014-02-26 180 views
0

这是一个我之前构建的应用程序,我正试图在Openshift上进行部署。它在独立的Jboss AS7实例的本地设置中运行良好。它构建为3个模块:一个.war,一个ejb .jar和一个包含这两个模块的.ear - 我觉得很标准。JBoss AS7上的Openshift部署失败,MYSQL相关性错误

有问题的错误(从“RHC尾”):

==> jbossas/logs/server.log <== 
2014/02/26 04:06:24,571 INFO [org.jboss.ws.common.management.DefaultEndpointRegistry](MSC service thread 1-1) remove: jboss.ws:context=unihub-ejb,endpoint=SearchSession 
2014/02/26 04:06:24,919 INFO [org.jboss.as.webservices] (MSC service thread 1-2) JBAS015540: Stopping service jboss.ws.port-component-link 
2014/02/26 04:06:25,579 INFO [org.jboss.as.server.deployment] (MSC service thread 1-4) JBAS015877: Stopped deployment unihub-ejb.jar in 1277ms 
2014/02/26 04:06:25,893 INFO [org.jboss.as.server.deployment] (MSC service thread 1-4) JBAS015877: Stopped deployment unihub.war in 1589ms 
2014/02/26 04:06:26,181 INFO [org.jboss.as.server.deployment] (MSC service thread 1-3) JBAS015877: Stopped deployment unihub-ear.ear in 1879ms 
2014/02/26 04:06:26,184 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."unihub-ear.ear/unihub-ejb.jar#primary"] 

2014/02/26 04:06:26,368 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.\"unihub-ear.ear/unihub-ejb.jar#primary\"jboss.naming.context.java.jboss.datasources.MySqlDSMissing[jboss.persistenceunit.\"unihub-ear.ear/unihub-ejb.jar#primary\"jboss.naming.context.java.jboss.datasources.MySqlDS]"]}}} 

我认为有什么不对我的配置,但整个晚上一直在四处寻找一个答案无济于事。这里有几个潜在的麻烦制造者:

[APPDIR]/openshift /配置/ standalone.xml (数据源的部分,反正)

<subsystem xmlns="urn:jboss:domain:datasources:1.0"> 
     <datasources> 
      <datasource jndi-name="java:jboss/datasources/ExampleDS" enabled="false" 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="true" use-java-context="true" pool-name="MysqlDS" use-ccm="true"> 
       <connection-url>jdbc:mysql://${env.OPENSHIFT_MYSQL_DB_HOST}:${env.OPENSHIFT_MYSQL_DB_PORT}/${env.OPENSHIFT_APP_NAME}</connection-url> 
       <driver>mysql</driver> 
       <security> 
        <user-name>adminsTxZQzC</user-name> 
        <password>cPHNsLcMRDBn</password> 
       </security> 
       <validation> 
        <check-valid-connection-sql>SELECT 1</check-valid-connection-sql> 
        <background-validation>true</background-validation> 
        <background-validation-millis>60000</background-validation-millis> 
        <!--<validate-on-match>true</validate-on-match>--> 
       </validation> 
       <pool> 
        <flush-strategy>IdleConnections</flush-strategy> 
       </pool> 
      </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_POSTGRESQL_DB_HOST}:${env.OPENSHIFT_POSTGRESQL_DB_PORT}/${env.OPENSHIFT_APP_NAME}</connection-url> 
       <driver>postgresql</driver> 
       <security> 
        <user-name>${env.OPENSHIFT_POSTGRESQL_DB_USERNAME}</user-name> 
        <password>${env.OPENSHIFT_POSTGRESQL_DB_PASSWORD}</password> 
       </security> 
       <validation> 
        <check-valid-connection-sql>SELECT 1</check-valid-connection-sql> 
        <background-validation>true</background-validation> 
        <background-validation-millis>60000</background-validation-millis> 
        <!--<validate-on-match>true</validate-on-match>--> 
       </validation> 
       <pool> 
        <flush-strategy>IdleConnections</flush-strategy> 
       </pool> 
      </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> 

这里的persistence.xml,来比较:

<?xml version="1.0" encoding="UTF-8"?> 
<persistence version="2.0" 
xmlns="http://java.sun.com/xml/ns/persistence" 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation=" 
     http://java.sun.com/xml/ns/persistence 
     http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd"> 
    <persistence-unit name="primary"> 
    <jta-data-source>java:jboss/datasources/MySqlDS</jta-data-source> 
    <properties> 
     <!-- Properties for Hibernate -->    
     <property name="hibernate.hbm2ddl.auto" value="create" /> 
     <property name="hibernate.show_sql" value="true" />    
    </properties> 
    <!--CLASSES HERE--> 
    <class>com.unihub.app.Stuff</class> 
    <class>com.unihub.app.Message</class> 
    <class>com.unihub.app.User</class> 
</persistence-unit> 

[APPDIR] /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"> 
<name>unihub application</name> 
<modelVersion>4.0.0</modelVersion> 
<groupId>com.unihub.app</groupId> 
<artifactId>unihub.com</artifactId> 
<version>0.0.1-SNAPSHOT</version> 
<packaging>pom</packaging> 

...  

<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>unihub</finalName> 
    <plugins> 
      <plugin> 
       <artifactId>maven-ear-plugin</artifactId> 
       <version>2.7</version> 
       <configuration> 
       <outputDirectory>deployments</outputDirectory> 
       </configuration> 
      </plugin> 
      <!-- Compiler plugin enforces Java 1.6 compatibility and 
       activates annotation processors --> 
      <plugin> 
       <artifactId>maven-compiler-plugin</artifactId> 
       <version>2.3.1</version> 
       <configuration> 
        <source>1.6</source> 
        <target>1.6</target> 
       </configuration> 
      </plugin> 
      <!-- The JBoss AS plugin deploys your ear to a local JBoss 
       AS container --> 
      <!-- Due to Maven's lack of intelligence with EARs we need 
       to configure the jboss-as maven plugin to skip deployment for all modules. 
       We then enable it specifically in the ear module. --> 
      <plugin> 
       <groupId>org.jboss.as.plugins</groupId> 
       <artifactId>jboss-as-maven-plugin</artifactId> 
       <version>7.3.Final</version> 
       <inherited>true</inherited> 
       <configuration> 
        <skip>true</skip> 
       </configuration> 
      </plugin> 
    </plugins> 
    </build> 
</profile> 

也许在这里我openshift曲线是完全错误的,我有一个很难找到任何文件或指南对如何做到这一点。无论如何,如果还有其他文件,你认为这可能是这个根源,让我知道,我会把他们拉起来。我接受有关调试策略的建议。谢谢!

回答

2

你犯了一个小错字。

在standalone.xml MySQL的数据源JNDI名称是的JBoss /数据源/ MysqlDS

在持久性。你连接到一个JNDI数据源xml你叫jboss/datasources/MySqlDS

这是不一样的数据源。使名称相同。

+0

哈哈,非常感谢!你有什么机会可以告诉我这个错误究竟意味着什么?我的大脑无法解析它。 – mwillson

+0

错误出现之前的问题是:JBAS014775:新的缺失/不满意的依赖关系: 服务jboss.naming.context.java.jboss.datasources.MySqlDS – MartinB

0

我有我的应用程序在openshift中运行,因为没有很多文档可用于openshift,有两种部署,一种可以通过jenkins构建和部署, 或做热部署(部署本地生成的战争,耳部和部署)

看到openshift文档不同的部署选项

https://www.openshift.com/developers/deploying-and-building-applications

,因为我对你的异常不明确,似乎是配置问题,我觉得下面的教程将帮助您在这方面,因为我的应用程序lication使用JBoss应用服务器7与MySQL,但不持久层,我通过这个博客,这是有益的

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

上述博客解释了热部署去了,如果你正在做热部署请确保您删除SRC,如openshift文档中说

删除您克隆到您的计算机src目录下,并从你的应用程序 pom.xml文件