You are viewing a plain text version of this content. The canonical link for it is here.
Posted to jcs-dev@jakarta.apache.org by tv...@apache.org on 2007/05/10 18:04:27 UTC

svn commit: r536904 [2/38] - in /jakarta/jcs/trunk: ./ auxiliary-builds/javagroups/ auxiliary-builds/javagroups/src/java/org/apache/jcs/auxiliary/javagroups/ auxiliary-builds/javagroups/src/test/org/apache/jcs/auxiliary/javagroups/ auxiliary-builds/jdk...

Modified: jakarta/jcs/trunk/auxiliary-builds/jdk14/src/java/org/apache/jcs/auxiliary/javagroups/JavaGroupsCache.java
URL: http://svn.apache.org/viewvc/jakarta/jcs/trunk/auxiliary-builds/jdk14/src/java/org/apache/jcs/auxiliary/javagroups/JavaGroupsCache.java?view=diff&rev=536904&r1=536903&r2=536904
==============================================================================
--- jakarta/jcs/trunk/auxiliary-builds/jdk14/src/java/org/apache/jcs/auxiliary/javagroups/JavaGroupsCache.java (original)
+++ jakarta/jcs/trunk/auxiliary-builds/jdk14/src/java/org/apache/jcs/auxiliary/javagroups/JavaGroupsCache.java Thu May 10 09:03:42 2007
@@ -1,450 +1,453 @@
-package org.apache.jcs.auxiliary.javagroups;
-
-/* 
- * Copyright 2001-2004 The Apache Software Foundation.
- * 
- * Licensed under the Apache License, Version 2.0 (the "License")
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-import java.io.IOException;
-import java.io.Serializable;
-import java.util.ArrayList;
-import java.util.Set;
-import java.util.Vector;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.apache.jcs.auxiliary.AuxiliaryCache;
-import org.apache.jcs.engine.CacheConstants;
-import org.apache.jcs.engine.CacheElement;
-import org.apache.jcs.engine.behavior.ICacheElement;
-import org.apache.jcs.engine.behavior.ICacheType;
-import org.apache.jcs.engine.behavior.ICompositeCacheManager;
-import org.apache.jcs.engine.control.CompositeCache;
-import org.apache.jcs.engine.stats.StatElement;
-import org.apache.jcs.engine.stats.Stats;
-import org.apache.jcs.engine.stats.behavior.IStatElement;
-import org.apache.jcs.engine.stats.behavior.IStats;
-import org.jgroups.Address;
-import org.jgroups.Channel;
-import org.jgroups.MembershipListener;
-import org.jgroups.Message;
-import org.jgroups.View;
-import org.jgroups.blocks.GroupRequest;
-import org.jgroups.blocks.MessageDispatcher;
-import org.jgroups.blocks.RequestHandler;
-import org.jgroups.util.RspList; 
-
-/**
- * Auxiliary cache using javagroups. Expects to be created with a Channel, the
- * {@link JavaGroupsCacheFactory}is responsible for creating that channel. To
- * do so it uses configuration properties specified by an instance of
- * {@link JavaGroupsCacheAttributes}.
- * <p>
- * At creation time the provided channel is connected to a group having the same
- * name as the cache / region name this auxiliary is associated with. update /
- * remove / removeAll operations are broadcast to all members of the group. A
- * listener thread processes requests from other members of the group, and
- * dispatches to appropriate methods on the associated CompositeCache.
- * </p>
- * <p>
- * Calls to get are currently ignored.
- * <p>
- * Messages are sent to peers asynchronously. Synchronous messaging could be
- * added using MessageDispatcher or RpcDispatcher. Combined with a get
- * implementation this could provide much higher cache consistency (but with a
- * substantial speed penalty).
- * 
- * @version $Id: JavaGroupsCache.java 264665 2005-08-30 01:10:34Z asmuts $
- */
-public class JavaGroupsCache
-    implements AuxiliaryCache, RequestHandler, MembershipListener
-{
-    private final Log log = LogFactory.getLog( JavaGroupsCache.class );
-
-    private String cacheName;
-
-    private int status;
-
-    private boolean getFromPeers;
-
-    private ICompositeCacheManager cacheMgr;
-
-    private Channel channel;
-
-    private MessageDispatcher dispatcher;
-
-    public JavaGroupsCache( ICompositeCacheManager cache, String cacheName, Channel channel, boolean getFromPeers )
-        throws Exception
-    {
-        this.cacheMgr = cacheMgr;
-
-        this.cacheName = cacheName;
-        this.channel = channel;
-
-        this.getFromPeers = getFromPeers;
-
-        // The adapter listens to the channel and fires MessageListener events
-        // on this object.
-
-        dispatcher = new MessageDispatcher( channel, null, this, this );
-
-        // Connect channel to the 'group' for our region name
-
-        channel.setOpt( Channel.LOCAL, Boolean.FALSE );
-
-        channel.connect( cacheName );
-
-        // If all the above succeed, the cache is now alive.
-
-        this.status = CacheConstants.STATUS_ALIVE;
-
-        log.info( "Initialized for cache: " + cacheName );
-    }
-
-    public void send( ICacheElement element, int command )
-    {
-        Request request = new Request( element, command );
-
-        try
-        {
-            dispatcher.castMessage( null, new Message( null, null, request ), GroupRequest.GET_NONE, 0 );
-
-        }
-        catch ( Exception e )
-        {
-            log.error( "Failed to send JavaGroups message", e );
-        }
-    }
-
-    // ----------------------------------------------- interface AuxiliaryCache
-
-    /**
-     * Sends the provided element to all peers (connected to the same channel
-     * and region name).
-     * 
-     * @param ce
-     *            CacheElement to replicate
-     * @throws IOException
-     *             Never thrown by this implementation
-     */
-    public void update( ICacheElement ce )
-        throws IOException
-    {
-        send( ce, Request.UPDATE );
-    }
-
-    /**
-     * If 'getFromPeers' is true, this will attempt to get the requested element
-     * from ant other members of the group.
-     * 
-     * @param key
-     * @return
-     * @throws IOException
-     *             Never thrown by this implementation
-     */
-    public ICacheElement get( Serializable key )
-        throws IOException
-    {
-        if ( getFromPeers )
-        {
-            CacheElement element = new CacheElement( cacheName, key, null );
-
-            Request request = new Request( element, Request.GET );
-
-            // Cast message and wait for all responses.
-
-            // FIXME: we can stop waiting after the first not null response,
-            //        that is more difficult to implement however.
-
-            RspList responses = dispatcher.castMessage( null, new Message( null, null, request ), GroupRequest.GET_ALL,
-                                                        0 );
-
-            // Get results only gives the responses which were not null
-
-            Vector results = responses.getResults();
-
-            // If there were any non null results, return the first
-
-            if ( results.size() > 0 )
-            {
-                return (ICacheElement) results.get( 0 );
-            }
-        }
-
-        return null;
-    }
-
-    /**
-     * Sends a request to all peers to remove the element having the provided
-     * key.
-     * 
-     * @param key
-     *            Key of element to be removed
-     * @throws IOException
-     *             Never thrown by this implementation
-     */
-    public boolean remove( Serializable key )
-        throws IOException
-    {
-        CacheElement ce = new CacheElement( cacheName, key, null );
-
-        send( ce, Request.REMOVE );
-
-        return false;
-    }
-
-    /**
-     * Sends a request to remove ALL elements from the peers
-     * 
-     * @throws IOException
-     *             Never thrown by this implementation
-     */
-    public void removeAll()
-        throws IOException
-    {
-        CacheElement ce = new CacheElement( cacheName, null, null );
-
-        send( ce, Request.REMOVE_ALL );
-    }
-
-    /**
-     * Dispose this cache, terminates the listener thread and disconnects the
-     * channel from the group.
-     * 
-     * @throws IOException
-     */
-    public void dispose()
-        throws IOException
-    {
-        // This will join the scheduler thread and ensure everything terminates
-
-        dispatcher.stop();
-
-        // Now we can disconnect from the group and close the channel
-
-        channel.disconnect();
-        channel.close();
-
-        status = CacheConstants.STATUS_DISPOSED;
-
-        log.info( "Disposed for cache: " + cacheName );
-    }
-
-    /**
-     * Since this is a lateral, size is not defined.
-     * 
-     * @return Always returns 0
-     */
-    public int getSize()
-    {
-        return 0;
-    }
-
-    /**
-     * Returns the status of this auxiliary.
-     * 
-     * @return One of the status constants from {@link CacheConstants}
-     */
-    public int getStatus()
-    {
-        return status;
-    }
-
-    /**
-     * Accessor for cacheName property
-     * 
-     * @return Name of cache / region this auxiliary is associated with.
-     */
-    public String getCacheName()
-    {
-        return cacheName;
-    }
-
-    /**
-     * Not implemented (I believe since get is not supported, this should also
-     * not be).
-     * 
-     * @param group
-     *            Ignored
-     * @return Always reurns null
-     */
-    public Set getGroupKeys( String group )
-    {
-        return null;
-    }
-
-    // --------------------------------------------------- interface ICacheType
-
-    /**
-     * Get the cache type (always Lateral).
-     * 
-     * @return Always returns ICacheType.LATERAL_CACHE
-     */
-    public int getCacheType()
-    {
-        return ICacheType.LATERAL_CACHE;
-    }
-
-    // ----------------------------------------------- interface RequestHandler
-
-    /**
-     * Handles a message from a peer. The message should contain a Request, and
-     * depending on the command this will call localUpdate, localRemove, or
-     * localRemoveAll on the associated CompositeCache.
-     * 
-     * @param msg
-     *            The JavaGroups Message
-     * @return Always returns null
-     */
-    public Object handle( Message msg )
-    {
-        try
-        {
-            Request request = (Request) msg.getObject();
-
-            // Switch based on the command and invoke the
-            // appropriate method on the associate composite cache
-
-            switch ( request.getCommand() )
-            {
-                case Request.GET:
-
-                    return getCompositeCache().localGet( request.getCacheElement().getKey() );
-                // break;
-
-                case Request.UPDATE:
-
-                    getCompositeCache().localUpdate( request.getCacheElement() );
-                    break;
-
-                case Request.REMOVE:
-
-                    getCompositeCache().localRemove( request.getCacheElement().getKey() );
-                    break;
-
-                case Request.REMOVE_ALL:
-
-                    getCompositeCache().localRemoveAll();
-                    break;
-
-                default:
-
-                    log.error( "Recieved unknown command" );
-            }
-        }
-        catch ( Exception e )
-        {
-            log.error( "Failed to process received JavaGroups message", e );
-        }
-
-        return null;
-    }
-
-    /**
-     * TODO speed this up. We don't want to ahve to go through the manager
-     * everytime.
-     * 
-     * @return ICompositeCache
-     */
-    private CompositeCache getCompositeCache()
-    {
-        return cacheMgr.getCache( this.cacheName );
-    }
-
-    // ------------------------------------------- interface MembershipListener
-
-    public void viewAccepted( View view )
-    {
-        log.info( "View Changed: " + String.valueOf( view ) );
-    }
-
-    public void suspect( Address suspectedAddress )
-    {
-    }
-
-    public void block()
-    {
-    }
-
-    /**
-     * getStats
-     * 
-     * @return String
-     */
-    public String getStats()
-    {
-        return getStatistics().toString();
-    }
-
-    /*
-     * (non-Javadoc)
-     * 
-     * @see org.apache.jcs.auxiliary.AuxiliaryCache#getStatistics()
-     */
-    public IStats getStatistics()
-    {
-        IStats stats = new Stats();
-        stats.setTypeName( "JavaGroups Cache" );
-
-        ArrayList elems = new ArrayList();
-
-        IStatElement se = null;
-
-        // no data gathered here
-
-        // get an array and put them in the Stats object
-        IStatElement[] ses = (IStatElement[]) elems.toArray( new StatElement[0] );
-        stats.setStatElements( ses );
-
-        return stats;
-    }
-
-    // ---------------------------------------------------------- inner classes
-
-    /**
-     * Object for messages, wraps the command type (update, remove, or remove
-     * all) and original cache element to distribute.
-     */
-    static class Request
-        implements Serializable
-    {
-        public final static int UPDATE = 1;
-
-        public final static int REMOVE = 2;
-
-        public final static int REMOVE_ALL = 3;
-
-        public final static int GET = 5;
-
-        private ICacheElement cacheElement;
-
-        private int command;
-
-        public Request( ICacheElement cacheElement, int command )
-        {
-            this.cacheElement = cacheElement;
-            this.command = command;
-        }
-
-        public ICacheElement getCacheElement()
-        {
-            return cacheElement;
-        }
-
-        public int getCommand()
-        {
-            return command;
-        }
-    }
-}
+package org.apache.jcs.auxiliary.javagroups;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.io.IOException;
+import java.io.Serializable;
+import java.util.ArrayList;
+import java.util.Set;
+import java.util.Vector;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.apache.jcs.auxiliary.AuxiliaryCache;
+import org.apache.jcs.engine.CacheConstants;
+import org.apache.jcs.engine.CacheElement;
+import org.apache.jcs.engine.behavior.ICacheElement;
+import org.apache.jcs.engine.behavior.ICacheType;
+import org.apache.jcs.engine.behavior.ICompositeCacheManager;
+import org.apache.jcs.engine.control.CompositeCache;
+import org.apache.jcs.engine.stats.StatElement;
+import org.apache.jcs.engine.stats.Stats;
+import org.apache.jcs.engine.stats.behavior.IStatElement;
+import org.apache.jcs.engine.stats.behavior.IStats;
+import org.jgroups.Address;
+import org.jgroups.Channel;
+import org.jgroups.MembershipListener;
+import org.jgroups.Message;
+import org.jgroups.View;
+import org.jgroups.blocks.GroupRequest;
+import org.jgroups.blocks.MessageDispatcher;
+import org.jgroups.blocks.RequestHandler;
+import org.jgroups.util.RspList;
+
+/**
+ * Auxiliary cache using javagroups. Expects to be created with a Channel, the
+ * {@link JavaGroupsCacheFactory}is responsible for creating that channel. To
+ * do so it uses configuration properties specified by an instance of
+ * {@link JavaGroupsCacheAttributes}.
+ * <p>
+ * At creation time the provided channel is connected to a group having the same
+ * name as the cache / region name this auxiliary is associated with. update /
+ * remove / removeAll operations are broadcast to all members of the group. A
+ * listener thread processes requests from other members of the group, and
+ * dispatches to appropriate methods on the associated CompositeCache.
+ * </p>
+ * <p>
+ * Calls to get are currently ignored.
+ * <p>
+ * Messages are sent to peers asynchronously. Synchronous messaging could be
+ * added using MessageDispatcher or RpcDispatcher. Combined with a get
+ * implementation this could provide much higher cache consistency (but with a
+ * substantial speed penalty).
+ *
+ * @version $Id: JavaGroupsCache.java 264665 2005-08-30 01:10:34Z asmuts $
+ */
+public class JavaGroupsCache
+    implements AuxiliaryCache, RequestHandler, MembershipListener
+{
+    private final Log log = LogFactory.getLog( JavaGroupsCache.class );
+
+    private String cacheName;
+
+    private int status;
+
+    private boolean getFromPeers;
+
+    private ICompositeCacheManager cacheMgr;
+
+    private Channel channel;
+
+    private MessageDispatcher dispatcher;
+
+    public JavaGroupsCache( ICompositeCacheManager cache, String cacheName, Channel channel, boolean getFromPeers )
+        throws Exception
+    {
+        this.cacheMgr = cacheMgr;
+
+        this.cacheName = cacheName;
+        this.channel = channel;
+
+        this.getFromPeers = getFromPeers;
+
+        // The adapter listens to the channel and fires MessageListener events
+        // on this object.
+
+        dispatcher = new MessageDispatcher( channel, null, this, this );
+
+        // Connect channel to the 'group' for our region name
+
+        channel.setOpt( Channel.LOCAL, Boolean.FALSE );
+
+        channel.connect( cacheName );
+
+        // If all the above succeed, the cache is now alive.
+
+        this.status = CacheConstants.STATUS_ALIVE;
+
+        log.info( "Initialized for cache: " + cacheName );
+    }
+
+    public void send( ICacheElement element, int command )
+    {
+        Request request = new Request( element, command );
+
+        try
+        {
+            dispatcher.castMessage( null, new Message( null, null, request ), GroupRequest.GET_NONE, 0 );
+
+        }
+        catch ( Exception e )
+        {
+            log.error( "Failed to send JavaGroups message", e );
+        }
+    }
+
+    // ----------------------------------------------- interface AuxiliaryCache
+
+    /**
+     * Sends the provided element to all peers (connected to the same channel
+     * and region name).
+     *
+     * @param ce
+     *            CacheElement to replicate
+     * @throws IOException
+     *             Never thrown by this implementation
+     */
+    public void update( ICacheElement ce )
+        throws IOException
+    {
+        send( ce, Request.UPDATE );
+    }
+
+    /**
+     * If 'getFromPeers' is true, this will attempt to get the requested element
+     * from ant other members of the group.
+     *
+     * @param key
+     * @return
+     * @throws IOException
+     *             Never thrown by this implementation
+     */
+    public ICacheElement get( Serializable key )
+        throws IOException
+    {
+        if ( getFromPeers )
+        {
+            CacheElement element = new CacheElement( cacheName, key, null );
+
+            Request request = new Request( element, Request.GET );
+
+            // Cast message and wait for all responses.
+
+            // FIXME: we can stop waiting after the first not null response,
+            //        that is more difficult to implement however.
+
+            RspList responses = dispatcher.castMessage( null, new Message( null, null, request ), GroupRequest.GET_ALL,
+                                                        0 );
+
+            // Get results only gives the responses which were not null
+
+            Vector results = responses.getResults();
+
+            // If there were any non null results, return the first
+
+            if ( results.size() > 0 )
+            {
+                return (ICacheElement) results.get( 0 );
+            }
+        }
+
+        return null;
+    }
+
+    /**
+     * Sends a request to all peers to remove the element having the provided
+     * key.
+     *
+     * @param key
+     *            Key of element to be removed
+     * @throws IOException
+     *             Never thrown by this implementation
+     */
+    public boolean remove( Serializable key )
+        throws IOException
+    {
+        CacheElement ce = new CacheElement( cacheName, key, null );
+
+        send( ce, Request.REMOVE );
+
+        return false;
+    }
+
+    /**
+     * Sends a request to remove ALL elements from the peers
+     *
+     * @throws IOException
+     *             Never thrown by this implementation
+     */
+    public void removeAll()
+        throws IOException
+    {
+        CacheElement ce = new CacheElement( cacheName, null, null );
+
+        send( ce, Request.REMOVE_ALL );
+    }
+
+    /**
+     * Dispose this cache, terminates the listener thread and disconnects the
+     * channel from the group.
+     *
+     * @throws IOException
+     */
+    public void dispose()
+        throws IOException
+    {
+        // This will join the scheduler thread and ensure everything terminates
+
+        dispatcher.stop();
+
+        // Now we can disconnect from the group and close the channel
+
+        channel.disconnect();
+        channel.close();
+
+        status = CacheConstants.STATUS_DISPOSED;
+
+        log.info( "Disposed for cache: " + cacheName );
+    }
+
+    /**
+     * Since this is a lateral, size is not defined.
+     *
+     * @return Always returns 0
+     */
+    public int getSize()
+    {
+        return 0;
+    }
+
+    /**
+     * Returns the status of this auxiliary.
+     *
+     * @return One of the status constants from {@link CacheConstants}
+     */
+    public int getStatus()
+    {
+        return status;
+    }
+
+    /**
+     * Accessor for cacheName property
+     *
+     * @return Name of cache / region this auxiliary is associated with.
+     */
+    public String getCacheName()
+    {
+        return cacheName;
+    }
+
+    /**
+     * Not implemented (I believe since get is not supported, this should also
+     * not be).
+     *
+     * @param group
+     *            Ignored
+     * @return Always reurns null
+     */
+    public Set getGroupKeys( String group )
+    {
+        return null;
+    }
+
+    // --------------------------------------------------- interface ICacheType
+
+    /**
+     * Get the cache type (always Lateral).
+     *
+     * @return Always returns ICacheType.LATERAL_CACHE
+     */
+    public int getCacheType()
+    {
+        return ICacheType.LATERAL_CACHE;
+    }
+
+    // ----------------------------------------------- interface RequestHandler
+
+    /**
+     * Handles a message from a peer. The message should contain a Request, and
+     * depending on the command this will call localUpdate, localRemove, or
+     * localRemoveAll on the associated CompositeCache.
+     *
+     * @param msg
+     *            The JavaGroups Message
+     * @return Always returns null
+     */
+    public Object handle( Message msg )
+    {
+        try
+        {
+            Request request = (Request) msg.getObject();
+
+            // Switch based on the command and invoke the
+            // appropriate method on the associate composite cache
+
+            switch ( request.getCommand() )
+            {
+                case Request.GET:
+
+                    return getCompositeCache().localGet( request.getCacheElement().getKey() );
+                // break;
+
+                case Request.UPDATE:
+
+                    getCompositeCache().localUpdate( request.getCacheElement() );
+                    break;
+
+                case Request.REMOVE:
+
+                    getCompositeCache().localRemove( request.getCacheElement().getKey() );
+                    break;
+
+                case Request.REMOVE_ALL:
+
+                    getCompositeCache().localRemoveAll();
+                    break;
+
+                default:
+
+                    log.error( "Recieved unknown command" );
+            }
+        }
+        catch ( Exception e )
+        {
+            log.error( "Failed to process received JavaGroups message", e );
+        }
+
+        return null;
+    }
+
+    /**
+     * TODO speed this up. We don't want to ahve to go through the manager
+     * everytime.
+     *
+     * @return ICompositeCache
+     */
+    private CompositeCache getCompositeCache()
+    {
+        return cacheMgr.getCache( this.cacheName );
+    }
+
+    // ------------------------------------------- interface MembershipListener
+
+    public void viewAccepted( View view )
+    {
+        log.info( "View Changed: " + String.valueOf( view ) );
+    }
+
+    public void suspect( Address suspectedAddress )
+    {
+    }
+
+    public void block()
+    {
+    }
+
+    /**
+     * getStats
+     *
+     * @return String
+     */
+    public String getStats()
+    {
+        return getStatistics().toString();
+    }
+
+    /*
+     * (non-Javadoc)
+     *
+     * @see org.apache.jcs.auxiliary.AuxiliaryCache#getStatistics()
+     */
+    public IStats getStatistics()
+    {
+        IStats stats = new Stats();
+        stats.setTypeName( "JavaGroups Cache" );
+
+        ArrayList elems = new ArrayList();
+
+        IStatElement se = null;
+
+        // no data gathered here
+
+        // get an array and put them in the Stats object
+        IStatElement[] ses = (IStatElement[]) elems.toArray( new StatElement[0] );
+        stats.setStatElements( ses );
+
+        return stats;
+    }
+
+    // ---------------------------------------------------------- inner classes
+
+    /**
+     * Object for messages, wraps the command type (update, remove, or remove
+     * all) and original cache element to distribute.
+     */
+    static class Request
+        implements Serializable
+    {
+        public final static int UPDATE = 1;
+
+        public final static int REMOVE = 2;
+
+        public final static int REMOVE_ALL = 3;
+
+        public final static int GET = 5;
+
+        private ICacheElement cacheElement;
+
+        private int command;
+
+        public Request( ICacheElement cacheElement, int command )
+        {
+            this.cacheElement = cacheElement;
+            this.command = command;
+        }
+
+        public ICacheElement getCacheElement()
+        {
+            return cacheElement;
+        }
+
+        public int getCommand()
+        {
+            return command;
+        }
+    }
+}

