[JBoss JIRA] Created: (JBESB-1557) JBossRemotingGateway listener should support multiple listeners for the same host port combination
by Daniel Bevenius (JIRA)
JBossRemotingGateway listener should support multiple listeners for the same host port combination
--------------------------------------------------------------------------------------------------
Key: JBESB-1557
URL: http://jira.jboss.com/jira/browse/JBESB-1557
Project: JBoss ESB
Issue Type: Feature Request
Security Level: Public (Everyone can see)
Components: Transports
Affects Versions: 4.3
Reporter: Daniel Bevenius
Assigned To: Daniel Bevenius
Fix For: 4.3
Add support for having multiple jbr listeners listen to the same host port combination:
<jbr-provider name="JBR-Http" protocol="http" host="localhost" path="service1">
<jbr-bus busid="Http-1" port="8765" />
</jbr-provider>
<jbr-provider name="JBR-Http2" protocol="http" host="localhost" path="service2">
<jbr-bus busid="Http-2" port="8765"/>
</jbr-provider>
Also notice the addition of the path configuration parameter. This is intended to identify the path that will be used by a ws client that calls the service. Talked to Tom and he suggested placing the path property on the jbr-bus element so I'll change that. The attached example uses this way just as a proof-of-concept (too lazy to change it right now)
The path is used by the JBossRemoteGatewayListener as the subsystem when adding InvokationHandlers to a Connector. So we are bascically keeping track of JBoss Remting Connectors that share the same host/port combination, and adding InvokationHandlers to them with the above specifed path as their subsystem.
This solution requires that the JBoss Remoting ServerInvoker be modified and adding something like this:
String subsystem = invocation.getSubsystem();
String clientId = invocation.getSessionId();
Map requestPayload = invocation.getRequestPayload();
if ( subsystem == null && requestPayload != null )
{
String path = (String) requestPayload.get( HTTPMetadataConstants.PATH );
subsystem = path.substring( path.indexOf( '/' ) + 1 );
}
log.info( "subsystem : " + subsystem );
This is needed so it can set the incoming path as the target subsystem.
I'm not sure if this is the best way to do this but I'll ask in the Remoting forum if they have a better suggestion.
Really, the gain with this is that we can have multiple webservice running in a ESB instance using the same port. This is important because we it becomes difficult opening a separate port for every web service. This is the issue we are facing at the moment.
Note that this solution does not work when running multiple ESB instances on the same machine, as this would still cause a port conflict. The solution is specific to a single JVM.
Any thought or comments on this?
--
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators: http://jira.jboss.com/jira/secure/Administrators.jspa
-
For more information on JIRA, see: http://www.atlassian.com/software/jira