You are viewing a plain text version of this content. The canonical link for it is here.
Posted to scm@geronimo.apache.org by jd...@apache.org on 2007/10/05 02:08:21 UTC

svn commit: r582034 [2/2] - in /geronimo/sandbox/gshell/trunk: gshell-remote/gshell-remote-client/ gshell-remote/gshell-remote-client/src/main/java/org/apache/geronimo/gshell/remote/client/ gshell-remote/gshell-remote-client/src/main/java/org/apache/ge...

Modified: geronimo/sandbox/gshell/trunk/gshell-whisper/src/main/java/org/apache/geronimo/gshell/whisper/transport/base/BaseTransport.java
URL: http://svn.apache.org/viewvc/geronimo/sandbox/gshell/trunk/gshell-whisper/src/main/java/org/apache/geronimo/gshell/whisper/transport/base/BaseTransport.java?rev=582034&r1=582033&r2=582034&view=diff
==============================================================================
--- geronimo/sandbox/gshell/trunk/gshell-whisper/src/main/java/org/apache/geronimo/gshell/whisper/transport/base/BaseTransport.java (original)
+++ geronimo/sandbox/gshell/trunk/gshell-whisper/src/main/java/org/apache/geronimo/gshell/whisper/transport/base/BaseTransport.java Thu Oct  4 17:08:17 2007
@@ -19,19 +19,14 @@
 
 package org.apache.geronimo.gshell.whisper.transport.base;
 
-import java.io.InputStream;
-import java.io.OutputStream;
 import java.net.SocketAddress;
 import java.net.URI;
 import java.util.concurrent.atomic.AtomicLong;
 
-import org.apache.geronimo.gshell.common.Duration;
-import org.apache.geronimo.gshell.whisper.message.Message;
-import org.apache.geronimo.gshell.whisper.request.Requestor;
-import org.apache.geronimo.gshell.whisper.session.SessionAttributeBinder;
-import org.apache.geronimo.gshell.whisper.session.ThreadPoolModel;
-import org.apache.geronimo.gshell.whisper.stream.SessionInputStream;
-import org.apache.geronimo.gshell.whisper.stream.SessionOutputStream;
+import org.apache.geronimo.gshell.whisper.util.SessionAttributeBinder;
+import org.apache.geronimo.gshell.whisper.transport.base.ThreadPoolModel;
+import org.apache.geronimo.gshell.whisper.transport.Session;
+import org.apache.geronimo.gshell.whisper.transport.base.SessionAdapter;
 import org.apache.geronimo.gshell.whisper.transport.Transport;
 import org.apache.mina.common.CloseFuture;
 import org.apache.mina.common.ConnectFuture;
@@ -39,7 +34,6 @@
 import org.apache.mina.common.IoHandler;
 import org.apache.mina.common.IoSession;
 import org.apache.mina.common.ThreadModel;
