Transient exception von omniORB in einem Python-Client
Verfasst: Donnerstag 22. März 2012, 19:27
Hallo,
ich arbeite momentan mit CORBA und dabei wird die CORBA-Implementierung omniORB verwendet. Der CORBA-Client habe ich mit Python programmiert und die Kommunikation zwischen Server und Client funktioniert eigentlich gut. Manchmal aber wird die CORBA-Exception (CORBA.TRANSIENT(omniORB.TRANSIENT_CallTimedout, CORBA.COMPLETED_MAYBE) ) zurückgegeben. Mit Transient-Exception wird eigentlich gemeint, dass die Aktion wiederholt werden kann. Deswegen habe ich zuerst das Problem ungefähr wie folgt gelöst:
=> das hat sehr gut funktioniert aber damit ich nicht immer das mit der While-Schleife und dem try-except wiederholen muss, habe ich der TransientException-Handler von CORBA wie folgt implementiert. Der Handler soll das gleiche wie meine Lösung machen, d.h. Der Handler soll eigentlich die Exception abfangen und dann die gleiche Aktion, wo der Fehler aufgetaucht ist, wiederholen und das habe ich wie folgt implementiert.
=> Das Problem hier ist dass der Handler zwar den Exception abfangt und die Aktion wiederholt, aber ohne Erfolg, denn nach den fünf Versuche wird trotzdem der Exception zurückgegeben!
meine Frage ist, ob jemand weiss, wie ich den Exception-Handler besser implementieren kann?
Danke
ich arbeite momentan mit CORBA und dabei wird die CORBA-Implementierung omniORB verwendet. Der CORBA-Client habe ich mit Python programmiert und die Kommunikation zwischen Server und Client funktioniert eigentlich gut. Manchmal aber wird die CORBA-Exception (CORBA.TRANSIENT(omniORB.TRANSIENT_CallTimedout, CORBA.COMPLETED_MAYBE) ) zurückgegeben. Mit Transient-Exception wird eigentlich gemeint, dass die Aktion wiederholt werden kann. Deswegen habe ich zuerst das Problem ungefähr wie folgt gelöst:
Code: Alles auswählen
Starttime = time.time()
while time.time() - Starttime < 10:
try:
result = (Anfrage von CORBA-Client zum CORBA-Server starten)
if result == True:
break
except Exception, e:
else:
print str(e) Code: Alles auswählen
omniORB.installTransientExceptionHandler(None, self.ExceptionHandling)
def ExceptionHandling(self, cookie, retries, exc):
if retries == 5:
return False
else:
return Truemeine Frage ist, ob jemand weiss, wie ich den Exception-Handler besser implementieren kann?
Danke