Skip to main content

[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.

Thanks Shaun,

I'll take a look a the pet clinic example.

Since lunch I've gotten a very crappy CRUD just about working with
OC4J and any issues I'm having aren't with JPA but just having
de-program my brain from thinking in osgi/j2se mode to thinking in the
web tier again.

./tch



On Fri, Sep 26, 2008 at 12:52 PM, Shaun Smith <shaun.smith@xxxxxxxxxx> wrote:
> Hi Tim,
>
>    Like I said, take a look at the Pet Clinic example. By default the Tomcat
> deployment uses JDBC but you can switch it to JPA.  First get the tests
> running and then move on to deploying to Tomcat.  The JPAClinic class looks
> very much like a Session Bean (below).  A recent Spring team blog discussed
> the use of Templates vs. Injection and sided with Injection.  Templates are
> "old school" now. :)
>
>     Shaun
>
> @Repository
> @Transactional
> public class EntityManagerClinic implements Clinic {
>
>     @PersistenceContext
>     private EntityManager em;
>
>
> Tim Hollosy wrote:
>
> Thanks Shaun,
> I've completely given up on tomcat at this point, I'll be in an OC4J
> environment in production anyway.
>
> The problem I'm running into now  is there are about 4,000 ways to use
> JPA in Spring:
>
> I can get things to work if I use their JpaDaoSupport class, however I
> would prefer a more "pure" method....which just happened to FINALLY
> work as I typed this, that method was using the @PersistenceContext
> annotation to inject an EntityManager.
>
> Unfortunately, now that it works I have no idea why :) I do see now
> that AspectJ is reporting it's doing stuff, so I think my problems
> before might have been with weaving on some level.
>
> I think part of the problems I was dealing with was two-fold: My Lack
> of any real understanding on the Spring Framework and lack of any real
> examples.
>
> Once I take the time now to analyze what's going on I'll try to remedy
> the latter.
>
> If anyone can impart some best practices for using Eclipselink with
> Spring 2.5 I'd be all ears in the mean time.
>
> ./tch
>
>
>
> On Fri, Sep 26, 2008 at 11:24 AM, Shaun Smith <shaun.smith@xxxxxxxxxx>
> wrote:
>
>
> Hi Tim,
>
>    If you're using Spring with EclipseLink you must copy
> spring-tomcat-weaver.jar into $CATALINA_HOME/server/lib see the Spring
> Manual for details.  Tomcat absolutely will not support dynamic weaving in
> Spring (or anything else for that matter) unless you use a technique like
> this.  You didn't mention you did this so don't think you did.  Once you
> have this in place and you've setup your Spring config properly, Spring will
> do @PersistenceContext injection.  Take a look at the TopLink Essentials JPA
> version of the Spring PetClinic for an example.
>
>     Shaun
>
> Tim Hollosy wrote:
>
> So no luck em.isOpen returns true.
>
> I can't get my friggin AspectJ Weaver to output anything even though I
> have an aop.xml like this:
>
> <!DOCTYPE aspectj PUBLIC
> "-//AspectJ//DTD//EN" "http://www.eclipse.org/aspectj/dtd/aspectj.dtd";>
> <aspectj>
>     <weaver options="-debug -verbose -showWeaveInfo
> -XmessageHandlerClass:org.springframework.aop.aspectj.AspectJWeaverMessageHandler">
>         <include within="com.redacted.*"/>
>     </weaver>
>      <aspects>
>         <aspect
> name="org.springframework.transaction.aspectj.AnnotationTransactionAspect"/>
>     </aspects>
> </aspectj>
>
>
> BUT, doing some more reading about weaving I see: at
> http://wiki.eclipse.org/EclipseLink/Examples/JPA/Tomcat_Web_Tutorial#Limitations_to_JPA
>
> As Tomcat is not a JEE5 compatible server, there are some limitiations to
> JPA.
>
>     * No dynamic weaving (instrumentation) - static weaving of
> entities is still available via EclipseLink
>     * No @EJB injection of a session bean (containing the
> EntityManager) is available - use the persistence factory and manager
> directly
>     * No @PersistenceContext injection of a container managed
> persistence unit is available - use
> Persistence.createEntityManagerFactory(JTA_PU_NAME)
>
>
> Does that mean i can't use the @PersistenceContext annotation with
> EclipseLink in Tomcat 6???
>
> I'm confused as to weather Tomcat 6 supports LTW or not, since there
> are instructions all over for getting it to weave with Spring...
>
> I may set up an OC4J Instance and see if I have better luck, but right
> now I'm confused as all get out.
>
> ./tch
>
>
>
> On Fri, Sep 26, 2008 at 6:58 AM, Tim Hollosy <hollosyt@xxxxxxxxx> wrote:
>
>
> 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
>
>
>
> _______________________________________________
> eclipselink-users mailing list
> eclipselink-users@xxxxxxxxxxx
> https://dev.eclipse.org/mailman/listinfo/eclipselink-users
>
>
> --
>
>
>
> Shaun Smith | Principal Product Manager, TopLink | +1.905.502.3094
> Oracle Fusion Middleware
> 110 Matheson Boulevard West, Suite 100
> Mississauga, Ontario, Canada L5R 3P4
>
> _______________________________________________
> 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
>
>
> --
>
>
>
> Shaun Smith | Principal Product Manager, TopLink | +1.905.502.3094
> Oracle Fusion Middleware
> 110 Matheson Boulevard West, Suite 100
> Mississauga, Ontario, Canada L5R 3P4
>
> _______________________________________________
> eclipselink-users mailing list
> eclipselink-users@xxxxxxxxxxx
> https://dev.eclipse.org/mailman/listinfo/eclipselink-users
>
>


Back to the top