User: thedug  
  Date: 01/05/31 16:50:47

  Modified:    src/main/org/jboss/ejb/plugins
                        EntitySynchronizationInterceptor.java
  Log:
  Added commit option D.
  Lazy synchronization. Only every 30 seconds
  
  Revision  Changes    Path
  1.32      +63 -6     
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.31
  retrieving revision 1.32
  diff -u -r1.31 -r1.32
  --- EntitySynchronizationInterceptor.java     2001/03/11 17:04:17     1.31
  +++ EntitySynchronizationInterceptor.java     2001/05/31 23:50:47     1.32
  @@ -12,6 +12,7 @@
   import java.util.Map;
   import java.util.HashMap;
   import java.util.ArrayList;
  +import java.util.HashSet;
   
   import javax.ejb.EJBObject;
   import javax.ejb.CreateException;
  @@ -48,7 +49,7 @@
   *   @see <related>
   *   @author Rickard Öberg ([EMAIL PROTECTED])
   *   @author <a href="mailto:[EMAIL PROTECTED]";>Marc Fleury</a>
  -*   @version $Revision: 1.31 $
  +*   @version $Revision: 1.32 $
   */
   public class EntitySynchronizationInterceptor
   extends AbstractInterceptor
  @@ -72,6 +73,11 @@
       */
       protected Method isModified;
   
  +    /**
  +     *  For commit option D this is the cache of valid entities
  +     */
  +    protected HashSet validContexts;
  +
       // Static --------------------------------------------------------
   
       // Constructors --------------------------------------------------
  @@ -85,16 +91,25 @@
       public void init()
       throws Exception
       {
  +
  +     try{
  +
  +       validContexts = new HashSet();
          commitOption = 
container.getBeanMetaData().getContainerConfiguration().getCommitOption();
  -       // Check for isModified method
  -       try
  -       {
  +
  +        //start up the validContexts thread if commit option D
  +       if(commitOption == ConfigurationMetaData.D_COMMIT_OPTION){
  +            ValidContextsRefresher vcr = new ValidContextsRefresher(validContexts);
  +            new Thread(vcr).start();
  +        }
  +
  +
            isModified = container.getBeanClass().getMethod("isModified", new 
Class[0]);
            if (!isModified.getReturnType().equals(Boolean.TYPE))
             isModified = null; // Has to have "boolean" as return type!
          } catch (Exception e)
          {
  -         // Ignore
  +         System.out.println(e.getMessage());
          }
       }
   
  @@ -182,6 +197,13 @@
          // The Tx coming as part of the Method Invocation
          Transaction tx = mi.getTransaction();
   
  +       //Commit Option D....
  +       if(!validContexts.contains(ctx.getId())){
  +                //bean isn't in cache
  +                //so set valid to false so that we load...
  +                ctx.setValid(false);
  +        }
  +
          //Logger.debug("CTX in: isValid():"+ctx.isValid()+" 
isInvoked():"+ctx.isInvoked());
          //Logger.debug("newTx: "+ tx);
   
  @@ -416,7 +438,6 @@
                      // Invalidate state (there might be other points of entry)
                      ctx.setValid(false);
                    break;
  -
                    // Invalidate everything AND Passivate instance
                    case ConfigurationMetaData.C_COMMIT_OPTION:
                      try {
  @@ -425,6 +446,12 @@
                       Logger.debug(e);
                      }
                    break;
  +                 case ConfigurationMetaData.D_COMMIT_OPTION:
  +                     //add to cache....
  +                     //if the cache doesn't time out valid remains true
  +                     //if the cache is emptied then valid is set to false(see 
invoke() )
  +                                     validContexts.add(ctx.getId());
  +                 break;
                 }
   
                 // finish the transaction association
  @@ -439,5 +466,35 @@
            }
          }
       }
  +
  +class ValidContextsRefresher implements Runnable{
  +     private HashSet validContexts;
  +     private long refreshRate;
  +     private final int THIRTY_SECS = 30000;
  +
  +     public ValidContextsRefresher(HashSet validContexts,long refreshRate){
  +             this.validContexts = validContexts;
  +             this.refreshRate = refreshRate;
  +     }
  +
  +     public ValidContextsRefresher(HashSet validContexts){
  +             this(validContexts, THIRTY_SECS);
  +
  +     }
  +
  +     public void run(){
  +             while(true){
  +                     validContexts.clear();
  +                     // debug System.out.println("Flushing the valid contexts");
  +                     try{
  +                             Thread.sleep(refreshRate);
  +                     }catch(Exception e){
  +                             System.out.println(e.getMessage());
  +                     }
  +             }
  +     }
  +
  +}
  +
   }
   
  
  
  

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

Reply via email to