Transient exception von omniORB in einem Python-Client

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Benutzeravatar
zizou2981
User
Beiträge: 59
Registriert: Donnerstag 23. Juni 2011, 21:46

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:

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)   
=> 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.

Code: Alles auswählen

omniORB.installTransientExceptionHandler(None, self.ExceptionHandling)

def ExceptionHandling(self, cookie, retries, exc):        
        if retries == 5:
            return False
        else:
            return True
=> 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
Zuletzt geändert von zizou2981 am Donnerstag 22. März 2012, 22:28, insgesamt 1-mal geändert.
BlackJack

@zizou2981: Bei Python ist Einrückung wichtiger Bestandteil der Sprache. Vielleicht zeigst Du den Quelltext mal ohne die '>' und richtig eingerückt in den entsprechenden Code-Tags.
Antworten