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()")
// }
// 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;
+ }
}