[jboss-remoting-commits] JBoss Remoting SVN: r3883 - in remoting3/trunk: api/src/main/java/org/jboss/cx/remoting/spi/wrapper and 2 other directories.

jboss-remoting-commits at lists.jboss.org jboss-remoting-commits at lists.jboss.org
Thu Apr 3 16:03:50 EDT 2008


Author: david.lloyd at jboss.com
Date: 2008-04-03 16:03:49 -0400 (Thu, 03 Apr 2008)
New Revision: 3883

Added:
   remoting3/trunk/api/src/main/java/org/jboss/cx/remoting/AbstractRequestListener.java
   remoting3/trunk/api/src/main/java/org/jboss/cx/remoting/ContextContext.java
   remoting3/trunk/api/src/main/java/org/jboss/cx/remoting/ServiceContext.java
Modified:
   remoting3/trunk/api/src/main/java/org/jboss/cx/remoting/RequestContext.java
   remoting3/trunk/api/src/main/java/org/jboss/cx/remoting/RequestListener.java
   remoting3/trunk/api/src/main/java/org/jboss/cx/remoting/spi/wrapper/RequestContextWrapper.java
   remoting3/trunk/core/src/main/java/org/jboss/cx/remoting/core/CoreInboundContext.java
   remoting3/trunk/core/src/main/java/org/jboss/cx/remoting/core/CoreInboundRequest.java
   remoting3/trunk/core/src/main/java/org/jboss/cx/remoting/core/CoreInboundService.java
   remoting3/trunk/core/src/main/java/org/jboss/cx/remoting/core/service/ClassLoaderResourceListener.java
   remoting3/trunk/core/src/main/java/org/jboss/cx/remoting/core/service/ServiceLocatorListener.java
Log:
JBREM-916, JBREM-921 - server-side contexts and notifiers for request listeners to handle context and services as well

Added: remoting3/trunk/api/src/main/java/org/jboss/cx/remoting/AbstractRequestListener.java
===================================================================
--- remoting3/trunk/api/src/main/java/org/jboss/cx/remoting/AbstractRequestListener.java	                        (rev 0)
+++ remoting3/trunk/api/src/main/java/org/jboss/cx/remoting/AbstractRequestListener.java	2008-04-03 20:03:49 UTC (rev 3883)
@@ -0,0 +1,18 @@
+package org.jboss.cx.remoting;
+
+/**
+ *
+ */
+public abstract class AbstractRequestListener<I, O> implements RequestListener<I, O> {
+    public void handleContextOpen(final ContextContext context) {
+    }
+
+    public void handleServiceOpen(final ServiceContext context) {
+    }
+
+    public void handleServiceClose(final ServiceContext context) {
+    }
+
+    public void handleContextClose(final ContextContext context) {
+    }
+}

Added: remoting3/trunk/api/src/main/java/org/jboss/cx/remoting/ContextContext.java
===================================================================
--- remoting3/trunk/api/src/main/java/org/jboss/cx/remoting/ContextContext.java	                        (rev 0)
+++ remoting3/trunk/api/src/main/java/org/jboss/cx/remoting/ContextContext.java	2008-04-03 20:03:49 UTC (rev 3883)
@@ -0,0 +1,23 @@
+package org.jboss.cx.remoting;
+
+import java.util.concurrent.ConcurrentMap;
+
+/**
+ *
+ */
+public interface ContextContext extends Closeable<ContextContext> {
+    /**
+     * Get the attributes for this end of the context as a map.
+     *
+     * @return the attribute map
+     */
+    ConcurrentMap<Object, Object> getAttributes();
+
+    /**
+     * Get the service that this context is associated with, or {@code null} if there is no
+     * service.
+     *
+     * @return the service, or {@code null} if there is none
+     */
+    ServiceContext getServiceContext();
+}

