User: biorn_steedom Date: 01/04/20 16:10:28 Modified: src/main/org/jboss/ejb/plugins StatefulSessionInstanceCache.java Log: Implemented the logic for removal of timed out beans. Revision Changes Path 1.5 +63 -1 jboss/src/main/org/jboss/ejb/plugins/StatefulSessionInstanceCache.java Index: StatefulSessionInstanceCache.java =================================================================== RCS file: /cvsroot/jboss/jboss/src/main/org/jboss/ejb/plugins/StatefulSessionInstanceCache.java,v retrieving revision 1.4 retrieving revision 1.5 diff -u -r1.4 -r1.5 --- StatefulSessionInstanceCache.java 2000/12/12 09:46:50 1.4 +++ StatefulSessionInstanceCache.java 2001/04/20 23:10:28 1.5 @@ -7,23 +7,32 @@ package org.jboss.ejb.plugins; +import java.util.Map; +import java.util.HashMap; +import java.util.Iterator; + import java.rmi.RemoteException; import java.rmi.NoSuchObjectException; import javax.transaction.Status; import javax.transaction.SystemException; +import javax.jms.Message; +import javax.jms.JMSException; + import org.jboss.ejb.Container; import org.jboss.ejb.StatefulSessionContainer; import org.jboss.ejb.EnterpriseContext; import org.jboss.ejb.StatefulSessionEnterpriseContext; +import org.jboss.ejb.StatefulSessionPersistenceManager; +import org.jboss.logging.Logger; /** * Cache for stateful session beans. * * @author Simone Bordet ([EMAIL PROTECTED]) * @author <a href="mailto:[EMAIL PROTECTED]">Sebastien Alborini</a> - * @version $Revision: 1.4 $ + * @version $Revision: 1.5 $ */ public class StatefulSessionInstanceCache extends AbstractInstanceCache @@ -33,6 +42,10 @@ // Attributes ---------------------------------------------------- /* The container */ private StatefulSessionContainer m_container; + /* The map that holds passivated beans that will be removed */ + private HashMap m_passivated = new HashMap(); + /* Used for logging */ + private StringBuffer m_buffer = new StringBuffer(); // Static -------------------------------------------------------- @@ -52,10 +65,12 @@ protected void passivate(EnterpriseContext ctx) throws RemoteException { m_container.getPersistenceManager().passivateSession((StatefulSessionEnterpriseContext)ctx); + m_passivated.put(ctx.getId(), new Long(System.currentTimeMillis())); } protected void activate(EnterpriseContext ctx) throws RemoteException { m_container.getPersistenceManager().activateSession((StatefulSessionEnterpriseContext)ctx); + m_passivated.remove(ctx.getId()); } protected EnterpriseContext acquireContext() throws Exception { @@ -99,10 +114,57 @@ } // Package protected --------------------------------------------- + void removePassivated(long maxLifeAfterPassivation) + { + StatefulSessionPersistenceManager store = (StatefulSessionPersistenceManager)m_container.getPersistenceManager(); + long now = System.currentTimeMillis(); + Iterator entries = m_passivated.entrySet().iterator(); + while (entries.hasNext()) + { + Map.Entry entry = (Map.Entry)entries.next(); + Object key = entry.getKey(); + long passivationTime = ((Long)entry.getValue()).longValue(); + if (now - passivationTime > maxLifeAfterPassivation) + { + store.removePassivated(key); + log(key); + // Must use the iterator to remove, otherwise + // ConcurrentModificationException is thrown + entries.remove(); + removeLock(key); + } + } + } // Protected ----------------------------------------------------- // Private ------------------------------------------------------- + private void log(Object key) + { + m_buffer.setLength(0); + m_buffer.append("Removing from storage bean '"); + m_buffer.append(m_container.getBeanMetaData().getEjbName()); + m_buffer.append("' with id = "); + m_buffer.append(key); + Logger.debug(m_buffer.toString()); + + if (isJMSMonitoringEnabled()) + { + // Prepare JMS message + Message message = createMessage(key); + try + { + message.setStringProperty(TYPE, "REMOVER"); + } + catch (JMSException x) + { + Logger.exception(x); + } + + // Send JMS Message + sendMessage(message); + } + } // Inner classes ------------------------------------------------- _______________________________________________ Jboss-development mailing list [EMAIL PROTECTED] http://lists.sourceforge.net/lists/listinfo/jboss-development