Remoting 3 protocol SPI
ron_sigal Nov 23, 2009 2:33 PMSome discussion about protocol independent proxies in the thread "Naming over Remoting 3" in the JBoss AS Development forum (http://www.jboss.org/index.html?module=bb&op=viewtopic&p=4266845#4266845) has suggested to me the following idea. I'd like to be able to do something like
...
Endpoint clientEndpoint = Remoting.createEndpoint("clientEndpoint");
Protocol protocol = Remoting.getProtocol(url.getProtocol());
protocol.registerClientTransport(clientEndpoint, clientExecutor, "localhost");
Connection connection = clientEndpoint.connect(url), OptionMap.EMPTY).get();
Client<String, String> client = connection.openClient("servicetype", "group", String.class, String.class).get();
The idea is that
1. the protocol class hides the details involved in endowing an endpoint with the ability to communicate over a particular protocol, and
2. making the protocol class accessible this way would facilitate protocol neutral code.
The org.jboss.remoting3.samples.socket.SocketProtocol class, for example, which is based on a similar class from an earlier sample protocol, looks more or less like this:
public class SocketProtocol {
/**
* Register ConnectionProvider.
* This endpoint can be a socket transport client.
*/
static public <T, I, O> void registerClientTransport(final Endpoint endpoint, final Executor executor, final String host) {
...
}
/**
* Register ConnectionProvider and start its listening facility.
* This endpoint can be both a client and server for the socket transport.
*/
static public <T, I, O> Cancellable registerServerTransport(Endpoint endpoint, Executor executor, final String host, final int port) {
...
}
/**
* Register a service with an endpoint.
* This endpoint must be acting as a socket transport server.
*/
static public <I, O> void startService(Endpoint endpoint, Executor executor, SocketServiceConfiguration<I, O> socketConfig, final RequestListener<I, O> requestListener) throws IOException; {
...
}
}
So, I'm suggesting abstracting that to an interface.
WDYT?