1

我在使用 JBoss 7.02.Final 时遇到问题。我正在从 JBoss5.1GA 移植一个项目,并且(除了在查找中进行大量重写以支持 EE6)我在类路径上注册 Eclipselink 时遇到问题。我四处搜索,看到几篇帖子说这个问题已经解决,但我似乎找不到一个可行的例子。

因为我是 EE6 开发的新手,所以我做错了什么的可能性很大。

耳朵的构造如下

  - ProductionEE6
  ./lib/eclipselink2.*.jar
  ./lib/javax.persistence.jar
    . . .
    ProductionEJB.jar
    . . .
    Production.war

我的 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 persistence_2_0.xsd">
    <persistence-unit name="production" transaction-type="RESOURCE_LOCAL">
        <provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>

        <non-jta-data-source>java:/ProductionDS</non-jta-data-source>
        <class><!-- entities --></class>

        <properties>
            <property name="javax.persistence.jdbc.driver" value="org.h2.Driver"/>
            <property name="eclipselink.target-server" value="JBoss"/> 
            <!-- A few other properties here -->
        </properties>       
    </persistence-unit>
</persistence>

一切正常启动,我看到了数据源,我通过了安全性(通过自定义 DatabaseModule,所以我的数据源绝对没问题),当我最终调用 EJB 时,我看到以下错误:

Caused by: javax.persistence.PersistenceException: No Persistence provider for EntityManager named production
    at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:69) [hibernate-jpa-2.0-api-1.0.1.Final.jar:1.0.1.Final]
    at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:47) [hibernate-jpa-2.0-api-1.0.1.Final.jar:1.0.1.Final]
    at com.danielbchapman.production.entity.DelegateInstance.getEm(DelegateInstance.java:67) [ProductionEJB.jar:]
    at com.danielbchapman.production.entity.EntityInstance.getEm(EntityInstance.java:39) [ProductionEJB.jar:]
    at com.danielbchapman.production.beans.OptionsDao.<init>(OptionsDao.java:20) [ProductionEJB.jar:]
    ... 94 more

关于这一点,我没有使用 JTA DataSource,所以我一直在手动处理事务。此调用是上面的“DelegateInstance”,带有以下代码:(在这种情况下,persistenceUnitId 是“生产”。)

/**
 * @return an instance of the entity manager if it isn't there.
 */
public EntityManager getEm()
{
    if(manager == null)
    {
        manager = Persistence.createEntityManagerFactory(getPersistenceUnitId())
                .createEntityManager();
    }

    return manager;
}

最让我担心的是在堆栈上看到这个: [hibernate-jpa-2.0-api-1.0.1.Final.jar:1.0.1.Final]显然我没有正确加载 EclipseLink。我的想法在这里用完了,所以如果有人可以提供帮助,我将不胜感激。

4

2 回答 2

1

EclipseLink 2.4 现在可以与 JBoss AS 7.1.1 一起使用 - 经过测试并且可以正常工作 - hth

于 2012-05-30T04:57:59.863 回答
0

根据http://dev.dzhokanov.com/?p=8

此外,这个论坛帖子支持我的假设 - http://community.jboss.org/message/623759#623759

在线程中,Scott Marlow(JBoss 7/JPA 首席开发人员)承认:

“你不是唯一一个想要使用 EclipseLink 但还没有准备好的人。“</p>

据我了解,EclipseLink JPA 实现中存在一些不兼容性,需要进行调整才能与 JBoss 7 兼容。所以,我不希望很快支持 Jboss 7-EclipseLink。

因此,这可能是目前根本不可能的情况。但是,如果您找到一种方法,我会对此非常感兴趣。

于 2011-11-10T13:33:22.650 回答