-import org.apache.mina.common.WriteFuture;
 
 /**
  * Support for {@link Transport} implementations.
@@ -64,7 +58,7 @@
 
     protected T connector;
 
-    protected IoSession session;
+    protected Session session;
 
     protected BaseTransport(final AddressFactory addressFactory) {
         super(addressFactory);
@@ -145,16 +139,18 @@
         cf.join();
 
         // And fetch session so we can talk
-        session = cf.getSession();
+        IoSession s = cf.getSession();
+        session = new SessionAdapter(s);
+
         log.debug("Session: ", session);
 
         // Maybe configure something
-        configure(session);
+        configure(s);
 
         // Stuff the transport instance into the session's context so we can find ourself later
-        TRANSPORT.bind(session, this);
+        TRANSPORT.bind(s, this);
 
-        log.info("Connected to: {}", session.getRemoteAddress());
+        log.info("Connected to: {}", s.getRemoteAddress());
     }
 
     public synchronized void close() {
@@ -164,9 +160,12 @@
         }
 
         try {
-            TRANSPORT.unbind(session);
+            IoSession s = session.getSession();
+
+            TRANSPORT.unbind(s);
+            
+            CloseFuture cf = s.close();
             
-            CloseFuture cf = session.close();
             cf.join();
         }
         finally {
@@ -186,51 +185,8 @@
         return connector;
     }
 
-    public IoSession getSession() {
+    public Session getSession() {
         return session;
-    }
-
-    //
-    // Streams
-    //
-
-    public InputStream getInputStream() {
-        return SessionInputStream.BINDER.lookup(session);
-    }
-
-    public OutputStream getOutputStream() {
-        return SessionOutputStream.BINDER.lookup(session);
-    }
-
-    public OutputStream getErrorStream() {
-        throw new UnsupportedOperationException("TODO");
-    }
-
-    //
-    // Sending Messages
-    //
-
-    public WriteFuture send(final Object msg) throws Exception {
-        assert msg != null;
-
-        return session.write(msg);
-    }
-
-    public Message request(final Message msg) throws Exception {
-        assert msg != null;
-
-        Requestor requestor = new Requestor(this);
-
-        return requestor.request(msg);
-    }
-
-    public Message request(final Message msg, final Duration timeout) throws Exception {
-        assert msg != null;
-        assert timeout != null;
-
-        Requestor requestor = new Requestor(this);
-
-        return requestor.request(msg, timeout);
     }
 
     //

Modified: geronimo/sandbox/gshell/trunk/gshell-whisper/src/main/java/org/apache/geronimo/gshell/whisper/transport/base/BaseTransportServer.java
URL: http://svn.apache.org/viewvc/geronimo/sandbox/gshell/trunk/gshell-whisper/src/main/java/org/apache/geronimo/gshell/whisper/transport/base/BaseTransportServer.java?rev=582034&r1=582033&r2=582034&view=diff
==============================================================================
--- geronimo/sandbox/gshell/trunk/gshell-whisper/src/main/java/org/apache/geronimo/gshell/whisper/transport/base/BaseTransportServer.java (original)
+++ geronimo/sandbox/gshell/trunk/gshell-whisper/src/main/java/org/apache/geronimo/gshell/whisper/transport/base/BaseTransportServer.java Thu Oct  4 17:08:17 2007
@@ -23,7 +23,7 @@
 import java.net.URI;
 import java.util.concurrent.atomic.AtomicLong;
 
-import org.apache.geronimo.gshell.whisper.session.ThreadPoolModel;
+import org.apache.geronimo.gshell.whisper.transport.base.ThreadPoolModel;
 import org.apache.geronimo.gshell.whisper.transport.TransportServer;
 import org.apache.mina.common.IoAcceptor;
 import org.apache.mina.common.IoHandler;

Copied: geronimo/sandbox/gshell/trunk/gshell-whisper/src/main/java/org/apache/geronimo/gshell/whisper/transport/base/SessionAdapter.java (from r580765, geronimo/sandbox/gshell/trunk/gshell-whisper/src/main/java/org/apache/geronimo/gshell/whisper/transport/TransportAdapter.java)
URL: http://svn.apache.org/viewvc/geronimo/sandbox/gshell/trunk/gshell-whisper/src/main/java/org/apache/geronimo/gshell/whisper/transport/base/SessionAdapter.java?p2=geronimo/sandbox/gshell/trunk/gshell-whisper/src/main/java/org/apache/geronimo/gshell/whisper/transport/base/SessionAdapter.java&p1=geronimo/sandbox/gshell/trunk/gshell-whisper/src/main/java/org/apache/geronimo/gshell/whisper/transport/TransportAdapter.java&r1=580765&r2=582034&rev=582034&view=diff
==============================================================================
--- geronimo/sandbox/gshell/trunk/gshell-whisper/src/main/java/org/apache/geronimo/gshell/whisper/transport/TransportAdapter.java (original)
+++ geronimo/sandbox/gshell/trunk/gshell-whisper/src/main/java/org/apache/geronimo/gshell/whisper/transport/base/SessionAdapter.java Thu Oct  4 17:08:17 2007
@@ -17,7 +17,7 @@
  * under the License.
  */
 
-package org.apache.geronimo.gshell.whisper.transport;
+package org.apache.geronimo.gshell.whisper.transport.base;
 
 import java.io.InputStream;
 import java.io.OutputStream;
@@ -30,6 +30,7 @@
 import org.apache.geronimo.gshell.whisper.request.Requestor;
 import org.apache.geronimo.gshell.whisper.stream.SessionInputStream;
 import org.apache.geronimo.gshell.whisper.stream.SessionOutputStream;
