User: starksm 
  Date: 01/11/26 20:23:16

  Modified:    src/main/org/jboss/ejb/plugins AbstractInstanceCache.java
  Log:
  Change AbstractInstanceCache to use a single passivator thread for
  all deployed EJBs as a thread per container is wasteful and kills
  large deployments on systems with weak VM thread implementations.
  
  Revision  Changes    Path
  1.24      +54 -116   jboss/src/main/org/jboss/ejb/plugins/AbstractInstanceCache.java
  
  Index: AbstractInstanceCache.java
  ===================================================================
  RCS file: 
/cvsroot/jboss/jboss/src/main/org/jboss/ejb/plugins/AbstractInstanceCache.java,v
  retrieving revision 1.23
  retrieving revision 1.24
  diff -u -r1.23 -r1.24
  --- AbstractInstanceCache.java        2001/11/26 03:12:25     1.23
  +++ AbstractInstanceCache.java        2001/11/27 04:23:16     1.24
  @@ -61,7 +61,7 @@
    * @author <a href="[EMAIL PROTECTED]">Bill Burke</a>
    * @author <a href="[EMAIL PROTECTED]">Marc Fleury</a>
    *
  - * @version $Revision: 1.23 $
  + * @version $Revision: 1.24 $
    *
    *   <p><b>Revisions:</b>
    *
  @@ -91,11 +91,19 @@
      // Constants -----------------------------------------------------
   
      // Attributes ----------------------------------------------------
  +   /* The worker queue that passivates beans in another thread. One passivator
  +    is shared for all EJB deployments.
  +    */
  +   static private WorkerQueue m_passivator = new WorkerQueue("EJB Passivator 
Thread", true);
  +   static
  +   {
  +      // Start the passivator thread
  +      m_passivator.start();
  +   }
      protected static Logger log = Logger.getLogger(AbstractInstanceCache.class);
  +
      /* The object that is delegated to implement the desired caching policy */
      private CachePolicy m_cache;
  -   /* The worker queue that passivates beans in another thread */
  -   private WorkerQueue m_passivator;
      /* The mutex object for the cache */
      private Object m_cacheLock = new Object();
      /* Helper class that handles synchronization for the passivation thread */
  @@ -334,8 +342,6 @@
         getCache().init();
         m_passivationHelper = new PassivationHelper();
         String threadName = "Passivator Thread for " + 
getContainer().getBeanMetaData().getEjbName();
  -      ClassLoader cl = getContainer().getClassLoader();
  -      m_passivator = new PassivatorQueue(threadName, cl);
   
         if (isJMSMonitoringEnabled())
         {
  @@ -356,7 +362,6 @@
      public void start() throws Exception
      {
         getCache().start();
  -      m_passivator.start();
   
         if (isJMSMonitoringEnabled())
         {
  @@ -372,7 +377,6 @@
            getCache().stop();
         }
   
  -      if (m_passivator != null) {m_passivator.stop();}
   
         if (isJMSMonitoringEnabled() && m_jmsConnection != null)
         {
  @@ -424,12 +428,15 @@
   
      protected void logActivation(Object id)
      {
  -      m_buffer.setLength(0);
  -      m_buffer.append("Activated bean ");
  -      m_buffer.append(getContainer().getBeanMetaData().getEjbName());
  -      m_buffer.append(" with id = ");
  -      m_buffer.append(id);
  -      log.debug(m_buffer.toString());
  +      if( log.isTraceEnabled() )
  +      {
  +         m_buffer.setLength(0);
  +         m_buffer.append("Activated bean ");
  +         m_buffer.append(getContainer().getBeanMetaData().getEjbName());
  +         m_buffer.append(" with id = ");
  +         m_buffer.append(id);
  +         log.trace(m_buffer.toString());
  +      }
   
         if (isJMSMonitoringEnabled())
         {
  @@ -451,12 +458,15 @@
   
      protected void logPassivationScheduled(Object id)
      {
  -      m_buffer.setLength(0);
  -      m_buffer.append("Scheduled passivation of bean ");
  -      m_buffer.append(getContainer().getBeanMetaData().getEjbName());
  -      m_buffer.append(" with id = ");
  -      m_buffer.append(id);
  -      log.debug(m_buffer.toString());
  +      if( log.isTraceEnabled() )
  +      {
  +         m_buffer.setLength(0);
  +         m_buffer.append("Scheduled passivation of bean ");
  +         m_buffer.append(getContainer().getBeanMetaData().getEjbName());
  +         m_buffer.append(" with id = ");
  +         m_buffer.append(id);
  +         log.trace(m_buffer.toString());
  +      }
   
         if (isJMSMonitoringEnabled())
         {
  @@ -479,12 +489,16 @@
   
      protected void logPassivation(Object id)
      {
  -      m_buffer.setLength(0);
  -      m_buffer.append("Passivated bean ");
  -      m_buffer.append(getContainer().getBeanMetaData().getEjbName());
  -      m_buffer.append(" with id = ");
  -      m_buffer.append(id);
  -      log.debug(m_buffer.toString());
  +      if( log.isTraceEnabled() )
  +      {
  +         m_buffer.setLength(0);
  +         m_buffer.append("Passivated bean ");
  +         m_buffer.append(getContainer().getBeanMetaData().getEjbName());
  +         m_buffer.append(" with id = ");
  +         m_buffer.append(id);
  +         log.trace(m_buffer.toString());
  +      }
  +
   
         if (isJMSMonitoringEnabled())
         {
  @@ -507,12 +521,15 @@
   
      protected void logPassivationPostponed(Object id)
      {
  -      m_buffer.setLength(0);
  -      m_buffer.append("Postponed passivation of bean ");
  -      m_buffer.append(getContainer().getBeanMetaData().getEjbName());
  -      m_buffer.append(" with id = ");
  -      m_buffer.append(id);
  -      log.debug(m_buffer.toString());
  +      if( log.isTraceEnabled() )
  +      {
  +         m_buffer.setLength(0);
  +         m_buffer.append("Postponed passivation of bean ");
  +         m_buffer.append(getContainer().getBeanMetaData().getEjbName());
  +         m_buffer.append(" with id = ");
  +         m_buffer.append(id);
  +         log.trace(m_buffer.toString());
  +      }
   
         if (isJMSMonitoringEnabled())
         {
  @@ -643,8 +660,11 @@
                         */
                        BeanLock lock = getContainer().getLockManager().getLock(id);
                        lock.sync();
  -                     try {
  -
  +                     ClassLoader cl = 
Thread.currentThread().getContextClassLoader();
  +                     ClassLoader beanCL = getContainer().getClassLoader();
  +                     try
  +                     {
  +                        Thread.currentThread().setContextClassLoader(beanCL);
                           // marcf: the mutex is not good as we need a thread 
reentrant one, for now we
                           // use straight synchronization on the ctx as there is a 
one-one relationship
                           // Also the ctx are not reused any longer so no chance of 
using the wrong ctx
  @@ -725,6 +745,7 @@
                        }//synchronized(ctx)
                        finally
                        {
  +                        Thread.currentThread().setContextClassLoader(cl);
                           lock.releaseSync();
                           getContainer().getLockManager().removeLockRef(id);
                        }
  @@ -863,86 +884,3 @@
      }
   }
   
  -class PassivatorQueue extends WorkerQueue
  -{
  -   protected static Logger log = Logger.getLogger(PassivatorQueue.class);
  -   /**
  -    * Used for debug purposes, holds the scheduled passivation jobs
  -    */
  -   // private Map m_map = new HashMap();
  -
  -   /**
  -    * Creates a new passivator queue with default thread name of
  -    * "Passivator Thread".
  -    */
  -   PassivatorQueue()
  -   {
  -      this("Passivator Thread", null);
  -   }
  -   /**
  -    * Creates a new passivator queue with the given thread name and given
  -    * context class loader. <br>
  -    * @param threadName the name of the passivator thread
  -    * @param cl the context class loader; if null the context class loader is not 
set.
  -    */
  -   PassivatorQueue(String threadName, ClassLoader cl)
  -   {
  -      super(threadName);
  -      if (cl != null)
  -      {
  -         m_queueThread.setContextClassLoader(cl);
  -      }
  -   }
  -   /**
  - * Overridden for debug purposes
  - *//*
  - protected Executable getJobImpl() throws InterruptedException
  - {
  - PassivationJob j = (PassivationJob)super.getJobImpl();
  - EnterpriseContext ctx = j.getEnterpriseContext();
  - Object id = ctx.getId();
  - m_map.remove(id);
  - return j;
  - }
  - */
  - /**
  - * Overridden for debug purposes
  - *//*
  - protected void putJobImpl(Executable job)
  - {
  - PassivationJob j = (PassivationJob)job;
  - EnterpriseContext ctx = j.getEnterpriseContext();
  - Object id = ctx.getId();
  - if (m_map.get(id) != null)
  - {
  - // Here is a bug, job requests are scheduled only once per bean.
  - System.err.println("DUPLICATE PASSIVATION JOB INSERTION FOR ID = " + ctx.getId());
  - System.err.println("CTX isLocked: " + ctx.isLocked());
  - System.err.println("CTX transaction: " + ctx.getTransaction());
  - throw new IllegalStateException();
  - }
  - else
  - {
  - m_map.put(id, job);
  - }
  - super.putJobImpl(job);
  - }
  - */
  - /**
  - * Logs exceptions thrown during job execution.
  - */
  -   protected void logJobException(Exception x)
  -   {
  -      // Log system exceptions
  -      if (x instanceof EJBException)
  -      {
  -         Exception nestedX = ((EJBException)x).getCausedByException();
  -         if (nestedX != null)
  -         {
  -            log.error("BEAN EXCEPTION", x);
  -         }
  -      } else {
  -         log.error("EXCEPTION", x);
  -      }
  -   }
  -}
  
  
  

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

Reply via email to