jakarta-jcs-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From asm...@apache.org
Subject svn commit: r280251 [2/2] - in /jakarta/jcs/trunk/auxiliary-builds/jdk14/src/java/org/apache/jcs/auxiliary: javagroups/ lateral/ lateral/javagroups/ lateral/javagroups/behavior/ lateral/javagroups/utils/
Date Mon, 12 Sep 2005 04:26:59 GMT
Added: jakarta/jcs/trunk/auxiliary-builds/jdk14/src/java/org/apache/jcs/auxiliary/lateral/javagroups/LateralJGReceiver.java
URL: http://svn.apache.org/viewcvs/jakarta/jcs/trunk/auxiliary-builds/jdk14/src/java/org/apache/jcs/auxiliary/lateral/javagroups/LateralJGReceiver.java?rev=280251&view=auto
==============================================================================
--- jakarta/jcs/trunk/auxiliary-builds/jdk14/src/java/org/apache/jcs/auxiliary/lateral/javagroups/LateralJGReceiver.java
(added)
+++ jakarta/jcs/trunk/auxiliary-builds/jdk14/src/java/org/apache/jcs/auxiliary/lateral/javagroups/LateralJGReceiver.java
Sun Sep 11 21:26:41 2005
@@ -0,0 +1,158 @@
+package org.apache.jcs.auxiliary.lateral.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 org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.apache.jcs.auxiliary.lateral.behavior.ILateralCacheAttributes;
+import org.apache.jcs.auxiliary.lateral.javagroups.behavior.IJGConstants;
+import org.apache.jcs.auxiliary.lateral.javagroups.behavior.ILateralCacheJGListener;
+import org.jgroups.Channel;
+import org.jgroups.ChannelNotConnectedException;
+import org.jgroups.Message;
+import org.jgroups.blocks.RpcDispatcher;
+
+/**
+ * Processes commands from the server socket.
+ * 
+ * @version $Id: LateralJGReceiver.java 224346 2005-06-04 02:01:59Z asmuts $
+ */
+public class LateralJGReceiver
+    implements IJGConstants, Runnable
+{
+    private final static Log log = LogFactory.getLog( LateralJGReceiver.class );
+
+    private ILateralCacheJGListener ilcl;
+
+    private ILateralCacheAttributes ilca;
+
+    /**
+     * Main processing method for the LateralJGReceiver object
+     */
+    public void run()
+    {
+        try
+        {
+            if ( log.isDebugEnabled() )
+            {
+                log.debug( "Listening" );
+            }
+
+            JGConnectionHolder holder = JGConnectionHolder.getInstance( ilca );
+            Channel javagroups = holder.getChannel();
+
+            // don't need a dispatcher unless we are allowing gets.
+            // gets are not supported right now.
+            if ( !ilca.getPutOnlyMode() )
+            {
+                RpcDispatcher disp = holder.getDispatcher();
+                if ( log.isDebugEnabled() )
+                {
+                    log.debug( "Dispatcher = " + disp );
+                }
+            }
+
+            if ( javagroups == null )
+            {
+                log.error( "JavaGroups is null" );
+                throw new IOException( "javagroups is null" );
+            }
+
+            int conProbCnt = 0;
+            while ( true )
+            {
+                if ( log.isDebugEnabled() )
+                {
+                    log.debug( "Wating for messages." );
+                }
+
+                Message mes = null;
+                try
+                {
+                    Object obj = javagroups.receive( 0 );
+                    if ( obj != null && obj instanceof org.jgroups.Message )
+                    {
+                        mes = (Message) obj;
+                        if ( log.isDebugEnabled() )
+                        {
+                            log.debug( "Starting new socket node." );
+                        }
+                        new Thread( new LateralJGReceiverConnection( mes, ilcl ) ).start();
+                    }
+                    else
+                    {
+                        if ( log.isDebugEnabled() )
+                        {
+                            log.debug( "Received unknown object from jgroups = " + obj );
+                        }
+                    }
+                }
+                catch ( ChannelNotConnectedException cnce )
+                {
+                    if ( conProbCnt % 20 == 0 )
+                    {
+                        log.warn( cnce );
+                    }
+                    conProbCnt++;
+
+                    if ( conProbCnt >= 2000 )
+                    {
+                        log.error( "Couldn't get connected to group after " + conProbCnt
+ " tries" );
+                        break;
+                    }
+                    // slow the connection try process down
+                    synchronized ( this )
+                    {
+                        this.wait( 100 );
+                    }
+                    // this will cycle unitl connected and eat up the processor
+                    // need to throw out and recover
+                    // seems to periodically require about 50 tries.
+                }
+                catch ( Exception e )
+                {
+                    // should zombie
+                    log.error( "problem receiving", e );
+                }
+
+            }
+        }
+        catch ( Exception e )
+        {
+            log.error( "Major connection problem", e );
+        }
+    }
+
+    /**
+     * Constructor for the LateralJGReceiver object
+     * 
+     * @param ilcl
+     * @param ilca
+     */
+    public LateralJGReceiver( ILateralCacheAttributes ilca, ILateralCacheJGListener ilcl
)
+    {
+
+        this.ilcl = ilcl;
+        this.ilca = ilca;
+        if ( log.isDebugEnabled() )
+        {
+            log.debug( "ilcl = " + ilcl );
+        }
+    }
+}

