Websphere: JPA: java.lang.IllegalArgumentException: Object: Entity не является известным типом объекта - PullRequest
0 голосов
/ 07 июля 2010

Я пытаюсь развернуть приложение, используя Eclipselink в качестве своего уровня JPA на IBM Websphere 7.0.0.9. При попытке сделать какие-либо операции CRUD, я получаю следующее исключение:

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>

Наша виртуальная машина запускается с указанным параметром -javaagent и указывающим на spring-agent.jar. В чем может быть причина этих исключений?

1 Ответ

1 голос
/ 07 июля 2010

Проблема здесь заключается в том, что Spring LoadTimeWeaver для Websphere отсутствует. Когда ваше приложение пытается объединить приложение веб-уровня с EM, управляемым Spring, при использовании исключения приведений класса InstrumentationLoadTimeWeaver. EclipseLink поддерживает плетение во всех контейнерах, совместимых с JPA 2, но в этом случае Spring выступает в качестве посредника и мешает плетению.

Пока у Spring нет LoadTimeWeaver для Websphere Вам нужно будет удалить InstrumentationLoadTimeWeaver и установить для свойства EclipseLink persistence.xml "eclipselink.weaving" значение false или использовать статический ткач

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...