0

我已经在 Tomcat 和 Postgis 上安装了 gvnix geo-petclinic 示例,没有问题。接下来我尝试通过 Jboss 和 Oracle 安装它

我更改了 roo 脚本:

jpa setup --provider HIBERNATE --database ORACLE --userName user --databaseName dbname --password pass --hostName host

当我尝试运行它时,我收到此错误:

13:24:57,781 ERROR [org.jboss.msc.service.fail] (ServerService Thread Pool -- 48) MSC000001: Failed to start service jboss.persistenceunit."geo-gvnix-jboss-oracle2.war#persistenceUnit": org.jboss.msc.service.StartException in service jboss.persistenceunit."geo-gvnix-jboss-oracle2.war#persistenceUnit": java.lang.IllegalStateException: java.lang.ClassNotFoundException: Can't find a delegate
    at org.jboss.as.jpa.service.PersistenceUnitServiceImpl$1.run(PersistenceUnitServiceImpl.java:103) [jboss-as-jpa-7.3.0.Final-redhat-14.jar:7.3.0.Final-redhat-14]
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) [rt.jar:1.7.0_45]
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) [rt.jar:1.7.0_45]
    at java.lang.Thread.run(Thread.java:744) [rt.jar:1.7.0_45]
    at org.jboss.threads.JBossThread.run(JBossThread.java:122) [jboss-threads-2.1.1.Final-redhat-1.jar:2.1.1.Final-redhat-1]
Caused by: java.lang.IllegalStateException: java.lang.ClassNotFoundException: Can't find a delegate
    at net.bull.javamelody.JpaPersistence.guessDelegate(JpaPersistence.java:202)
    at net.bull.javamelody.JpaPersistence.loadOrGuessDelegate(JpaPersistence.java:170)
    at net.bull.javamelody.JpaPersistence.findDelegate(JpaPersistence.java:162)
    at net.bull.javamelody.JpaPersistence.createContainerEntityManagerFactory(JpaPersistence.java:124)
    at org.jboss.as.jpa.service.PersistenceUnitServiceImpl.createContainerEntityManagerFactory(PersistenceUnitServiceImpl.java:200) [jboss-as-jpa-7.3.0.Final-redhat-14.jar:7.3.0.Final-redhat-14]
    at org.jboss.as.jpa.service.PersistenceUnitServiceImpl.access$600(PersistenceUnitServiceImpl.java:57) [jboss-as-jpa-7.3.0.Final-redhat-14.jar:7.3.0.Final-redhat-14]
    at org.jboss.as.jpa.service.PersistenceUnitServiceImpl$1.run(PersistenceUnitServiceImpl.java:99) [jboss-as-jpa-7.3.0.Final-redhat-14.jar:7.3.0.Final-redhat-14]
    ... 4 more
Caused by: java.lang.ClassNotFoundException: Can't find a delegate
    ... 11 more
4

2 回答 2

0

gvNIX 生成 Java 标准应用程序,因此您应该在 JBoss EAP 6.2+ 服务器上毫无问题地运行您的应用程序...但是您需要应用一些小改动 ;)...

  • 提供的库:JBoss 提供与 tomcat 不同的持久性库。您应该在pom.xml上设置为提供的持久性组件(如果需要,请记住将您的 oracle 驱动程序设置为提供,并将 oracle 驱动程序添加到 JBOSS 服务器)

    <dependency> <groupId>org.hibernate</groupId> <artifactId>hibernate-core</artifactId> <version>4.2.2.Final</version> <scope>provided</scope> </dependency> <dependency> <groupId>org.hibernate</groupId> <artifactId>hibernate-entitymanager</artifactId> <version>4.2.2.Final</version> <scope>provided</scope> <exclusions> <exclusion> <groupId>cglib</groupId> <artifactId>cglib</artifactId> </exclusion> <exclusion> <groupId>dom4j</groupId> <artifactId>dom4j</artifactId> </exclusion> </exclusions> </dependency> <dependency> <groupId>org.hibernate.javax.persistence</groupId> <artifactId>hibernate-jpa-2.0-api</artifactId> <version>1.0.1.Final</version> <scope>provided</scope> </dependency> <dependency> <groupId>org.hibernate</groupId> <artifactId>hibernate-validator</artifactId> <version>4.3.1.Final</version> <scope>provided</scope> </dependency>

  • 路径冲突:JBoss 不喜欢类路径配置中的“*”,因此您需要修改web.xml文件:

    <context-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:META-INF/spring/applicationContext.xml,classpath:META-INF/ spring/applicationContext-security.xml </param-value> </context-param>

  • DataSource : 在 JBoss EAP 6.2.0+ 上运行的 gvNIX 应用程序需要配置一个有效的 JNDI 数据源来访问数据。因此,您需要修改applicationContext.xml文件上的 Datasource 配置,如下所示:

    1. 评论当前的 BasicDatasource
    2. 添加以下 JNDI 数据源配置:

      <tx:annotation-driven mode="aspectj" transaction-manager="transactionManager"/> <tx:jta-transaction-manager /> <jee:jndi-lookup id="entityManagerFactory" jndi-name="java:jboss/medaleaEntityManagerFactory" expected-type="javax.persistence.EntityManagerFactory" />

    3. persistence.xml上修改事务类型JTA。您的persistence.xml文件将如下所示:

      [...] <persistence-unit name="persistenceUnit" transaction-type="JTA"> <provider>org.hibernate.ejb.HibernatePersistence</provider> <jta-data-source>java:jboss/datasources/YOURDATASOURCENAME</jta-data-source> <properties> [...] <property name="jboss.entity.manager.factory.jndi.name" value="java:jboss/medaleaEntityManagerFactory"/> </properties> </persistence-unit> </persistence>

通过上述更改,您的项目应该在 JBoss EAP 6.2+ 服务器上运行;)

于 2015-01-16T13:03:06.147 回答
0

Java EE 规范说:

EE.8.2.3

库冲突 如果应用程序包含一个库的捆绑版本,并且同一个库作为已安装的库存在,则应优先使用与应用程序捆绑的库实例,而不是任何已安装的库版本。这允许应用程序精确地捆绑它需要的库版本,而不受任何已安装库的影响。请注意,如果该库也是部署应用程序的 Java EE 平台版本的必需组件,则平台版本可能(并且通常会)优先。

gvNIX 生成包含捆绑库的应用程序,因此 jcgarcia 展示了自定义生成的应用程序以从中删除持久性模块(因为它是必需的组件)并配置应用程序以从 JBoss 获取持久性资源的方法。

您只需将 H-Spatial 安装为 JBoss 模块即可由 JBoss 提供。

于 2015-01-20T06:18:38.467 回答