Hi Michael,I'm using publishOney to publish messages asynchronously to a xmlblaster node. When the connection to the node goes down, I see the following stack trace in the client
org.omg.CORBA.TRANSIENT: Retries exceeded, couldn't reconnect to xxx.xxx.xxx.xxx:56061 vmcid: 0x0 minor code: 0 completed: No at org.jacorb.orb.connection.Client_TCP_IP_Transport.connect(Client_TCP_IP_Transport.java:178) at org.jacorb.orb.connection.TCP_IP_Transport.write(TCP_IP_Transport.java:302) at org.jacorb.orb.connection.GIOPConnection.write(GIOPConnection.java:516) at org.jacorb.orb.CDROutputStream.write(CDROutputStream.java:278) at org.jacorb.orb.connection.ServiceContextTransportingOutputStream.write_to(ServiceContextTransportingOutputStream.java:153) at org.jacorb.orb.connection.GIOPConnection.sendMessage(GIOPConnection.java:565) at org.jacorb.orb.connection.GIOPConnection.sendRequest(GIOPConnection.java:547) at org.jacorb.orb.connection.ClientConnection.sendRequest(ClientConnection.java:232) at org.jacorb.orb.Delegate$1.run(Delegate.java:902) at java.lang.Thread.run(Thread.java:536)
as the stack trace shows us it is deeply nested inside a JacORB thread. In other words: The exception never reaches xmlBlaster code for oneway CORBA invocations. So we have no chance to detect this.
The client dispatcher framework handles the rest well: o If you wait some seconds the ping() will fail o The fail safe code changes to POLLING o When the server is available again it will reconnect to xmlBlaster
-> You loose silently all oneway messages until the ping detects a problem
-> In POLLING state the client side queue will storte savely all oneway publish
-> All queued oneway publish messages will be sent on reconnect
Try playing (with newest cvs):
java org.xmlBlaster.Main -call[core] true
java javaclients.HelloWorldPublish -numPublish 100 -oneway true
and shutdown/restart the server during interactive publishing
I didn't check the CORBA spec if hiding the exception of oneway errors is OK or if there are any configuration possibilities.
best regards
Marcel
PS: If you use the SOCKET protocol it works fine.
However, neither reachedDead for this connection is called, nor does the publishOneway call throw an exception.
Could we change the connection handling of publishOneway to be exactly the same as for publish, i.e. throwing exceptions and calling reachedDead ?
Michael
