-
Jul 20th, 2012, 10:20 AM
#1
Issues in using LocalContainerEntityManagerFactoryBean
I am having a strange problem deleting entities and I am thinking that this is because of wrong spring configuration / bug and i am not able to exactly point what it is . I am able to do reads , but whenever i try remove i get an error..
Following is my set up.. I have a spring based transaction management delegating to jboss's jta. Following is my spring configuration
<context:annotation-config />
<context:component-scan base-package="com.blah.blah">
<context:exclude-filter type="regex"
expression="com.blah.blah.batch.*" />
</context:component-scan>
<bean id="entityManagerFactory"
class="org.springframework.orm.jpa.LocalContainerE ntityManagerFactoryBean">
<property name="dataSource" ref="pmabDataSource" />
<property name="persistenceUnitName" value="MABPersistenceEl" />
<property name="jpaDialect" ref="eclipseLinkDialect" />
<property name="persistenceXmlLocation" value="classpath:META-INF/persistence-eclipse.xml" />
<property name="jpaVendorAdapter">
<bean class="org.springframework.orm.jpa.vendor.EclipseL inkJpaVendorAdapter">
<property name="showSql" value="true" />
<property name="generateDdl" value="false" />
</bean>
</property>
<property name="jpaPropertyMap">
<map>
<entry key="eclipselink.target-server" value="JBOSS" />
<entry key="eclipselink.target-database" value="Oracle" />
<entry key="eclipselink.persistence-context.flush-mode" value="AUTO" />
<entry key="eclipselink.jdbc.native-sql" value="false" />
<entry key="eclipselink.weaving" value="false" />
<entry key="eclipselink.logging.level" value="FINEST" />
<entry key="eclipselink.logging.parameters" value="true" />
<entry key="eclipselink.logging.exceptions" value="true" />
<entry key="eclipselink.orm.throw.exceptions" value="true" />
</map>
</property>
</bean>
<bean id="eclipseLinkDialect" class="org.springframework.orm.jpa.vendor.EclipseL inkJpaDialect" />
<tx:jta-transaction-manager />
persistence file is as follows
<persistence version="1.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_1_0.xsd">
<persistence-unit name="MABPersistenceEl"
transaction-type="JTA">
<provider>org.eclipse.persistence.jpa.PersistenceP rovider</provider>
<jta-data-source>pmabDataSource</jta-data-source>
<!-- ,,,, other things ommited for brevity/> -->
</persistence-unit>
</persistence>
My basedao gets injected with the EntityManager like this
@PersistenceContext(unitName = "MABPersistenceEl")
protected EntityManager entityManager ;
somewhere down in my derived dao i have the following
UserRole newRole=entityManager.find(UserRole.class,urole.ge tId()) ;
entityManager.remove(newRole);
I get the following
09:53:00,386 DEBUG[SharedEntityManagerCreator$SharedEntityManagerInvo cationHandler]:231
Creating new EntityManager for shared EntityManager invocation
09:53:00,413 DEBUG [EntityManagerFactoryUtils]:328 Closing JPAEntityManager
09:53:04,119 DEBUG[SharedEntityManagerCreator$SharedEntityManagerInvo cationHandler]:231
Creating new EntityManager for shared EntityManager invocation
09:53:04,146 DEBUG [EntityManagerFactoryUtils]:328 Closing JPA
EntityManager
09:53:05,760 DEBUG
[SharedEntityManagerCreator$SharedEntityManagerInvo cationHandler]:231
Creating new EntityManager for shared EntityManager invocation
09:53:05,781 DEBUG [EntityManagerFactoryUtils]:328 Closing JPA
EntityManager
That is springs EntityManager creator is creating an entityManager each time it is accessed, instead of returning the one for the transaction. This is causing EL libraries to go berserk.
java.lang.IllegalArgumentException: Entity must be managed to call
remove: UserRole@419d, try merging the detached and try the remove
again.
at
org.eclipse.persistence.internal.sessions.UnitOfWo rkImpl.performRemove(UnitOfWorkImpl.java:3559)
at
org.eclipse.persistence.internal.jpa.EntityManager Impl.remove(EntityManagerImpl.java:518)
How do i configure the springs entity manager creator to give me back the entity manager for the transaction instead of creating one each time ?
Cheers
Vaidya
Posting Permissions
- You may not post new threads
- You may not post replies
- You may not post attachments
- You may not edit your posts
-
Forum Rules