Added: jakarta/jcs/trunk/auxiliary-builds/jdk14/src/java/org/apache/jcs/auxiliary/lateral/javagroups/LateralJGReceiverConnection.java
URL: http://svn.apache.org/viewcvs/jakarta/jcs/trunk/auxiliary-builds/jdk14/src/java/org/apache/jcs/auxiliary/lateral/javagroups/LateralJGReceiverConnection.java?rev=280251&view=auto
==============================================================================
--- jakarta/jcs/trunk/auxiliary-builds/jdk14/src/java/org/apache/jcs/auxiliary/lateral/javagroups/LateralJGReceiverConnection.java
(added)
+++ jakarta/jcs/trunk/auxiliary-builds/jdk14/src/java/org/apache/jcs/auxiliary/lateral/javagroups/LateralJGReceiverConnection.java
Sun Sep 11 21:26:41 2005
@@ -0,0 +1,139 @@
+package org.apache.jcs.auxiliary.lateral.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.Serializable;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.apache.jcs.auxiliary.lateral.LateralCacheInfo;
+import org.apache.jcs.auxiliary.lateral.LateralElementDescriptor;
+import org.apache.jcs.auxiliary.lateral.javagroups.behavior.ILateralCacheJGListener;
+import org.jgroups.Message;
+
+/**
+ * Separate thread run when a command comes into the LateralJGReceiver.
+ * 
+ * @version $Id: LateralJGReceiverConnection.java,v 1.7 2002/02/15 04:33:37
+ *          jtaylor Exp $
+ */
+public class LateralJGReceiverConnection
+    implements Runnable
+{
+
+    private final static Log log = LogFactory.getLog( LateralJGReceiverConnection.class );
+
+    //private Channel javagroups;
+    private Message mes;
+
+    private ILateralCacheJGListener ilcl;
+
+    /**
+     * Constructor for the LateralJGReceiverConnection object
+     * 
+     * @param mes
+     *            The JGroups message
+     * @param ilcl
+     */
+    public LateralJGReceiverConnection( Message mes, ILateralCacheJGListener ilcl )
+    {
+        this.ilcl = ilcl;
+        this.mes = mes;
+    }
+
+    /**
+     * Main processing method for the LateralJGReceiverConnection object
+     * 
+     * @return
+     * @param led
+     */
+    public void run()
+    {
+        Object obj = null;
+        try
+        {
+            obj = mes.getObject();
+            LateralElementDescriptor led = (LateralElementDescriptor)obj;
+            if ( led == null )
+            {
+                log.warn( "LateralElementDescriptor is null! Can't do anything." );
+            }
+            else
+            {
+                if ( led.requesterId == LateralCacheInfo.listenerId )
+                {
+                    log.debug( "from self" );
+                }
+                else
+                {
+                    if ( log.isDebugEnabled() )
+                    {
+                        log.debug( "receiving LateralElementDescriptor from another, led
= " + ", led = " + led
+                            + ", led.command = " + led.command + ", led.ce = " + led.ce +
", ilcl = " + ilcl );
+                    }
+                    if ( led.command == LateralElementDescriptor.UPDATE )
+                    {
+                        ilcl.handlePut( led.ce );
+                    }
+                    else if ( led.command == LateralElementDescriptor.REMOVE )
+                    {
+                        ilcl.handleRemove( led.ce.getCacheName(), led.ce.getKey() );
+                    }
+                    else if ( led.command == LateralElementDescriptor.GET )
+                    {
+                        /* Serializable obj = */getAndRespond( led.ce.getCacheName(), led.ce.getKey()
);
+
+                    }
+                }
+            }
+
+        }
+        catch ( java.io.EOFException e )
+        {
+            log.info( "Caught java.io.EOFException closing connection." );
+        }
+        catch ( java.net.SocketException e )
+        {
+            log.info( "Caught java.net.SocketException closing connection." );
+        }
+        catch ( Exception e )
+        {
+            log.error( "Unexpected exception. obj = " + obj, e );
+        }
+    }
+
+    /**
+     * Send back the object if found.
+     * 
+     * @return The {3} value
+     * @param cacheName
+     * @param key
+     * @exception Exception
+     */
+    private Serializable getAndRespond( String cacheName, Serializable key )
+        throws Exception
+    {
+        Serializable obj = ilcl.handleGet( cacheName, key );
+
+        if ( log.isDebugEnabled() )
+        {
+            log.debug( "obj = " + obj );
+        }
+
+        return obj;
+    }
+}

