Jboss 6和Oracle上的gvnix

Jboss 6和Oracle上的gvnix,oracle,jboss,gvnix,Oracle,Jboss,Gvnix,我在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 [or

我在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

gvNIX生成Java标准应用程序,所以您应该在JBoss EAP 6.2+服务器上运行应用程序,而不会出现问题。。。但是您需要应用一些小的更改;)

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

    
    org.hibernate
    冬眠核心
    4.2.2.最终版本
    假如
    org.hibernate
    休眠实体管理器
    4.2.2.最终版本
    假如
    cglib
    cglib
    dom4j
    dom4j
    org.hibernate.javax.persistence
    hibernate-jpa-2.0-api
    1.0.1.最终版本
    假如
    org.hibernate
    休眠验证器
    4.3.1.最终版本
    假如
    

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

    
    上下文配置位置
    类路径:META-INF/spring/applicationContext.xml,类路径:META-INF/
    spring/applicationContext-security.xml
    

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

  • 注释当前源
  • 添加以下JNDI数据源配置:

    
    

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

    […]
    org.hibernate.ejb.HibernatePersistence
    java:jboss/datasources/YOURDATASOURCENAME
    [...]
    

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

Java EE规范说:

EE.8.2.3

如果应用程序包含绑定的 库的版本,并且与已安装的库存在相同的库 库,与应用程序绑定的库的实例 应优先于库的任何已安装版本使用。 这使得应用程序能够准确地绑定库的版本 它要求不受任何已安装库的影响。笔记 如果库也是JavaEE的必需组件 正在部署应用程序的平台版本 平台版本可能(通常会)优先

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


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

Hi@jcgarcia我已经完成了您建议我做的更改,但我遇到了其他错误。我正在用其他版本的Hibernate Spatial进行测试。你知道有什么问题吗?。ThnksI已经阅读了关于gvNix的所有文档,但它总是使用Tomcat。我能找一个Jboss@jcgarcia的例子吗?。谢谢你的帮助