1 Reply Latest reply on Apr 26, 2008 1:02 AM by Ron Sigal

    Invoking invocation handler located on JBoss AS

    Joshua Jackson Master

      Dear all,

      I have deployed an invocation handler and deployed it on JBoss AS 5.0.0Beta4 by inserting the configuration inside conf/jboss-service.xml as such:

       <mbean code="org.jboss.remoting.transport.Connector"
       name="jboss.remoting:service=IVRConnector,transport=Socket"
       display-name="Socket transport Connector">
      
       <!-- Can either just specify the InvokerLocator attribute and not the invoker element in the -->
       <!-- Configuration attribute, or do the full invoker configuration in the in invoker element -->
       <!-- of the Configuration attribute. -->
      
       <!-- Remember that if you do use more than one param on the uri, will have to include as a CDATA, -->
       <!-- otherwise, parser will complain. -->
       <attribute name="InvokerLocator"><![CDATA[socket://${jboss.bind.address}:6666/]]></attribute>
      
       <attribute name="Configuration">
       <config>
       <!-- Other than transport type and handler, none of these configurations are required (will just use defaults). -->
       <invoker transport="socket">
       <attribute name="dataType" isParam="true">invocation</attribute>
       <attribute name="marshaller" isParam="true">org.jboss.invocation.unified.marshall.InvocationMarshaller</attribute>
       <attribute name="unmarshaller" isParam="true">org.jboss.invocation.unified.marshall.InvocationUnMarshaller</attribute>
       <!-- The following are specific to socket invoker -->
       <attribute name="numAcceptThreads">1</attribute>
       <attribute name="maxPoolSize">303</attribute>
       <attribute name="clientMaxPoolSize" isParam="true">304</attribute>
       <attribute name="socketTimeout">60000</attribute>
       <!-- To set socketTimeout on client as well, add "isParam" -->
       <!--<attribute name="socketTimeout" isParam="true">60000</attribute>-->
       <attribute name="serverBindAddress">${jboss.bind.address}</attribute>
       <attribute name="serverBindPort">6666</attribute>
       <attribute name="clientConnectAddress" isParam="true">${jboss.bind.address}</attribute>
       <attribute name="clientConnectPort" isParam="true">6666</attribute>
       <attribute name="enableTcpNoDelay" isParam="true">true</attribute>
       <attribute name="backlog">200</attribute>
       <!-- The following is for callback configuration and is independent of invoker type -->
       <attribute name="callbackMemCeiling">30</attribute>
       <!-- indicates callback store by fully qualified class name -->
       <attribute name="callbackStore">org.jboss.remoting.callback.CallbackStore</attribute>
       <!-- indicates callback store by object name -->
       <!-- <attribute name="callbackStore">jboss.remoting:service=CallbackStore,type=Serializable</attribute> -->
       <!-- config params for callback store. if were declaring callback store via object name, -->
       <!-- could have specified these config params there. -->
       <!-- StoreFilePath indicates to which directory to write the callback objects. -->
       <!-- The default value is the property value of 'jboss.server.data.dir' and if this is not set, -->
       <!-- then will be 'data'. Will then append 'remoting' and the callback client's session id. -->
       <!-- An example would be 'data\remoting\5c4o05l-9jijyx-e5b6xyph-1-e5b6xyph-2'. -->
       <attribute name="StoreFilePath">callback</attribute>
       <!-- StoreFileSuffix indicates the file suffix to use for the callback objects written to disk. -->
       <!-- The default value is ser. -->
       <attribute name="StoreFileSuffix">cst</attribute>
       <!-- Sets the callback error handler to use when determining how to manage failed push callbacks -->
       <!-- When not specified, the default is org.jboss.remoting.callback.DefaultCallbackErrorHandler -->
       <!-- <attribute name="callbackErrorHandler">org.jboss.remoting.callback.DefaultCallbackErrorHandler</attribute> -->
       </invoker>
       <!-- At least one handler is required by the connector. If have more than one, must declare -->
       <!-- different subsystem values. Otherwise, all invocations will be routed to the only one -->
       <!-- that is declared. -->
       <handlers>
       <!-- specify handler by fully qualified classname -->
       <handler subsystem="ivr">com.taxandtech.lab.remoting.SimpleInvocationHandler</handler>
       <!-- can also specify handler by object name -->
       <!-- <handler subsystem="mock">test:type=handler</handler> -->
       </handlers>
       </config>
       </attribute>
       <depends>jboss.remoting:service=NetworkRegistry</depends>
       </mbean>
      


      But when I access it from client I get this stacktrace error:
      org.jboss.remoting.CannotConnectException: Can not get connection to server. Problem establishing socket connection for InvokerLocator [socket://127.0.0.1:6666/]
       at org.jboss.remoting.transport.socket.MicroSocketClientInvoker.transport(MicroSocketClientInvoker.java:530)
       at org.jboss.remoting.MicroRemoteClientInvoker.invoke(MicroRemoteClientInvoker.java:122)
       at org.jboss.remoting.Client.invoke(Client.java:1550)
       at org.jboss.remoting.Client.invoke(Client.java:530)
       at org.jboss.remoting.Client.invoke(Client.java:518)
       at com.taxandtech.lab.remoting.SimpleClient.makeInvocation(SimpleClient.java:26)
       at com.taxandtech.lab.remoting.SimpleClient.main(SimpleClient.java:47)
       at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
       at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
       at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
       at java.lang.reflect.Method.invoke(Method.java:585)
       at com.intellij.rt.execution.application.AppMain.main(AppMain.java:90)
      Caused by: java.net.SocketException: Software caused connection abort: connect
       at java.net.PlainSocketImpl.socketConnect(Native Method)
       at java.net.PlainSocketImpl.doConnect(PlainSocketImpl.java:333)
       at java.net.PlainSocketImpl.connectToAddress(PlainSocketImpl.java:195)
       at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:182)
       at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:366)
       at java.net.Socket.connect(Socket.java:519)
       at org.jboss.remoting.transport.socket.SocketClientInvoker.createSocket(SocketClientInvoker.java:187)
       at org.jboss.remoting.transport.socket.MicroSocketClientInvoker.getConnection(MicroSocketClientInvoker.java:801)
       at org.jboss.remoting.transport.socket.MicroSocketClientInvoker.transport(MicroSocketClientInvoker.java:526)
       ... 11 more
      


      It said that it can not connect to the server, but I can see the MBean from the JMX Console. Why could this occur? On the other hand if I call the jboss.remoting:service=Connector, it will succeed and does not produce the same stacktrace. Could anyone guide me on this? I would really like to use the jboss-remoting on JBoss AS.

      Thank you in advance