Added: jakarta/jcs/trunk/auxiliary-builds/jdk14/src/java/org/apache/jcs/auxiliary/lateral/javagroups/LateralJGSender.java
URL: http://svn.apache.org/viewcvs/jakarta/jcs/trunk/auxiliary-builds/jdk14/src/java/org/apache/jcs/auxiliary/lateral/javagroups/LateralJGSender.java?rev=280251&view=auto
==============================================================================
--- jakarta/jcs/trunk/auxiliary-builds/jdk14/src/java/org/apache/jcs/auxiliary/lateral/javagroups/LateralJGSender.java
(added)
+++ jakarta/jcs/trunk/auxiliary-builds/jdk14/src/java/org/apache/jcs/auxiliary/lateral/javagroups/LateralJGSender.java
Sun Sep 11 21:26:41 2005
@@ -0,0 +1,309 @@
+package org.apache.jcs.auxiliary.lateral.javagroups;
+
+/*
+ * Copyright 2002-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.Iterator;
+import java.util.Vector;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.apache.jcs.auxiliary.lateral.LateralCacheInfo;
+import org.apache.jcs.auxiliary.lateral.LateralElementDescriptor;
+import org.apache.jcs.auxiliary.lateral.behavior.ILateralCacheAttributes;
+import org.apache.jcs.auxiliary.lateral.javagroups.behavior.IJGConstants;
+import org.apache.jcs.engine.CacheElement;
+import org.apache.jcs.engine.behavior.ICacheElement;
+import org.jgroups.Channel;
+import org.jgroups.Message;
+import org.jgroups.blocks.GroupRequest;
+import org.jgroups.blocks.MethodCall;
+import org.jgroups.blocks.RpcDispatcher;
+import org.jgroups.util.RspList;
+
+/**
+ * This class is based on the log4j SocketAppender class. I'm using a differnet
+ * repair structure, so it is significant;y different.
+ * 
+ * @version $Id: LateralJGSender.java 240226 2005-08-26 12:47:59Z asmuts $
+ */
+public class LateralJGSender
+    implements IJGConstants
+{
+    private final static Log log = LogFactory.getLog( LateralJGSender.class );
+
+    private ILateralCacheAttributes ilca;
+
+    int port = 1111;
+
+    private Channel javagroups;
+
+    private RpcDispatcher disp;
+
+    private JGConnectionHolder holder;
+
+    int counter = 0;
+
+    /**
+     * Constructor for the LateralJGSender object
+     * 
+     * @param lca
+     * @exception IOException
+     */
+    public LateralJGSender( ILateralCacheAttributes lca )
+        throws IOException
+    {
+        this.ilca = lca;
+        init();
+    }
+
+    /**
+     * Create holder.
+     * 
+     * @exception IOException
+     */
+    protected void init()
+        throws IOException
+    {
+
+        try
+        {
+            log.debug( "Attempting ccreate channel." );
+
+            holder = JGConnectionHolder.getInstance( ilca );
+            javagroups = holder.getChannel();
+
+            if ( javagroups == null )
+            {
+                throw new IOException( "javagroups is null" );
+            }
+
+        }
+        catch ( java.net.ConnectException e )
+        {
+            log.debug( "Remote host refused connection." );
+            throw e;
+        }
+        catch ( Exception e )
+        {
+            log.debug( "Could not connect to channel.", e );
+            throw new IOException( e.getMessage() );
+        }
+
+    }
+
+    // end constructor
+
+    /**
+     * Sends commands to the lateral cache listener.
+     * 
+     * @param led
+     * @exception IOException
+     */
+    public void send( LateralElementDescriptor led )
+        throws IOException
+    {
+        log.debug( "sending LateralElementDescriptor" );
+
+        if ( led == null )
+        {
+            return;
+        }
+
+        try
+        {
+
+            Message send_msg = new Message( null, null, led );
+
+            javagroups.send( send_msg );
+
+        }
+        catch ( Exception e )
+        {
+            log.error( "Detected problem with connection: " + e );
+            throw new IOException( e.getMessage() );
+        }
+
+    }
+
+    /**
+     * Sends commands to the lateral cache listener and gets a response.
+     * 
+     * @return
+     * @param led
+     * @exception IOException
+     */
+    public ICacheElement sendAndReceive( LateralElementDescriptor led )
+        throws IOException
+    {
+        ICacheElement ice = null;
+
+        log.debug( "SendAndReceive led" );
+
+        if ( led == null )
+        {
+            return null;
+        }
+
+        try
+        {
+
+            try
+            {
+
+                disp = holder.getDispatcher();
+                Object[] args = { led.ce.getCacheName(), led.ce.getKey() };
+                String[] sigs = { java.lang.String.class.getName(), java.io.Serializable.class.getName()
};
+                MethodCall meth = new MethodCall( "handleGet", args, sigs );
+                RspList rsp_list = disp.callRemoteMethods( null, meth, GroupRequest.GET_ALL,
1000 );
+
+                log.debug( "rsp_list = " + rsp_list );
+                Vector vec = rsp_list.getResults();
+                log.debug( "rsp_list size = " + vec.size() );
+                Iterator it = vec.iterator();
+
+                while ( it.hasNext() )
+                {
+                    ice = (ICacheElement) it.next();
+                    if ( ice != null )
+                    {
+                        break;
+                    }
+                }
+
+            }
+            catch ( Exception e )
+            {
+                log.error( e );
+            }
+
+        }
+        catch ( Exception e )
+        {
+            log.error( "Detected problem with connection.", e );
+            throw new IOException( e.getMessage() );
+        }
+        //        }
+        return ice;
+    }// end sendAndReceive
+
+    // Service Methods //
+    /**
+     * Description of the Method
+     * 
+     * @param item
+     * @param requesterId
+     * @exception IOException
+     */
+    public void update( ICacheElement item, long requesterId )
+        throws IOException
+    {
+        LateralElementDescriptor led = new LateralElementDescriptor( item );
+        led.requesterId = requesterId;
+        led.command = LateralElementDescriptor.UPDATE;
+        send( led );
+    }
+
+    /**
+     * Description of the Method
+     * 
+     * @param cacheName
+     * @param key
+     * @exception IOException
+     */
+    public void remove( String cacheName, Serializable key )
+        throws IOException
+    {
+        remove( cacheName, key, LateralCacheInfo.listenerId );
+    }
+
+    /**
+     * Description of the Method
+     * 
+     * @param cacheName
+     * @param key
+     * @param requesterId
+     * @exception IOException
+     */
+    public void remove( String cacheName, Serializable key, long requesterId )
+        throws IOException
+    {
+        CacheElement ce = new CacheElement( cacheName, key, null );
+        LateralElementDescriptor led = new LateralElementDescriptor( ce );
+        led.requesterId = requesterId;
+        led.command = LateralElementDescriptor.REMOVE;
+        send( led );
+    }
+
+    /**
+     * Description of the Method
+     * 
+     * @exception IOException
+     */
+    public void release()
+        throws IOException
+    {
+        // nothing needs to be done
+    }
+
+    /**
+     * Closes connection used by all LateralJGSenders for this lateral
+     * conneciton. Dispose request should come into the facade and be sent to
+     * all lateral cache sevices. The lateral cache service will then call this
+     * method.
+     * 
+     * @param cache
+     * @exception IOException
+     */
+    public void dispose( String cache )
+        throws IOException
+    {
+
+    }
+
+    /**
+     * Description of the Method
+     * 
+     * @param cacheName
+     * @exception IOException
+     */
+    public void removeAll( String cacheName )
+        throws IOException
+    {
+        removeAll( cacheName, LateralCacheInfo.listenerId );
+    }
+
+    /**
+     * Description of the Method
+     * 
+     * @param cacheName
+     * @param requesterId
+     * @exception IOException
+     */
+    public void removeAll( String cacheName, long requesterId )
+        throws IOException
+    {
+        CacheElement ce = new CacheElement( cacheName, "ALL", null );
+        LateralElementDescriptor led = new LateralElementDescriptor( ce );
+        led.requesterId = requesterId;
+        led.command = LateralElementDescriptor.REMOVEALL;
+        send( led );
+    }
+
+}
+// end class

