[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