Modified: jakarta/jcs/trunk/auxiliary-builds/jdk14/src/java/org/apache/jcs/auxiliary/javagroups/JavaGroupsCacheAttributes.java
URL: http://svn.apache.org/viewvc/jakarta/jcs/trunk/auxiliary-builds/jdk14/src/java/org/apache/jcs/auxiliary/javagroups/JavaGroupsCacheAttributes.java?view=diff&rev=536904&r1=536903&r2=536904
==============================================================================
--- jakarta/jcs/trunk/auxiliary-builds/jdk14/src/java/org/apache/jcs/auxiliary/javagroups/JavaGroupsCacheAttributes.java (original)
+++ jakarta/jcs/trunk/auxiliary-builds/jdk14/src/java/org/apache/jcs/auxiliary/javagroups/JavaGroupsCacheAttributes.java Thu May 10 09:03:42 2007
@@ -1,107 +1,110 @@
-package org.apache.jcs.auxiliary.javagroups;
-
-/*
- * Copyright 2001-2004 The Apache Software Foundation.
- *
- * Licensed under the Apache License, Version 2.0 (the "License")
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-import org.apache.jcs.auxiliary.AbstractAuxiliaryCacheAttributes;
-import org.apache.jcs.auxiliary.AuxiliaryCacheAttributes;
-
-/**
- * Attributes used by {@link JavaGroupsCacheFactory#createCache}to configure an
- * instance of {@link JavaGroupsCache}.
- * 
- * <h3>Configurable Properties:</h3>
- * 
- * <dl>
- * <dt>channelFactoryClassName</dt>
- * <dd>Name of an {@link org.jgroups.ChannelFactory}implementation which will
- * be used to create the channel for the instance. Defaults to
- * {@link org.jgroups.JChannelFactory}.</dd>
- * <dt>channelProperties</dt>
- * <dd>A JavaGroups properties object which will be used by the channel to
- * create the protocol stack. Either a properties string, or the URL of a file
- * containing the properties in XML form is valid. Defaults to null which causes
- * the Channel implementation to use its defaults.</dd>
- * </dl>
- * 
- * @version $Id: JavaGroupsCacheAttributes.java,v 1.2 2005/01/07 22:27:54 asmuts
- *          Exp $
- */
-public class JavaGroupsCacheAttributes
-    extends AbstractAuxiliaryCacheAttributes
-    implements AuxiliaryCacheAttributes
-{
-    private String channelFactoryClassName = "org.jgroups.JChannelFactory";
-
-    private String channelProperties = null;
-
-    private boolean getFromPeers = false;
-
-    public String getChannelFactoryClassName()
-    {
-        return channelFactoryClassName;
-    }
-
-    public void setChannelFactoryClassName( String channelFactoryClassName )
-    {
-        this.channelFactoryClassName = channelFactoryClassName;
-    }
-
-    public String getJGChannelProperties()
-    {
-        return channelProperties;
-    }
-
-    public void setChannelProperties( String channelProperties )
-    {
-        this.channelProperties = channelProperties;
-    }
-
-    public boolean isGetFromPeers()
-    {
-        return getFromPeers;
-    }
-
-    public void setGetFromPeers( boolean getFromPeers )
-    {
-        this.getFromPeers = getFromPeers;
-    }
-
-    /**
-     * Return a copy of this JavaGroupsCacheAttributes, cast to an
-     * AuxiliaryCacheAttributes
-     */
-    public AuxiliaryCacheAttributes copy()
-    {
-        return (AuxiliaryCacheAttributes) this.clone();
-    }
-
-    /**
-     * Return a clone of this JavaGroupsCacheAttributes
-     */
-    public Object clone()
-    {
-        JavaGroupsCacheAttributes copy = new JavaGroupsCacheAttributes();
-
-        copy.cacheName = this.cacheName;
-        copy.name = this.name;
-
-        copy.channelFactoryClassName = this.channelFactoryClassName;
-        copy.channelProperties = this.channelProperties;
-
-        return copy;
-    }
-}
+package org.apache.jcs.auxiliary.javagroups;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.apache.jcs.auxiliary.AbstractAuxiliaryCacheAttributes;
+import org.apache.jcs.auxiliary.AuxiliaryCacheAttributes;
+
+/**
+ * Attributes used by {@link JavaGroupsCacheFactory#createCache}to configure an
+ * instance of {@link JavaGroupsCache}.
+ *
+ * <h3>Configurable Properties:</h3>
+ *
+ * <dl>
+ * <dt>channelFactoryClassName</dt>
+ * <dd>Name of an {@link org.jgroups.ChannelFactory}implementation which will
+ * be used to create the channel for the instance. Defaults to
+ * {@link org.jgroups.JChannelFactory}.</dd>
+ * <dt>channelProperties</dt>
+ * <dd>A JavaGroups properties object which will be used by the channel to
+ * create the protocol stack. Either a properties string, or the URL of a file
+ * containing the properties in XML form is valid. Defaults to null which causes
+ * the Channel implementation to use its defaults.</dd>
+ * </dl>
+ *
+ * @version $Id: JavaGroupsCacheAttributes.java,v 1.2 2005/01/07 22:27:54 asmuts
+ *          Exp $
+ */
+public class JavaGroupsCacheAttributes
+    extends AbstractAuxiliaryCacheAttributes
+    implements AuxiliaryCacheAttributes
+{
+    private String channelFactoryClassName = "org.jgroups.JChannelFactory";
+
+    private String channelProperties = null;
+
+    private boolean getFromPeers = false;
+
+    public String getChannelFactoryClassName()
+    {
+        return channelFactoryClassName;
+    }
+
+    public void setChannelFactoryClassName( String channelFactoryClassName )
+    {
+        this.channelFactoryClassName = channelFactoryClassName;
+    }
+
+    public String getJGChannelProperties()
+    {
+        return channelProperties;
+    }
+
+    public void setChannelProperties( String channelProperties )
+    {
+        this.channelProperties = channelProperties;
+    }
+
+    public boolean isGetFromPeers()
+    {
+        return getFromPeers;
+    }
+
+    public void setGetFromPeers( boolean getFromPeers )
+    {
+        this.getFromPeers = getFromPeers;
+    }
+
+    /**
+     * Return a copy of this JavaGroupsCacheAttributes, cast to an
+     * AuxiliaryCacheAttributes
+     */
+    public AuxiliaryCacheAttributes copy()
+    {
+        return (AuxiliaryCacheAttributes) this.clone();
+    }
+
+    /**
+     * Return a clone of this JavaGroupsCacheAttributes
+     */
+    public Object clone()
+    {
+        JavaGroupsCacheAttributes copy = new JavaGroupsCacheAttributes();
+
+        copy.cacheName = this.cacheName;
+        copy.name = this.name;
+
+        copy.channelFactoryClassName = this.channelFactoryClassName;
+        copy.channelProperties = this.channelProperties;
+
+        return copy;
+    }
+}

