1 package org
.argeo
.slc
.client
.aspects
;
3 import org
.aspectj
.lang
.ProceedingJoinPoint
;
4 import org
.aspectj
.lang
.annotation
.Around
;
5 import org
.aspectj
.lang
.annotation
.Aspect
;
6 import org
.aspectj
.lang
.annotation
.Pointcut
;
7 import org
.hibernate
.LockMode
;
8 import org
.hibernate
.SessionFactory
;
11 * Intercepts all calls to get methods of the
12 * org.argeo.slc.client.contentprovider package to insure that objects that are
13 * to be rendered in views are correctly linked to the hibernate session.
20 public class ContentProviderAspect
{
22 // private final static Log log = LogFactory
23 // .getLog(ContentProviderAspect.class);
25 private SessionFactory sessionFactory
;
27 // We select here only getters from classes of the contentprovider package
28 // that need to get data from hibernate
31 @Pointcut("(execution (* org.argeo.slc.client.contentprovider.ProcessListTableLabelProvider.get*(..)) && args(o,..))"
32 + " || (execution (* org.argeo.slc.client.contentprovider.ProcessDetailContentProvider.get*(..)) && args(o,..))"
33 + " || (execution (* org.argeo.slc.client.contentprovider.ResultDetailContentProvider.get*(..)) && args(o,..))")
34 void contentProviderGetterWrapper(Object o
) {
38 @Around("contentProviderGetterWrapper(o)")
39 public Object
aroundGetWrapper(ProceedingJoinPoint thisJoinPoint
, Object o
)
42 // TODO : find a mean to handle session & manager with txManager
43 // in order to not have to re-begin a transaction here.
44 sessionFactory
.getCurrentSession().beginTransaction();
46 // reassociate a transient instance with a session (LockMode.NONE).
47 sessionFactory
.getCurrentSession().lock(o
, LockMode
.NONE
);
49 Object result
= thisJoinPoint
.proceed();
50 sessionFactory
.getCurrentSession().getTransaction().commit();
55 public void setSessionFactory(SessionFactory sessionFactory
) {
56 this.sessionFactory
= sessionFactory
;