Domino 9 und frühere Versionen > ND8: Entwicklung

Arbeitsweise von CSIViewPart

(1/2) > >>

Felix Ziegler:
Hallo zusammen,

ich bin mir nicht ganz sicher in welchen Bereich dieser Beitrag gehört. Wenn er doch besser im Java Bereich aufgehoben ist, dann bitte dort hin verschieben...

Ansichten und Ordner in der Maildatenbank werden im 8.5er Client als Java CSIViewPart Ansichten dargestellt. Ich möchte gerne wissen wie diese CSIViewPart Klasse im Hintergrund arbeitet. Genauer gesagt interessiert mich der Teil, wie die Daten aus der Notesdatenbank gezogen werden.

Alle Versuche Daten in einer "normalen" (ViewPart) Ansicht darzustellen, sind um ein vielfaches langsamer. Der Unterschied liegt bei 2500 Dokumenten bei ca. 10 - 15 Sekunden.

Ich bin für jeden Tipp dankbar, da ich nicht weiß, nach was ich das Internet noch abgrasen soll ;-)

Beste Grüße und Danke schonmal,
Felix

Ralf_M_Petter:
Deine Infos sind zwar mehr wie dürftig, aber ich rate mal Du verwendest keine virtuellen Tabellen oder?

Lies dir einfach mal folgenden Link http://publicobject.com/glazedlists/documentation/swt_virtual_tables.html durch, dann sollten Performance Probleme bei grossen Tabellen der Vergangheit angehören. Die Umsetzung in Notes ist aber dann immer noch etwas tricky, aber da sage ich nur was dazu wenn du mehr über dein Problem postest.

Grüße


Ralf

P.S. Zur genauen Implementation der ViewParts in Notes wirst du wenig Infos bekommen, da dass Closed Source ist. Man kann aber diese ViewParts auch in eigenen Applikationen verwenden. Wie das geht, steht in einem Tutorial auf developerworks.

Felix Ziegler:
Hallo Ralf,

danke erstmal. Ich habe schon von virtuellen Tabellen gehört. Verwende sie aber noch nicht. Hast gut geraten ;-)

Aber da liegt mein Problem leider nicht. Mein Problem ist das holen der Daten aus Notes für die anschließende Tabelle.

Im Artikel http://www.ibm.com/developerworks/lotus/library/notes8-eclipse-comp/ ist folgender Code-Schnippsel aufgeführt:


--- Code: ---public class CalculateData implements Runnable
{
public void run()
{
try {
Session ssn = NotesFactory.createSessionWithFullAccess();
...
ssn.recycle();
} catch (Exception e) {
e.printStackTrace();
}
}

public void execute() {
        NotesThread nt = new NotesThread(this);
        nt.start();
}
}

--- Ende Code ---

Mit diesem Code greife ich auf die Datenbank und Ansicht zu. Anschließend bleibt mir nichts anderes übrig, als die Dokumente über View.GetFirstDocument / .GetNextDocument zu durchlaufen oder mir eine Collection zu ziehen und diese dann zu durchlaufen.
Und das kostet Zeit... massig Zeit.

Deshalb interessiert mich die Arbeitsweise der CSIViewPart Klasse. Die Inbox schafft es ja auch tausende von Dokumenten im Millisekunden Bereich darzustellen ;-) Aber wie???

Meinst du das Tutorial auf developersworks bei dem einfach die URL in den Eigenschaften der Komponente ausgetauscht wird?

Ralf_M_Petter:
Der Schmäh der virtuellen Tabellen ist eben genau, dass du nicht alle Dokumente beim ersten Anzeigen der Tabelle holst, sondern immer nur diese die du momentan in der View siehst. Bei Bedarf wird dann der Rest nachgeladen. Ich denke mal genauso macht es auch Lotus. Dadurch wird deine Ansicht innerhalb von ms geladen, weil nur die Anzahl an Dokumenten geholt wird, die derzeit am Bildschirm Platz haben.

Aber nochetwas zu deinem Code. Die Erzeugung eines NotesThreads ist ein sehr teurer Prozess und sollte daher so selten wie möglich gemacht werden. Eventuell kannst du überlegen, den NotesThread in einer Endlosschleife laufen zu lassen in der du dann beliebigen Code ausführen kannst. So endlich wie es ein Serlet Container macht. Erfordert natürlich ein wenig wissen über die Programmierung von MultiThreading Anwendungen. Wenn man es aber mal hat, dann geht es ziemlich gut.

Aber das wird in deinem Fall eher nur der kleinere Performancevorteil sein. Den grössten wirst du sicher haben, wenn du die Daten gar nicht erst liest.. Du kannst das übrigens auch daran schön sehen, dass die Notes eigenen Views die Daten immer dynamisch nachladen, dass wenn du in der View scrollst ab und zu links unten der Blitz erscheint, der anzeigt, dass neue Daten geladen werden. Also setz virtuelle Tabellen ein und wenn du nicht dein eigenes Sorting oder Filtering brauchst, wirst du begeistert sein.

Grüße

Ralf

Felix Ziegler:
Danke für die ganzen Infos. Das mit dem Nachladen stimmt. Wenn man viel hin und her scrolled, dann merkt mans...

Ich hab keine Ahnung von MultiThreading Anwendungen. Aber ich werd mich mal einlesen in die Thematik...

Aber was meinst du mit

--- Zitat ---Den grössten wirst du sicher haben, wenn du die Daten gar nicht erst liest..
--- Ende Zitat ---
Ich muss der Tabelle doch mitteilen, wass sie anzeigen soll, oder etwa nicht?

Filtern und sortieren kommt im nächsten Schritt. Jetzt möcht ich erst mal was (schnell) angezeigt bekommen ;-)

Navigation

[0] Themen-Index

[#] Nächste Seite

Zur normalen Ansicht wechseln