standalone-server1.xml:
<system-properties> |
<property name="ourhost" value="server1"/> | <property name="jndi.remote.agent" value="ejb:app/module/%s/Agent!com.example.RemoteAgent"/> |
</system-properties> |
<management> | <security-realms> | | <security-realm name="ejb-security-realm"> | <server-identities> | <secret value="base64encodedstring"/> | </server-identities> | </security-realm> | </security-realms> | </management> |
<subsystem xmlns="urn:jboss:domain:remoting:1.1"> |
<connector name="remoting-connector" socket-binding="remoting" security-realm="ApplicationRealm"/> |
<outbound-connections> |
<local-outbound-connection name="server1-remoting" outbound-socket-binding-ref="server1-remoting-socket"> |
<properties> |
<property name="SASL_POLICY_NOANONYMOUS" value="false"/> |
<property name="SSL_ENABLED" value="false"/> |
</properties> |
</local-outbound-connection> |
<remote-outbound-connection name="server2-remoting" outbound-socket-binding-ref="server2-remoting-socket" username="username" security-realm="ejb-security-realm"> |
<properties> |
<property name="SASL_POLICY_NOANONYMOUS" value="false"/> |
<property name="SSL_ENABLED" value="false"/> |
</properties> |
</remote-outbound-connection> |
</outbound-connections> |
</subsystem> |
<socket-binding-group name="standard-sockets" default-interface="public" port-offset="${jboss.socket.binding.port-offset:0}"> |
| <outbound-socket-binding name="server1-remoting-socket"> |
<remote-destination host="localhost" port="4447"/> |
</outbound-socket-binding> |
<outbound-socket-binding name="server2-remoting-socket"> |
<remote-destination host="server2" port="4447"/> |
</outbound-socket-binding> |
</socket-binding-group> |
standalone-server2.xml is identical to server1's with server1 and server2 reversed. In WAR file:
WEB-INF/jboss-web.xml:
<jboss-web>
<distinct-name>${ourhost}</distinct-name>
</jboss-web>
WEB-INF/jboss-ejb-client.xml:
<
jboss-ejb-client
xmlns
=
"urn:jboss:ejb-client:1.0"
>
<
client-context
>
<
ejb-receivers
>
<
remoting-ejb-receiver
outbound-connection-ref
=
"server1-remoting"
/>
<
remoting-ejb-receiver
outbound-connection-ref
=
"server2-remoting"
/>
</
ejb-receivers
>
</
client-context
>
</
jboss-ejb-client
>
Java code:
| private RemoteAgent getAgentForSystem(SystemEnum system) throws NamingException |
| { |
| Properties jndiProperties = new Properties(); |
| jndiProperties.put("jboss.naming.client.ejb.context", true); |
| jndiProperties.put(Context.URL_PKG_PREFIXES, "org.jboss.ejb.client.naming"); |
| InitialContext context = new InitialContext(jndiProperties); |
| String lookupName = String.format(System.getProperty("jndi.remote.agent"), system.name().toLowerCase()); |
| ServerUtilities.getLogger().log(Level.FINEST, String.format("getAgentForSystem: looking up %s", lookupName)); |
| return (RemoteAgent)context.lookup(lookupName); |
| } |
| finally { context.close(); } |
SystemEnum is SERVER1, SERVER2, etc. So the lookup name is "ejb:/app/module/server1/Agent!com.example.RemoteAgent".
server.log:
20:00:51,536 WARNING [com.example.webservices.Service] (http--0.0.0.0-8443-1) getData: java.lang.IllegalStateException: No EJB receiver available for handling [appName:app,
modulename:module,distinctname:server2] combination for invocation context org.jboss.ejb.client.EJBClientInvocationContext@12be9fbe
at org.jboss.ejb.client.EJBClientContext.requireEJBReceiver(EJBClientContext.java:584) [jboss-ejb-client-1.0.5.Final.jar:1.0.5.Final]
at org.jboss.ejb.client.ReceiverInterceptor.handleInvocation(ReceiverInterceptor.java:119) [jboss-ejb-client-1.0.5.Final.jar:1.0.5.Final]
at org.jboss.ejb.client.EJBClientInvocationContext.sendRequest(EJBClientInvocationContext.java:181) [jboss-ejb-client-1.0.5.Final.jar:1.0.5.Final]
at org.jboss.ejb.client.EJBInvocationHandler.doInvoke(EJBInvocationHandler.java:136) [jboss-ejb-client-1.0.5.Final.jar:1.0.5.Final]
at org.jboss.ejb.client.EJBInvocationHandler.doInvoke(EJBInvocationHandler.java:121) [jboss-ejb-client-1.0.5.Final.jar:1.0.5.Final]
at org.jboss.ejb.client.EJBInvocationHandler.invoke(EJBInvocationHandler.java:104) [jboss-ejb-client-1.0.5.Final.jar:1.0.5.Final]
at $Proxy135.getData(Unknown Source) at com.example.webservices.Service.getData(Service.java:635) [BusinessLogic.jar:]
at com.example.webservices.Service$Proxy$_$$_WeldClientProxy.getData(Service$Proxy$_$$_WeldClientProxy.java) [BusinessLogic.jar:]
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) [rt.jar:1.7.0_04]
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) [rt.jar:1.7.0_04]
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) [rt.jar:1.7.0_04]
at java.lang.reflect.Method.invoke(Unknown Source) [rt.jar:1.7.0_04]
at org.jboss.resteasy.core.MethodInjectorImpl.invoke(MethodInjectorImpl.java:155) [resteasy-jaxrs-2.3.2.Final.jar:]
at org.jboss.resteasy.core.ResourceMethod.invokeOnTarget(ResourceMethod.java:257) [resteasy-jaxrs-2.3.2.Final.jar:]
at org.jboss.resteasy.core.ResourceMethod.invoke(ResourceMethod.java:222) [resteasy-jaxrs-2.3.2.Final.jar:]
at org.jboss.resteasy.core.ResourceMethod.invoke(ResourceMethod.java:211) [resteasy-jaxrs-2.3.2.Final.jar:]
at org.jboss.resteasy.core.SynchronousDispatcher.getResponse(SynchronousDispatcher.java:525) [resteasy-jaxrs-2.3.2.Final.jar:]
at org.jboss.resteasy.core.SynchronousDispatcher.invoke(SynchronousDispatcher.java:502) [resteasy-jaxrs-2.3.2.Final.jar:]
at org.jboss.resteasy.core.SynchronousDispatcher.invoke(SynchronousDispatcher.java:119) [resteasy-jaxrs-2.3.2.Final.jar:]
at org.jboss.resteasy.plugins.server.servlet.ServletContainerDispatcher.service(ServletContainerDispatcher.java:208) [resteasy-jaxrs-2.3.2.Final.jar:]
at org.jboss.resteasy.plugins.server.servlet.HttpServletDispatcher.service(HttpServletDispatcher.java:55) [resteasy-jaxrs-2.3.2.Final.jar:]
at org.jboss.resteasy.plugins.server.servlet.HttpServletDispatcher.service(HttpServletDispatcher.java:50) [resteasy-jaxrs-2.3.2.Final.jar:]
at javax.servlet.http.HttpServlet.service(HttpServlet.java:847) [jboss-servlet-api_3.0_spec-1.0.0.Final.jar:1.0.0.Final]
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:329) [jbossweb-7.0.13.Final.jar:]
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:248) [jbossweb-7.0.13.Final.jar:]
at org.jboss.weld.servlet.ConversationPropagationFilter.doFilter(ConversationPropagationFilter.java:62) [weld-core-1.1.5.AS71.Final.jar:2012-02-10 15:31]
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:280) [jbossweb-7.0.13.Final.jar:]
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:248) [jbossweb-7.0.13.Final.jar:]
at com.isomorphic.servlet.CompressionFilter.doFilter(CompressionFilter.java:259) [isomorphic-core-rpc.jar:]
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:280) [jbossweb-7.0.13.Final.jar:]
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:248) [jbossweb-7.0.13.Final.jar:]
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:275) [jbossweb-7.0.13.Final.jar:]
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:161) [jbossweb-7.0.13.Final.jar:]
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:397) [jbossweb-7.0.13.Final.jar:]
at org.jboss.as.jpa.interceptor.WebNonTxEmCloserValve.invoke(WebNonTxEmCloserValve.java:50) [jboss-as-jpa-7.1.1.Final.jar:7.1.1.Final]
at org.jboss.as.web.security.SecurityContextAssociationValve.invoke(SecurityContextAssociationValve.java:153) [jboss-as-web-7.1.1.Final.jar:7.1.1.Final]
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:155) [jbossweb-7.0.13.Final.jar:]
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102) [jbossweb-7.0.13.Final.jar:]
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109) [jbossweb-7.0.13.Final.jar:]
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:368) [jbossweb-7.0.13.Final.jar:]
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:877) [jbossweb-7.0.13.Final.jar:]
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:671) [jbossweb-7.0.13.Final.jar:]
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:930) [jbossweb-7.0.13.Final.jar:]
at java.lang.Thread.run(Unknown Source) [rt.jar:1.7.0_04]
It have tried all 8 combinations of app, module and distinct name with the same result as above. The JIRA issue for multiple remote-outbound-connections is http://issues.jboss.org/browse/AS7-4834
Thanks