Modified: remoting3/trunk/api/src/main/java/org/jboss/cx/remoting/RequestContext.java
===================================================================
--- remoting3/trunk/api/src/main/java/org/jboss/cx/remoting/RequestContext.java	2008-04-03 19:52:28 UTC (rev 3882)
+++ remoting3/trunk/api/src/main/java/org/jboss/cx/remoting/RequestContext.java	2008-04-03 20:03:49 UTC (rev 3883)
@@ -7,6 +7,13 @@
  */
 public interface RequestContext<O> extends Executor {
     /**
+     * Get the context that the request came in on.
+     *
+     * @return the context
+     */
+    ContextContext getContext();
+
+    /**
      * Determine whether the current request was cancelled.
      *
      * @return {@code true} if the request was cancelled

Modified: remoting3/trunk/api/src/main/java/org/jboss/cx/remoting/RequestListener.java
===================================================================
--- remoting3/trunk/api/src/main/java/org/jboss/cx/remoting/RequestListener.java	2008-04-03 19:52:28 UTC (rev 3882)
+++ remoting3/trunk/api/src/main/java/org/jboss/cx/remoting/RequestListener.java	2008-04-03 20:03:49 UTC (rev 3883)
@@ -6,10 +6,19 @@
 public interface RequestListener<I, O> {
     /**
      * Handle the opening of a context.
+     *
+     * @param context the context context
      */
-    void handleOpen();
+    void handleContextOpen(ContextContext context);
 
     /**
+     * Handle the opening of a service.
+     *
+     * @param context the service context
+     */
+    void handleServiceOpen(ServiceContext context);
+
+    /**
      * Handle a request.  If this method throws {@code RemoteExecutionException}, then that exception is passed
      * back to the caller and the request is marked as complete.  If this method throws {@code InterruptedException},
      * the request is cancelled, and the interrupted status is propagated to the executor..  Otherwise, the request
@@ -26,7 +35,16 @@
     void handleRequest(RequestContext<O> context, I request) throws RemoteExecutionException, InterruptedException;
 
     /**
+     * Handle the close of a service.
+     *
+     * @param context the service context
+     */
+    void handleServiceClose(ServiceContext context);
+
+    /**
      * Handle the close of a context.
+     *
+     * @param context
      */
-    void handleClose();
+    void handleContextClose(ContextContext context);
 }

Added: remoting3/trunk/api/src/main/java/org/jboss/cx/remoting/ServiceContext.java
===================================================================
--- remoting3/trunk/api/src/main/java/org/jboss/cx/remoting/ServiceContext.java	                        (rev 0)
+++ remoting3/trunk/api/src/main/java/org/jboss/cx/remoting/ServiceContext.java	2008-04-03 20:03:49 UTC (rev 3883)
@@ -0,0 +1,10 @@
+package org.jboss.cx.remoting;
+
+import java.util.concurrent.ConcurrentMap;
+
+/**
+ *
+ */
+public interface ServiceContext extends Closeable<ServiceContext> {
+    ConcurrentMap<Object, Object> getAttributes();
+}

Modified: remoting3/trunk/api/src/main/java/org/jboss/cx/remoting/spi/wrapper/RequestContextWrapper.java
===================================================================
--- remoting3/trunk/api/src/main/java/org/jboss/cx/remoting/spi/wrapper/RequestContextWrapper.java	2008-04-03 19:52:28 UTC (rev 3882)
+++ remoting3/trunk/api/src/main/java/org/jboss/cx/remoting/spi/wrapper/RequestContextWrapper.java	2008-04-03 20:03:49 UTC (rev 3883)
@@ -3,6 +3,7 @@
 import org.jboss.cx.remoting.RemotingException;
 import org.jboss.cx.remoting.RequestCancelHandler;
 import org.jboss.cx.remoting.RequestContext;