+import org.apache.geronimo.gshell.whisper.transport.Session;
 import org.apache.mina.common.IoConnector;
 import org.apache.mina.common.IoSession;
 import org.apache.mina.common.WriteFuture;
@@ -39,12 +40,14 @@
  *
  * @version $Rev$ $Date$
  */
-public class TransportAdapter
-    implements Transport
+public class SessionAdapter
+    implements Session
 {
     private final IoSession session;
 
-    public TransportAdapter(final IoSession session) {
+    private boolean closed;
+
+    public SessionAdapter(final IoSession session) {
         assert session != null;
 
         this.session = session;
@@ -54,49 +57,31 @@
         return ReflectionToStringBuilder.toString(this, ToStringStyle.SHORT_PREFIX_STYLE);
     }
 
-    public URI getRemote() {
-        throw new UnsupportedOperationException();
-    }
-
-    public URI getLocal() {
-        throw new UnsupportedOperationException();
-    }
-
-    public IoConnector getConnector() {
-        throw new UnsupportedOperationException();
-    }
-
     public IoSession getSession() {
         ensureOpened();
 
         return session;
     }
 
-    //
-    // Streams
-    //
-
-    public InputStream getInputStream() {
-        ensureOpened();
-
-        return SessionInputStream.BINDER.lookup(session);
+    public synchronized boolean isClosed() {
+        return closed;
     }
 
-    public OutputStream getOutputStream() {
-        ensureOpened();
-
-        return SessionOutputStream.BINDER.lookup(session);
+    protected void ensureOpened() {
+        if (isClosed()) {
+            throw new IllegalStateException("Closed");
+        }
     }
 
-    public OutputStream getErrorStream() {
-        ensureOpened();
+    public synchronized void close() {
+        if (isClosed()) {
+            return;
+        }
 
-        throw new UnsupportedOperationException();
-    }
+        session.close();
 
-    //
-    // Sending Messages
-    //
+        closed = true;
+    }
 
     public WriteFuture send(final Object msg) throws Exception {
         assert msg != null;
@@ -127,57 +112,21 @@
         return requestor.request(msg, timeout);
     }
 
-    //
-    // Closeable
-    //
-
-    private boolean closed;
-
-    public synchronized boolean isClosed() {
-        return closed;
-    }
-
-    protected void ensureOpened() {
-        if (isClosed()) {
-            throw new IllegalStateException("Closed");
-        }
-    }
-
-    public synchronized void close() {
-        if (isClosed()) {
-            return;
-        }
-
-        session.close();
-        
-        closed = true;
-    }
-
-    //
-    // Listeners
-    //
-
-    public void addListener(final Listener listener) {
-        assert listener != null;
+    public InputStream getInputStream() {
+        ensureOpened();
 
-        throw new UnsupportedOperationException();
+        return SessionInputStream.BINDER.lookup(session);
     }
 
-    public void removeListener(final Listener listener) {
-        assert listener != null;
+    public OutputStream getOutputStream() {
+        ensureOpened();
 
-        throw new UnsupportedOperationException();
+        return SessionOutputStream.BINDER.lookup(session);
     }
 
-    //
-    // Configuration
-    //
-
-    public void setConfiguration(final Configuration config) {
-        throw new UnsupportedOperationException();
-    }
+    public OutputStream getErrorStream() {
+        ensureOpened();
 
-    public Configuration getConfiguration() {
         throw new UnsupportedOperationException();
     }
 }

Propchange: geronimo/sandbox/gshell/trunk/gshell-whisper/src/main/java/org/apache/geronimo/gshell/whisper/transport/base/SessionAdapter.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: geronimo/sandbox/gshell/trunk/gshell-whisper/src/main/java/org/apache/geronimo/gshell/whisper/transport/base/SessionAdapter.java
------------------------------------------------------------------------------
    svn:keywords = Date Author Id Revision HeadURL

Propchange: geronimo/sandbox/gshell/trunk/gshell-whisper/src/main/java/org/apache/geronimo/gshell/whisper/transport/base/SessionAdapter.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Added: geronimo/sandbox/gshell/trunk/gshell-whisper/src/main/java/org/apache/geronimo/gshell/whisper/transport/base/SessionBindingFilter.java
URL: http://svn.apache.org/viewvc/geronimo/sandbox/gshell/trunk/gshell-whisper/src/main/java/org/apache/geronimo/gshell/whisper/transport/base/SessionBindingFilter.java?rev=582034&view=auto
==============================================================================
--- geronimo/sandbox/gshell/trunk/gshell-whisper/src/main/java/org/apache/geronimo/gshell/whisper/transport/base/SessionBindingFilter.java (added)
+++ geronimo/sandbox/gshell/trunk/gshell-whisper/src/main/java/org/apache/geronimo/gshell/whisper/transport/base/SessionBindingFilter.java Thu Oct  4 17:08:17 2007
@@ -0,0 +1,56 @@
+/*
+ * 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.
+ */
+
+package org.apache.geronimo.gshell.whisper.transport.base;
+
+import org.apache.geronimo.gshell.whisper.transport.Session;
+import org.apache.mina.common.IoFilterAdapter;
+import org.apache.mina.common.IoSession;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * A simple filter which handles binding and unbinding the Whisper {@link Session} instance
+ * when Mina creates and closes its native session.
+ *
+ * @version $Rev$ $Date$
+ */
+public class SessionBindingFilter
+    extends IoFilterAdapter
+{
+    private final Logger log = LoggerFactory.getLogger(getClass());
+
+    @Override
+    public void sessionCreated(final NextFilter nextFilter, final IoSession session) throws Exception {
+        Session s = Session.BINDER.bind(session, new SessionAdapter(session));
+
+        log.debug("Bound: {}", s);
+
+        nextFilter.sessionCreated(session);
+    }
+
+    @Override
+    public void sessionClosed(final NextFilter nextFilter, final IoSession session) throws Exception {
+        Session s = Session.BINDER.unbind(session);
+
+        log.debug("Unbound: {}", s);
+
+        nextFilter.sessionClosed(session);
+    }
+}
\ No newline at end of file

Propchange: geronimo/sandbox/gshell/trunk/gshell-whisper/src/main/java/org/apache/geronimo/gshell/whisper/transport/base/SessionBindingFilter.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: geronimo/sandbox/gshell/trunk/gshell-whisper/src/main/java/org/apache/geronimo/gshell/whisper/transport/base/SessionBindingFilter.java
------------------------------------------------------------------------------
    svn:keywords = Date Author Id Revision HeadURL

Propchange: geronimo/sandbox/gshell/trunk/gshell-whisper/src/main/java/org/apache/geronimo/gshell/whisper/transport/base/SessionBindingFilter.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Copied: geronimo/sandbox/gshell/trunk/gshell-whisper/src/main/java/org/apache/geronimo/gshell/whisper/transport/base/ThreadPoolModel.java (from r580765, geronimo/sandbox/gshell/trunk/gshell-whisper/src/main/java/org/apache/geronimo/gshell/whisper/session/ThreadPoolModel.java)
URL: http://svn.apache.org/viewvc/geronimo/sandbox/gshell/trunk/gshell-whisper/src/main/java/org/apache/geronimo/gshell/whisper/transport/base/ThreadPoolModel.java?p2=geronimo/sandbox/gshell/trunk/gshell-whisper/src/main/java/org/apache/geronimo/gshell/whisper/transport/base/ThreadPoolModel.java&p1=geronimo/sandbox/gshell/trunk/gshell-whisper/src/main/java/org/apache/geronimo/gshell/whisper/session/ThreadPoolModel.java&r1=580765&r2=582034&rev=582034&view=diff
==============================================================================
--- geronimo/sandbox/gshell/trunk/gshell-whisper/src/main/java/org/apache/geronimo/gshell/whisper/session/ThreadPoolModel.java (original)
+++ geronimo/sandbox/gshell/trunk/gshell-whisper/src/main/java/org/apache/geronimo/gshell/whisper/transport/base/ThreadPoolModel.java Thu Oct  4 17:08:17 2007
@@ -17,7 +17,7 @@
  * under the License.
  */
 
-package org.apache.geronimo.gshell.whisper.session;
+package org.apache.geronimo.gshell.whisper.transport.base;
 
 import java.util.concurrent.LinkedBlockingQueue;
 import java.util.concurrent.ThreadFactory;

Propchange: geronimo/sandbox/gshell/trunk/gshell-whisper/src/main/java/org/apache/geronimo/gshell/whisper/transport/base/ThreadPoolModel.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: geronimo/sandbox/gshell/trunk/gshell-whisper/src/main/java/org/apache/geronimo/gshell/whisper/transport/base/ThreadPoolModel.java
------------------------------------------------------------------------------
    svn:keywords = Date Author Id Revision HeadURL

Propchange: geronimo/sandbox/gshell/trunk/gshell-whisper/src/main/java/org/apache/geronimo/gshell/whisper/transport/base/ThreadPoolModel.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Modified: geronimo/sandbox/gshell/trunk/gshell-whisper/src/main/java/org/apache/geronimo/gshell/whisper/util/SessionAttributeBinder.java
URL: http://svn.apache.org/viewvc/geronimo/sandbox/gshell/trunk/gshell-whisper/src/main/java/org/apache/geronimo/gshell/whisper/util/SessionAttributeBinder.java?rev=582034&r1=580765&r2=582034&view=diff
==============================================================================
--- geronimo/sandbox/gshell/trunk/gshell-whisper/src/main/java/org/apache/geronimo/gshell/whisper/util/SessionAttributeBinder.java (original)
+++ geronimo/sandbox/gshell/trunk/gshell-whisper/src/main/java/org/apache/geronimo/gshell/whisper/util/SessionAttributeBinder.java Thu Oct  4 17:08:17 2007
@@ -17,9 +17,11 @@
  * under the License.
  */
 
-package org.apache.geronimo.gshell.whisper.session;
+package org.apache.geronimo.gshell.whisper.util;
 
 import org.apache.mina.common.IoSession;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 /**
  * Helper to manage binding operations for typed session attribute objects.
@@ -28,6 +30,8 @@
  */
 public class SessionAttributeBinder<T>
 {
+    private final Logger log = LoggerFactory.getLogger(getClass());
+
     private final String key;
 
     public SessionAttributeBinder(final String key) {
@@ -88,6 +92,8 @@
 
         session.setAttribute(key, obj);
 
+        log.trace("Bound {} ", obj);
+
         return obj;
     }
     
@@ -100,6 +106,8 @@
 
         session.setAttribute(key, obj);
 
+        log.trace("Rebound {}", obj);
+
         return prev;
     }
 
@@ -107,7 +115,11 @@
     public T unbind(final IoSession session) {
         assert session != null;
 
-        return (T) session.removeAttribute(key);
+        T obj = (T) session.removeAttribute(key);
+
+        log.trace("Unbound {}", obj);
+
+        return obj;
     }
 
     public static class NotBoundException

Modified: geronimo/sandbox/gshell/trunk/gshell-whisper/src/test/java/org/apache/geronimo/gshell/whisper/message/PingPongProtocolTester.java
URL: http://svn.apache.org/viewvc/geronimo/sandbox/gshell/trunk/gshell-whisper/src/test/java/org/apache/geronimo/gshell/whisper/message/PingPongProtocolTester.java?rev=582034&r1=582033&r2=582034&view=diff
==============================================================================
--- geronimo/sandbox/gshell/trunk/gshell-whisper/src/test/java/org/apache/geronimo/gshell/whisper/message/PingPongProtocolTester.java (original)
+++ geronimo/sandbox/gshell/trunk/gshell-whisper/src/test/java/org/apache/geronimo/gshell/whisper/message/PingPongProtocolTester.java Thu Oct  4 17:08:17 2007
@@ -22,6 +22,7 @@
 import java.net.URI;
 import java.util.Map;
 
+import org.apache.geronimo.gshell.whisper.transport.Session;
 import org.apache.geronimo.gshell.whisper.transport.Transport;
 import org.apache.geronimo.gshell.whisper.transport.TransportFactory;
 import org.apache.geronimo.gshell.whisper.transport.TransportFactoryLocator;
@@ -156,9 +157,11 @@
 
         log("Client: " + client);
 
+        Session session = client.getSession();
+
         Thread.sleep(5 * 1000);
 
-        client.send(new PingMessage()).join();
+        session.send(new PingMessage()).join();
         
         Thread.sleep(30 * 1000);