Lotus Notes / Domino Sonstiges > Java und .NET mit Notes/Domino

Error cleaning up agent threads und WeakReference...

<< < (9/19) > >>

Mark³:
ich habe jetzt eine Schleife im ClientThread erstellt:

--- Code: ---while ((inputLine = in.readLine()) != null) {
outputLine = ovp.processInput(inputLine);
out.println(outputLine);
if (outputLine.equals("bye"))
    break;
    }
--- Ende Code ---
In meinem Protocol liefere ich "bye" sobald kein bekannter Befehl gesendet wird

Mein Client liefert nun beliebig viele Befehle (aber ohne Schleife sondern sequentiell) :

--- Code: ---ovSocket = new Socket("myhostname", 3000);
    out = new PrintWriter(ovSocket.getOutputStream(), true);
    in = new BufferedReader(new InputStreamReader(ovSocket
    .getInputStream()));
   
    out.println("set_ackreceipt#Key1");
    System.out.println(in.readLine());
    out.println("set_ackreceipt#Key2");
    System.out.println(in.readLine());
    out.println("remove_ackreceipt#Key1");
    System.out.println(in.readLine());
    out.println("remove_ackreceipt#Key2");
    System.out.println(in.readLine());
    out.println("bye");
    out.close();
    in.close();
    ovSocket.close();
--- Ende Code ---

Scheint zu klappen. Vorhin hatte ich ein paar Mal einen Socketabbruch (Software caused connection abort: recv failed) aber seit dem habe ich den Code schon wieder an einigen Stellen verändert und momentan läuft es stabil. Auch von Notes aus.

Mark³:
jetzt habe ich nur noch ein Java- und Openview-spezifisches Problem:

Eine Verbindung zu Openview erhalte ich mit dem Objekt ApiSDSession.getSession(), welches mir wieder ein ApiSDSession liefert.
Nun gibt es zwar die Methode closeConnection(), nicht aber einen Test, ob die Verbindung noch aktiv ist. Nach einer Stunde Leerlauf (oder bei Server- oder Netzwerkproblemen) wird die Session aber abgebaut. Wie und wo in meinem Konstrukt aus Server, ClientThreads und Protocol prüfe ich nun, ob eine Session noch da ist und wenn nicht erstelle ich automatisch eine neue?
Das Objekt ApiSDSession ist ja auch noch vorhanden, wenn die Verbindung nicht mehr vorhanden ist. Sobald ich aber eine Methode nutze, die auf die Session zugreift werde ich wohl irgendeinen Laufzeitfehler bekommen.
Das heisst wohl, dass ich in irgendeiner catch-Bedingung die Logik platzieren muss, wieder eine neue Session aufzubauen?

flaite:
Ich würde die Session grundsätzlich nach Gebrauch explizit schliessen.
Vermutlich die Session in einer eigenen Klasse wrappern. Im Problemfall kannst du ja auch auf Exceptions reagieren, die kommen, wenn die Connection nicht da ist, du aber die entsprechenden Methoden aufrufst. Du wirst vermutlich keine Runtime-Exception bekommen sondern eine checked Exception. Trotzdem besser die Exception schliessen.
Aber auch Runtime-Exceptions kann man ja abfangen (catch (Throwable t)
Ganz elegant wäre die Lösung über einen Connection Pool. Aber das kann schwierig sein. V.a. wenn du den Source code nicht hast. Aber vielleicht hat der Hersteller schon so etwas.

Mark³:
die Exception, die ich nach einem Timeout bekomme sieht so aus:


--- Zitat ---Your session on the server has timed out. Click OK to log on, then try again.
--- Ende Zitat ---

Ist immer lustig, wenn in Backend-Code Frontend-Fehlermeldungen kommen  ;D

Wenn ich die abfangen möchte, muss ich dann exception.getMessage() mit diesem String vergleichen? Leider gibt es zur web-api nicht so eine gute Dokumentation...
Ich könnte ja in meiner zentralen Connection-Verwaltung eine Methode einbauen, die session.getUsername macht. Sollte hier irgendein Fehler auftreten würde ich dann einfach eine neue Session aufmachen und die dann zurückgeben.
Finde ich nicht so elegant, aber anders scheint das wohl nicht zu gehen...

flaite:
Hm. Du solltest diese Exception auf dem Server in eine RemoteException packen. Man kann ja seit 1.3 Exceptions chainen. Der Server ist Client von OpenView

--- Code: ---try { } catch(TimeoutException te) {
throw new RemoteException ("OpenViewConnection failed", te); }

--- Ende Code ---
oder du machst eine neue Klasse OpenViewConnectionException extends RemoteException
so ungefähr.
Meine Idee mit dem Wrapper war Quatsch. Eine zentrale ConnectionFactory ist ok würd ich jetzt sagen.

Navigation

[0] Themen-Index

[#] Nächste Seite

[*] Vorherige Sete

Zur normalen Ansicht wechseln