Domino 9 und frühere Versionen > ND6: Entwicklung

JavaAgent erzeugt Fehler

<< < (2/3) > >>

Ralf_M_Petter:
Aha!

Aber jetzt funktioniert es einwandfrei oder?

Eventuell würde ich noch überlegen, die von dir erstellten Objekte zu recyceln damit du nicht irgendwann ein memory leak Problem hast.

Sprich füge nach deiner Verarbeitung ein doc.recycle(); ein. Die Datenbank und die Session darfst du nicht Recyceln, da nicht von dir erstellt. Grundregel nach Julie Kadeshevich oder wie die heisst.

Grüße

Ralf

Gandhi:
Ja, funktioniert jetzt alles einwandfrei, vielen Dank dafür! Das mit dem recyclen leuchtet mir für das Dokument ein - aber warum habe ich 'die Session und die DB nicht erstellt' und muss die daher nicht recyclen?


Hast Du zu der guten Frau einen Link?

Ralf_M_Petter:
Das leitet sich aus der Regel ab, dass du keine Objekte recyceln darfst, die eventuell noch verwendert werden. Da die Session und die Datenbank von dem Agentmananger kommen und eventuell noch in anderen Agenten verwendet wäre es schlecht, wenn du Sie recyceln würdest.

Die Infos sind aus der Agent FAQ von Julie auf Notes.net. Hier der Artikel zu der recycle Problematik.

http://www-10.lotus.com/ldd/46dom.nsf/7d6a87824e2f09768525655b0050f2f2/4600bba5f42ed834852569290053739e?OpenDocument

Falls du noch Fragen hast, gerne habe mich schon ziemlich viel mit recycle beschäftigt. Übrigens auch wenn es viele meinen (will mich da gar nicht ausschliessen) Diese recycle Geschichte ist weder eine Boshaftigkeit von Lotus noch eine Implementierungsschwäche sondern einfach absolut notwendig wenn man ein System nutzt wie Lotus es gemacht hat um die C++ Api in Java zur Verfügung zu stellen.

Grüße

Ralf

Gandhi:
Dann noch eine allerletzte Frage:
Sollte dann auch ein recycle Aufruf im catch-Block stehen?

Ralf_M_Petter:
Streng genommen ja, da müsstest du aber zuerst testen ob doc !=null. Denn sonst bekommst du eine NullPointerExeception beim recyceln. Speziell für diese Art von Bereinigung gibt es aber die finally Konstruktion


Also nochmal in dem Fall richtig:

try{
//Arbeiten mit Document
}
catch (Exception e){
   e.printStackTrace();
}
finally{   
if (doc!=null){
      doc.recycle();
   }
}

Wobei ich jetzt auswendig nicht weiß, ob das doc.recycle() jetzt noch einen extra try catch block braucht. Wobei wenn einmal ein nicht recycelt des Doc durchrutscht bringt das den Domino Server nicht um. Auf jeden Fall braucht man Recycle in Schleifen. Siehe http://www.atnotes.de/index.php?topic=25911.0

Grüße

Ralf

Navigation

[0] Themen-Index

[#] Nächste Seite

[*] Vorherige Sete

Zur normalen Ansicht wechseln