Added: jakarta/jcs/trunk/auxiliary-builds/jdk14/src/java/org/apache/jcs/auxiliary/lateral/javagroups/LateralJGService.java
URL: http://svn.apache.org/viewcvs/jakarta/jcs/trunk/auxiliary-builds/jdk14/src/java/org/apache/jcs/auxiliary/lateral/javagroups/LateralJGService.java?rev=280251&view=auto
==============================================================================
--- jakarta/jcs/trunk/auxiliary-builds/jdk14/src/java/org/apache/jcs/auxiliary/lateral/javagroups/LateralJGService.java
(added)
+++ jakarta/jcs/trunk/auxiliary-builds/jdk14/src/java/org/apache/jcs/auxiliary/lateral/javagroups/LateralJGService.java
Sun Sep 11 21:26:41 2005
@@ -0,0 +1,289 @@
+package org.apache.jcs.auxiliary.lateral.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.BufferedReader;
+import java.io.IOException;
+import java.io.InputStreamReader;
+import java.io.Serializable;
+import java.util.Set;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.apache.jcs.auxiliary.lateral.LateralCacheAttributes;
+import org.apache.jcs.auxiliary.lateral.LateralCacheInfo;
+import org.apache.jcs.auxiliary.lateral.LateralElementDescriptor;
+import org.apache.jcs.auxiliary.lateral.behavior.ILateralCacheAttributes;
+import org.apache.jcs.auxiliary.lateral.behavior.ILateralCacheObserver;
+import org.apache.jcs.auxiliary.lateral.behavior.ILateralCacheService;
+import org.apache.jcs.engine.CacheElement;
+import org.apache.jcs.engine.behavior.ICacheElement;
+import org.apache.jcs.engine.behavior.ICacheListener;
+
+/**
+ * A lateral cache service implementation.
+ * 
+ * @version $Id: LateralJGService.java 240226 2005-08-26 12:47:59Z asmuts $
+ */
+public class LateralJGService
+    implements ILateralCacheService, ILateralCacheObserver
+{
+    private final static Log log = LogFactory.getLog( LateralJGService.class );
+
+    private ILateralCacheAttributes ilca;
+
+    private LateralJGSender sender;
+
+    /**
+     * Constructor for the LateralJGService object
+     * 
+     * @param lca
+     * @exception IOException
+     */
+    public LateralJGService( ILateralCacheAttributes lca )
+        throws IOException
+    {
+        this.ilca = lca;
+        
+        try
+        {
+            log.debug( "creating sender" );
+
+            sender = new LateralJGSender( lca );
+
+            log.debug( "created sender" );
+        }
+        catch ( IOException e )
+        {
+
+            log.error( "Could not create sender to [" + lca.getJGChannelProperties() + "]",
e );
+
+            throw e;
+        }
+    }
+
+    // -------------------------------------------------------- Service Methods
+
+    /**
+     * @param item
+     * @exception IOException
+     */
+    public void update( ICacheElement item )
+        throws IOException
+    {
+        update( item, LateralCacheInfo.listenerId );
+    }
+
+    /**
+     * @param item
+     * @param requesterId
+     * @exception IOException
+     */
+    public void update( ICacheElement item, long requesterId )
+        throws IOException
+    {
+        LateralElementDescriptor led = new LateralElementDescriptor( item );
+        led.requesterId = requesterId;
+        led.command = LateralElementDescriptor.UPDATE;
+        sender.send( led );
+    }
+
+    /**
+     * @param cacheName
+     * @param key
+     * @exception IOException
+     */
+    public void remove( String cacheName, Serializable key )
+        throws IOException
+    {
+        remove( cacheName, key, LateralCacheInfo.listenerId );
+    }
+
+    /**
+     * @param cacheName
+     * @param key
+     * @param requesterId
+     * @exception IOException
+     */
+    public void remove( String cacheName, Serializable key, long requesterId )
+        throws IOException
+    {
+        CacheElement ce = new CacheElement( cacheName, key, null );
+        LateralElementDescriptor led = new LateralElementDescriptor( ce );
+        led.requesterId = requesterId;
+        led.command = LateralElementDescriptor.REMOVE;
+        sender.send( led );
+    }
+
+    /**
+     * @exception IOException
+     */
+    public void release()
+        throws IOException
+    {
+        // nothing needs to be done
+    }
+
+    /**
+     * Will close the connection.
+     * 
+     * @param cache
+     * @exception IOException
+     */
+    public void dispose( String cache )
+        throws IOException
+    {
+        sender.dispose( cache );
+    }
+
+    /**
+     * @return
+     * @param cacheName
+     * @param key
+     * @exception IOException
+     */
+    public ICacheElement get( String cacheName, Serializable key )
+        throws IOException
+    {
+        //p( "get(cacheName,key,container)" );
+        CacheElement ce = new CacheElement( cacheName, key, null );
+        LateralElementDescriptor led = new LateralElementDescriptor( ce );
+        //led.requesterId = requesterId; // later
+        led.command = LateralElementDescriptor.GET;
+        return sender.sendAndReceive( led );
+        //return null;
+        // nothing needs to be done
+    }
+
+    /**
+     * @param cacheName
+     * @exception IOException
+     */
+    public void removeAll( String cacheName )
+        throws IOException
+    {
+        removeAll( cacheName, LateralCacheInfo.listenerId );
+    }
+
+    /**
+     * @param cacheName
+     * @param requesterId
+     * @exception IOException
+     */
+    public void removeAll( String cacheName, long requesterId )
+        throws IOException
+    {
+        CacheElement ce = new CacheElement( cacheName, "ALL", null );
+        LateralElementDescriptor led = new LateralElementDescriptor( ce );
+        led.requesterId = requesterId;
+        led.command = LateralElementDescriptor.REMOVEALL;
+        sender.send( led );
+    }
+
+    /**
+     * Gets the set of keys of objects currently in the group throws
+     * UnsupportedOperationException
+     */
+    public Set getGroupKeys( String cacheName, String group )
+    {
+        if ( true )
+        {
+            throw new UnsupportedOperationException( "Groups not implemented." );
+        }
+        return null;
+    }
+
+    /**
+     * @param args
+     */
+    public static void main( String args[] )
+    {
+        try
+        {
+            LateralJGSender sender = new LateralJGSender( new LateralCacheAttributes() );
+
+            // process user input till done
+            boolean notDone = true;
+            String message = null;
+            // wait to dispose
+            BufferedReader br = new BufferedReader( new InputStreamReader( System.in ) );
+
+            while ( notDone )
+            {
+                System.out.println( "enter mesage:" );
+                message = br.readLine();
+                CacheElement ce = new CacheElement( "test", "test", message );
+                LateralElementDescriptor led = new LateralElementDescriptor( ce );
+                sender.send( led );
+            }
+        }
+        catch ( Exception e )
+        {
+            System.out.println( e.toString() );
+        }
+    }
+
+    // ILateralCacheObserver methods, do nothing here since
+    // the connection is not registered, the udp service is
+    // is not registered.
+
+    /**
+     * @param cacheName
+     *            The feature to be added to the CacheListener attribute
+     * @param obj
+     *            The feature to be added to the CacheListener attribute
+     * @exception IOException
+     */
+    public void addCacheListener( String cacheName, ICacheListener obj )
+        throws IOException
+    {
+        // Empty
+    }
+
+    /**
+     * @param obj
+     *            The feature to be added to the CacheListener attribute
+     * @exception IOException
+     */
+    public void addCacheListener( ICacheListener obj )
+        throws IOException
+    {
+        // Empty
+    }
+
+    /**
+     * @param cacheName
+     * @param obj
+     * @exception IOException
+     */
+    public void removeCacheListener( String cacheName, ICacheListener obj )
+        throws IOException
+    {
+        // Empty
+    }
+
+    /**
+     * @param obj
+     * @exception IOException
+     */
+    public void removeCacheListener( ICacheListener obj )
+        throws IOException
+    {
+        // Empty
+    }
+
+}