+import org.jboss.cx.remoting.ContextContext;
 
 /**
  *
@@ -14,6 +15,10 @@
         this.delegate = delegate;
     }
 
+    public ContextContext getContext() {
+        return delegate.getContext();
+    }
+
     public boolean isCancelled() {
         return delegate.isCancelled();
     }

Modified: remoting3/trunk/core/src/main/java/org/jboss/cx/remoting/core/CoreInboundContext.java
===================================================================
--- remoting3/trunk/core/src/main/java/org/jboss/cx/remoting/core/CoreInboundContext.java	2008-04-03 19:52:28 UTC (rev 3882)
+++ remoting3/trunk/core/src/main/java/org/jboss/cx/remoting/core/CoreInboundContext.java	2008-04-03 20:03:49 UTC (rev 3883)
@@ -1,12 +1,17 @@
 package org.jboss.cx.remoting.core;
 
 import java.util.Set;
+import java.util.concurrent.ConcurrentMap;
 import java.util.concurrent.Executor;
+import org.jboss.cx.remoting.CloseHandler;
+import org.jboss.cx.remoting.ContextContext;
 import org.jboss.cx.remoting.RemotingException;
 import org.jboss.cx.remoting.RequestListener;
+import org.jboss.cx.remoting.ServiceContext;
 import org.jboss.cx.remoting.log.Logger;
 import org.jboss.cx.remoting.util.AtomicStateMachine;
 import static org.jboss.cx.remoting.util.AtomicStateMachine.start;
+import org.jboss.cx.remoting.util.CollectionUtil;
 import static org.jboss.cx.remoting.util.CollectionUtil.synchronizedHashSet;
 
 /**
@@ -17,10 +22,13 @@
 
     private final RequestListener<I, O> requestListener;
     private final Executor executor;
+    private final ServiceContext serviceContext;
     private final Set<CoreInboundRequest<I, O>> requests = synchronizedHashSet();
     private final AtomicStateMachine<State> state = start(State.NEW);
+    private final ContextContext contextContext = new UserContextContext();
 
     private ContextClient contextClient;
+    private ConcurrentMap<Object, Object> attributes = CollectionUtil.concurrentMap();
 
     private enum State implements org.jboss.cx.remoting.util.State<State> {
         NEW,
@@ -36,8 +44,15 @@
     public CoreInboundContext(final RequestListener<I, O> requestListener, final Executor executor) {
         this.requestListener = requestListener;
         this.executor = executor;
+        serviceContext = null;
     }
 
+    public CoreInboundContext(final RequestListener<I, O> requestListener, final Executor executor, final ServiceContext serviceContext) {
+        this.requestListener = requestListener;
+        this.executor = executor;
+        this.serviceContext = serviceContext;
+    }
+
     public ContextServer<I, O> getContextServer() {
         return new Server();
     }
@@ -45,7 +60,12 @@
     public void initialize(final ContextClient contextClient) {
         state.requireTransitionExclusive(State.NEW, State.UP);
         this.contextClient = contextClient;
-        state.releaseExclusive();
+        state.releaseDowngrade();
+        try {
+            requestListener.handleContextOpen(contextContext);
+        } finally {
+            state.release();
+        }
     }
 
     public void remove(final CoreInboundRequest<I, O> request) {
@@ -63,10 +83,21 @@
         }
     }
 
+    // Accessors
+
+    public ContextContext getContextContext() {
+        return contextContext;
+    }
+
+    // Support classes
+
     public final class Server implements ContextServer<I, O> {
+        private Server() {
+        }
+
         public RequestServer<I> createNewRequest(final RequestClient<O> requestClient) throws RemotingException {
             if (state.inHold(State.UP)) try {
-                final CoreInboundRequest<I, O> inboundRequest = new CoreInboundRequest<I, O>(requestListener, executor);
+                final CoreInboundRequest<I, O> inboundRequest = new CoreInboundRequest<I, O>(requestListener, executor, contextContext);
                 inboundRequest.initialize(requestClient);
                 requests.add(inboundRequest);
                 return inboundRequest.getRequester();
@@ -92,4 +123,27 @@
             }
         }
     }
+
+    public final class UserContextContext implements ContextContext {
+        private UserContextContext() {
+        }
+
+        public ConcurrentMap<Object, Object> getAttributes() {
+            return attributes;
+        }
+
+        public ServiceContext getServiceContext() {
+            return serviceContext;
+        }
+
+        public void close() throws RemotingException {
+            // todo
+        }
+
+        public void closeImmediate() throws RemotingException {
+        }
+
+        public void addCloseHandler(final CloseHandler<ContextContext> contextContextCloseHandler) {
+        }
+    }
 }

Modified: remoting3/trunk/core/src/main/java/org/jboss/cx/remoting/core/CoreInboundRequest.java
===================================================================
--- remoting3/trunk/core/src/main/java/org/jboss/cx/remoting/core/CoreInboundRequest.java	2008-04-03 19:52:28 UTC (rev 3882)
+++ remoting3/trunk/core/src/main/java/org/jboss/cx/remoting/core/CoreInboundRequest.java	2008-04-03 20:03:49 UTC (rev 3883)
@@ -11,6 +11,7 @@
 import org.jboss.cx.remoting.RequestCancelHandler;
 import org.jboss.cx.remoting.RequestContext;
 import org.jboss.cx.remoting.RequestListener;
+import org.jboss.cx.remoting.ContextContext;
 import org.jboss.cx.remoting.log.Logger;
 import org.jboss.cx.remoting.util.AtomicStateMachine;
 
@@ -22,6 +23,7 @@
 
     private final RequestListener<I,O> requestListener;
     private final Executor executor;
+    private final ContextContext contextContext;
 
     private final AtomicStateMachine<State> state = AtomicStateMachine.start(State.INITIAL);
     private final UserRequestContext userRequestContext = new UserRequestContext();
@@ -46,9 +48,10 @@
      */
     private List<RequestCancelHandler<O>> cancelHandlers;
 
