2010-07-07 46 views
0

我想部署一个应用程序使用Eclipselink作为我的JPA层在IBM Websphere 7.0.0.9。虽然试图做任何CRUD操作,我得到以下异常:Websphere:JPA:java.lang.IllegalArgumentException:对象:实体不是已知的实体类型

 
Caused by: java.lang.IllegalArgumentException: Object: Entity is not a known entity type. 
at org.eclipse.persistence.internal.sessions.UnitOfWorkImpl.registerNewObjectForPersist(UnitOfWorkImpl.java:4199) 
at org.eclipse.persistence.internal.jpa.EntityManagerImpl.persist(EntityManagerImpl.java:380) 
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:48) 
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:37) 
at java.lang.reflect.Method.invoke(Method.java:600) 
at org.springframework.orm.jpa.ExtendedEntityManagerCreator$ExtendedEntityManagerInvocationHandler.invoke(ExtendedEntityManagerCreator.java:358) 
at $Proxy93.persist(Unknown Source) 
... 89 more 

另一个堆栈跟踪我看到的是:

 
Caused by: java.lang.ClassCastException: Entity incompatible with Entity 
    at o.u.d.dao.jpa.converter.impl.EntityBeanConvertorImpl.convertToModel(EntityBeanConvertorImpl.java:143) 
    ... 223 more 

我的persistence.xml样子:

 <persistence-unit name="ds" transaction-type="JTA"> <provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>  <jta-data-source>dsjta</jta-data-source> <class>Entity</class>  <exclude-unlisted-classes>true</exclude-unlisted-classes>  <properties> <property name="eclipselink.target-server" value="WebSphere_7" /> <property name="eclipselink.logging.level" value="OFF" /> <property name="eclipselink.ddl-generation" value="none" /> <property name="eclipselink.ddl-generation.output-mode" value="database" /> </properties> </persistence-unit> 

我应用程序上下文文件看起来像:

<bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean"> <property name="persistenceUnitName" value="ds"/> <property name="dataSource" ref="dataSource"/> <property name="jpaVendorAdapter"> <bean class="org.springframework.orm.jpa.vendor.EclipseLinkJpaVendorAdapter"> <property name="showSql" value="false"/> <property name="generateDdl" value="false"/> </bean> </property> <property name="loadTimeWeaver"> <bean class="org.springframework.instrument.classloading.InstrumentationLoadTimeWeaver"/> </property> </bean> 

我们的VM启动时指定了-javaagent参数并指向spring-agent.jar这些异常的原因是什么?

回答

1

这里的问题是没有Spring LoadTimeWeaver for Websphere。当您的应用程序尝试使用InstrumentationLoadTimeWeaver类强制转换异常结果时,将Web层应用程序与Spring管理的EM结合使用。 EclipseLink支持在所有JPA 2兼容容器中进行编织,但在这种情况下,Spring将充当中介并干扰织造。

直到Spring有一个Websphere的LoadTimeWeaver您将需要删除InstrumentationLoadTimeWeaver并将EclipseLink persistence.xml属性“eclipselink.weaving”设置为false或使用静态编织器。

相关问题