Save This Page
Home » jboss-5.0.0.CR1-src » org » jboss » ejb » plugins » [javadoc | source]
    1   /*
    2   * JBoss, Home of Professional Open Source
    3   * Copyright 2005, JBoss Inc., and individual contributors as indicated
    4   * by the @authors tag. See the copyright.txt in the distribution for a
    5   * full listing of individual contributors.
    6   *
    7   * This is free software; you can redistribute it and/or modify it
    8   * under the terms of the GNU Lesser General Public License as
    9   * published by the Free Software Foundation; either version 2.1 of
   10   * the License, or (at your option) any later version.
   11   *
   12   * This software is distributed in the hope that it will be useful,
   13   * but WITHOUT ANY WARRANTY; without even the implied warranty of
   14   * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
   15   * Lesser General Public License for more details.
   16   *
   17   * You should have received a copy of the GNU Lesser General Public
   18   * License along with this software; if not, write to the Free
   19   * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
   20   * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
   21   */
   22   package org.jboss.ejb.plugins;
   23   
   24   import org.jboss.ejb.EntityEnterpriseContext;
   25   import org.jboss.ejb.GlobalTxEntityMap;
   26   import org.jboss.invocation.Invocation;
   27   import org.jboss.tm.TxUtils;
   28   
   29   
   30   /**
   31   * The instance interceptors role is to break entity creation into two 
   32   * calls, one for ejbCreate and one for ejbPostCreate. The ejbCreate
   33   * method is passed over the invokeHome chain, and ejbPostCreate is 
   34   * passed over the invoke chain.
   35   *    
   36   * @author <a href="mailto:dain@daingroup.com">Dain Sundstrom</a>
   37   * @version $Revision: 62314 $
   38   */
   39   public class EntityCreationInterceptor extends AbstractInterceptor
   40   {
   41      public Object invokeHome(Invocation mi)
   42         throws Exception
   43      {
   44         // Invoke through interceptors
   45         Object retVal = getNext().invokeHome(mi);
   46   
   47         // Is the context now with an identity? 
   48         // This means that a create method was called, so invoke ejbPostCreate.
   49         EntityEnterpriseContext ctx = 
   50               (EntityEnterpriseContext) mi.getEnterpriseContext();
   51         if(ctx != null && ctx.getId() != null)
   52         {
   53            // copy from the context into the mi
   54            // interceptors down the chain look in the mi for the id not the ctx.
   55            mi.setId(ctx.getId());
   56            
   57            // invoke down the invoke chain
   58            // the final interceptor in EntityContainer will redirect this
   59            // call to postCreateEntity, which calls ejbPostCreate
   60            getNext().invoke(mi);
   61   
   62            // now it's ready and can be scheduled for the synchronization
   63            if(TxUtils.isActive(mi.getTransaction()))
   64            {
   65               GlobalTxEntityMap.NONE.scheduleSync(mi.getTransaction(), ctx);
   66            }
   67         }
   68   
   69         return retVal;
   70      }
   71   
   72      public Object invoke(Invocation mi)
   73         throws Exception
   74      {
   75         // nothing to see here... move along
   76         return getNext().invoke(mi);
   77      }
   78   }
   79   

Save This Page
Home » jboss-5.0.0.CR1-src » org » jboss » ejb » plugins » [javadoc | source]