Modified: jakarta/jcs/trunk/auxiliary-builds/jdk14/src/java/org/apache/jcs/auxiliary/javagroups/JavaGroupsCacheFactory.java
URL: http://svn.apache.org/viewvc/jakarta/jcs/trunk/auxiliary-builds/jdk14/src/java/org/apache/jcs/auxiliary/javagroups/JavaGroupsCacheFactory.java?view=diff&rev=536904&r1=536903&r2=536904
==============================================================================
--- jakarta/jcs/trunk/auxiliary-builds/jdk14/src/java/org/apache/jcs/auxiliary/javagroups/JavaGroupsCacheFactory.java (original)
+++ jakarta/jcs/trunk/auxiliary-builds/jdk14/src/java/org/apache/jcs/auxiliary/javagroups/JavaGroupsCacheFactory.java Thu May 10 09:03:42 2007
@@ -1,97 +1,100 @@
-package org.apache.jcs.auxiliary.javagroups;
- 
-/* 
- * Copyright 2001-2004 The Apache Software Foundation.
- *
- * Licensed under the Apache License, Version 2.0 (the "License")
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.apache.jcs.auxiliary.AuxiliaryCache;
-import org.apache.jcs.auxiliary.AuxiliaryCacheAttributes;
-import org.apache.jcs.auxiliary.AuxiliaryCacheFactory;
-import org.apache.jcs.engine.behavior.ICompositeCacheManager;
-import org.jgroups.Channel;
-import org.jgroups.ChannelFactory;
-
-/**
- * AuxiliaryCacheFactory for creating instances of {@link JavaGroupsCache}for a
- * particular CompositeCache and {@link JavaGroupsCacheAttributes}.
- * 
- * @version $Id: JavaGroupsCacheFactory.java,v 1.2 2004/06/12 02:34:13 asmuts
- *          Exp $
- */
-public class JavaGroupsCacheFactory
-    implements AuxiliaryCacheFactory
-{
-    private final static Log log = LogFactory.getLog( JavaGroupsCacheFactory.class );
-
-    private String name;
-
-    /*
-     * (non-Javadoc)
-     * 
-     * @see org.apache.jcs.auxiliary.AuxiliaryCacheFactory#createCache(org.apache.jcs.auxiliary.AuxiliaryCacheAttributes,
-     *      org.apache.jcs.engine.behavior.ICompositeCacheManager)
-     */
-    public AuxiliaryCache createCache( AuxiliaryCacheAttributes iaca, ICompositeCacheManager cacheMgr )
-    {
-        // ignore the maanger
-
-        try
-        {
-            // Cast provided attributes to JavaGroupsCacheAttributes
-
-            JavaGroupsCacheAttributes attributes = (JavaGroupsCacheAttributes) iaca;
-
-            // Create a ChannelFactory using the classname specified in the
-            // config as 'channelFactoryClassName'
-
-            ChannelFactory factory = (ChannelFactory) Class.forName( attributes.getChannelFactoryClassName() )
-                .newInstance();
-
-            // Create a channel based on 'channelProperties' from the config
-
-            Channel channel = factory.createChannel( attributes.getJGChannelProperties() );
-
-            // Return a new JavaGroupsCache for the new channel.
-
-            return new JavaGroupsCache( cacheMgr, attributes.getCacheName(), channel, attributes.isGetFromPeers() );
-        }
-        catch ( Exception e )
-        {
-            log.error( "Failed to create JavaGroupsCache", e );
-
-            return null;
-        }
-    }
-
-    /**
-     * Accessor for name property
-     * @return String
-     */
-    public String getName()
-    {
-        return this.name;
-    }
-
-    /**
-     * Mutator for name property
-     * @param name
-     */
-    public void setName( String name )
-    {
-        this.name = name;
-    }
-}
+package org.apache.jcs.auxiliary.javagroups;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.apache.jcs.auxiliary.AuxiliaryCache;
+import org.apache.jcs.auxiliary.AuxiliaryCacheAttributes;
+import org.apache.jcs.auxiliary.AuxiliaryCacheFactory;
+import org.apache.jcs.engine.behavior.ICompositeCacheManager;
+import org.jgroups.Channel;
+import org.jgroups.ChannelFactory;
+
+/**
+ * AuxiliaryCacheFactory for creating instances of {@link JavaGroupsCache}for a
+ * particular CompositeCache and {@link JavaGroupsCacheAttributes}.
+ *
+ * @version $Id: JavaGroupsCacheFactory.java,v 1.2 2004/06/12 02:34:13 asmuts
+ *          Exp $
+ */
+public class JavaGroupsCacheFactory
+    implements AuxiliaryCacheFactory
+{
+    private final static Log log = LogFactory.getLog( JavaGroupsCacheFactory.class );
+
+    private String name;
+
+    /*
+     * (non-Javadoc)
+     *
+     * @see org.apache.jcs.auxiliary.AuxiliaryCacheFactory#createCache(org.apache.jcs.auxiliary.AuxiliaryCacheAttributes,
+     *      org.apache.jcs.engine.behavior.ICompositeCacheManager)
+     */
+    public AuxiliaryCache createCache( AuxiliaryCacheAttributes iaca, ICompositeCacheManager cacheMgr )
+    {
+        // ignore the maanger
+
+        try
+        {
+            // Cast provided attributes to JavaGroupsCacheAttributes
+
+            JavaGroupsCacheAttributes attributes = (JavaGroupsCacheAttributes) iaca;
+
+            // Create a ChannelFactory using the classname specified in the
+            // config as 'channelFactoryClassName'
+
+            ChannelFactory factory = (ChannelFactory) Class.forName( attributes.getChannelFactoryClassName() )
+                .newInstance();
+
+            // Create a channel based on 'channelProperties' from the config
+
+            Channel channel = factory.createChannel( attributes.getJGChannelProperties() );
+
+            // Return a new JavaGroupsCache for the new channel.
+
+            return new JavaGroupsCache( cacheMgr, attributes.getCacheName(), channel, attributes.isGetFromPeers() );
+        }
+        catch ( Exception e )
+        {
+            log.error( "Failed to create JavaGroupsCache", e );
+
+            return null;
+        }
+    }
+
+    /**
+     * Accessor for name property
+     * @return String
+     */
+    public String getName()
+    {
+        return this.name;
+    }
+
+    /**
+     * Mutator for name property
+     * @param name
+     */
+    public void setName( String name )
+    {
+        this.name = name;
+    }
+}

