Domino 9 und frühere Versionen > ND6: Entwicklung
Java OutOfMemoryError
birdy:
Hi Marinero,
danke für die Nachhilfe in ExceptionHandling. Habs eingebaut.
Viel weiter gekommen bin ich bisher leider noch nicht. Gibt es Informationsquellen für Java-Anfänger wie mich, in denen z.B. die Vorgehensweise bei JDBC-Connection beschrieben wird.
Ich hab den Agenten nämlich 1:1 so übernommen und nur geringfügig angepasst, also weiß ich auch nicht wirklich, wie ich es vielleicht besser machen könnte. Auch das mit diesen PreparedStatements würde mich interessieren. Wo kann ich mehr drüber erfahren?
Zu meinem SQL-Statement noch ne Frage. Ich habe meine SQL-Abfrage in 3 Schritten gemacht, d.h. ich krieg 3x nen ResultSet. Liegt hier vielleicht ein Fehler, muss ich jedesmal den ResultSet und das Statement wieder schließen? Ich hab das versucht, allerdings krieg ich dann auch wieder ne Fehlermeldung.
LG, Birgit
birdy:
Hi,
hab da nochmal ne Frage.
Wäre es ne Möglichkeit, die JDBC-Connection solange aufrecht zu erhalten, bis die DB vom User geschlossen wird?
Also mit 1. Aufruf des Agenten wird die Verbindung aufgebaut und muss dann nicht jedesmal wieder hergestellt werden, wenn mehrmals hintereinander Daten abgerufen werden.
Oder spielt das keine Rolle?
Hab absolut keine Ahnung, was ich noch tun könnte.
Birgit
Marinero Atlántico:
Hallo Birgit.
--- Zitat von: birdy am 26.04.05 - 08:55:39 ---
Zu meinem SQL-Statement noch ne Frage. Ich habe meine SQL-Abfrage in 3 Schritten gemacht, d.h. ich krieg 3x nen ResultSet.
--- Ende Zitat ---
vielleicht kannst du das SQL so optimieren, dass du mit einem Query alle Daten auf einmal bekommst.
Da geht ja mit inner joins, outer joins, subqueries und vieles andere mehr so einiges.
Auch Views und Stored Procedures auf DB-Seite sind zu beachten, wenn es darum geht SQL-Statements einfacher und performanter zu machen. Daneben gibt es noch Temporary Tables, die ich aber z.B. ignoriere.
Zumindest mit DB2 Version 8 ist der SQL Builder auch nicht ganz schlecht. Damit kann man sich ganz gut komplexere Dinge zusammenklicken und erhält die entsprechende SQL Syntax.
Du kannst gerne die 3 SQL Statements posten.
--- Zitat von: birdy am 26.04.05 - 08:55:39 ---Liegt hier vielleicht ein Fehler, muss ich jedesmal den ResultSet und das Statement wieder schließen? Ich hab das versucht, allerdings krieg ich dann auch wieder ne Fehlermeldung.
--- Ende Zitat ---
Sobald du das alte Resultset geschlossen hast, kannst du nicht mehr drauf zugreifen. Du kannst ruhig das alte offenlassen. Das sollte keine große Auswirkung auf die Performance haben. Bin mir nicht ganz sicher, aber ich glaub, dass DB2 JDBC Treiber zumindest ab Version 7 DB2 Resultset und Statement automatisch schliessen, wenn du die Connection schliesst, mit der diese beiden erzeugt worden sind. Das ist zumindest das normale Verhalten von modernen JDBC Treibern. Du mußt auf jeden Fall die Connection schliessen und ZWAR INNERHALB DES AGENTEN, IN DEM DU SIE GEÖFFNET HAST. DAS IST QUASI NATURGESETZ.
1. Kannst du nicht sicher sein, ob der 2. Agent überhaupt läuft (und OFFENE CONNECTIONS SIND BÖSE
2. Ist für die Performance eine lange offene Connection gar nicht gut, besonders wenn mehrere User drauf zugreifen. Man soll die Connection immer nur für möglichst kurze Zeit offen halten und AUF JEDEN FALL IN DER ROUTINE SCHLIESSEN, IN DER SIE AUFGERUFEN WURDE.
Es gibt Fälle, wo es wünschenswert ist, eine Datenbanktransaktion über mehrere UserScreens laufen zu lassen.
Bsp:
Buche Platz in Flugzeug
Gebe Kredikarteninfo
Bezahlen.
Dem User werden nacheinander 3 Seiten geschickt, wo er was anklickt. Auf Datenbankebene wird es aber selbst dort 3 Connections geöffnet und geschlossen (1 pro Screen des Users). Gleiches gilt für Datenbanktransaktionen.
Um das konsistent zu halten, behilft man sich mit Tricks. Am bekanntesten sind optimistic und pessimistic locking.
birdy:
Schön, dass du wieder da bist. :)
Hab mein SQL-Statement auch schon mittels INNER JOIN auf 1 Query reduziert, aber da kams mir so vor, als würde es noch länger dauern, bis ich ein Ergebnis bekomme.
Nachdem der Fehler so oder so auftritt, bleibe ich jetzt bei meinen 3 Schritten.
Das mit der Connection seh ich ein, greife halt nach jedem Strohhalm.
Werde als nächstes mal die jt400.jar in mein jvm/lib/ext Verzeichnis einbinden. Vielleicht hilft das ja.
Ihr werdet sicherlich wieder von mir hören ;-)
LG, Birgit
Marinero Atlántico:
Prüfe die Indexe in den Tabellen. Für alle Spalten, auf die die Joins gehen, muß es in der Datenbank einen Index geben. Frage den Datenbankadministrator. Falls es einen gibt.
Dies sollte die Performance deutlich verbessern.
Navigation
[0] Themen-Index
[#] Nächste Seite
[*] Vorherige Sete
Zur normalen Ansicht wechseln