Added: jakarta/jcs/trunk/auxiliary-builds/jdk14/src/java/org/apache/jcs/auxiliary/lateral/javagroups/behavior/IJGConstants.java
URL: http://svn.apache.org/viewcvs/jakarta/jcs/trunk/auxiliary-builds/jdk14/src/java/org/apache/jcs/auxiliary/lateral/javagroups/behavior/IJGConstants.java?rev=280251&view=auto
==============================================================================
--- jakarta/jcs/trunk/auxiliary-builds/jdk14/src/java/org/apache/jcs/auxiliary/lateral/javagroups/behavior/IJGConstants.java
(added)
+++ jakarta/jcs/trunk/auxiliary-builds/jdk14/src/java/org/apache/jcs/auxiliary/lateral/javagroups/behavior/IJGConstants.java
Sun Sep 11 21:26:41 2005
@@ -0,0 +1,28 @@
+package org.apache.jcs.auxiliary.lateral.javagroups.behavior;
+
+/*
+ * 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.
+ */
+
+public interface IJGConstants
+{
+
+    public static final String HANDLERNAME = "LATERAL_JG_CACHE";
+
+    public static final String DEFAULT_JG_GROUP_NAME = "JCS_CACHE";
+
+    public static final String RPC_JG_GROUP_NAME = "RPC_JCS_CACHE";
+
+}