Modified: jakarta/jcs/trunk/auxiliary-builds/jdk14/src/java/org/apache/jcs/auxiliary/lateral/LateralCacheFactory.java
URL: http://svn.apache.org/viewvc/jakarta/jcs/trunk/auxiliary-builds/jdk14/src/java/org/apache/jcs/auxiliary/lateral/LateralCacheFactory.java?view=diff&rev=536904&r1=536903&r2=536904
==============================================================================
--- jakarta/jcs/trunk/auxiliary-builds/jdk14/src/java/org/apache/jcs/auxiliary/lateral/LateralCacheFactory.java (original)
+++ jakarta/jcs/trunk/auxiliary-builds/jdk14/src/java/org/apache/jcs/auxiliary/lateral/LateralCacheFactory.java Thu May 10 09:03:42 2007
@@ -1,192 +1,195 @@
-package org.apache.jcs.auxiliary.lateral;
-
-/*
- * Copyright 2001-2004 The Apache Software Foundation.
- *
- * Licensed under the Apache License, Version 2.0 (the "License")
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-import java.util.ArrayList;
-import java.util.StringTokenizer;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.apache.jcs.auxiliary.AuxiliaryCache;
-import org.apache.jcs.auxiliary.AuxiliaryCacheAttributes;
-import org.apache.jcs.auxiliary.lateral.behavior.ILateralCacheAttributes;
-import org.apache.jcs.auxiliary.lateral.javagroups.LateralCacheJGListener;
-import org.apache.jcs.engine.behavior.ICache;
-import org.apache.jcs.engine.behavior.ICompositeCacheManager;
-
-/**
- * Constructs a LateralCacheNoWaitFacade for the given configuration. Each
- * lateral service / local relationship is managed by one manager. This manager
- * canl have multiple caches. The remote relationships are consolidated and
- * restored via these managers. The facade provides a front to the composite
- * cache so the implmenetation is transparent.
- * 
- * This can no longer create TCP laterals
- * 
- * @deprecated use the new TYPE specific lateral factories.
- */
-public class LateralCacheFactory
-    extends LateralCacheAbstractFactory
-{
-    private final static Log log = LogFactory.getLog( LateralCacheFactory.class );
-
-    private String name;
-
-    /*
-     * (non-Javadoc)
-     * 
-     * @see org.apache.jcs.auxiliary.AuxiliaryCacheFactory#createCache(org.apache.jcs.auxiliary.AuxiliaryCacheAttributes,
-     *      org.apache.jcs.engine.behavior.ICompositeCacheManager)
-     */
-    public AuxiliaryCache createCache( AuxiliaryCacheAttributes iaca, ICompositeCacheManager cacheMgr )
-    {
-
-        LateralCacheAttributes lac = (LateralCacheAttributes) iaca;
-        ArrayList noWaits = new ArrayList();
-
-        if ( lac.getTransmissionType() == LateralCacheAttributes.UDP )
-        {
-            LateralCacheManager lcm = LateralCacheManager.getInstance( lac, cacheMgr );
-            ICache ic = lcm.getCache( lac.getCacheName() );
-            if ( ic != null )
-            {
-                noWaits.add( ic );
-            }
-        }
-        else if ( lac.getTransmissionType() == LateralCacheAttributes.JAVAGROUPS )
-        {
-            LateralCacheManager lcm = LateralCacheManager.getInstance( lac, cacheMgr );
-            ICache ic = lcm.getCache( lac.getCacheName() );
-            if ( ic != null )
-            {
-                noWaits.add( ic );
-            }
-
-        }
-        else if ( lac.getTransmissionType() == LateralCacheAttributes.XMLRPC )
-        {
-
-            //pars up the tcp servers and set the tcpServer value and
-            // get the manager and then get the cache
-            //Iterator it = lac.tcpServers.iterator();
-            //while( it.hasNext() ) {
-
-            StringTokenizer it = new StringTokenizer( lac.getHttpServers(), "," );
-            while ( it.hasMoreElements() )
-            {
-                //String server = (String)it.next();
-                String server = (String) it.nextElement();
-                //p( "tcp server = " + server );
-                lac.setHttpServer( server );
-                LateralCacheManager lcm = LateralCacheManager.getInstance( lac, cacheMgr );
-                ICache ic = lcm.getCache( lac.getCacheName() );
-                if ( ic != null )
-                {
-                    noWaits.add( ic );
-                }
-                else
-                {
-                    log.warn( "noWait is null" );
-                }
-            }
-
-        }
-        else if ( lac.getTransmissionType() == LateralCacheAttributes.HTTP )
-        {
-            StringTokenizer it = new StringTokenizer( lac.getHttpServers(), "," );
-            while ( it.hasMoreElements() )
-            {
-                String server = (String) it.nextElement();
-                lac.setHttpServer( server );
-                LateralCacheManager lcm = LateralCacheManager.getInstance( lac, cacheMgr );
-                ICache ic = lcm.getCache( lac.getCacheName() );
-                if ( ic != null )
-                {
-                    noWaits.add( ic );
-                }
-            }
-        }
-
-        createListener( lac, cacheMgr );
-
-        // create the no wait facade.
-        LateralCacheNoWaitFacade lcnwf = new LateralCacheNoWaitFacade( (LateralCacheNoWait[]) noWaits
-            .toArray( new LateralCacheNoWait[0] ), iaca.getCacheName() );
-
-        return lcnwf;
-    }
-
-    /*
-     * (non-Javadoc)
-     * 
-     * @see org.apache.jcs.auxiliary.lateral.LateralCacheAbstractFactory#createListener(org.apache.jcs.auxiliary.lateral.LateralCacheAttributes,
-     *      org.apache.jcs.engine.behavior.ICompositeCacheManager)
-     */
-    public void createListener( LateralCacheAttributes lac, ICompositeCacheManager cacheMgr )
-    {
-        // don't create a listener if we are not receiving.
-        if ( lac.isReceive() )
-        {
-
-            if ( log.isInfoEnabled() )
-            {
-                log.info( "Creating listener for " + lac );
-            }
-
-            try
-            {
-                if ( lac.getTransmissionType() == ILateralCacheAttributes.JAVAGROUPS )
-                {
-                    LateralCacheJGListener.getInstance( lac, cacheMgr );
-                }
-
-            }
-            catch ( Exception e )
-            {
-                log.error( "Problem creating lateral listener", e );
-            }
-        }
-        else
-        {
-            if ( log.isDebugEnabled() )
-            {
-                log.debug( "Not creating a listener since we are not receiving." );
-            }
-        }
-    }
-
-    /**
-     * Gets the name attribute of the LateralCacheFactory object
-     * 
-     * @return The name value
-     */
-    public String getName()
-    {
-        return this.name;
-    }
-
-    /**
-     * Sets the name attribute of the LateralCacheFactory object
-     * 
-     * @param name
-     *            The new name value
-     */
-    public void setName( String name )
-    {
-        this.name = name;
-    }
-}
+package org.apache.jcs.auxiliary.lateral;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.util.ArrayList;
+import java.util.StringTokenizer;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.apache.jcs.auxiliary.AuxiliaryCache;
+import org.apache.jcs.auxiliary.AuxiliaryCacheAttributes;
+import org.apache.jcs.auxiliary.lateral.behavior.ILateralCacheAttributes;
+import org.apache.jcs.auxiliary.lateral.javagroups.LateralCacheJGListener;
+import org.apache.jcs.engine.behavior.ICache;
+import org.apache.jcs.engine.behavior.ICompositeCacheManager;
+
+/**
+ * Constructs a LateralCacheNoWaitFacade for the given configuration. Each
+ * lateral service / local relationship is managed by one manager. This manager
+ * canl have multiple caches. The remote relationships are consolidated and
+ * restored via these managers. The facade provides a front to the composite
+ * cache so the implmenetation is transparent.
+ *
+ * This can no longer create TCP laterals
+ *
+ * @deprecated use the new TYPE specific lateral factories.
+ */
+public class LateralCacheFactory
+    extends LateralCacheAbstractFactory
+{
+    private final static Log log = LogFactory.getLog( LateralCacheFactory.class );
+
+    private String name;
+
+    /*
+     * (non-Javadoc)
+     *
+     * @see org.apache.jcs.auxiliary.AuxiliaryCacheFactory#createCache(org.apache.jcs.auxiliary.AuxiliaryCacheAttributes,
+     *      org.apache.jcs.engine.behavior.ICompositeCacheManager)
+     */
+    public AuxiliaryCache createCache( AuxiliaryCacheAttributes iaca, ICompositeCacheManager cacheMgr )
+    {
+
+        LateralCacheAttributes lac = (LateralCacheAttributes) iaca;
+        ArrayList noWaits = new ArrayList();
+
+        if ( lac.getTransmissionType() == LateralCacheAttributes.UDP )
+        {
+            LateralCacheManager lcm = LateralCacheManager.getInstance( lac, cacheMgr );
+            ICache ic = lcm.getCache( lac.getCacheName() );
+            if ( ic != null )
+            {
+                noWaits.add( ic );
+            }
+        }
+        else if ( lac.getTransmissionType() == LateralCacheAttributes.JAVAGROUPS )
+        {
+            LateralCacheManager lcm = LateralCacheManager.getInstance( lac, cacheMgr );
+            ICache ic = lcm.getCache( lac.getCacheName() );
+            if ( ic != null )
+            {
+                noWaits.add( ic );
+            }
+
+        }
+        else if ( lac.getTransmissionType() == LateralCacheAttributes.XMLRPC )
+        {
+
+            //pars up the tcp servers and set the tcpServer value and
+            // get the manager and then get the cache
+            //Iterator it = lac.tcpServers.iterator();
+            //while( it.hasNext() ) {
+
+            StringTokenizer it = new StringTokenizer( lac.getHttpServers(), "," );
+            while ( it.hasMoreElements() )
+            {
+                //String server = (String)it.next();
+                String server = (String) it.nextElement();
+                //p( "tcp server = " + server );
+                lac.setHttpServer( server );
+                LateralCacheManager lcm = LateralCacheManager.getInstance( lac, cacheMgr );
+                ICache ic = lcm.getCache( lac.getCacheName() );
+                if ( ic != null )
+                {
+                    noWaits.add( ic );
+                }
+                else
+                {
+                    log.warn( "noWait is null" );
+                }
+            }
+
+        }
+        else if ( lac.getTransmissionType() == LateralCacheAttributes.HTTP )
+        {
+            StringTokenizer it = new StringTokenizer( lac.getHttpServers(), "," );
+            while ( it.hasMoreElements() )
+            {
+                String server = (String) it.nextElement();
+                lac.setHttpServer( server );
+                LateralCacheManager lcm = LateralCacheManager.getInstance( lac, cacheMgr );
+                ICache ic = lcm.getCache( lac.getCacheName() );
+                if ( ic != null )
+                {
+                    noWaits.add( ic );
+                }
+            }
+        }
+
+        createListener( lac, cacheMgr );
+
+        // create the no wait facade.
+        LateralCacheNoWaitFacade lcnwf = new LateralCacheNoWaitFacade( (LateralCacheNoWait[]) noWaits
+            .toArray( new LateralCacheNoWait[0] ), iaca.getCacheName() );
+
+        return lcnwf;
+    }
+
+    /*
+     * (non-Javadoc)
+     *
+     * @see org.apache.jcs.auxiliary.lateral.LateralCacheAbstractFactory#createListener(org.apache.jcs.auxiliary.lateral.LateralCacheAttributes,
+     *      org.apache.jcs.engine.behavior.ICompositeCacheManager)
+     */
+    public void createListener( LateralCacheAttributes lac, ICompositeCacheManager cacheMgr )
+    {
+        // don't create a listener if we are not receiving.
+        if ( lac.isReceive() )
+        {
+
+            if ( log.isInfoEnabled() )
+            {
+                log.info( "Creating listener for " + lac );
+            }
+
+            try
+            {
+                if ( lac.getTransmissionType() == ILateralCacheAttributes.JAVAGROUPS )
+                {
+                    LateralCacheJGListener.getInstance( lac, cacheMgr );
+                }
+
+            }
+            catch ( Exception e )
+            {
+                log.error( "Problem creating lateral listener", e );
+            }
+        }
+        else
+        {
+            if ( log.isDebugEnabled() )
+            {
+                log.debug( "Not creating a listener since we are not receiving." );
+            }
+        }
+    }
+
+    /**
+     * Gets the name attribute of the LateralCacheFactory object
+     *
+     * @return The name value
+     */
+    public String getName()
+    {
+        return this.name;
+    }
+
+    /**
+     * Sets the name attribute of the LateralCacheFactory object
+     *
+     * @param name
+     *            The new name value
+     */
+    public void setName( String name )
+    {
+        this.name = name;
+    }
+}

