[
Date Prev][
Date Next][
Thread Prev][
Thread Next][
Date Index][
Thread Index]
[
List Home]
Re: [eclipselink-users] Spring: Attempting to execute an operation on a closed EntityManager.
|
Mohsen,
I didn't actually call isOpen, I instead inspected it with the
debugger, and noticed the isOpen boolean was true. I'll try your
obvious suggestion when I get in to the office this morning.
My hunch is something odd is going on with weaving, so I'm going to
put some weaving logging in as well.
I guess this is just growing pains and it doesn't always help when I
choose bleeding edge -- pure annotations & eclipselink for my first
foray into Spring -- but I just can't stand XML, so I've made my bed
:)
Thanks
./tch
On Fri, Sep 26, 2008 at 6:54 AM, Mohsen Saboorian <mohsens@xxxxxxxxx> wrote:
> I didn't test it with EclipseLink, but with Hibernate session is
> closed after transaction is committed, and it produces a lot of
> frustrations with lazy loading, since you usually need to fetch a list
> after a transaction is committed.
>
> Spring provides a OpenSessionInViewFilter to work around this. It
> keeps session open durig a request life-cycle.
>
> How did you verified that EM is open? EM.isOpen()?
>
> Mohsen.
>
> On Thu, Sep 25, 2008 at 9:58 PM, Tim Hollosy <hollosyt@xxxxxxxxx> wrote:
>> I'm hoping some Spring gurus can help me out, whenever I try to
>> execute a query I get the error: Attempting to execute an operation on
>> a closed EntityManager.
>>
>> I'm using Spring 2.5 + Tomcat6.
>>
>> The weird thing is find's work fine. I'm launching tomcat with the
>> spring-aspects.jar for weaving. I'm new to this whole spring web stuff
>> so I am probably missing something, but the only thing I could find
>> online was to make sure I have the @Transactional annotations used
>> everywhere in my DAO class, which I do.
>>
>> If I run in the debugger it looks like the EM is open as well, so I'm
>> kind of stumped. I suspect some weaving shenanigans, but I'm too much
>> of a neophyte at this right now to debug much more.
>>
>> Many thanks :)
>>
>> Here's my config:
>>
>> applicationcontext.xml;
>> <context:component-scan base-package="com.redacted" />
>>
>> <tx:annotation-driven mode="aspectj"/>
>>
>> <bean id="transactionManager"
>> class="org.springframework.orm.jpa.JpaTransactionManager"
>> p:entityManagerFactory-ref="entityManagerFactory"/>
>>
>> <bean id="dataSource"
>> class="org.apache.commons.dbcp.BasicDataSource">
>> <property name="driverClassName" value="oracle.jdbc.OracleDriver" />
>> <property name="url"
>> value="jdbc:oracle:thin:@redacted:1521:redacted" />
>> <property name="username" value="redacted" />
>> <property name="password" value="redacted" />
>> </bean>
>>
>> <bean id="jpaAdapter"
>> class="org.springframework.orm.jpa.vendor.EclipseLinkJpaVendorAdapter">
>> <property name="databasePlatform"
>> value="org.eclipse.persistence.platform.database.oracle.OraclePlatform"
>> />
>> <property name="showSql" value="true" />
>> </bean>
>>
>>
>> <bean id="loadTimeWeaver"
>> class="org.springframework.instrument.classloading.InstrumentationLoadTimeWeaver"/>
>>
>> <bean id="entityManagerFactory"
>> class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
>> <property name="persistenceUnitName" value="ProofOConcept"/>
>> <property name="dataSource" ref="dataSource"/>
>> <property name="jpaVendorAdapter" ref="jpaAdapter"/>
>> <property name="loadTimeWeaver" ref="loadTimeWeaver"/>
>>
>> </bean>
>>
>> <util:list id="annotatedClasses">
>> <value>com.redacted.*</value>
>> </util:list>
>>
>>
>> Here's my DAO class:
>>
>> import java.util.List;
>>
>> import javax.persistence.EntityManager;
>> import javax.persistence.PersistenceContext;
>> import javax.persistence.Query;
>>
>> import org.eclipse.persistence.jpa.JpaEntityManager;
>> import org.eclipse.persistence.jpa.JpaHelper;
>> import org.springframework.stereotype.Repository;
>> import org.springframework.transaction.annotation.Transactional;
>>
>> @Transactional
>> @Repository
>> public class BasicDao {
>>
>> @PersistenceContext(unitName = "ProofOConcept")
>> private EntityManager em;
>>
>> @Transactional(readOnly = true)
>> public <T> T find(Class<T> entityClass, Object primaryKey) {
>> T result = em.find(entityClass, primaryKey);
>>
>> return result;
>> }
>>
>>
>>
>> @Transactional(readOnly = true)
>> public <T> List<T> selectAll(Class<T> clazz) {
>> JpaEntityManager jpaEm = JpaHelper.getEntityManager(em);
>> Query query = jpaEm.createQuery(null, clazz);
>> return (List<T>) query.getResultList();
>> }
>>
>> }
>>
>>
>>
>>
>>
>>
>> ./tch
>> _______________________________________________
>> eclipselink-users mailing list
>> eclipselink-users@xxxxxxxxxxx
>> https://dev.eclipse.org/mailman/listinfo/eclipselink-users
>>
> _______________________________________________
> eclipselink-users mailing list
> eclipselink-users@xxxxxxxxxxx
> https://dev.eclipse.org/mailman/listinfo/eclipselink-users
>