]> git.argeo.org Git - gpl/argeo-slc.git/blob - eclipse/plugins/org.argeo.slc.client.core/src/main/java/org/argeo/slc/client/aspects/ContentProviderAspect.java
f92d9d57174222b0114a491f5f6662ec82b5ec16
[gpl/argeo-slc.git] / eclipse / plugins / org.argeo.slc.client.core / src / main / java / org / argeo / slc / client / aspects / ContentProviderAspect.java
1 package org.argeo.slc.client.aspects;
2
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;
9
10 /**
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.
14 *
15 * @author bsinou
16 *
17 */
18
19 @Aspect
20 public class ContentProviderAspect {
21
22 // private final static Log log = LogFactory
23 // .getLog(ContentProviderAspect.class);
24
25 private SessionFactory sessionFactory;
26
27 // We select here only getters from classes of the contentprovider package
28 // that need to get data from hibernate
29
30 // PointCuts
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) {
34 }
35
36 // Advices
37 @Around("contentProviderGetterWrapper(o)")
38 public Object aroundGetWrapper(ProceedingJoinPoint thisJoinPoint, Object o)
39 throws Throwable {
40
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();
44
45 // reassociate a transient instance with a session (LockMode.NONE).
46 sessionFactory.getCurrentSession().lock(o, LockMode.NONE);
47
48 Object result = thisJoinPoint.proceed();
49 sessionFactory.getCurrentSession().getTransaction().commit();
50 return result;
51 }
52
53 // IoC
54 public void setSessionFactory(SessionFactory sessionFactory) {
55 this.sessionFactory = sessionFactory;
56 }
57 }