Added: jakarta/jcs/trunk/auxiliary-builds/jdk14/src/java/org/apache/jcs/auxiliary/lateral/javagroups/behavior/ILateralCacheJGListener.java
URL: http://svn.apache.org/viewcvs/jakarta/jcs/trunk/auxiliary-builds/jdk14/src/java/org/apache/jcs/auxiliary/lateral/javagroups/behavior/ILateralCacheJGListener.java?rev=280251&view=auto
==============================================================================
--- jakarta/jcs/trunk/auxiliary-builds/jdk14/src/java/org/apache/jcs/auxiliary/lateral/javagroups/behavior/ILateralCacheJGListener.java
(added)
+++ jakarta/jcs/trunk/auxiliary-builds/jdk14/src/java/org/apache/jcs/auxiliary/lateral/javagroups/behavior/ILateralCacheJGListener.java
Sun Sep 11 21:26:41 2005
@@ -0,0 +1,40 @@
+package org.apache.jcs.auxiliary.lateral.javagroups.behavior;
+
+/*
+ * 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.Serializable;
+import java.io.IOException;
+
+import org.apache.jcs.auxiliary.lateral.behavior.ILateralCacheListener;
+
+/**
+ * Listens for lateral cache event notification.
+ * 
+ * @version $Id: ILateralCacheJGListener.java 224346 2005-06-04 02:01:59Z asmuts $
+ */
+public interface ILateralCacheJGListener
+    extends ILateralCacheListener
+{
+
+    /** Description of the Method */
+    public void init();
+
+    /** Tries to get a requested item from the cache. */
+    public Serializable handleGet( String cacheName, Serializable key )
+        throws IOException;
+
+}