Modified: jakarta/jcs/trunk/auxiliary-builds/jdk14/src/java/org/apache/jcs/auxiliary/lateral/LateralCacheManager.java
URL: http://svn.apache.org/viewvc/jakarta/jcs/trunk/auxiliary-builds/jdk14/src/java/org/apache/jcs/auxiliary/lateral/LateralCacheManager.java?view=diff&rev=536904&r1=536903&r2=536904
==============================================================================
--- jakarta/jcs/trunk/auxiliary-builds/jdk14/src/java/org/apache/jcs/auxiliary/lateral/LateralCacheManager.java (original)
+++ jakarta/jcs/trunk/auxiliary-builds/jdk14/src/java/org/apache/jcs/auxiliary/lateral/LateralCacheManager.java Thu May 10 09:03:42 2007
@@ -1,360 +1,363 @@
-package org.apache.jcs.auxiliary.lateral;
-
-/*
- * Copyright 2001-2004 The Apache Software Foundation.
- *
- * Licensed under the Apache License, Version 2.0 (the "License")
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-import java.io.IOException;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.Map;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.apache.jcs.auxiliary.AuxiliaryCache;
-import org.apache.jcs.auxiliary.lateral.behavior.ILateralCacheAttributes;
-import org.apache.jcs.auxiliary.lateral.behavior.ILateralCacheListener;
-import org.apache.jcs.auxiliary.lateral.behavior.ILateralCacheManager;
-import org.apache.jcs.auxiliary.lateral.behavior.ILateralCacheObserver;
-import org.apache.jcs.auxiliary.lateral.behavior.ILateralCacheService;
-import org.apache.jcs.auxiliary.lateral.javagroups.LateralCacheJGListener;
-import org.apache.jcs.auxiliary.lateral.javagroups.LateralJGService;
-import org.apache.jcs.auxiliary.lateral.socket.tcp.LateralTCPListener;
-import org.apache.jcs.auxiliary.lateral.socket.tcp.LateralTCPService;
-import org.apache.jcs.engine.behavior.ICompositeCacheManager;
-
-/**
- * Creates lateral caches. Lateral caches are primarily used for removing non
- * laterally configured caches. Non laterally configured cache regions should
- * still bea ble to participate in removal. But if there is a non laterally
- * configured cache hub, then lateral removals may be necessary. For flat
- * webserver production environments, without a strong machine at the app server
- * level, distribution and search may need to occur at the lateral cache level.
- * This is currently not implemented in the lateral cache.
- * <p>
- * 
- * @TODO: - need freeCache, release, getStats - need to find an interface
- *        acceptible for all - cache managers or a manager within a type
- * 
- * @deprecated use individual cache managers
- */
-public class LateralCacheManager
-    implements ILateralCacheManager
-{
-    private final static Log log = LogFactory.getLog( LateralCacheManager.class );
-
-    private static LateralCacheMonitor monitor;
-
-    final static Map instances = new HashMap();
-
-    // each manager instance has caches
-    final Map caches = new HashMap();
-
-    /**
-     * Description of the Field
-     */
-    protected ILateralCacheAttributes lca;
-
-    private int clients;
-
-    /**
-     * Handle to the lateral cache service; or a zombie handle if failed to
-     * connect.
-     */
-    private ILateralCacheService lateralService;
-
-    /**
-     * Wrapper of the lateral cache watch service; or wrapper of a zombie
-     * service if failed to connect.
-     */
-    private LateralCacheWatchRepairable lateralWatch;
-
-    private ICompositeCacheManager cacheMgr;
-
-    /**
-     * Returns an instance of the LateralCacheManager.
-     * 
-     * @param lca
-     * @param cacheMgr
-     *            this allows the auxiliary to be passed a cache manager.
-     * @return
-     */
-    public static LateralCacheManager getInstance( ILateralCacheAttributes lca, ICompositeCacheManager cacheMgr )
-    {
-        LateralCacheManager ins = (LateralCacheManager) instances.get( lca.toString() );
-        synchronized ( instances )
-        {
-            if ( ins == null )
-            {
-                log.info( "Instance for [" + lca.toString() + "] is null, creating" );
-
-                ins = (LateralCacheManager) instances.get( lca.toString() );
-                if ( ins == null )
-                {
-                    ins = new LateralCacheManager( lca, cacheMgr );
-                    instances.put( lca.toString(), ins );
-                }
-            }
-        }
-
-        ins.clients++;
-        // Fires up the monitoring daemon.
-        if ( monitor == null )
-        {
-            monitor = new LateralCacheMonitor( ins );
-            // Should never be null
-            if ( monitor != null )
-            {
-                Thread t = new Thread( monitor );
-                t.setDaemon( true );
-                t.start();
-            }
-        }
-        return ins;
-    }
-
-    /**
-     * Constructor for the LateralCacheManager object
-     * 
-     * @param lcaA
-     * @param cacheMgr
-     */
-    private LateralCacheManager( ILateralCacheAttributes lcaA, ICompositeCacheManager cacheMgr )
-    {
-        this.lca = lcaA;
-
-        this.cacheMgr = cacheMgr;
-
-        if ( log.isDebugEnabled() )
-        {
-            log.debug( "Creating lateral cache service, lca = " + this.lca );
-        }
-
-        // need to create the service based on the type
-
-        try
-        {
-            if ( this.lca.getTransmissionType() == ILateralCacheAttributes.JAVAGROUPS )
-            {
-                log.debug( "Creating JAVAGROUPS service" );
-
-                this.lateralService = new LateralJGService( this.lca );
-            }
-
-            else
-            {
-                log.error( "Type not recognized, must zombie" );
-
-                throw new Exception( "no known transmission type for lateral cache." );
-            }
-
-            if ( this.lateralService == null )
-            {
-                log.error( "No service created, must zombie" );
-
-                throw new Exception( "No service created for lateral cache." );
-            }
-
-            this.lateralWatch = new LateralCacheWatchRepairable();
-            this.lateralWatch.setCacheWatch( new ZombieLateralCacheWatch() );
-
-        }
-        catch ( Exception ex )
-        {
-            // Failed to connect to the lateral server.
-            // Configure this LateralCacheManager instance to use the
-            // "zombie" services.
-
-            log.error( "Failure, lateral instance will use zombie service", ex );
-
-            this.lateralService = new ZombieLateralCacheService();
-            this.lateralWatch = new LateralCacheWatchRepairable();
-            this.lateralWatch.setCacheWatch( new ZombieLateralCacheWatch() );
-
-            // Notify the cache monitor about the error, and kick off
-            // the recovery process.
-            monitor.notifyError();
-        }
-    }
-
-    /**
-     * Adds the lateral cache listener to the underlying cache-watch service.
-     * 
-     * @param cacheName
-     *            The feature to be added to the LateralCacheListener attribute
-     * @param listener
-     *            The feature to be added to the LateralCacheListener attribute
-     * @exception IOException
-     */
-    public void addLateralCacheListener( String cacheName, ILateralCacheListener listener )
-        throws IOException
-    {
-        synchronized ( this.caches )
-        {
-            this.lateralWatch.addCacheListener( cacheName, listener );
-        }
-    }
-
-    /**
-     * Called to access a precreated region or construct one with defaults.
-     * Since all aux cache access goes through the manager, this will never be
-     * called.
-     * <p>
-     * After getting the manager instance for a server, the factory gets a cache
-     * for the region name it is constructing.
-     * <p>
-     * There should be one manager per server and one cache per region per
-     * manager.
-     * 
-     * @return AuxiliaryCache
-     * @param cacheName
-     */
-    public AuxiliaryCache getCache( String cacheName )
-    {
-        LateralCacheNoWait c = null;
-        synchronized ( this.caches )
-        {
-            c = (LateralCacheNoWait) this.caches.get( cacheName );
-            if ( c == null )
-            {
-                LateralCacheAttributes attr = (LateralCacheAttributes) lca.copy();
-                attr.setCacheName( cacheName );
-                LateralCache cache = new LateralCache( attr, this.lateralService, monitor );
-                if ( log.isDebugEnabled() )
-                {
-                    log.debug( "Created cache for noWait, cache = [" + cache + "]" );
-                }
-                c = new LateralCacheNoWait( cache );
-                this.caches.put( cacheName, c );
-
-                log.info( "Created LateralCacheNoWait for " + this.lca + " LateralCacheNoWait = [" + c + "]" );
-            }
-        }
-
-        // don't create a listener if we are not receiving.
-        if ( lca.isReceive() )
-        {
-            try
-            {
-                if ( this.lca.getTransmissionType() == ILateralCacheAttributes.JAVAGROUPS )
-                {
-                    addLateralCacheListener( cacheName, LateralCacheJGListener.getInstance( this.lca, cacheMgr ) );
-                }
-            }
-            catch ( IOException ioe )
-            {
-                log.error( "Problem creating lateral listener", ioe );
-            }
-            catch ( Exception e )
-            {
-                log.error( "Problem creating lateral listener", e );
-            }
-        }
-        else
-        {
-            if ( log.isDebugEnabled() )
-            {
-                log.debug( "Not creating a listener since we are not receiving." );
-            }
-        }
-
-        // TODO: need listener repair
-
-        return c;
-    }
-
-    /**
-     * Gets the cacheType attribute of the LateralCacheManager object
-     * 
-     * @return The cache type value
-     */
-    public int getCacheType()
-    {
-        return LATERAL_CACHE;
-    }
-
-    /**
-     * Gets the stats attribute of the LateralCacheManager object
-     * 
-     * @return String
-     */
-    public String getStats()
-    {
-        // add something here
-        return "";
-    }
-
-    /**
-     * Fixes up all the caches managed by this cache manager.
-     * 
-     * @param lateralService
-     * @param lateralWatch
-     */
-    public void fixCaches( ILateralCacheService lateralService, ILateralCacheObserver lateralWatch )
-    {
-        log.debug( "Fixing lateral caches:" );
-
-        synchronized ( this.caches )
-        {
-            this.lateralService = lateralService;
-            // need to implment an observer for some types of laterals( http and
-            // tcp)
-            //this.lateralWatch.setCacheWatch(lateralWatch);
-            for ( Iterator en = this.caches.values().iterator(); en.hasNext(); )
-            {
-                LateralCacheNoWait cache = (LateralCacheNoWait) en.next();
-                cache.fixCache( this.lateralService );
-            }
-        }
-    }
-
-    /*
-     * (non-Javadoc)
-     * 
-     * @see org.apache.jcs.auxiliary.lateral.behavior.ILateralCacheManager#getInstances()
-     */
-    public Map getInstances()
-    {
-        return instances;
-    }
-
-    /* (non-Javadoc)
-     * @see org.apache.jcs.auxiliary.lateral.behavior.ILateralCacheManager#getCaches()
-     */
-    public Map getCaches()
-    {
-        // TODO Auto-generated method stub
-        return null;
-    }
-
-    /* (non-Javadoc)
-     * @see org.apache.jcs.auxiliary.lateral.behavior.ILateralCacheManager#fixService()
-     */
-    public Object fixService()
-        throws IOException
-    {
-        Object service = null;
-        try
-        {
-            // no op
-        }
-        catch ( Exception ex )
-        {
-            log.error( "Can't fix " + ex.getMessage() );
-            throw new IOException( "Can't fix " + ex.getMessage() );
-        }
-        return service;
-    }
-}
+package org.apache.jcs.auxiliary.lateral;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.io.IOException;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.Map;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.apache.jcs.auxiliary.AuxiliaryCache;
+import org.apache.jcs.auxiliary.lateral.behavior.ILateralCacheAttributes;
+import org.apache.jcs.auxiliary.lateral.behavior.ILateralCacheListener;
+import org.apache.jcs.auxiliary.lateral.behavior.ILateralCacheManager;
+import org.apache.jcs.auxiliary.lateral.behavior.ILateralCacheObserver;
+import org.apache.jcs.auxiliary.lateral.behavior.ILateralCacheService;
+import org.apache.jcs.auxiliary.lateral.javagroups.LateralCacheJGListener;
+import org.apache.jcs.auxiliary.lateral.javagroups.LateralJGService;
+import org.apache.jcs.auxiliary.lateral.socket.tcp.LateralTCPListener;
+import org.apache.jcs.auxiliary.lateral.socket.tcp.LateralTCPService;
+import org.apache.jcs.engine.behavior.ICompositeCacheManager;
+
+/**
+ * Creates lateral caches. Lateral caches are primarily used for removing non
+ * laterally configured caches. Non laterally configured cache regions should
+ * still bea ble to participate in removal. But if there is a non laterally
+ * configured cache hub, then lateral removals may be necessary. For flat
+ * webserver production environments, without a strong machine at the app server
+ * level, distribution and search may need to occur at the lateral cache level.
+ * This is currently not implemented in the lateral cache.
+ * <p>
+ *
+ * @TODO: - need freeCache, release, getStats - need to find an interface
+ *        acceptible for all - cache managers or a manager within a type
+ *
+ * @deprecated use individual cache managers
+ */
+public class LateralCacheManager
+    implements ILateralCacheManager
+{
+    private final static Log log = LogFactory.getLog( LateralCacheManager.class );
+
+    private static LateralCacheMonitor monitor;
+
+    final static Map instances = new HashMap();
+
+    // each manager instance has caches
+    final Map caches = new HashMap();
+
+    /**
+     * Description of the Field
+     */
+    protected ILateralCacheAttributes lca;
+
+    private int clients;
+
+    /**
+     * Handle to the lateral cache service; or a zombie handle if failed to
+     * connect.
+     */
+    private ILateralCacheService lateralService;
+
+    /**
+     * Wrapper of the lateral cache watch service; or wrapper of a zombie
+     * service if failed to connect.
+     */
+    private LateralCacheWatchRepairable lateralWatch;
+
+    private ICompositeCacheManager cacheMgr;
+
+    /**
+     * Returns an instance of the LateralCacheManager.
+     *
+     * @param lca
+     * @param cacheMgr
+     *            this allows the auxiliary to be passed a cache manager.
+     * @return
+     */
+    public static LateralCacheManager getInstance( ILateralCacheAttributes lca, ICompositeCacheManager cacheMgr )
+    {
+        LateralCacheManager ins = (LateralCacheManager) instances.get( lca.toString() );
+        synchronized ( instances )
+        {
+            if ( ins == null )
+            {
+                log.info( "Instance for [" + lca.toString() + "] is null, creating" );
+
+                ins = (LateralCacheManager) instances.get( lca.toString() );
+                if ( ins == null )
+                {
+                    ins = new LateralCacheManager( lca, cacheMgr );
+                    instances.put( lca.toString(), ins );
+                }
+            }
+        }
+
+        ins.clients++;
+        // Fires up the monitoring daemon.
+        if ( monitor == null )
+        {
+            monitor = new LateralCacheMonitor( ins );
+            // Should never be null
+            if ( monitor != null )
+            {
+                Thread t = new Thread( monitor );
+                t.setDaemon( true );
+                t.start();
+            }
+        }
+        return ins;
+    }
+
+    /**
+     * Constructor for the LateralCacheManager object
+     *
+     * @param lcaA
+     * @param cacheMgr
+     */
+    private LateralCacheManager( ILateralCacheAttributes lcaA, ICompositeCacheManager cacheMgr )
+    {
+        this.lca = lcaA;
+
+        this.cacheMgr = cacheMgr;
+
+        if ( log.isDebugEnabled() )
+        {
+            log.debug( "Creating lateral cache service, lca = " + this.lca );
+        }
+
+        // need to create the service based on the type
+
+        try
+        {
+            if ( this.lca.getTransmissionType() == ILateralCacheAttributes.JAVAGROUPS )
+            {
+                log.debug( "Creating JAVAGROUPS service" );
+
+                this.lateralService = new LateralJGService( this.lca );
+            }
+
+            else
+            {
+                log.error( "Type not recognized, must zombie" );
+
+                throw new Exception( "no known transmission type for lateral cache." );
+            }
+
+            if ( this.lateralService == null )
+            {
+                log.error( "No service created, must zombie" );
+
+                throw new Exception( "No service created for lateral cache." );
+            }
+
+            this.lateralWatch = new LateralCacheWatchRepairable();
+            this.lateralWatch.setCacheWatch( new ZombieLateralCacheWatch() );
+
+        }
+        catch ( Exception ex )
+        {
+            // Failed to connect to the lateral server.
+            // Configure this LateralCacheManager instance to use the
+            // "zombie" services.
+
+            log.error( "Failure, lateral instance will use zombie service", ex );
+
+            this.lateralService = new ZombieLateralCacheService();
+            this.lateralWatch = new LateralCacheWatchRepairable();
+            this.lateralWatch.setCacheWatch( new ZombieLateralCacheWatch() );
+
+            // Notify the cache monitor about the error, and kick off
+            // the recovery process.
+            monitor.notifyError();
+        }
+    }
+
+    /**
+     * Adds the lateral cache listener to the underlying cache-watch service.
+     *
+     * @param cacheName
+     *            The feature to be added to the LateralCacheListener attribute
+     * @param listener
+     *            The feature to be added to the LateralCacheListener attribute
+     * @exception IOException
+     */
+    public void addLateralCacheListener( String cacheName, ILateralCacheListener listener )
+        throws IOException
+    {
+        synchronized ( this.caches )
+        {
+            this.lateralWatch.addCacheListener( cacheName, listener );
+        }
+    }
+
+    /**
+     * Called to access a precreated region or construct one with defaults.
+     * Since all aux cache access goes through the manager, this will never be
+     * called.
+     * <p>
+     * After getting the manager instance for a server, the factory gets a cache
+     * for the region name it is constructing.
+     * <p>
+     * There should be one manager per server and one cache per region per
+     * manager.
+     *
+     * @return AuxiliaryCache
+     * @param cacheName
+     */
+    public AuxiliaryCache getCache( String cacheName )
+    {
+        LateralCacheNoWait c = null;
+        synchronized ( this.caches )
+        {
+            c = (LateralCacheNoWait) this.caches.get( cacheName );
+            if ( c == null )
+            {
+                LateralCacheAttributes attr = (LateralCacheAttributes) lca.copy();
+                attr.setCacheName( cacheName );
+                LateralCache cache = new LateralCache( attr, this.lateralService, monitor );
+                if ( log.isDebugEnabled() )
+                {
+                    log.debug( "Created cache for noWait, cache = [" + cache + "]" );
+                }
+                c = new LateralCacheNoWait( cache );
+                this.caches.put( cacheName, c );
+
+                log.info( "Created LateralCacheNoWait for " + this.lca + " LateralCacheNoWait = [" + c + "]" );
+            }
+        }
+
+        // don't create a listener if we are not receiving.
+        if ( lca.isReceive() )
+        {
+            try
+            {
+                if ( this.lca.getTransmissionType() == ILateralCacheAttributes.JAVAGROUPS )
+                {
+                    addLateralCacheListener( cacheName, LateralCacheJGListener.getInstance( this.lca, cacheMgr ) );
+                }
+            }
+            catch ( IOException ioe )
+            {
+                log.error( "Problem creating lateral listener", ioe );
+            }
+            catch ( Exception e )
+            {
+                log.error( "Problem creating lateral listener", e );
+            }
+        }
+        else
+        {
+            if ( log.isDebugEnabled() )
+            {
+                log.debug( "Not creating a listener since we are not receiving." );
+            }
+        }
+
+        // TODO: need listener repair
+
+        return c;
+    }
+
+    /**
+     * Gets the cacheType attribute of the LateralCacheManager object
+     *
+     * @return The cache type value
+     */
+    public int getCacheType()
+    {
+        return LATERAL_CACHE;
+    }
+
+    /**
+     * Gets the stats attribute of the LateralCacheManager object
+     *
+     * @return String
+     */
+    public String getStats()
+    {
+        // add something here
+        return "";
+    }
+
+    /**
+     * Fixes up all the caches managed by this cache manager.
+     *
+     * @param lateralService
+     * @param lateralWatch
+     */
+    public void fixCaches( ILateralCacheService lateralService, ILateralCacheObserver lateralWatch )
+    {
+        log.debug( "Fixing lateral caches:" );
+
+        synchronized ( this.caches )
+        {
+            this.lateralService = lateralService;
+            // need to implment an observer for some types of laterals( http and
+            // tcp)
+            //this.lateralWatch.setCacheWatch(lateralWatch);
+            for ( Iterator en = this.caches.values().iterator(); en.hasNext(); )
+            {
+                LateralCacheNoWait cache = (LateralCacheNoWait) en.next();
+                cache.fixCache( this.lateralService );
+            }
+        }
+    }
+
+    /*
+     * (non-Javadoc)
+     *
+     * @see org.apache.jcs.auxiliary.lateral.behavior.ILateralCacheManager#getInstances()
+     */
+    public Map getInstances()
+    {
+        return instances;
+    }
+
+    /* (non-Javadoc)
+     * @see org.apache.jcs.auxiliary.lateral.behavior.ILateralCacheManager#getCaches()
+     */
+    public Map getCaches()
+    {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    /* (non-Javadoc)
+     * @see org.apache.jcs.auxiliary.lateral.behavior.ILateralCacheManager#fixService()
+     */
+    public Object fixService()
+        throws IOException
+    {
+        Object service = null;
+        try
+        {
+            // no op
+        }
+        catch ( Exception ex )
+        {
+            log.error( "Can't fix " + ex.getMessage() );
+            throw new IOException( "Can't fix " + ex.getMessage() );
+        }
+        return service;
+    }
+}



---------------------------------------------------------------------
To unsubscribe, e-mail: jcs-dev-unsubscribe@jakarta.apache.org
For additional commands, e-mail: jcs-dev-help@jakarta.apache.org