经过几天的错误,我希望有人能帮助我。我想通过Hibernate(5.1)将cassandra(3.9)连接到Wildfly Swarm(10.1.0)。我按照How to package Hibernate OGM applications for WildFly 10的说明将所有必需的模块添加到项目中。
>>> Project repository on Github <<<
之后,我将所有必需的依赖项添加到pom.xml:
<packaging>war</packaging>
<dependencies>
<!-- Java EE 7 dependency -->
<dependency>
<groupId>javax</groupId>
<artifactId>javaee-api</artifactId>
<version>7.0</version>
<scope>provided</scope>
</dependency>
<!-- WildFly Swarm Fractions -->
<dependency>
<groupId>org.hibernate.ogm</groupId>
<artifactId>hibernate-ogm-core</artifactId>
</dependency>
<dependency>
<groupId>org.hibernate.ogm</groupId>
<artifactId>hibernate-ogm-cassandra</artifactId>
</dependency>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-search-orm</artifactId>
</dependency>
</dependencies>
<build>
<finalName>demo</finalName>
<plugins>
<plugin>
<groupId>org.wildfly.swarm</groupId>
<artifactId>wildfly-swarm-plugin</artifactId>
<version>${version.wildfly.swarm}</version>
<executions>
<execution>
<goals>
<goal>package</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
接下来,我添加了jboss-deplyoment-structure.xml:
<jboss-deployment-structure>
<deployment>
<dependencies>
<module name="org.hibernate.ogm" slot="5.1" services="export" />
<module name="org.hibernate.ogm.cassandra" slot="5.1" services="export" />
</dependencies>
</deployment>
最后但并非最不重要的是,我添加了persistence.xml:
<persistence
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"
version="2.0">
<persistence-unit name="cassandra_fhe_prd_pu" transaction-type="JTA">
<provider>org.hibernate.ogm.jpa.HibernateOgmPersistence</provider>
<exclude-unlisted-classes>false</exclude-unlisted-classes>
<properties>
<property name="jboss.as.jpa.providerModule" value="org.hibernate:5.1"/>
<property name="hibernate.transaction.jta.platform" value="JBossTS" />
<property name="hibernate.ogm.datastore.provider" value="cassandra_experimental"/>
<property name="hibernate.ogm.datastore.hosts" value="localhost"/>
<property name="hibernate.ogm.datastore.database" value="any"/>
</properties>
</persistence-unit>
我读过的每篇文章都告诉我,这就是我所要做的。但是,如果我启动应用程序,则会显示以下消息:
ERROR [org.jboss.as.controller.management-operation] (main) WFLYCTL0013: Operation ("add") failed - address: (("deployment" => "demo.war")) - failure description: {
"WFLYCTL0412: Required services that are not installed:" => ["jboss.naming.context.java.null"],
"WFLYCTL0180: Services with missing/unavailable dependencies" => ["jboss.persistenceunit.\"demo.war#cassandra_fhe_prd_pu\" is missing [jboss.naming.context.java.null]"]
}
==========================
完整输出:
2017-04-18 13:17:34,022 INFO [org.wildfly.swarm] (main) WFSWARM0013: Installed fraction: JCA - STABLE org.wildfly.swarm:jca:2017.4.0
2017-04-18 13:17:34,022 INFO [org.wildfly.swarm] (main) WFSWARM0013: Installed fraction: Logging - STABLE org.wildfly.swarm:logging:2017.4.0
2017-04-18 13:17:34,022 INFO [org.wildfly.swarm] (main) WFSWARM0013: Installed fraction: Bean Validation - STABLE org.wildfly.swarm:bean-validation:2017.4.0
2017-04-18 13:17:34,022 INFO [org.wildfly.swarm] (main) WFSWARM0013: Installed fraction: JAX-RS - STABLE org.wildfly.swarm:jaxrs:2017.4.0
2017-04-18 13:17:34,022 INFO [org.wildfly.swarm] (main) WFSWARM0013: Installed fraction: JPA - STABLE org.wildfly.swarm:jpa:2017.4.0
2017-04-18 13:17:34,022 INFO [org.wildfly.swarm] (main) WFSWARM0013: Installed fraction: CDI Configuration - STABLE org.wildfly.swarm:cdi-config:2017.4.0
2017-04-18 13:17:34,022 INFO [org.wildfly.swarm] (main) WFSWARM0013: Installed fraction: CDI - STABLE org.wildfly.swarm:cdi:2017.4.0
2017-04-18 13:17:34,022 INFO [org.wildfly.swarm] (main) WFSWARM0013: Installed fraction: Datasources - STABLE org.wildfly.swarm:datasources:2017.4.0
2017-04-18 13:17:34,022 INFO [org.wildfly.swarm] (main) WFSWARM0013: Installed fraction: Transactions - STABLE org.wildfly.swarm:transactions:2017.4.0
2017-04-18 13:17:34,022 INFO [org.wildfly.swarm] (main) WFSWARM0013: Installed fraction: Undertow - STABLE org.wildfly.swarm:undertow:2017.4.0
2017-04-18 13:17:40,410 WARN [org.wildfly.swarm.datasources] (main) WFSWARM1005: Not creating a default datasource due to lack of JDBC driver
2017-04-18 13:17:40,894 INFO [org.jboss.msc] (main) JBoss MSC version 1.2.6.Final
2017-04-18 13:17:40,957 INFO [org.jboss.as] (MSC service thread 1-6) WFLYSRV0049: WildFly Swarm 2017.4.0 (WildFly Core 2.2.1.Final) starting
2017-04-18 13:17:41,144 INFO [org.wildfly.swarm] (MSC service thread 1-6) WFSWARM0019: Install MSC service for command line args: []
2017-04-18 13:17:50,956 WARN [org.jboss.as.txn] (ServerService Thread Pool -- 26) WFLYTX0013: Node identifier property is set to the default value. Please make sure it is unique.
2017-04-18 13:17:50,956 INFO [org.jboss.as.naming] (ServerService Thread Pool -- 28) WFLYNAM0001: Activating Naming Subsystem
2017-04-18 13:17:50,956 INFO [org.jboss.as.security] (ServerService Thread Pool -- 24) WFLYSEC0002: Activating Security Subsystem
2017-04-18 13:17:50,971 INFO [org.jboss.as.security] (MSC service thread 1-2) WFLYSEC0001: Current PicketBox version=4.9.6.Final
2017-04-18 13:17:50,971 INFO [org.wildfly.extension.io] (ServerService Thread Pool -- 18) WFLYIO001: Worker 'default' has auto-configured to 16 core threads with 128 task threads based on your 8 available processors
2017-04-18 13:17:51,002 INFO [org.jboss.as.connector] (MSC service thread 1-1) WFLYJCA0009: Starting JCA Subsystem (WildFly/IronJacamar 1.3.4.Final)
2017-04-18 13:17:51,018 INFO [org.jboss.as.naming] (MSC service thread 1-6) WFLYNAM0003: Starting Naming Service
2017-04-18 13:17:51,409 INFO [org.wildfly.extension.undertow] (MSC service thread 1-2) WFLYUT0003: Undertow 1.4.11.Final starting
2017-04-18 13:17:51,424 INFO [org.xnio] (MSC service thread 1-8) XNIO version 3.4.3.Final
2017-04-18 13:17:51,424 INFO [org.xnio.nio] (MSC service thread 1-8) XNIO NIO Implementation Version 3.4.3.Final
2017-04-18 13:17:51,487 INFO [org.wildfly.extension.undertow] (MSC service thread 1-5) WFLYUT0012: Started server default-server.
2017-04-18 13:17:51,518 INFO [org.wildfly.extension.undertow] (MSC service thread 1-4) WFLYUT0006: Undertow HTTP listener default listening on [0:0:0:0:0:0:0:0]:8080
2017-04-18 13:17:52,624 INFO [org.jboss.as] (Controller Boot Thread) WFLYSRV0025: WildFly Swarm 2017.4.0 (WildFly Core 2.2.1.Final) started in 11761ms - Started 110 of 120 services (21 services are lazy, passive or on-demand)
2017-04-18 13:18:04,528 INFO [org.wildfly.swarm.runtime.deployer] (main) deploying demo.war
2017-04-18 13:18:04,544 INFO [org.jboss.as.server.deployment] (MSC service thread 1-2) WFLYSRV0027: Starting deployment of "demo.war" (runtime-name: "demo.war")
2017-04-18 13:18:20,191 INFO [org.jboss.as.jpa] (MSC service thread 1-7) WFLYJPA0002: Read persistence.xml for cassandra_fhe_prd_pu
2017-04-18 13:18:25,686 WARN [org.jboss.as.dependency.private] (MSC service thread 1-8) WFLYSRV0018: Deployment "deployment.demo.war" is using a private module ("org.jboss.ironjacamar.jdbcadapters:main") which may be changed or removed in future versions without notice.
2017-04-18 13:18:25,686 WARN [org.jboss.as.dependency.private] (MSC service thread 1-8) WFLYSRV0018: Deployment "deployment.demo.war" is using a private module ("org.jboss.jts:main") which may be changed or removed in future versions without notice.
2017-04-18 13:18:26,201 ERROR [org.jboss.as.controller.management-operation] (main) WFLYCTL0013: Operation ("add") failed - address: (("deployment" => "demo.war")) - failure description: {
"WFLYCTL0412: Required services that are not installed:" => ["jboss.naming.context.java.null"],
"WFLYCTL0180: Services with missing/unavailable dependencies" => ["jboss.persistenceunit.\"demo.war#cassandra_fhe_prd_pu\" is missing [jboss.naming.context.java.null]"]
}
2017-04-18 13:18:26,201 ERROR [org.jboss.as.server] (main) WFLYSRV0021: Deploy of deployment "demo.war" was rolled back with the following failure message:
{
"WFLYCTL0412: Required services that are not installed:" => ["jboss.naming.context.java.null"],
"WFLYCTL0180: Services with missing/unavailable dependencies" => ["jboss.persistenceunit.\"demo.war#cassandra_fhe_prd_pu\" is missing [jboss.naming.context.java.null]"]
}
2017-04-18 13:18:27,045 INFO [org.jboss.as.server.deployment] (MSC service thread 1-2) WFLYSRV0028: Stopped deployment demo.war (runtime-name: demo.war) in 838ms
2017-04-18 13:18:27,045 INFO [org.jboss.as.controller] (main) WFLYCTL0183: Service status report
WFLYCTL0184: New missing/unsatisfied dependencies:
service jboss.naming.context.java.null (missing) dependents: [service jboss.persistenceunit."demo.war#cassandra_fhe_prd_pu"]
service jboss.persistenceunit."demo.war#cassandra_fhe_prd_pu" (missing) dependents: [service jboss.deployment.unit."demo.war".POST_MODULE]
2017-04-18 13:18:27,045 INFO [org.wildfly.extension.undertow] (MSC service thread 1-2) WFLYUT0008: Undertow HTTP listener default suspending
2017-04-18 13:18:27,045 INFO [org.wildfly.extension.undertow] (MSC service thread 1-2) WFLYUT0007: Undertow HTTP listener default stopped, was bound to [0:0:0:0:0:0:0:0]:8080
2017-04-18 13:18:27,045 INFO [org.wildfly.extension.undertow] (MSC service thread 1-1) WFLYUT0004: Undertow 1.4.11.Final stopping
2017-04-18 13:18:27,061 INFO [org.jboss.as] (MSC service thread 1-7) WFLYSRV0050: WildFly Swarm 2017.4.0 (WildFly Core 2.2.1.Final) stopped in 7ms
2017-04-18 13:18:27,076 INFO [org.jboss.weld.Bootstrap] (main) WELD-ENV-002001: Weld SE container internal shut down
2017-04-18 13:18:27,076 ERROR [stderr] (main) java.lang.reflect.InvocationTargetException
2017-04-18 13:18:27,076 ERROR [stderr] (main) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
2017-04-18 13:18:27,076 ERROR [stderr] (main) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
2017-04-18 13:18:27,076 ERROR [stderr] (main) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
2017-04-18 13:18:27,076 ERROR [stderr] (main) at java.lang.reflect.Method.invoke(Method.java:498)
2017-04-18 13:18:27,076 ERROR [stderr] (main) at org.wildfly.swarm.bootstrap.MainInvoker.invoke(MainInvoker.java:39)
2017-04-18 13:18:27,076 ERROR [stderr] (main) at org.wildfly.swarm.bootstrap.Main.run(Main.java:46)
2017-04-18 13:18:27,076 ERROR [stderr] (main) at org.wildfly.swarm.bootstrap.Main.main(Main.java:37)
2017-04-18 13:18:27,076 ERROR [stderr] (main) Caused by: org.wildfly.swarm.container.DeploymentException: org.wildfly.swarm.container.DeploymentException: WFSWARM0004: Deployment failed: {"WFLYCTL0412: Required services that are not installed:" => ["jboss.naming.context.java.null"],"WFLYCTL0180: Services with missing/unavailable dependencies" => ["jboss.persistenceunit.\"demo.war#cassandra_fhe_prd_pu\" is missing [jboss.naming.context.java.null]"]}
2017-04-18 13:18:27,076 ERROR [stderr] (main) at org.wildfly.swarm.container.runtime.RuntimeDeployer.deploy(RuntimeDeployer.java:278)
2017-04-18 13:18:27,076 ERROR [stderr] (main) at org.wildfly.swarm.container.runtime.RuntimeDeployer.deploy(RuntimeDeployer.java:94)
2017-04-18 13:18:27,076 ERROR [stderr] (main) at org.wildfly.swarm.container.runtime.RuntimeDeployer$Proxy$_$$_WeldClientProxy.deploy(Unknown Source)
2017-04-18 13:18:27,076 ERROR [stderr] (main) at org.wildfly.swarm.Swarm.deploy(Swarm.java:443)
2017-04-18 13:18:27,076 ERROR [stderr] (main) at org.wildfly.swarm.Swarm.main(Swarm.java:611)
2017-04-18 13:18:27,076 ERROR [stderr] (main) ... 7 more
2017-04-18 13:18:27,076 ERROR [stderr] (main) Caused by: org.wildfly.swarm.container.DeploymentException: WFSWARM0004: Deployment failed: {"WFLYCTL0412: Required services that are not installed:" => ["jboss.naming.context.java.null"],"WFLYCTL0180: Services with missing/unavailable dependencies" => ["jboss.persistenceunit.\"demo.war#cassandra_fhe_prd_pu\" is missing [jboss.naming.context.java.null]"]}
2017-04-18 13:18:27,076 ERROR [stderr] (main) at org.wildfly.swarm.container.runtime.RuntimeDeployer.deploy(RuntimeDeployer.java:273)
2017-04-18 13:18:27,076 ERROR [stderr] (main) ... 11 more
2017-04-18 13:18:27,076 ERROR [stderr] (main) Exception in thread "main" java.lang.reflect.InvocationTargetException
2017-04-18 13:18:27,076 ERROR [stderr] (main) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
2017-04-18 13:18:27,076 ERROR [stderr] (main) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
2017-04-18 13:18:27,076 ERROR [stderr] (main) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
2017-04-18 13:18:27,076 ERROR [stderr] (main) at java.lang.reflect.Method.invoke(Method.java:498)
2017-04-18 13:18:27,076 ERROR [stderr] (main) at org.wildfly.swarm.bootstrap.MainInvoker.invoke(MainInvoker.java:39)
2017-04-18 13:18:27,076 ERROR [stderr] (main) at org.wildfly.swarm.bootstrap.Main.run(Main.java:46)
2017-04-18 13:18:27,076 ERROR [stderr] (main) at org.wildfly.swarm.bootstrap.Main.main(Main.java:37)
2017-04-18 13:18:27,076 ERROR [stderr] (main) Caused by: org.wildfly.swarm.container.DeploymentException: org.wildfly.swarm.container.DeploymentException: WFSWARM0004: Deployment failed: {"WFLYCTL0412: Required services that are not installed:" => ["jboss.naming.context.java.null"],"WFLYCTL0180: Services with missing/unavailable dependencies" => ["jboss.persistenceunit.\"demo.war#cassandra_fhe_prd_pu\" is missing [jboss.naming.context.java.null]"]}
2017-04-18 13:18:27,092 ERROR [stderr] (main) at org.wildfly.swarm.container.runtime.RuntimeDeployer.deploy(RuntimeDeployer.java:278)
2017-04-18 13:18:27,092 ERROR [stderr] (main) at org.wildfly.swarm.container.runtime.RuntimeDeployer.deploy(RuntimeDeployer.java:94)
2017-04-18 13:18:27,092 ERROR [stderr] (main) at org.wildfly.swarm.container.runtime.RuntimeDeployer$Proxy$_$$_WeldClientProxy.deploy(Unknown Source)
2017-04-18 13:18:27,092 ERROR [stderr] (main) at org.wildfly.swarm.Swarm.deploy(Swarm.java:443)
2017-04-18 13:18:27,092 ERROR [stderr] (main) at org.wildfly.swarm.Swarm.main(Swarm.java:611)
2017-04-18 13:18:27,092 ERROR [stderr] (main) ... 7 more
2017-04-18 13:18:27,092 ERROR [stderr] (main) Caused by: org.wildfly.swarm.container.DeploymentException: WFSWARM0004: Deployment failed: {"WFLYCTL0412: Required services that are not installed:" => ["jboss.naming.context.java.null"],"WFLYCTL0180: Services with missing/unavailable dependencies" => ["jboss.persistenceunit.\"demo.war#cassandra_fhe_prd_pu\" is missing [jboss.naming.context.java.null]"]}
2017-04-18 13:18:27,092 ERROR [stderr] (main) at org.wildfly.swarm.container.runtime.RuntimeDeployer.deploy(RuntimeDeployer.java:273)
2017-04-18 13:18:27,092 ERROR [stderr] (main) ... 11 more
Process finished with exit code 1
谁能告诉我我做错了什么?
修改
评论后,我添加了Datastax JDBC包装器,如下所示:
项目stages.yml
swarm:
datasources:
data-sources:
CassandraDS:
driver-name: cassandra
connection-url: jdbc:cassandra://localhost:9160/system?version=3.9
jdbc-drivers:
cassandra:
driver-class-name: org.apache.cassandra2.cql.jdbc.CassandraDriver
xa-datasource-name: com.github.adejanovski.cassandra.jdbc.CassandraDataSource
driver-module-name: org.github.adejanovski.cassandra
module.xml
<module xmlns="urn:jboss:module:1.3" name="org.github.adejanovski.cassandra">
<resources>
<resource-root path="cassandra-jdbc-wrapper-3.1.0.jar"/>
<resource-root path="slf4j-jdk14-1.7.24.jar"/>
</resources>
<dependencies>
<module name="javax.api"/>
<module name="javax.transaction.api"/>
<module name="sun.jdk" export="true" >
<imports>
<include path="sun/misc/Unsafe" />
</imports>
</module>
</dependencies>
</module>
的JBoss部署-structure.xml
<jboss-deployment-structure>
<deployment>
<dependencies>
<module name="org.hibernate.ogm" slot="5.1" services="export" />
<module name="org.hibernate.ogm.cassandra" slot="5.1" services="export" />
<module name="org.github.adejanovski.cassandra" slot="main" services="export" />
</dependencies>
</deployment>
</jboss-deployment-structure>
和persistence.xml
<persistence
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"
version="2.0">
<persistence-unit name="cassandra_fhe_prd_pu" transaction-type="JTA">
<provider>org.hibernate.ogm.jpa.HibernateOgmPersistence</provider>
<jta-data-source>java:/CassandraDS</jta-data-source>
<exclude-unlisted-classes>false</exclude-unlisted-classes>
<properties>
<property name="jboss.as.jpa.providerModule" value="org.hibernate:5.1"/>
<property name="hibernate.transaction.jta.platform" value="JBossTS"/>
<property name="hibernate.ogm.datastore.provider" value="cassandra_experimental"/>
<property name="hibernate.ogm.datastore.hosts" value="localhost"/>
<property name="hibernate.ogm.datastore.database" value="fhe"/>
</properties>
</persistence-unit>
</persistence>
现在,错误消息显示:
WFLYCTL0013: Operation ("add") failed - address: ([
("subsystem" => "datasources"),
("data-source" => "CassandraDS")
]) - failure description: {
"WFLYCTL0412: Required services that are not installed:" => ["jboss.jdbc-driver.cassandra"],
"WFLYCTL0180: Services with missing/unavailable dependencies" => [
"org.wildfly.data-source.CassandraDS is missing [jboss.jdbc-driver.cassandra]",
"jboss.driver-demander.java:jboss/datasources/CassandraDS is missing [jboss.jdbc-driver.cassandra]"
]
}
答案 0 :(得分:0)
现在我找到了解决方案。我不知道这是否是最好的方式,但它有效:
首先,我添加了没有swarm jpa的必需分数。之后我删除了cassandra-jdbc-wrapper。现在,hibernate直接创建连接并持久化实体。我唯一想做的就是将实体类添加到持久性xml中。
工作项目被推送到存储库。我会玩群体,希望找到更好的方法。