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/09/18 00:27:59 UTC

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

Added: geronimo/sandbox/gshell/trunk/gshell-remote/gshell-remote-common/src/main/java/org/apache/geronimo/gshell/remote/transport/tcp/TcpTransportServer.java
URL: http://svn.apache.org/viewvc/geronimo/sandbox/gshell/trunk/gshell-remote/gshell-remote-common/src/main/java/org/apache/geronimo/gshell/remote/transport/tcp/TcpTransportServer.java?rev=576612&view=auto
==============================================================================
--- geronimo/sandbox/gshell/trunk/gshell-remote/gshell-remote-common/src/main/java/org/apache/geronimo/gshell/remote/transport/tcp/TcpTransportServer.java (added)
+++ geronimo/sandbox/gshell/trunk/gshell-remote/gshell-remote-common/src/main/java/org/apache/geronimo/gshell/remote/transport/tcp/TcpTransportServer.java Mon Sep 17 15:27:55 2007
@@ -0,0 +1,133 @@
+/*
+ * 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.remote.transport.tcp;
+
+import java.net.InetSocketAddress;
+import java.net.URI;
+import java.net.InetAddress;
+import java.util.concurrent.ExecutorService;
+import java.util.concurrent.Executors;
+
+import org.apache.geronimo.gshell.remote.filter.LoggingFilter;
+import org.apache.geronimo.gshell.remote.message.MessageCodecFactory;
+import org.apache.geronimo.gshell.remote.transport.TransportServer;
+import org.apache.mina.common.DefaultIoFilterChainBuilder;
+import org.apache.mina.common.CloseFuture;
+import org.apache.mina.filter.codec.ProtocolCodecFilter;
+import org.apache.mina.transport.socket.nio.SocketAcceptor;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * ???
+ *
+ * @version $Rev$ $Date$
+ */
+public class TcpTransportServer
+    implements TransportServer
+{
+    protected Logger log = LoggerFactory.getLogger(getClass());
+
+    protected TcpServerMessageVisitor messageVisitor;
+    
+    protected TcpProtocolHandler protocolHandler;
+
+    protected URI location;
+
+    protected InetSocketAddress address;
+
+    protected SocketAcceptor acceptor;
+
+    protected boolean bound;
+
+    public TcpTransportServer(final URI location) throws Exception {
+        assert location != null;
+
+        this.location = location;
+        this.address = new InetSocketAddress(InetAddress.getByName(location.getHost()), location.getPort());
+    }
+
+    protected void init() throws Exception {
+        if (protocolHandler == null) {
+            throw new IllegalStateException("Protocol handler not injected");
+        }
+        if (messageVisitor == null) {
+            throw new IllegalStateException("Message visitor not injected");
+        }
+
+        protocolHandler.setVisitor(messageVisitor);
+        
+        ExecutorService executor = Executors.newFixedThreadPool(Runtime.getRuntime().availableProcessors() + 1);
+        
+        acceptor = new SocketAcceptor(Runtime.getRuntime().availableProcessors(), executor);
+        acceptor.setLocalAddress(address);
+        acceptor.setHandler(protocolHandler);
+
+        DefaultIoFilterChainBuilder filterChain = acceptor.getFilterChain();
+
+        filterChain.addLast("logger", new LoggingFilter());
+
+        filterChain.addLast("protocol", new ProtocolCodecFilter(new MessageCodecFactory()));
+
+        // filterChain.addLast("auth", new AuthenticationFilter());
+    }
+
+    //
+    // NOTE: Setters exposed to support Plexus autowire()
+    //
+
+    public void setMessageVisitor(final TcpServerMessageVisitor messageVisitor) {
+        log.debug("Using message visitor: {}", messageVisitor);
+
+        this.messageVisitor = messageVisitor;
+    }
+
+    public void setProtocolHandler(final TcpProtocolHandler protocolHandler) {
+        log.debug("Using protocol handler: {}", protocolHandler);
+
+        this.protocolHandler = protocolHandler;
+    }
+
+    public void bind() throws Exception {
+        if (bound) {
+            throw new IllegalStateException("Already bound");
+        }
+
+        init();
+
+        acceptor.bind();
+
+        bound = true;
+
+        log.info("Listening on: {}", address);
+    }
+
+    public URI getLocation() {
+        return location;
+    }
+
+    //
+    // TransportServer
+    //
+
+    public void close() {
+        acceptor.unbind();
+    }
+}
\ No newline at end of file

