Das Notes Forum

Lotus Notes / Domino Sonstiges => Java und .NET mit Notes/Domino => Thema gestartet von: masseur81 am 03.08.06 - 15:36:15

Titel: Refresh-Frage
Beitrag von: masseur81 am 03.08.06 - 15:36:15
Hallo,

ich habe eine Notes7-DB als Datenbasis für eine J2EE-Anwendung. Die Session und die Database-Instanz werden innerhalb eines Spring-Frameworks erzeugt. Ich habe festgestellt, dass der Aufruf

Code
document.getItemValueString("...");

Stets dasselbe Ergebnis liefert, auch wenn das Dokument schon lange bearbeitet wurde. Wie kann ich über dem Dokument/der Database/der Session einen Refresh machen? Gibt es ein Auto-Refresh oder sogar einen UpdateListener, sodass die Daten immer auf dem neusten Stand sind? Oder ist es so ugly, dass ist bei jeder Änderung eine neue Session aufmachen muss?

Danke.
Titel: Re: Refresh-Frage
Beitrag von: Boost am 03.08.06 - 17:46:57
Wenn die Daten im Document geändert wurden, wird immer document.save() aufgerufen?
Titel: Re: Refresh-Frage
Beitrag von: masseur81 am 03.08.06 - 18:21:08
Ich editiere das Dokument direkt im Notes, also per Formular, und speichere es auch ab.
Titel: Re: Refresh-Frage
Beitrag von: smoki am 03.08.06 - 23:10:00
Wenn du das Document Object bereits hast, siehst du nicht sofort, die Feldänderungen. (sonst müsste es ja dauernt seinen Stand vom Server pollen... was für eine Auslastung das wäre...)

Du kannst/mußt das Dokument-Object neu holen von der Datenbank, beispielsweise via Dokumenten-Id.

Gruss
Chris
Titel: Re: Refresh-Frage
Beitrag von: masseur81 am 04.08.06 - 07:13:28
Genau dies mache ich ja. Was bleiben soll, sind Session- und Database-Objekt. Das Document hole ich mir per

Code
doc = db.getDocumentByUNID(doc.getUniversalId());

erneut aus der Datenbank, nur bleibt es immer gleich.
Titel: Re: Refresh-Frage
Beitrag von: Ralf_M_Petter am 07.08.06 - 14:21:08
lokaler Zugriff oder über DIIOP?

Grüße

Ralf
Titel: Re: Refresh-Frage
Beitrag von: masseur81 am 08.08.06 - 07:42:39
Letzteres. Gibts da besondere Dinge zubeachten?
Titel: Re: Refresh-Frage
Beitrag von: Ralf_M_Petter am 08.08.06 - 07:48:03
Hm eigentlich nicht. Ausser wenn du mit zwischengespeicherten Sessions arbeitest, dass diese irgendwann mal timeouten. Ich würde mal ein kleines Beispiel ohne Spring Framework coden und schauen ob es dann funktioniert. Ich tippe mal eher, dass es nicht an Domino liegt, da ich dass schon ziemlich viel verwendet habe und so ein Problem noch nie gehabt habe. Verwende für den Zugriff aber ganz eigene Routinen.

Grüße

Ralf
Titel: Re: Refresh-Frage
Beitrag von: flaite am 08.08.06 - 08:58:52
Das würde mich auch interessieren.
Ich wüsste nicht, was das mit Spring zu tun haben könnte.
Zuerst mal: Was verwendest du für den Notes-Zugriff von Spring. Ich vermute doch nur einfach das IOC-Zeugs, oder?
Spring ist dann nur ein sehr dünner Layer und sollte in diesem Fall einfach nur die Initialisierung der NotesDatabase Instanz ein bischen unterstützen (übrigens erscheint mir das Vorgehen problematisch, oder wie reagierst du auf session Timeouts?).
Spring an sich macht keine extrem verwirrenden Sachen.
Poste mal deinen Code im Springframework. Da sollte die Erklärung zu finden sein.

Gruß Axel
 

Titel: Re: Refresh-Frage
Beitrag von: masseur81 am 09.08.06 - 12:17:24
Okay, für das Handling der Session z.B. bei Timeouts werd ich noch eine Klasse schreiben. Das Refreshen der Daten erfolgt bei den Notes-Klassen nicht live, sondern in einem gewissen Zeitintervall. Ich habe die Erscheinung, dass es mal geht, und mal nicht.

Eine Art Listener für Dokumentenänderungen gibt es sicher nicht was?
Titel: Re: Refresh-Frage
Beitrag von: flaite am 09.08.06 - 17:11:40
Eine Art Listener für Dokumentenänderungen gibt es sicher nicht was?
Kann man sicher irgendwie programmieren, halte ich aber nicht für sinnvoll.
Kann ich nicht ganz nachvollziehen. Die Datenbank soll die Anwendung über Änderungen in den Daten informieren.
Besser die Anwendung pullt die Daten aus der Datenbank.