Added: jakarta/jcs/trunk/auxiliary-builds/jdk14/src/java/org/apache/jcs/auxiliary/lateral/javagroups/utils/JGRpcOpener.java
URL: http://svn.apache.org/viewcvs/jakarta/jcs/trunk/auxiliary-builds/jdk14/src/java/org/apache/jcs/auxiliary/lateral/javagroups/utils/JGRpcOpener.java?rev=280251&view=auto
==============================================================================
--- jakarta/jcs/trunk/auxiliary-builds/jdk14/src/java/org/apache/jcs/auxiliary/lateral/javagroups/utils/JGRpcOpener.java
(added)
+++ jakarta/jcs/trunk/auxiliary-builds/jdk14/src/java/org/apache/jcs/auxiliary/lateral/javagroups/utils/JGRpcOpener.java
Sun Sep 11 21:26:41 2005
@@ -0,0 +1,120 @@
+package org.apache.jcs.auxiliary.lateral.javagroups.utils;
+
+/*
+ * 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.lateral.behavior.ILateralCacheAttributes;
+import org.apache.jcs.auxiliary.lateral.javagroups.behavior.ILateralCacheJGListener;
+import org.jgroups.Channel;
+import org.jgroups.JChannel;
+import org.jgroups.blocks.RpcDispatcher;
+
+/**
+ * Socket openere that will timeout on the initial connect rather than block
+ * forever. Technique from core java II.
+ * 
+ * @version $Id: JGRpcOpener.java 234393 2005-08-22 00:12:06Z asmuts $
+ */
+public class JGRpcOpener
+    implements Runnable
+{
+
+    private final static Log log = LogFactory.getLog( JGRpcOpener.class );
+
+    //private Socket socket;
+    private Channel rpcCh;
+
+    private RpcDispatcher disp;
+
+    private String groupName;
+
+    private ILateralCacheJGListener ilcl;
+
+    private ILateralCacheAttributes ilca;
+
+    /** Constructor for the SocketOpener object 
+     * @param ilcl
+     * @param ilca
+     * @param timeOut
+     * @param groupName
+     * @return*/
+    public static RpcDispatcher openSocket( ILateralCacheJGListener ilcl, ILateralCacheAttributes
ilca, int timeOut,
+                                           String groupName )
+    {
+        JGRpcOpener opener = new JGRpcOpener( ilcl, ilca, groupName );
+        Thread t = new Thread( opener );
+        t.start();
+        try
+        {
+            t.join( timeOut );
+        }
+        catch ( InterruptedException ire )
+        {
+            log.error( ire );
+        }
+        return opener.getSocket();
+    }
+
+    /**
+     * Constructor for the SocketOpener object
+     * @param ilcl
+     * @param ilca
+     * @param groupName
+     * 
+     */
+    public JGRpcOpener( ILateralCacheJGListener ilcl, ILateralCacheAttributes ilca, String
groupName )
+    {
+        this.rpcCh = null;
+        this.ilcl = ilcl;
+        this.ilca = ilca;
+        this.groupName = groupName;
+    }
+
+    /** Main processing method for the SocketOpener object */
+    public void run()
+    {
+        try
+        {
+
+            //String props="UDP(mcast_addr=" + ilca.getUdpMulticastAddr() +
+            // ";mcast_port=" + ilca.getUdpMulticastPort()+
+            // "):PING:MERGE2(min_interval=5000;max_interval=10000):FD:STABLE:NAKACK:UNICAST:FLUSH:GMS:VIEW_ENFORCER:QUEUE";
+            rpcCh = new JChannel( ilca.getJGChannelProperties() );
+            rpcCh.setOpt( Channel.LOCAL, Boolean.FALSE );
+            disp = new RpcDispatcher( rpcCh, null, null, ilcl );
+            rpcCh.connect( groupName );
+
+            if ( log.isInfoEnabled() )
+            {
+                log.info( "Is Connected = " + rpcCh.isConnected() );
+            }
+            
+        }
+        catch ( Exception e )
+        {
+            log.error( "Problem getting dispatcher.", e );
+        }
+    }
+
+    /** Gets the socket attribute of the SocketOpener object 
+     * @return*/
+    public RpcDispatcher getSocket()
+    {
+        return disp;
+    }
+}