Propchange: geronimo/sandbox/gshell/trunk/gshell-remote/gshell-remote-common/src/main/java/org/apache/geronimo/gshell/remote/transport/tcp/TcpTransportServer.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: geronimo/sandbox/gshell/trunk/gshell-remote/gshell-remote-common/src/main/java/org/apache/geronimo/gshell/remote/transport/tcp/TcpTransportServer.java
------------------------------------------------------------------------------
    svn:keywords = Date Author Id Revision HeadURL

Propchange: geronimo/sandbox/gshell/trunk/gshell-remote/gshell-remote-common/src/main/java/org/apache/geronimo/gshell/remote/transport/tcp/TcpTransportServer.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Added: geronimo/sandbox/gshell/trunk/gshell-remote/gshell-remote-common/src/main/java/org/apache/geronimo/gshell/remote/transport/tcp/package-info.java
URL: http://svn.apache.org/viewvc/geronimo/sandbox/gshell/trunk/gshell-remote/gshell-remote-common/src/main/java/org/apache/geronimo/gshell/remote/transport/tcp/package-info.java?rev=576612&view=auto
==============================================================================
--- geronimo/sandbox/gshell/trunk/gshell-remote/gshell-remote-common/src/main/java/org/apache/geronimo/gshell/remote/transport/tcp/package-info.java (added)
+++ geronimo/sandbox/gshell/trunk/gshell-remote/gshell-remote-common/src/main/java/org/apache/geronimo/gshell/remote/transport/tcp/package-info.java Mon Sep 17 15:27:55 2007
@@ -0,0 +1,25 @@
+/*
+ * 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.
+ */
+
+/**
+ * ???
+ *
+ * @version $Rev$ $Date$
+ */
+package org.apache.geronimo.gshell.remote.transport.tcp;
\ No newline at end of file

Propchange: geronimo/sandbox/gshell/trunk/gshell-remote/gshell-remote-common/src/main/java/org/apache/geronimo/gshell/remote/transport/tcp/package-info.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: geronimo/sandbox/gshell/trunk/gshell-remote/gshell-remote-common/src/main/java/org/apache/geronimo/gshell/remote/transport/tcp/package-info.java
------------------------------------------------------------------------------
    svn:keywords = Date Author Id Revision HeadURL

Propchange: geronimo/sandbox/gshell/trunk/gshell-remote/gshell-remote-common/src/main/java/org/apache/geronimo/gshell/remote/transport/tcp/package-info.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Modified: geronimo/sandbox/gshell/trunk/gshell-remote/gshell-remote-server/src/main/java/org/apache/geronimo/gshell/remote/server/RshServer.java
URL: http://svn.apache.org/viewvc/geronimo/sandbox/gshell/trunk/gshell-remote/gshell-remote-server/src/main/java/org/apache/geronimo/gshell/remote/server/RshServer.java?rev=576612&r1=576611&r2=576612&view=diff
==============================================================================
--- geronimo/sandbox/gshell/trunk/gshell-remote/gshell-remote-server/src/main/java/org/apache/geronimo/gshell/remote/server/RshServer.java (original)
+++ geronimo/sandbox/gshell/trunk/gshell-remote/gshell-remote-server/src/main/java/org/apache/geronimo/gshell/remote/server/RshServer.java Mon Sep 17 15:27:55 2007
@@ -19,22 +19,10 @@
 
 package org.apache.geronimo.gshell.remote.server;
 
