]> git.argeo.org Git - gpl/argeo-slc.git/commitdiff
solving the hibernate transaction problem. New solution with aspects.
authorBruno Sinou <bsinou@argeo.org>
Tue, 28 Sep 2010 07:29:14 +0000 (07:29 +0000)
committerBruno Sinou <bsinou@argeo.org>
Tue, 28 Sep 2010 07:29:14 +0000 (07:29 +0000)
git-svn-id: https://svn.argeo.org/slc/trunk@3806 4cfe0d0a-d680-48aa-b62c-e0a02a3f76cc

eclipse/plugins/org.argeo.slc.client.core/META-INF/MANIFEST.MF
eclipse/plugins/org.argeo.slc.client.core/src/main/java/org/argeo/slc/client/aspects/ContentProviderAspect.java
eclipse/plugins/org.argeo.slc.client.core/src/main/java/org/argeo/slc/client/core/ProcessListTableContent.java
eclipse/plugins/org.argeo.slc.client.hibernate/META-INF/MANIFEST.MF
eclipse/plugins/org.argeo.slc.client.hibernate/META-INF/spring/core.xml
eclipse/plugins/org.argeo.slc.client.hibernate/META-INF/spring/transaction-osgi.xml

index 4203255fa363c27a127f589b0d9f78cd88cb375b..3860d2ac4e6c36ac89bf7031b9602be9cb0adc4c 100644 (file)
@@ -12,6 +12,8 @@ Import-Package: org.apache.commons.io;version="1.4.0",
  org.argeo.slc.process,
  org.aspectj.lang,
  org.aspectj.lang.annotation,
+ org.hibernate,
+ org.hibernate.classic,
  org.springframework.beans.factory;version="2.5.6.SEC01",
  org.springframework.transaction;version="2.5.6.SEC01"
 Require-Bundle: org.springframework.orm;bundle-version="2.5.6"
index 82290aff65a3cf8a11addd1de1a1525d7ebda004..1651efaeb579f22062594c240eb749c72d35f93b 100644 (file)
@@ -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;
+       }
 }
index e02f1e074bb35d59b3c61450ed5ba91418b088f5..cb651e9fc32be4ca3bbad23079803619a7308835 100644 (file)
@@ -28,10 +28,11 @@ public class ProcessListTableContent implements TableContent {
                switch (i) {
 
                case 0:
-                       // return se.getStartDate().toString();
+                       return se.getStartDate().toString();
                        // Workaround to insure that we have no Lazy Init PB
-                       return slcExecutionDao.getSlcExecution(se.getUuid()).getStartDate()
-                                       .toString();
+                       // return
+                       // slcExecutionDao.getSlcExecution(se.getUuid()).getStartDate()
+                       // .toString();
                case 1:
                        return se.getHost();
                case 2:
index 4e6e168683c2f673ebbda30755f682d13949785e..84e349c3d6e3677a3c2c492e027d3ae21b507dfe 100644 (file)
@@ -7,6 +7,8 @@ Import-Package: org.aopalliance.aop;version="1.0.0",
  org.argeo.slc.client.aspects,
  org.argeo.slc.client.core,
  org.argeo.slc.dao.process;version="0.13.0.SNAPSHOT-r3777",
+ org.hibernate,
+ org.hibernate.classic,
  org.springframework.aop;version="2.5.6.SEC01",
  org.springframework.aop.aspectj.annotation;version="2.5.6.SEC01",
  org.springframework.aop.framework;version="2.5.6.SEC01",
index 7250277e08cc22bfd0acd6b755ecd99dbb251d75..292f19bec51f6dbedbf78d449cd1fbc8271477ad 100644 (file)
@@ -13,7 +13,7 @@
        <!-- Events -->
        <aop:aspectj-autoproxy />
        <bean id="contentProviderAspect" class="org.argeo.slc.client.aspects.ContentProviderAspect">
-               <!-- <property name="sessionFactory" ref="sessionFactory" /> <property 
-                       name="transactionManager" ref="transactionManager" /> -->
+               <property name="sessionFactory" ref="sessionFactory" />
+               <property name="transactionManager" ref="transactionManager" />
        </bean>
 </beans>
index dd8484c8b2ee0b2d17e2b54c889d1c473781e24f..80c6105e6437ae3cac461c85844d138c283c961a 100644 (file)
@@ -9,6 +9,5 @@
        <reference id="transactionManager"
                interface="org.springframework.transaction.PlatformTransactionManager"
                context-class-loader="service-provider" />
-       <!-- <reference id="sessionFactory" interface="org.hibernate.SessionFactory" 
-               /> -->
+       <reference id="sessionFactory" interface="org.hibernate.SessionFactory" />
 </beans:beans>
\ No newline at end of file