I'm having some trouble finding where that code is you're suggesting
to change, where is that invoke method -  is it a Tuscany class or a
Spring - what is the class and package name?

   ...ant

On Wed, Mar 16, 2011 at 1:44 AM, fzhong <fzh...@travelsky.com> wrote:
> Hi all,
> I had encountered this problem,In fact,the implementation of RMI references
> is simple,it lacked the capacity to respond to some exception.The Spring rmi
> client is a good
> job(org\springframework\remoting\rmi\RmiProxyFactoryBean,you can find more
> details in class RmiClientInterceptor),it provides a
> refreshStubOnConnectFailure property,that indicate
> whether to refresh the RMI stub on connect failure. (If a cached RMI stub 
> throws an RMI exception that indicates a
> remote connect failure, a fresh proxy will be fetched and the
> invocation will be retried.) The lookupStubOnStartup and cacheStub are also
> helpful properties,you can learn more from the spring source code.
>
> Need of special note is if we use the spring rmi client to connect the rim
> service that is exposed by Tuscany RMI Service,although,the property
> refreshStubOnConnectFailure of RmiProxyFactoryBean class set to be true,we
> will still encounter an exception.
> You should modify  invoke method of the RmiClientInterceptor class to do
> with UndeclaredThrowableException,
> Details is :
>
> public Object invoke(MethodInvocation invocation) throws Throwable {
> Remote stub = getStub();
> try {
> return doInvoke(invocation, stub);
> } catch (RemoteConnectFailureException ex) {
> return handleRemoteConnectFailure(invocation, ex);
> } catch (RemoteException ex) {
> if (isConnectFailure(ex)) {
> return handleRemoteConnectFailure(invocation, ex);
> } else {
> throw ex;
> }
> } catch (UndeclaredThrowableException ex) {//
> return handleRemoteConnectFailure(invocation, ex);
> }
> }
>
> The tuscany rmi service and reference may some improvement,Spring related
> implementation is a good reference .Thank you
> 2011-03-16
> ________________________________
> fzhong
> ________________________________
> 发件人: Millies, Sebastian
> 发送时间: 2011-03-15  20:43:34
> 收件人: user@tuscany.apache.org
> 抄送:
> 主题: Tuscany 1.6 RMI bug: ConnectException after component restart
> Hello there,
> I believe the following is a bug in the Tuscany 1.6 RMI binding:
> 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.
> If it's a bug, it's a serious one, because it goes right against one main
> reason for using distributed components in the first place.
> 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".
> Tester 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 have attached 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
> Has anyone else encountered this? Is it really a bug in Tuscany or in some
> other component? Is there a workaround? Should I open a JIRA?
> -- Sebastian

Reply via email to