User: d_jencks
  Date: 02/02/12 18:35:08

  Modified:    src/main/org/jboss/ejb/plugins
                        EntitySynchronizationInterceptor.java
  Log:
  Made GlobalTxEntityMap only contain read-write dirty entities, to avoid calling 
ejbStore unnecessarily. Moved beforeCompletion sync code to GlobalTxEntityMap. Fix to 
bug 512826. Involves EntityContainer, GlobalTxEntityMap, TxEntityMap, 
plugins/EntitySynchronizationInterceptor, and 
plugins/cmp/jdbc/JDBCRemoveEntityCommand.java
  
  Revision  Changes    Path
  1.61      +13 -62    
jboss/src/main/org/jboss/ejb/plugins/EntitySynchronizationInterceptor.java
  
  Index: EntitySynchronizationInterceptor.java
  ===================================================================
  RCS file: 
/cvsroot/jboss/jboss/src/main/org/jboss/ejb/plugins/EntitySynchronizationInterceptor.java,v
  retrieving revision 1.60
  retrieving revision 1.61
  diff -u -r1.60 -r1.61
  --- EntitySynchronizationInterceptor.java     9 Feb 2002 16:09:23 -0000       1.60
  +++ EntitySynchronizationInterceptor.java     13 Feb 2002 02:35:08 -0000      1.61
  @@ -43,7 +43,7 @@
    * @author <a href="mailto:[EMAIL PROTECTED]";>Marc Fleury</a>
    * @author <a href="mailto:[EMAIL PROTECTED]";>Scott Stark</a>
    * @author <a href="mailto:[EMAIL PROTECTED]";>Bill Burke</a>
  - * @version $Revision: 1.60 $
  + * @version $Revision: 1.61 $
    *
    * <p><b>Revisions:</b><br>
    * <p><b>2001/06/28: marcf</b>
  @@ -300,6 +300,13 @@
               //register the wrapper with the transaction monitor (but only register 
once).
               // The transaction demarcation will trigger the storage operations
               if (!ctx.hasTxSynchronization()) register(ctx,tx);
  +         //mark it dirty in global tx entity map if it reports it is modified
  +         EntityContainer ctxContainer = (EntityContainer) ctx.getContainer();
  +         if (!ctxContainer.isReadOnly() 
  +             && ctxContainer.getPersistenceManager().isModified(ctx))
  +         {
  +            ctxContainer.getGlobalTxEntityMap().associate(tx, ctx);
  +         }
            }
         }
         //
  @@ -314,8 +321,10 @@
               // And skip reads too ("get" methods)
               if (ctx.getId() != null)
               {
  -            EntityContainer.doStore(ctx);
  -               //container.storeEntity(ctx);
  +            if (!container.isReadOnly())
  +            {
  +               container.storeEntity(ctx);
  +            }
               }
       
               return result;
  @@ -367,65 +376,7 @@
     
         public void beforeCompletion()
         {
  -         boolean trace = log.isTraceEnabled();
  -         if( trace )
  -            log.trace("beforeCompletion called for ctx "+ctx);
  -   
  -         if (ctx.getId() != null)
  -         {
  -            // This is an independent point of entry. We need to make sure the
  -            // thread is associated with the right context class loader
  -            ClassLoader oldCl = Thread.currentThread().getContextClassLoader();
  -            
Thread.currentThread().setContextClassLoader(container.getClassLoader());
  -    
  -            try
  -            {
  -               try
  -               {
  -                  // Store instance if business method was invoked
  -                  if( trace )
  -                     log.trace("Checking ctx="+ctx+", for status of tx="+tx);
  -                  if (tx.getStatus() != Status.STATUS_MARKED_ROLLBACK)
  -                  {
  -                  EntityContainer.doStore(ctx);
  -                     //container.storeEntity(ctx);
  -
  -                     if( trace )
  -                        log.trace("sync calling store on ctx "+ctx);
  -                  }
  -               }
  -               catch (NoSuchEntityException ignored)
  -               {
  -                  if( trace )
  -                     log.trace("Ignoring NSEE", ignored);
  -               }
  -            }
  -            // EJB 1.1 12.3.2: all exceptions from ejbStore must be marked for 
rollback
  -            // and the instance must be discarded
  -            catch (Exception e)
  -            {
  -               log.error("Store failed", e);
  -               // Store failed -> rollback!
  -               try
  -               {
  -                  tx.setRollbackOnly();
  -               }
  -               catch (SystemException ex)
  -               {
  -                  if( trace )
  -                     log.trace("Ignoring SE", ex);
  -               }
  -               catch (IllegalStateException ex)
  -               {
  -                  if( trace )
  -                     log.trace("Ignoring ISE", ex);
  -               }
  -            }
  -            finally
  -            {
  -               Thread.currentThread().setContextClassLoader(oldCl);
  -            }
  -         }
  +      //synchronization is handled by GlobalTxEntityMap.
         }
     
         public void afterCompletion(int status)
  
  
  

_______________________________________________
Jboss-development mailing list
[EMAIL PROTECTED]
https://lists.sourceforge.net/lists/listinfo/jboss-development

Reply via email to