【发布时间】:2011-07-17 04:44:18
【问题描述】:
是否有人成功地将 OpenJPA 与 Glassfish 一起使用?
我正在尝试将 OpenJPA 2.1 与 Glassfish 3.1 开源一起使用。我已经按照说明在这里整合了两者 -> http://weblogs.java.net/blog/ss141213/archive/2006/07/using_openjpa_a.html
我在 Eclipse Indigo 中有一个非常简单的 EJB 项目,其中包含以下内容:
- com.rares.test.Person - @Entity
- com.rares.test.PersonManager - 界面
- com.rares.test.PersonDao - @Stateless
但是,当我尝试部署时,我的 Person @Entity 上出现 ClassNotFoundException。投诉似乎是在我的 PersonDao 中实现的 create 方法的 Person 参数(请参阅下面的所有代码)。
我尝试了同一个项目,但没有在我的 persistence.xml 中指定提供程序,并且该项目运行良好(能够将 Person @Entity 持久保存到 MySql 中的 PERSON 表中)。如果我没有指定提供者,我想我正在使用 EclipseLink(如果我错了,请纠正我)。这让我相信我没有正确配置 OpenJPA 和 Glassfish。
堆栈跟踪
Caused by: java.lang.IllegalArgumentException: java.lang.ClassNotFoundException: com.rares.test.Person
at serp.util.Strings.toClass(Strings.java:164)
at serp.util.Strings.toClass(Strings.java:108)
at serp.bytecode.BCClass.getType(BCClass.java:566)
at org.apache.openjpa.enhance.PCEnhancer.<init>(PCEnhancer.java:283)
at org.apache.openjpa.enhance.PCEnhancer.<init>(PCEnhancer.java:254)
at org.apache.openjpa.enhance.PCClassFileTransformer.transform0(PCClassFileTransformer.java:144)
at org.apache.openjpa.enhance.PCClassFileTransformer.transform(PCClassFileTransformer.java:124)
at org.apache.openjpa.persistence.PersistenceProviderImpl$ClassTransformerImpl.transform(PersistenceProviderImpl.java:294)
at org.glassfish.persistence.jpa.ServerProviderContainerContractInfo$1.transform(ServerProviderContainerContractInfo.java:98)
at com.sun.enterprise.loader.ASURLClassLoader.findClass(ASURLClassLoader.java:742)
at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
at java.lang.ClassLoader.loadClass(ClassLoader.java:247)
at java.lang.Class.getDeclaredMethods0(Native Method)
at java.lang.Class.privateGetDeclaredMethods(Class.java:2427)
at java.lang.Class.privateGetPublicMethods(Class.java:2547)
at java.lang.Class.getMethods(Class.java:1410)
at com.sun.enterprise.deployment.EjbDescriptor.addAllInterfaceMethodsIn(EjbDescriptor.java:2327)
at com.sun.enterprise.deployment.EjbDescriptor.getLocalRemoteBusinessMethodDescriptors(EjbDescriptor.java:2290)
... 40 more
com.rares.test.Person
@Entity
@Table (name="PERSON")
public class Person implements Serializable {
private static final long serialVersionUID = 3707476467775531463L;
@Id
@GeneratedValue (strategy=GenerationType.IDENTITY)
@Column private Long id;
@Column private String name;
com.rares.test.PersonManager
public interface PersonManager {
void create (com.rares.test.Person p);
}
com.rares.test.PersonDao
@Stateless
public class PersonDao implements PersonManager {
@PersistenceContext (unitName="RarePersistUnit")
protected EntityManager mgr;
@Override
public void create(com.rares.test.Person p) {
mgr.persist(p);
}
}
persistence.xml
<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="RarePersistUnit">
<provider>org.apache.openjpa.persistence.PersistenceProviderImpl</provider>
<jta-data-source>jdbc/RaresMySql</jta-data-source>
<class>com.rares.test.Person</class>
<properties>
</properties>
</persistence-unit>
</persistence>
【问题讨论】: