Author: david.lloyd(a)jboss.com
Date: 2008-02-25 21:14:55 -0500 (Mon, 25 Feb 2008)
New Revision: 3512
Added:
remoting3/trunk/api/src/main/java/org/jboss/cx/remoting/CloseHandler.java
remoting3/trunk/api/src/main/java/org/jboss/cx/remoting/Closeable.java
Modified:
remoting3/trunk/api/src/main/java/org/jboss/cx/remoting/Context.java
remoting3/trunk/api/src/main/java/org/jboss/cx/remoting/ContextSource.java
remoting3/trunk/api/src/main/java/org/jboss/cx/remoting/Endpoint.java
remoting3/trunk/api/src/main/java/org/jboss/cx/remoting/Session.java
remoting3/trunk/api/src/main/java/org/jboss/cx/remoting/service/ServiceRequest.java
remoting3/trunk/api/src/main/java/org/jboss/cx/remoting/spi/wrapper/ContextSourceWrapper.java
remoting3/trunk/api/src/main/java/org/jboss/cx/remoting/spi/wrapper/ContextWrapper.java
remoting3/trunk/api/src/main/java/org/jboss/cx/remoting/spi/wrapper/EndpointWrapper.java
remoting3/trunk/api/src/main/java/org/jboss/cx/remoting/spi/wrapper/SessionWrapper.java
remoting3/trunk/core/src/main/java/org/jboss/cx/remoting/core/CoreEndpoint.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/CoreOutboundContext.java
remoting3/trunk/core/src/main/java/org/jboss/cx/remoting/core/CoreOutboundService.java
remoting3/trunk/core/src/main/java/org/jboss/cx/remoting/core/CoreSession.java
remoting3/trunk/core/src/main/java/org/jboss/cx/remoting/core/ServiceLocatorListener.java
Log:
Add close callback notifiers - needed for service locator system
Added: remoting3/trunk/api/src/main/java/org/jboss/cx/remoting/CloseHandler.java
===================================================================
--- remoting3/trunk/api/src/main/java/org/jboss/cx/remoting/CloseHandler.java
(rev 0)
+++ remoting3/trunk/api/src/main/java/org/jboss/cx/remoting/CloseHandler.java 2008-02-26
02:14:55 UTC (rev 3512)
@@ -0,0 +1,8 @@
+package org.jboss.cx.remoting;
+
+/**
+ *
+ */
+public interface CloseHandler<T> {
+ void handleClose(T closed);
+}
Added: remoting3/trunk/api/src/main/java/org/jboss/cx/remoting/Closeable.java
===================================================================
--- remoting3/trunk/api/src/main/java/org/jboss/cx/remoting/Closeable.java
(rev 0)
+++ remoting3/trunk/api/src/main/java/org/jboss/cx/remoting/Closeable.java 2008-02-26
02:14:55 UTC (rev 3512)
@@ -0,0 +1,10 @@
+package org.jboss.cx.remoting;
+
+/**
+ *
+ */
+public interface Closeable<T> extends java.io.Closeable {
+ void close() throws RemotingException;
+
+ void addCloseHandler(CloseHandler<T> handler);
+}
Modified: remoting3/trunk/api/src/main/java/org/jboss/cx/remoting/Context.java
===================================================================
--- remoting3/trunk/api/src/main/java/org/jboss/cx/remoting/Context.java 2008-02-26
02:01:05 UTC (rev 3511)
+++ remoting3/trunk/api/src/main/java/org/jboss/cx/remoting/Context.java 2008-02-26
02:14:55 UTC (rev 3512)
@@ -1,13 +1,12 @@
package org.jboss.cx.remoting;
import java.util.concurrent.ConcurrentMap;
-import java.io.Closeable;
/**
* A communications context. The context may be associated with a
security/authentication state and a transactional
* state, as well as other state maintained by the remote side.
*/
-public interface Context<I, O> extends Closeable {
+public interface Context<I, O> extends Closeable<Context<I, O>> {
void close() throws RemotingException;
Modified: remoting3/trunk/api/src/main/java/org/jboss/cx/remoting/ContextSource.java
===================================================================
--- remoting3/trunk/api/src/main/java/org/jboss/cx/remoting/ContextSource.java 2008-02-26
02:01:05 UTC (rev 3511)
+++ remoting3/trunk/api/src/main/java/org/jboss/cx/remoting/ContextSource.java 2008-02-26
02:14:55 UTC (rev 3512)
@@ -3,7 +3,7 @@
/**
* A source for new Remoting contexts.
*/
-public interface ContextSource<I, O> {
+public interface ContextSource<I, O> extends Closeable<ContextSource<I,
O>> {
/**
* Close the context source. New contexts may no longer be created after this
* method is called. Subsequent calls to this method have no additional effect.
Modified: remoting3/trunk/api/src/main/java/org/jboss/cx/remoting/Endpoint.java
===================================================================
--- remoting3/trunk/api/src/main/java/org/jboss/cx/remoting/Endpoint.java 2008-02-26
02:01:05 UTC (rev 3511)
+++ remoting3/trunk/api/src/main/java/org/jboss/cx/remoting/Endpoint.java 2008-02-26
02:14:55 UTC (rev 3512)
@@ -9,7 +9,7 @@
/**
* A potential participant in a JBoss Remoting communications relationship.
*/
-public interface Endpoint {
+public interface Endpoint extends Closeable<Endpoint> {
/**
* Get the endpoint attribute map. This is a storage area for any data associated
with this endpoint, including
* (but not limited to) connection and protocol information, and application
information.
Modified: remoting3/trunk/api/src/main/java/org/jboss/cx/remoting/Session.java
===================================================================
--- remoting3/trunk/api/src/main/java/org/jboss/cx/remoting/Session.java 2008-02-26
02:01:05 UTC (rev 3511)
+++ remoting3/trunk/api/src/main/java/org/jboss/cx/remoting/Session.java 2008-02-26
02:14:55 UTC (rev 3512)
@@ -1,7 +1,6 @@
package org.jboss.cx.remoting;
import java.util.concurrent.ConcurrentMap;
-import java.io.Closeable;
/**
* Represents a point-to-point relationship with another endpoint.
@@ -10,7 +9,7 @@
* <p/>
* A session may be shared safely among multiple threads.
*/
-public interface Session extends Closeable {
+public interface Session extends Closeable<Session> {
/**
* Close this session. Any associated connection(s) will be closed. Calling this
method multiple times has no
* effect.
Modified:
remoting3/trunk/api/src/main/java/org/jboss/cx/remoting/service/ServiceRequest.java
===================================================================
---
remoting3/trunk/api/src/main/java/org/jboss/cx/remoting/service/ServiceRequest.java 2008-02-26
02:01:05 UTC (rev 3511)
+++
remoting3/trunk/api/src/main/java/org/jboss/cx/remoting/service/ServiceRequest.java 2008-02-26
02:14:55 UTC (rev 3512)
@@ -12,6 +12,7 @@
private URI uri;
private Class<I> requestType;
private Class<O> replyType;
+ private int ttl;
public ServiceRequest() {
}
@@ -47,4 +48,12 @@
public void setReplyType(final Class<O> replyType) {
this.replyType = replyType;
}
+
+ public int getTtl() {
+ return ttl;
+ }
+
+ public void setTtl(final int ttl) {
+ this.ttl = ttl;
+ }
}
Modified:
remoting3/trunk/api/src/main/java/org/jboss/cx/remoting/spi/wrapper/ContextSourceWrapper.java
===================================================================
---
remoting3/trunk/api/src/main/java/org/jboss/cx/remoting/spi/wrapper/ContextSourceWrapper.java 2008-02-26
02:01:05 UTC (rev 3511)
+++
remoting3/trunk/api/src/main/java/org/jboss/cx/remoting/spi/wrapper/ContextSourceWrapper.java 2008-02-26
02:14:55 UTC (rev 3512)
@@ -3,6 +3,7 @@
import org.jboss.cx.remoting.Context;
import org.jboss.cx.remoting.ContextSource;
import org.jboss.cx.remoting.RemotingException;
+import org.jboss.cx.remoting.CloseHandler;
/**
*
@@ -18,6 +19,14 @@
delegate.close();
}
+ public void addCloseHandler(final CloseHandler<ContextSource<I, O>>
closeHandler) {
+ delegate.addCloseHandler(new CloseHandler<ContextSource<I, O>>() {
+ public void handleClose(final ContextSource<I, O> closed) {
+ closeHandler.handleClose(ContextSourceWrapper.this);
+ }
+ });
+ }
+
public Context<I, O> createContext() throws RemotingException {
return delegate.createContext();
}
Modified:
remoting3/trunk/api/src/main/java/org/jboss/cx/remoting/spi/wrapper/ContextWrapper.java
===================================================================
---
remoting3/trunk/api/src/main/java/org/jboss/cx/remoting/spi/wrapper/ContextWrapper.java 2008-02-26
02:01:05 UTC (rev 3511)
+++
remoting3/trunk/api/src/main/java/org/jboss/cx/remoting/spi/wrapper/ContextWrapper.java 2008-02-26
02:14:55 UTC (rev 3512)
@@ -5,6 +5,7 @@
import org.jboss.cx.remoting.FutureReply;
import org.jboss.cx.remoting.RemoteExecutionException;
import org.jboss.cx.remoting.RemotingException;
+import org.jboss.cx.remoting.CloseHandler;
/**
*
@@ -20,6 +21,14 @@
delegate.close();
}
+ public void addCloseHandler(final CloseHandler<Context<I, O>>
closeHandler) {
+ delegate.addCloseHandler(new CloseHandler<Context<I, O>>() {
+ public void handleClose(final Context<I, O> closed) {
+ closeHandler.handleClose(ContextWrapper.this);
+ }
+ });
+ }
+
public O invoke(final I request) throws RemotingException, RemoteExecutionException,
InterruptedException {
return delegate.invoke(request);
}
Modified:
remoting3/trunk/api/src/main/java/org/jboss/cx/remoting/spi/wrapper/EndpointWrapper.java
===================================================================
---
remoting3/trunk/api/src/main/java/org/jboss/cx/remoting/spi/wrapper/EndpointWrapper.java 2008-02-26
02:01:05 UTC (rev 3511)
+++
remoting3/trunk/api/src/main/java/org/jboss/cx/remoting/spi/wrapper/EndpointWrapper.java 2008-02-26
02:14:55 UTC (rev 3512)
@@ -8,6 +8,7 @@
import org.jboss.cx.remoting.Context;
import org.jboss.cx.remoting.RequestListener;
import org.jboss.cx.remoting.ContextSource;
+import org.jboss.cx.remoting.CloseHandler;
import org.jboss.cx.remoting.util.AttributeMap;
import org.jboss.cx.remoting.spi.protocol.ProtocolRegistration;
import org.jboss.cx.remoting.spi.protocol.ProtocolRegistrationSpec;
@@ -45,4 +46,16 @@
public <I, O> ContextSource<I, O> createService(final
RequestListener<I, O> requestListener) {
return delegate.createService(requestListener);
}
+
+ public void close() throws RemotingException {
+ delegate.close();
+ }
+
+ public void addCloseHandler(final CloseHandler<Endpoint> closeHandler) {
+ delegate.addCloseHandler(new CloseHandler<Endpoint>() {
+ public void handleClose(final Endpoint closed) {
+ closeHandler.handleClose(EndpointWrapper.this);
+ }
+ });
+ }
}
Modified:
remoting3/trunk/api/src/main/java/org/jboss/cx/remoting/spi/wrapper/SessionWrapper.java
===================================================================
---
remoting3/trunk/api/src/main/java/org/jboss/cx/remoting/spi/wrapper/SessionWrapper.java 2008-02-26
02:01:05 UTC (rev 3511)
+++
remoting3/trunk/api/src/main/java/org/jboss/cx/remoting/spi/wrapper/SessionWrapper.java 2008-02-26
02:14:55 UTC (rev 3512)
@@ -4,6 +4,7 @@
import org.jboss.cx.remoting.RemotingException;
import org.jboss.cx.remoting.Session;
import org.jboss.cx.remoting.Context;
+import org.jboss.cx.remoting.CloseHandler;
/**
*
@@ -19,6 +20,14 @@
delegate.close();
}
+ public void addCloseHandler(final CloseHandler<Session> closeHandler) {
+ delegate.addCloseHandler(new CloseHandler<Session>() {
+ public void handleClose(final Session closed) {
+ closeHandler.handleClose(SessionWrapper.this);
+ }
+ });
+ }
+
public ConcurrentMap<Object, Object> getAttributes() {
return delegate.getAttributes();
}
Modified: remoting3/trunk/core/src/main/java/org/jboss/cx/remoting/core/CoreEndpoint.java
===================================================================
---
remoting3/trunk/core/src/main/java/org/jboss/cx/remoting/core/CoreEndpoint.java 2008-02-26
02:01:05 UTC (rev 3511)
+++
remoting3/trunk/core/src/main/java/org/jboss/cx/remoting/core/CoreEndpoint.java 2008-02-26
02:14:55 UTC (rev 3512)
@@ -14,6 +14,7 @@
import org.jboss.cx.remoting.Context;
import org.jboss.cx.remoting.RequestListener;
import org.jboss.cx.remoting.ContextSource;
+import org.jboss.cx.remoting.CloseHandler;
import org.jboss.cx.remoting.util.CollectionUtil;
import org.jboss.cx.remoting.version.Version;
import org.jboss.cx.remoting.log.Logger;
@@ -233,5 +234,12 @@
return null;
}
+ public void close() throws RemotingException {
+ // todo ...
+ }
+
+ public void addCloseHandler(final CloseHandler<Endpoint> closeHandler) {
+ // todo ...
+ }
}
}
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-02-26
02:01:05 UTC (rev 3511)
+++
remoting3/trunk/core/src/main/java/org/jboss/cx/remoting/core/CoreInboundService.java 2008-02-26
02:14:55 UTC (rev 3512)
@@ -2,7 +2,6 @@
import org.jboss.cx.remoting.RemotingException;
import org.jboss.cx.remoting.RequestListener;
-import org.jboss.cx.remoting.log.Logger;
import org.jboss.cx.remoting.spi.protocol.ContextIdentifier;
import org.jboss.cx.remoting.spi.protocol.ServiceIdentifier;
@@ -10,8 +9,6 @@
*
*/
public final class CoreInboundService<I, O> {
- private static final Logger log = Logger.getLogger(CoreInboundService.class);
-
private final CoreSession coreSession;
private final ServiceIdentifier serviceIdentifier;
private final RequestListener<I, O> requestListener;
Modified:
remoting3/trunk/core/src/main/java/org/jboss/cx/remoting/core/CoreOutboundContext.java
===================================================================
---
remoting3/trunk/core/src/main/java/org/jboss/cx/remoting/core/CoreOutboundContext.java 2008-02-26
02:01:05 UTC (rev 3511)
+++
remoting3/trunk/core/src/main/java/org/jboss/cx/remoting/core/CoreOutboundContext.java 2008-02-26
02:14:55 UTC (rev 3512)
@@ -7,6 +7,7 @@
import org.jboss.cx.remoting.RemoteExecutionException;
import org.jboss.cx.remoting.RemotingException;
import org.jboss.cx.remoting.RequestCompletionHandler;
+import org.jboss.cx.remoting.CloseHandler;
import org.jboss.cx.remoting.util.AtomicStateMachine;
import org.jboss.cx.remoting.util.CollectionUtil;
import org.jboss.cx.remoting.log.Logger;
@@ -132,6 +133,10 @@
receiveCloseContext();
}
+ public void addCloseHandler(final CloseHandler<Context<I, O>>
closeHandler) {
+ // todo ...
+ }
+
public O invoke(final I request) throws RemotingException,
RemoteExecutionException, InterruptedException {
state.requireHold(State.UP);
try {
Modified:
remoting3/trunk/core/src/main/java/org/jboss/cx/remoting/core/CoreOutboundService.java
===================================================================
---
remoting3/trunk/core/src/main/java/org/jboss/cx/remoting/core/CoreOutboundService.java 2008-02-26
02:01:05 UTC (rev 3511)
+++
remoting3/trunk/core/src/main/java/org/jboss/cx/remoting/core/CoreOutboundService.java 2008-02-26
02:14:55 UTC (rev 3512)
@@ -3,6 +3,7 @@
import org.jboss.cx.remoting.Context;
import org.jboss.cx.remoting.ContextSource;
import org.jboss.cx.remoting.RemotingException;
+import org.jboss.cx.remoting.CloseHandler;
import org.jboss.cx.remoting.util.AtomicStateMachine;
import org.jboss.cx.remoting.log.Logger;
import org.jboss.cx.remoting.spi.protocol.ServiceIdentifier;
@@ -79,6 +80,10 @@
receiveServiceTerminate();
}
+ public void addCloseHandler(final CloseHandler<ContextSource<I, O>>
closeHandler) {
+ // todo ...
+ }
+
public Context<I, O> createContext() throws RemotingException {
// Don't need waitForNotHold here since the state can't change again
final State currentState = state.waitForNot(State.WAITING_FOR_REPLY);
Modified: remoting3/trunk/core/src/main/java/org/jboss/cx/remoting/core/CoreSession.java
===================================================================
---
remoting3/trunk/core/src/main/java/org/jboss/cx/remoting/core/CoreSession.java 2008-02-26
02:01:05 UTC (rev 3511)
+++
remoting3/trunk/core/src/main/java/org/jboss/cx/remoting/core/CoreSession.java 2008-02-26
02:14:55 UTC (rev 3512)
@@ -19,6 +19,7 @@
import org.jboss.cx.remoting.RequestListener;
import org.jboss.cx.remoting.Session;
import org.jboss.cx.remoting.Context;
+import org.jboss.cx.remoting.CloseHandler;
import org.jboss.cx.remoting.core.stream.DefaultStreamDetector;
import org.jboss.cx.remoting.util.AtomicStateMachine;
import org.jboss.cx.remoting.util.AttributeMap;
@@ -375,6 +376,10 @@
}
}
+ public void addCloseHandler(final CloseHandler<Session> closeHandler) {
+ // todo ...
+ }
+
public ConcurrentMap<Object, Object> getAttributes() {
return sessionMap;
}
Modified:
remoting3/trunk/core/src/main/java/org/jboss/cx/remoting/core/ServiceLocatorListener.java
===================================================================
---
remoting3/trunk/core/src/main/java/org/jboss/cx/remoting/core/ServiceLocatorListener.java 2008-02-26
02:01:05 UTC (rev 3511)
+++
remoting3/trunk/core/src/main/java/org/jboss/cx/remoting/core/ServiceLocatorListener.java 2008-02-26
02:14:55 UTC (rev 3512)
@@ -3,23 +3,41 @@
import org.jboss.cx.remoting.RequestListener;
import org.jboss.cx.remoting.RequestContext;
import org.jboss.cx.remoting.RemoteExecutionException;
+import org.jboss.cx.remoting.ContextSource;
+import org.jboss.cx.remoting.Context;
import org.jboss.cx.remoting.util.ServiceURI;
+import org.jboss.cx.remoting.util.CollectionUtil;
import org.jboss.cx.remoting.service.ServiceRequest;
import org.jboss.cx.remoting.service.ServiceReply;
import java.net.URI;
+import java.util.concurrent.ConcurrentMap;
/**
*
*/
public final class ServiceLocatorListener<I, O> implements
RequestListener<ServiceRequest<I, O>, ServiceReply<I, O>> {
-
+ private interface Peer {
+ String getName();
+
+ int getCost();
+
+ <X, Y> Context<ServiceRequest<X, Y>, ServiceReply<X, Y>>
getLocatorContext();
+ }
+
+ private static <K, V> ConcurrentMap<K, V> syncMap() {
+ return CollectionUtil.concurrentMap(CollectionUtil.<K, V>hashMap());
+ }
+
+ private final ConcurrentMap<String, ConcurrentMap<String, ContextSource<?,
?>>> deployments = syncMap();
+
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();
+
}
}