Package org.jrest4guice.plugin.struts2.interceptor

Source Code of org.jrest4guice.plugin.struts2.interceptor.JRest4GuiceLifecycleInterceptor

package org.jrest4guice.plugin.struts2.interceptor;

import javax.persistence.EntityTransaction;

import org.hibernate.Transaction;
import org.jrest4guice.guice.GuiceContext;
import org.jrest4guice.guice.PersistenceGuiceContext;
import org.jrest4guice.persistence.hibernate.SessionFactoryHolder;
import org.jrest4guice.persistence.hibernate.SessionInfo;
import org.jrest4guice.persistence.jpa.EntityManagerFactoryHolder;
import org.jrest4guice.persistence.jpa.EntityManagerInfo;

import com.opensymphony.xwork2.ActionInvocation;
import com.opensymphony.xwork2.interceptor.AbstractInterceptor;

/**
*
* @author <a href="mailto:zhangyouqun@gmail.com">cnoss (QQ:86895156)</a>
*
*/
public class JRest4GuiceLifecycleInterceptor extends AbstractInterceptor {

  /**
   *
   */
  private static final long serialVersionUID = -8495328369653597266L;


  @Override
  public String intercept(ActionInvocation invocation) throws Exception {
    boolean need2ProcessTransaction = false;
   
    String result = null;
    Transaction hbTS = null;
    EntityTransaction jpaTS = null;
   
    try {
      result = invocation.invoke();

      if(PersistenceGuiceContext.getInstance().isUseJPA()){
        EntityManagerFactoryHolder emfH = GuiceContext.getInstance().getBean(EntityManagerFactoryHolder.class);
        EntityManagerInfo entityManager = emfH.getEntityManagerInfo();
        jpaTS = entityManager.getEntityManager().getTransaction();
        need2ProcessTransaction = entityManager.isNeed2ProcessTransaction();
      }else if(PersistenceGuiceContext.getInstance().isUseHibernate()){
        SessionFactoryHolder sessionFH = GuiceContext.getInstance().getBean(SessionFactoryHolder.class);
        SessionInfo session = sessionFH.getSessionInfo();
        hbTS = session.getSession().getTransaction();
        need2ProcessTransaction = session.isNeed2ProcessTransaction() && !hbTS.wasCommitted();
      }

      if(need2ProcessTransaction){
        if(hbTS != null)
          hbTS.commit();
        if(jpaTS != null)
          jpaTS.commit();
      }
    } catch (Exception e) {
      if(hbTS != null)
        hbTS.rollback();
      if(jpaTS != null)
        jpaTS.rollback();
      throw e;
    }
    return result;
  }
}
TOP

Related Classes of org.jrest4guice.plugin.struts2.interceptor.JRest4GuiceLifecycleInterceptor

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.