Home » apache-openwebbeans-1.0.0-incubating-M3-binary » org.apache.webbeans.reservation » intercept » [javadoc | source]

    1   /*
    2    *  Licensed to the Apache Software Foundation (ASF) under one or more
    3    *  contributor license agreements.  See the NOTICE file distributed with
    4    *  this work for additional information regarding copyright ownership.
    5    *  The ASF licenses this file to You under the Apache License, Version 2.0
    6    *  (the "License"); you may not use this file except in compliance with
    7    *  the License.  You may obtain a copy of the License at
    8    * 
    9    *       http://www.apache.org/licenses/LICENSE-2.0
   10    * 
   11    *  Unless required by applicable law or agreed to in writing, software
   12    *  distributed under the License is distributed on an "AS IS" BASIS,
   13    *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   14    *  See the License for the specific language governing permissions and
   15    *  limitations under the License.
   16    */
   17   package org.apache.webbeans.reservation.intercept;
   18   
   19   import javax.enterprise.inject.Default;
   20   import javax.inject.Inject;
   21   import javax.interceptor.AroundInvoke;
   22   import javax.interceptor.Interceptor;
   23   import javax.interceptor.InvocationContext;
   24   import javax.persistence.EntityManager;
   25   import javax.persistence.EntityTransaction;
   26   
   27   import org.apache.commons.logging.Log;
   28   import org.apache.webbeans.reservation.bindings.ApplicationLog;
   29   import org.apache.webbeans.reservation.bindings.intercep.Transactional;
   30   
   31   @Interceptor
   32   @Transactional
   33   public class TransactionalInterceptor
   34   {
   35       private @Inject @Default EntityManager entityManager;
   36       
   37       private @Inject @ApplicationLog Log logger; 
   38       
   39       @AroundInvoke
   40       public Object invoke(InvocationContext context) throws Exception
   41       {
   42           EntityTransaction transaction = entityManager.getTransaction();
   43           
   44           try
   45           {
   46               if(!transaction.isActive())
   47               {
   48                   transaction.begin();    
   49               }
   50                           
   51               return context.proceed();
   52               
   53           }catch(Exception e)
   54           {
   55               logger.error("Exception in transactional method call", e);
   56               
   57               if(transaction != null)
   58               {
   59                   transaction.rollback();
   60               }
   61               
   62               throw e;
   63               
   64           }finally
   65           {
   66               if(transaction != null && transaction.isActive())
   67               {
   68                   transaction.commit();
   69               }
   70           }        
   71           
   72       }
   73   
   74   }

Home » apache-openwebbeans-1.0.0-incubating-M3-binary » org.apache.webbeans.reservation » intercept » [javadoc | source]