X-Git-Url: http://git.argeo.org/?a=blobdiff_plain;f=eclipse%2Fplugins%2Forg.argeo.slc.client.core%2Fsrc%2Fmain%2Fjava%2Forg%2Fargeo%2Fslc%2Fclient%2Faspects%2FContentProviderAspect.java;h=1651efaeb579f22062594c240eb749c72d35f93b;hb=ad49703afe4c12e77e80e65611d05f8e5786623b;hp=82290aff65a3cf8a11addd1de1a1525d7ebda004;hpb=d9c15eaa71f215d8193bbebb7c94b2e0aa952dc4;p=gpl%2Fargeo-slc.git diff --git a/eclipse/plugins/org.argeo.slc.client.core/src/main/java/org/argeo/slc/client/aspects/ContentProviderAspect.java b/eclipse/plugins/org.argeo.slc.client.core/src/main/java/org/argeo/slc/client/aspects/ContentProviderAspect.java index 82290aff6..1651efaeb 100644 --- a/eclipse/plugins/org.argeo.slc.client.core/src/main/java/org/argeo/slc/client/aspects/ContentProviderAspect.java +++ b/eclipse/plugins/org.argeo.slc.client.core/src/main/java/org/argeo/slc/client/aspects/ContentProviderAspect.java @@ -1,29 +1,45 @@ package org.argeo.slc.client.aspects; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; import org.aspectj.lang.ProceedingJoinPoint; import org.aspectj.lang.annotation.Around; import org.aspectj.lang.annotation.Aspect; +import org.hibernate.LockMode; +import org.hibernate.SessionFactory; +import org.springframework.orm.hibernate3.HibernateTransactionManager; +import org.springframework.transaction.PlatformTransactionManager; @Aspect public class ContentProviderAspect { - // private final static Log log = LogFactory - // .getLog(ContentProviderAspect.class); + private final static Log log = LogFactory + .getLog(ContentProviderAspect.class); + + private SessionFactory sessionFactory; + private HibernateTransactionManager transactionManager; // Advices - @Around("execution (* getLabel(..))") + @Around("execution (* org.argeo.slc.client.core.*.get*(Object, int))") public Object aroundGetVariable(ProceedingJoinPoint thisJoinPoint) throws Throwable { - //log.debug("***************** IN THE ASPECT. Before proceed"); + + // log.debug("***************** IN THE ASPECT. Before proceed"); // log.debug("We have an open session : " // + sessionFactory.getCurrentSession().isOpen()); // log.debug("Current transaction is active : " // + sessionFactory.getCurrentSession().getTransaction() // .isActive()); - Object o = thisJoinPoint.proceed(); - //log.debug("**************** IN THE ASPECT. After proceed"); - return o; + Object o = thisJoinPoint.getArgs()[0]; + sessionFactory.getCurrentSession().beginTransaction(); + // reassociate a transient instance with a session (LockMode.NONE). + sessionFactory.getCurrentSession().lock(o, LockMode.NONE); + Object result = thisJoinPoint.proceed(); + sessionFactory.getCurrentSession().getTransaction().commit(); + + // log.debug("**************** IN THE ASPECT. After proceed"); + return result; } // @Before("methodeTrace()") @@ -44,14 +60,13 @@ public class ContentProviderAspect { // } // IoC - // public void setSessionFactory(SessionFactory sessionFactory) { - // this.sessionFactory = sessionFactory; - // } - // - // public void setTransactionManager( - // PlatformTransactionManager transactionManager) { - // if (transactionManager instanceof HibernateTransactionManager) - // this.transactionManager = (HibernateTransactionManager) - // transactionManager; - // } + public void setSessionFactory(SessionFactory sessionFactory) { + this.sessionFactory = sessionFactory; + } + + public void setTransactionManager( + PlatformTransactionManager transactionManager) { + if (transactionManager instanceof HibernateTransactionManager) + this.transactionManager = (HibernateTransactionManager) transactionManager; + } }