-    public CoreInboundRequest(final RequestListener<I, O> requestListener, final Executor executor) {
+    public CoreInboundRequest(final RequestListener<I, O> requestListener, final Executor executor, final ContextContext contextContext) {
         this.requestListener = requestListener;
         this.executor = executor;
+        this.contextContext = contextContext;
     }
 
     private enum State implements org.jboss.cx.remoting.util.State<State> {
@@ -179,6 +182,10 @@
     public final class UserRequestContext implements RequestContext<O> {
         private UserRequestContext() {}
 
+        public ContextContext getContext() {
+            return contextContext;
+        }
+
         public boolean isCancelled() {
             synchronized(CoreInboundRequest.this) {
                 return cancel;

Modified: remoting3/trunk/core/src/main/java/org/jboss/cx/remoting/core/CoreInboundService.java
===================================================================
--- remoting3/trunk/core/src/main/java/org/jboss/cx/remoting/core/CoreInboundService.java	2008-04-03 19:52:28 UTC (rev 3882)
+++ remoting3/trunk/core/src/main/java/org/jboss/cx/remoting/core/CoreInboundService.java	2008-04-03 20:03:49 UTC (rev 3883)
@@ -1,21 +1,29 @@
 package org.jboss.cx.remoting.core;
 
+import java.util.concurrent.ConcurrentMap;
 import java.util.concurrent.Executor;
+import org.jboss.cx.remoting.CloseHandler;
 import org.jboss.cx.remoting.RemotingException;
 import org.jboss.cx.remoting.RequestListener;
+import org.jboss.cx.remoting.ServiceContext;
 import org.jboss.cx.remoting.util.AtomicStateMachine;
 import static org.jboss.cx.remoting.util.AtomicStateMachine.start;
+import org.jboss.cx.remoting.util.CollectionUtil;
 
 /**
  *
  */
 public final class CoreInboundService<I, O> {
+
     private final RequestListener<I, O> requestListener;
     private final Executor executor;
-    private ServiceClient serviceClient;
 
+    private final ServiceContext serviceContext = new UserServiceContext();
     private final AtomicStateMachine<State> state = start(State.INITIAL);
+    private final ConcurrentMap<Object, Object> attributes = CollectionUtil.concurrentMap();
 
+    private ServiceClient serviceClient;
+
     private enum State implements org.jboss.cx.remoting.util.State<State> {
         INITIAL,
         UP;
@@ -33,7 +41,12 @@
     public void initialize(final ServiceClient serviceClient) {
         state.requireTransitionExclusive(State.INITIAL, State.UP);
         this.serviceClient = serviceClient;
-        state.releaseExclusive();
+        state.releaseDowngrade();
+        try {
+            requestListener.handleServiceOpen(serviceContext);
+        } finally {
+            state.release();
+        }
     }
 
     public ServiceServer<I, O> getServiceServer() {
@@ -43,10 +56,29 @@
             }
 
             public ContextServer<I, O> createNewContext(final ContextClient client) {
-                final CoreInboundContext<I, O> context = new CoreInboundContext<I, O>(requestListener, executor);
+                final CoreInboundContext<I, O> context = new CoreInboundContext<I, O>(requestListener, executor, serviceContext);
                 context.initialize(client);
                 return context.getContextServer();
             }
         };
     }
+
+    public final class UserServiceContext implements ServiceContext {
+        private UserServiceContext() {
+        }
+
+        public ConcurrentMap<Object, Object> getAttributes() {
+            return attributes;
+        }
+
+        public void close() throws RemotingException {
+            // todo
+        }
+
+        public void closeImmediate() throws RemotingException {
+        }
+
+        public void addCloseHandler(final CloseHandler<ServiceContext> serviceContextCloseHandler) {
+        }
+    }
 }

Modified: remoting3/trunk/core/src/main/java/org/jboss/cx/remoting/core/service/ClassLoaderResourceListener.java
===================================================================
--- remoting3/trunk/core/src/main/java/org/jboss/cx/remoting/core/service/ClassLoaderResourceListener.java	2008-04-03 19:52:28 UTC (rev 3882)
+++ remoting3/trunk/core/src/main/java/org/jboss/cx/remoting/core/service/ClassLoaderResourceListener.java	2008-04-03 20:03:49 UTC (rev 3883)
@@ -4,10 +4,12 @@
 import java.net.URL;
 import java.net.URLConnection;
 import java.util.Enumeration;
+import org.jboss.cx.remoting.AbstractRequestListener;
+import org.jboss.cx.remoting.ContextContext;
 import org.jboss.cx.remoting.IOExceptionCarrier;
 import org.jboss.cx.remoting.RemoteExecutionException;
 import org.jboss.cx.remoting.RequestContext;
-import org.jboss.cx.remoting.RequestListener;
+import org.jboss.cx.remoting.ServiceContext;
 import org.jboss.cx.remoting.service.ClassLoaderResourceReply;
 import org.jboss.cx.remoting.service.ClassLoaderResourceRequest;
 import org.jboss.cx.remoting.service.RemoteResource;
@@ -20,7 +22,7 @@
 /**
  *
  */
-public final class ClassLoaderResourceListener implements RequestListener<ClassLoaderResourceRequest, ClassLoaderResourceReply> {
+public final class ClassLoaderResourceListener extends AbstractRequestListener<ClassLoaderResourceRequest,ClassLoaderResourceReply> {
     private ClassLoader classLoader;
 
     public ClassLoader getClassLoader() {
@@ -31,9 +33,6 @@
         this.classLoader = classLoader;
     }
 
-    public void handleOpen() {
-    }
-
     public void handleRequest(final RequestContext<ClassLoaderResourceReply> requestContext, final ClassLoaderResourceRequest request) throws RemoteExecutionException, InterruptedException {
         try {
             final Enumeration<URL> urlResources = classLoader.getResources(request.getName());
@@ -67,7 +66,4 @@
             throw new RemoteExecutionException("Unable to get resources: " + e.getMessage(), e);
         }
     }
-
-    public void handleClose() {
-    }
 }

Modified: remoting3/trunk/core/src/main/java/org/jboss/cx/remoting/core/service/ServiceLocatorListener.java
===================================================================
--- remoting3/trunk/core/src/main/java/org/jboss/cx/remoting/core/service/ServiceLocatorListener.java	2008-04-03 19:52:28 UTC (rev 3882)
+++ remoting3/trunk/core/src/main/java/org/jboss/cx/remoting/core/service/ServiceLocatorListener.java	2008-04-03 20:03:49 UTC (rev 3883)
@@ -3,11 +3,11 @@
 import java.net.URI;
 import java.util.SortedMap;
 import java.util.concurrent.ConcurrentMap;
+import org.jboss.cx.remoting.AbstractRequestListener;
 import org.jboss.cx.remoting.Context;
 import org.jboss.cx.remoting.ContextSource;
 import org.jboss.cx.remoting.RemoteExecutionException;
 import org.jboss.cx.remoting.RequestContext;
-import org.jboss.cx.remoting.RequestListener;
 import org.jboss.cx.remoting.service.ServiceReply;
 import org.jboss.cx.remoting.service.ServiceRequest;
 import org.jboss.cx.remoting.util.CollectionUtil;
@@ -16,7 +16,7 @@
 /**
  *
  */
-public final class ServiceLocatorListener<I, O> implements RequestListener<ServiceRequest<I, O>, ServiceReply<I, O>> {
+public final class ServiceLocatorListener<I, O> extends AbstractRequestListener<ServiceRequest<I, O>,ServiceReply<I, O>> {
 
     private interface Service {
         String getGroupName();
@@ -45,21 +45,11 @@
 
     private final ConcurrentMap<String, ConcurrentMap<String, ContextSource<?, ?>>> deployments = syncMap();
 
-    public void handleOpen() {
-    }
-
     public void handleRequest(final RequestContext<ServiceReply<I, O>> requestContext, final ServiceRequest<I, O> request) throws RemoteExecutionException, InterruptedException {
         final URI uri = request.getUri();
         final ServiceURI serviceURI = new ServiceURI(uri);
         final String endpointName = serviceURI.getEndpointName();
         final String groupName = serviceURI.getGroupName();
         final String serviceType = serviceURI.getServiceType();
-
-        
     }
-
-    public void handleClose() {
-    }
-
-
 }




More information about the jboss-remoting-commits mailing list