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 void contentProviderGetterWrapper(Object o
) {
37 @Around("contentProviderGetterWrapper(o)")
38 public Object
aroundGetWrapper(ProceedingJoinPoint thisJoinPoint
, Object o
)
41 // TODO : find a mean to handle session & manager with txManager
42 // in order to not have to re-begin a transaction here.
43 sessionFactory
.getCurrentSession().beginTransaction();
45 // reassociate a transient instance with a session (LockMode.NONE).
46 sessionFactory
.getCurrentSession().lock(o
, LockMode
.NONE
);
48 Object result
= thisJoinPoint
.proceed();
49 sessionFactory
.getCurrentSession().getTransaction().commit();
54 public void setSessionFactory(SessionFactory sessionFactory
) {
55 this.sessionFactory
= sessionFactory
;