Eigene Klasse für Timeouts?
Ich nimm immer für jeden Request eine neue Session. Das hat bisher immer Performance-mässig gereicht. Wenn du das mit Spring machen willst, kannst du ja eine Session-Factory als Singleton realisieren. Die liefert dann keine Singleton-Session zurück.

D.h. es gibt kommerzielle Domino SessionPools. Z.B. von Looseleaf. 
Ich würd sowas nicht selbst programmieren.

Gruß Axel
Titel: Re: Refresh-Frage
Beitrag von: smoki am 10.08.06 - 08:47:37
Hallo!

Vielleicht kannst du dir damit behelfen:

Du kannst dir vielleicht damit behelfen, dass du über einen View ermitteln kannst, ob sich in diesem Dokumente geändert haben. Und in diesem Fall das Dokument erneut holen.

Diese Lösung ist sicherlich nicht elegant und nicht im verwendbar.

Falls der Weg eine Lösung für dich darstellt:

Es gibt in der Class "View" eine Methode "IsModified", die einem mitteilt, ob die View im Speicher mit der auf dem Server übereinstimmt.

Ggf. kannst du dir die Informationen auch dann gleich aus der Ansicht holen?

Ich hoffe ich konnte dir helfen?!

Gruss
Chris
Titel: Re: Refresh-Frage
Beitrag von: Ralf_M_Petter am 10.08.06 - 08:56:11
Aber warum so kompliziert, in Domino gibt es ja Agents die bei Dokumentaktualisierung aufgerufen werden. So ein kleiner Agent, wäre doch ideal und der könnte ja dann deinen Java Code über einen Webservice oder was auch immer aufrufen.

Grüße

Ralf
Titel: Re: Refresh-Frage
Beitrag von: smoki am 10.08.06 - 09:18:31
Wow!

Das nenne ich mal einen interessanten Lösungsansatz!

Find ich super!!

Gruss
Chris
Titel: Re: Refresh-Frage
Beitrag von: masseur81 am 10.08.06 - 16:00:39
Da habt ihr aber mein Problem nicht richtig verstanden. Ich möchte bereits über den Aufruf einer URL ein bestimmtes Dokument im Speicher neu laden. Aber das Neuladen per database.getDocumentByUNID() liefert mir kein aktuelles Dokument. Da nützt mir auch kein Webservice etwas.
Titel: Re: Refresh-Frage
Beitrag von: Ralf_M_Petter am 10.08.06 - 16:04:37
Sorry Masseur aber kannst du mir erklären, was dein Zitat bedeutet:

Zitat
Eine Art Listener für Dokumentenänderungen gibt es sicher nicht was?

Grüße

Ralf

Titel: Re: Refresh-Frage
Beitrag von: Ralf_M_Petter am 10.08.06 - 16:11:43
Ok masseur ich glaube ich habe das Problem in meiner Kristallkugel lokalisiert.

Meine Vermutung du verwendest kein Recycle des Dokuments oder?

Grüße

Ralf
Titel: Re: Refresh-Frage
Beitrag von: masseur81 am 10.08.06 - 17:16:50
JAA!! Die recycle()-Methode hat geholfen. Ich habe erst vermutet, recycle verschiebt ein Dokument in irgendeinen Notes-Papierkorb, naja, Windows-geschädigt eben.

Also wieder ein Notes-Missverständnis aufgeklärt.  :D

Danke!
Titel: Re: Refresh-Frage
Beitrag von: Ralf_M_Petter am 10.08.06 - 17:20:22
Bitte Suche mal im Forum nach recycle. Diese Recycle Thematik ist sehr wichtig und man muß sie wirklich verstanden haben um Java Programme im Zusammenspiel mit Notes richtig zu verwenden. Fehlerhafte Verwendung kann schwer zu findende Fehler verursachen.

Grüße

Ralf
Titel: Re: Refresh-Frage
Beitrag von: masseur81 am 11.08.06 - 06:51:13
Das werd ich tun. Versprochen.
Titel: Re: Refresh-Frage
Beitrag von: flaite am 11.08.06 - 08:53:17
Bitte Suche mal im Forum nach recycle. Diese Recycle Thematik ist sehr wichtig und man muß sie wirklich verstanden haben um Java Programme im Zusammenspiel mit Notes richtig zu verwenden.
Seh ich auch so. Du kannst auch die Domingo Library (openSource, LPGL Lizenz, also urheberrechtlich unproblematisch) von beck et. al. nutzen, die viele Domino spezifische Fallstricke zumindest entschärft. http://www.bea-projects.de/index.php?option=com_content&task=view&id=71&Itemid=156

Gruß Axel
Titel: Re: Refresh-Frage
Beitrag von: Ralf_M_Petter am 11.08.06 - 09:01:43
Wäre interessant, wie sich domingo in dem in diesem Thread geschilderten Fall verhält. Kann dem Versprechen von Domingo, dass kein Recycling notwendig ist nicht ganz glauben. Es gibt nämlich schon sehr gewichtige Gründe warum recycling notwendig ist.

Grüße

Ralf
Titel: Re: Refresh-Frage
Beitrag von: flaite am 11.08.06 - 09:44:11
Hallo Ralf,

so genau hab ich mir das im Detail nicht angeschaut. Die Wahrscheinlichkeit ist aber sehr hoch, dass die wissen was sie tun.
Ausserdem kann man sich den Source-Code anschauen (hab ich zugegebenermassen in diesem Detail noch nicht ausreichend getan). 
Warum soll es nicht möglich sein, dass ein zusätzlicher Layer die low-levelige und technische Methode recyle unnötig macht?
In Klassen von höher-leveligen Eclipse-Klassen stösst man ja auch nicht auf die invalidate() Methode (die in swt eine ähnlich Bedeutung hat wie recycle in der Notes-Java API).
Kennen sollte man das natürlich. Nur wenn eine zusätliche Library ein paar technische Probleme wegabstrahiert, nehme ich dies.

Axel
Titel: Re: Refresh-Frage
Beitrag von: Ralf_M_Petter am 11.08.06 - 10:06:48
Ja Axel, dein Vergleich hinkt aber etwas, denn Eclipse Klassen sind wirklich höherwertig, die Domingo  Klassen sehen aber für den Programmierer praktisch identisch aus soweit ich es gesehen habe. Wie sollen die Domingo Klassen also wissen, wann ich bei DIIOP ein Document nicht aus dem Cache sondern neu laden will wie es in diesem Thread das Problem war.

Grüße

Ralf
Titel: Re: Refresh-Frage
Beitrag von: flaite am 11.08.06 - 10:09:52
Ralf,

ich prüf das detailliert nach und berichte dann.
Es sieht so aus als würden sie wissen, was sie tun.
Habs bisher noch nicht ausreichend geprüft.

Gruß Axel
Titel: Re: Refresh-Frage
Beitrag von: flaite am 17.08.06 - 17:52:52
Die Api hat kein ComputeWithForm. Das nervt.
Titel: Re: Refresh-Frage
Beitrag von: flaite am 31.08.06 - 19:19:31
Tja. Meine Begeisterung für Domingo hat sich gelegt.
Kann sein, dass ich manche Sachen einfach nicht sehe. Und für bestimmte Anwendungsfälle ist das sicher eine gute Sache.
Aber. Die Api bildet einfach nur eine Teilmenge der Originalapi ab. Und da - so scheint es - die eigentlich Objekte von den Domingo Objekten tight gemanaged werden, kann ich bestimmte Methoden nicht aufrufen.
Zum Bleistift:
getUnformatedText() von NotesRichText.
Gut. Ich könnte das patchen. Aber wieso hat man nicht einfach die gesamte Original-Notes-Api abgebildet! So viele Methoden sind das auch nicht. Trotzdem ist das interessant. Leider ist z.Zt. mal wieder so vieles interessant.


Titel: Re: Refresh-Frage
Beitrag von: Ralf_M_Petter am 01.09.06 - 07:30:37
Was genau heisst tight gemanaged?

Grüße

Ralf
Titel: Re: Refresh-Frage
Beitrag von: flaite am 01.09.06 - 09:00:15
Ist vielleicht ein bischen ein selbsterfundener Begriff (nicht gut).
Die Klasse RichTextItemProxy referenziert zwar eindeutig com.lotus.domino.RichtextItem, es gibt aber keine Methode, mit der man dieses gemanagte Objekt bekommt. Also RichTextItemProxy.getUnderlyingNotesRichTextItem gibt es nicht.

Wenn es diese Methode gäbe, würde RichTextItemProxy com.lotus.domino.RichtextItem lose managen (zumindest in meinem Verständnis). In Folge des tight management nimmt das Domingo Interface des Domino Objekt Modells gegenüber dem com.lotus.domino.*Funktionalität weg. Und das kann leicht zu einem Problem werden.

Es kann übrigens auch sein, dass in diesem Kontext tightly managed/loosely managed in diesem Zusammenhang gar nicht von mir ist, sondern allgemein verbreiteter Sprachgebrauch. Bin mir zur Zeit nicht so sicher.

Gruß Axel