2010-12-09 32 views
0

J'ai une application de console Java (Windows) que je veux fermer gracieusement lorsque l'utilisateur appuie sur Ctrl + C. C'est pourquoi j'utilise addShutdownHook pour appeler interrupt() sur mon thread de travail. Le problème est que lorsque je suis au milieu de l'opération corba (dans mon thread de travail) et que j'appuie sur Ctrl + C, j'obtiens une exception CORBA.COMM_FAILURE. Savez-vous pourquoi?Java Console Application client Corba (Windows) et Ctrl + C jette CORBA.COMM_FAILURE Exception

C'est la trace de la pile:

org.omg.CORBA.COMM_FAILURE: vmcid: SUN minor code: 203 completed: No 
     at com.sun.corba.se.impl.logging.ORBUtilSystemException.writeErrorSend(Unknown Source) 
     at com.sun.corba.se.impl.logging.ORBUtilSystemException.writeErrorSend(Unknown Source) 
     at com.sun.corba.se.impl.transport.SocketOrChannelConnectionImpl.writeLock(Unknown Source) 
     at com.sun.corba.se.impl.transport.SocketOrChannelConnectionImpl.sendCancelRequestWithLock(Unknown Source) 
     at com.sun.corba.se.impl.protocol.CorbaMessageMediatorImpl.sendCancelRequestIfFinalFragmentNotSent(Unknown Source) 
     at com.sun.corba.se.impl.protocol.CorbaClientRequestDispatcherImpl.endRequest(Unknown Source) 
     at com.sun.corba.se.impl.protocol.CorbaClientDelegateImpl.releaseReply(Unknown Source) 
     at org.omg.CORBA.portable.ObjectImpl._releaseReply(Unknown Source) 
     at INVS._PKICMSStub.UpdateDataInput(_PKICMSStub.java:223) 
     at com.infonotary.invssignature.SignerThread.createDetachedCMS(SignerThread.java:289) 
     at com.infonotary.invssignature.SignerThread.createDetachedSignature(SignerThread.java:321) 
     at com.infonotary.invssignature.SignerThread.signFile(SignerThread.java:378) 
     at com.infonotary.invssignature.SignerThread.signDirectory(SignerThread.java:451) 
     at com.infonotary.invssignature.SignerThread.run(SignerThread.java:506) 

Edit: Du côté du serveur l'erreur est:

#1 0x4054c489 in omni::giopStream::CommFailure::_raise 
(minor=1096024068, 
    status=CORBA::COMPLETED_NO, retry=false, 
    filename=0x405a2259 "giopStream.cc", linenumber=878, 
    message=0x405a242c "Error in network receive (start of message)", 
    strand=0x8c879b8) at giopStream.cc:581 
#2 0x4054cc8c in omni::giopStream::errorOnReceive (this=0x8c533ec, 
rc=-1, 
    filename=0x405a2259 "giopStream.cc", lineno=878, buf=0x8cba610, 

Edit: J'appuyez sur Ctrl + C sur la fenêtre de la console client.

Éditer: Peut être CORBA code utilise des opérations de sommeil (lors de l'envoi et de recevoir) et quand je interrompt le thread de travail il jette une exception et c'est le résultat?

+0

Voyez-vous le COMM_FAILURE côté client ou serveur (ou les deux)? L'application que vous utilisez est CTRL-C sur le serveur ou le client? –

Répondre

1

Si vous êtes au milieu d'un appel CORBA et que vous arrêtez le client, le serveur recevra une COMM_FAILURE.