Added: jakarta/jcs/trunk/auxiliary-builds/jdk14/src/java/org/apache/jcs/auxiliary/lateral/javagroups/utils/JGSocketOpener.java
URL: http://svn.apache.org/viewcvs/jakarta/jcs/trunk/auxiliary-builds/jdk14/src/java/org/apache/jcs/auxiliary/lateral/javagroups/utils/JGSocketOpener.java?rev=280251&view=auto
==============================================================================
--- jakarta/jcs/trunk/auxiliary-builds/jdk14/src/java/org/apache/jcs/auxiliary/lateral/javagroups/utils/JGSocketOpener.java
(added)
+++ jakarta/jcs/trunk/auxiliary-builds/jdk14/src/java/org/apache/jcs/auxiliary/lateral/javagroups/utils/JGSocketOpener.java
Sun Sep 11 21:26:41 2005
@@ -0,0 +1,121 @@
+package org.apache.jcs.auxiliary.lateral.javagroups.utils;
+
+/*
+ * 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.lateral.behavior.ILateralCacheAttributes;
+import org.jgroups.Channel;
+import org.jgroups.ChannelFactory;
+import org.jgroups.JChannelFactory;
+
+/**
+ * Socket openere that will timeout on the initial connect rather than block
+ * forever.
+ * 
+ * @version $Id: JGSocketOpener.java 234393 2005-08-22 00:12:06Z asmuts $
+ */
+public class JGSocketOpener
+    implements Runnable
+{
+
+    private final static Log log = LogFactory.getLog( JGSocketOpener.class );
+
+    private ILateralCacheAttributes lca;
+
+    private Channel javagroups;
+
+    private String groupName;
+
+    /**
+     * Constructor for the <code>SocketOpener</code> object.
+     * @param lca
+     * @param timeOut
+     * @param groupName
+     * @return
+     */
+    public static Channel openSocket( ILateralCacheAttributes lca, int timeOut, String groupName
)
+    {
+        JGSocketOpener opener = new JGSocketOpener( lca, groupName );
+        Thread t = new Thread( opener );
+        t.start();
+        try
+        {
+            t.join( timeOut );
+        }
+        catch ( InterruptedException ire )
+        {
+            log.error( "Failed of connect in within timout of " + timeOut, ire );
+        }
+        return opener.getSocket();
+    }
+
+    /**
+     * Constructor for the SocketOpener object
+     * @param lca
+     * @param groupName
+     * 
+     * @param host
+     * @param port
+     */
+    public JGSocketOpener( ILateralCacheAttributes lca, String groupName )
+    {
+        this.javagroups = null;
+        this.lca = lca;
+        this.groupName = groupName;
+    }
+
+    /**
+     * Main processing method for the <code>SocketOpener</code> object.
+     */
+    public void run()
+    {
+        try
+        {
+
+            ChannelFactory factory = new JChannelFactory();
+
+            // Create a channel based on 'channelProperties' from the config
+            Channel channel = factory.createChannel( lca.getJGChannelProperties() );
+
+            javagroups = channel; //new JChannel( lca.getJGChannelProperties()
+                                  // );
+            // don't send local
+            javagroups.setOpt( Channel.LOCAL, Boolean.FALSE );
+
+            javagroups.connect( groupName );
+
+            if ( log.isInfoEnabled() )
+            {
+                log.info( "Is Connected = " + javagroups.isConnected() );
+            }
+
+        }
+        catch ( Exception e )
+        {
+            log.error( "Problem connecting to channel.", e );
+        }
+    }
+
+    /**
+     * Gets the socket attribute of the <code>SocketOpener</code> object.
+     */
+    public Channel getSocket()
+    {
+        return javagroups;
+    }
+}



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


Mime
View raw message