[ https://issues.apache.org/jira/browse/TUSCANY-3850?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13008901#comment-13008901 ]
Sebastian Millies commented on TUSCANY-3850: -------------------------------------------- The problem is in method org.apache.tuscany.sca.binding.rmi.provider.RMIReferenceInvoker#invokeTarget(Object). The method lazily instantiates a proxy (remote stub) and never refershes it. I have added some exception handling along the lines suggested by the Spring RMI client implementation. The code catches InvocationTargetException, calls rmiHost.findService() if this exception is thrown with java.rmi.ConnectionException as the embedded cause, and then retries the remoteMethod.invoke() call. I have attached a zip file that contains both a patch created with Tortoise SVN plus the entire RMIReferenceInvoker.java source file. -- Sebastian > Tuscany 1.6 RMI bug: ConnectException after component restart > ------------------------------------------------------------- > > Key: TUSCANY-3850 > URL: https://issues.apache.org/jira/browse/TUSCANY-3850 > Project: Tuscany > Issue Type: Bug > Components: Java SCA Misc Binding Extensions > Affects Versions: Java-SCA-1.6.1 > Environment: Java 1.6.0_24, Eclipse Helios, Win XP SP3 > Reporter: Sebastian Millies > Attachments: RMIReferenceInvoker.zip, TuscanyRMI.zip > > > When I have a network of components connected by RMI references, > then restarting a component will cause a java.net.ConnectException > in all dependent components on the next remote method call. > I suspect some kind of connection factory caches out-of-date information. > Example: > ServerComponent exposes service "Server" with an RMI binding on port 8777. > ClientComponent exposes service "Client" with an RMI binding on port 8666 > and has a reference to the service "Server". > ClientTest is a non-SCA Java class that exercises the Client service over RMI. > Everything works fine until the ServerComponent Java process is stopped > and re-started. The tester will then fail, because the client cannot > re-establish the connection to the server. > I attach a zip-file with the example. Steps to reproduce the problem: > Run ServerLauncher > Run ClientLauncher > Run ClientTest > Stop process in which server is running > Re-Run ServerLauncher > Re-Run ClientTest -- This message is automatically generated by JIRA. For more information on JIRA, see: http://www.atlassian.com/software/jira