-import java.net.InetSocketAddress;
-import java.util.concurrent.ExecutorService;
-import java.util.concurrent.Executors;
-
-import org.apache.geronimo.gshell.remote.message.MessageCodecFactory;
-import org.apache.geronimo.gshell.remote.ssl.BogusSSLContextFactory;
-import org.apache.mina.common.DefaultIoFilterChainBuilder;
-import org.apache.mina.common.IoEventType;
-import org.apache.mina.common.IoHandler;
-import org.apache.mina.filter.codec.ProtocolCodecFilter;
-import org.apache.mina.filter.logging.LoggingFilter;
-import org.apache.mina.filter.ssl.SSLFilter;
-import org.apache.mina.transport.socket.nio.SocketAcceptor;
-import org.codehaus.plexus.component.annotations.Component;
-import org.codehaus.plexus.component.annotations.InstantiationStrategy;
-import org.codehaus.plexus.component.annotations.Requirement;
+import java.net.URI;
+
+import org.apache.geronimo.gshell.remote.transport.TransportFactory;
+import org.apache.geronimo.gshell.remote.transport.TransportServer;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -43,59 +31,22 @@
  *
  * @version $Rev$ $Date$
  */
-@Component(role=RshServer.class, instantiationStrategy=InstantiationStrategy.PER_LOOKUP)
 public class RshServer
 {
-    private Logger log = LoggerFactory.getLogger(getClass());
-
-    @Requirement(role=IoHandler.class, hint="rsh-server")
-    private RshServerProtocolHandler handler;
-
-    private SocketAcceptor acceptor;
-
-    private boolean ssl = true;
-
-    private boolean bound = false;
-
-    public void bind(final int port) throws Exception {
-        if (bound) {
-            throw new IllegalStateException("Already bound");
-        }
-
-        handler.setVisitor(new RshServerMessageVisitor());
-
-        ExecutorService executor = Executors.newFixedThreadPool(Runtime.getRuntime().availableProcessors() + 1);
-
-        acceptor = new SocketAcceptor(Runtime.getRuntime().availableProcessors(), executor);
-        acceptor.setLocalAddress(new InetSocketAddress(port));
-        acceptor.setHandler(handler);
-
-        DefaultIoFilterChainBuilder filterChain = acceptor.getFilterChain();
-
-        LoggingFilter loggingFilter = new LoggingFilter();
-        loggingFilter.setLogLevel(IoEventType.EXCEPTION_CAUGHT, LoggingFilter.WARN);
-        loggingFilter.setLogLevel(IoEventType.WRITE, LoggingFilter.TRACE);
-        loggingFilter.setLogLevel(IoEventType.MESSAGE_RECEIVED, LoggingFilter.TRACE);
-        loggingFilter.setLogLevel(IoEventType.MESSAGE_SENT, LoggingFilter.TRACE);
-        loggingFilter.setLogLevel(IoEventType.SESSION_CLOSED, LoggingFilter.DEBUG);
-        loggingFilter.setLogLevel(IoEventType.SESSION_CREATED, LoggingFilter.DEBUG);
-        loggingFilter.setLogLevel(IoEventType.SESSION_IDLE, LoggingFilter.DEBUG);
-        loggingFilter.setLogLevel(IoEventType.SESSION_OPENED, LoggingFilter.DEBUG);
-        filterChain.addLast("logger", loggingFilter);
+    private final Logger log = LoggerFactory.getLogger(getClass());
 
-        filterChain.addLast("protocol", new ProtocolCodecFilter(new MessageCodecFactory()));
+    private final TransportServer server;
 
-        filterChain.addLast("auth", new AuthenticationFilter());
+    public RshServer(final URI location, final TransportFactory factory) throws Exception {
+        assert location != null;
+        assert factory != null;
 
-        if (ssl) {
-            SSLFilter sslFilter = new SSLFilter(BogusSSLContextFactory.getInstance(true));
-            filterChain.addFirst("ssl", sslFilter);
-        }
+        server = factory.bind(location);
+    }
 
-        acceptor.bind();
-        
-        log.info("Listening on port: {}", port);
+    public void close() {
+        server.close();
 
-        bound = true;
+        log.debug("Closed");
     }
 }

Modified: geronimo/sandbox/gshell/trunk/gshell-remote/gshell-remote-server/src/main/java/org/apache/geronimo/gshell/remote/server/RshServerCommand.java
URL: http://svn.apache.org/viewvc/geronimo/sandbox/gshell/trunk/gshell-remote/gshell-remote-server/src/main/java/org/apache/geronimo/gshell/remote/server/RshServerCommand.java?rev=576612&r1=576611&r2=576612&view=diff
==============================================================================
--- geronimo/sandbox/gshell/trunk/gshell-remote/gshell-remote-server/src/main/java/org/apache/geronimo/gshell/remote/server/RshServerCommand.java (original)
+++ geronimo/sandbox/gshell/trunk/gshell-remote/gshell-remote-server/src/main/java/org/apache/geronimo/gshell/remote/server/RshServerCommand.java Mon Sep 17 15:27:55 2007
@@ -19,6 +19,8 @@
 
 package org.apache.geronimo.gshell.remote.server;
 
+import java.net.URI;
+
 import org.apache.geronimo.gshell.command.CommandSupport;
 import org.apache.geronimo.gshell.command.annotation.CommandComponent;
 import org.codehaus.plexus.component.annotations.Requirement;
@@ -32,13 +34,17 @@
 public class RshServerCommand
     extends CommandSupport
 {
-    private int port = 9999;
-    
     @Requirement
+    private RshServerFactory factory;
+
     private RshServer server;
 
     protected Object doExecute() throws Exception {
-        server.bind(port);
+        URI location = new URI("ssl://localhost:9999");
+
+        server = factory.connect(location);
+
+        io.out.println("Listening on: " + location);
         
         return SUCCESS;
     }

Added: geronimo/sandbox/gshell/trunk/gshell-remote/gshell-remote-server/src/main/java/org/apache/geronimo/gshell/remote/server/RshServerFactory.java
URL: http://svn.apache.org/viewvc/geronimo/sandbox/gshell/trunk/gshell-remote/gshell-remote-server/src/main/java/org/apache/geronimo/gshell/remote/server/RshServerFactory.java?rev=576612&view=auto
==============================================================================
--- geronimo/sandbox/gshell/trunk/gshell-remote/gshell-remote-server/src/main/java/org/apache/geronimo/gshell/remote/server/RshServerFactory.java (added)
+++ geronimo/sandbox/gshell/trunk/gshell-remote/gshell-remote-server/src/main/java/org/apache/geronimo/gshell/remote/server/RshServerFactory.java Mon Sep 17 15:27:55 2007
@@ -0,0 +1,45 @@
+/*
+ * 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.remote.server;
+
+import java.net.URI;
+
+import org.apache.geronimo.gshell.remote.transport.TransportFactory;
+import org.apache.geronimo.gshell.remote.transport.TransportFactoryLocator;
+import org.codehaus.plexus.component.annotations.Component;
+import org.codehaus.plexus.component.annotations.Requirement;
+
+/**
+ * ???
+ *
+ * @version $Rev$ $Date$
+ */
+@Component(role=RshServerFactory.class)
+public class RshServerFactory
+{
+    @Requirement
+    private TransportFactoryLocator locator;
+
+    public RshServer connect(final URI location) throws Exception {
+        TransportFactory factory = locator.locate(location);
+
+        return new RshServer(location, factory);
+    }
+}
\ No newline at end of file

Propchange: geronimo/sandbox/gshell/trunk/gshell-remote/gshell-remote-server/src/main/java/org/apache/geronimo/gshell/remote/server/RshServerFactory.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: geronimo/sandbox/gshell/trunk/gshell-remote/gshell-remote-server/src/main/java/org/apache/geronimo/gshell/remote/server/RshServerFactory.java
------------------------------------------------------------------------------
    svn:keywords = Date Author Id Revision HeadURL

Propchange: geronimo/sandbox/gshell/trunk/gshell-remote/gshell-remote-server/src/main/java/org/apache/geronimo/gshell/remote/server/RshServerFactory.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain