Das Notes Forum

Lotus Notes / Domino Sonstiges => Java und .NET mit Notes/Domino => Thema gestartet von: MichaelH am 09.03.05 - 10:38:46

Titel: Java und Agenten (effizient!)
Beitrag von: MichaelH am 09.03.05 - 10:38:46
Huhu :)

ich programmiere eine LDAP Suchanfrage in Java in einem Notes Agenten. (Die Übergabe die der Agent erhält variiert also sehr stark)
Dabei lege ich meinen Source in einem Agenten ab.  Das Primärziel des Projektes ist es, dass es effizient und schnell ist. Sekundärziel ist das der Nutzer möglichst wenig Arbeit hat mit der Gestaltung der Anfrage hat)

Mein Problem ist die Übergabe der Suchanfrage an den Agenten. (ich habe mir ein recht ähnliches thema in diesem Forum hier: http://www.atnotes.de/index.php?topic=17208.0;prev_next=prev
angesehen und auch mir die Beispiele angesehen, die in dem PDF gezeigt werden). Nun wollte ich fragen was der beste / effizienteste Weg ist, dem Agenten den Suchstring zu übermitteln? 
Wenn ich es so machen würde, dass ich ein temporär dokument erstelle, indem dann die gefundenen Daten abgelegt werden, dann müsste ich ja eine Script Libary erstellen, die für mich immer sagt, welches Dokument erstellt wird. Andernfalls müsste ich von dem Agenten der mir die Suchanfrage übermittelt bestimmen, welches temp doc genutzt wird. Dies würde aber jeden Aufruf unnötig komplizieren... Ich hoffe ich konnte mein Problem einigermaßen verdeutlichen. Ich bin für jeden Tipp dankbar :)

Greetz
Michael



Titel: Re: Java und Agenten (effizient!)
Beitrag von: Marinero Atlántico am 09.03.05 - 11:06:36
Wie wird dieser Agent gestartet?
Aus dem Web? --> CGI Variablen (notes designer hilfe).
Aus einem document? AgentContext.getDocumentContext()

Das mit den temporären Dokumenten macht schon mal theoretisch Sinn, wenn auf de externe Ressource (LDAP-Server) etwa aus Sicherheitsgründen nur vom Server zugegriffen werden soll oder eine spezifische Client-Software nötig ist (z.B. DB2 Client).
Allerdings ist dies wirklich grundsätzlich inperformant und zwar IM ERNST.

Warum kann der Agent nicht auf dem Client laufen?
Wenn der code auf einem Server laufen muß, nimm Tomcat. 
Titel: Re: Java und Agenten (effizient!)
Beitrag von: MichaelH am 09.03.05 - 11:14:39
danke für die antwort :)

(Es ist keine Webanwendung)
der Agent kann entweder manuell (läuft auf client) gestartet, event getriggert (läuft auf server) oder gescheduled (läuft auf server) gestartet werden.
Es ist vorgegeben das ich Notes nehme.
Titel: Re: Java und Agenten (effizient!)
Beitrag von: Marinero Atlántico am 09.03.05 - 11:51:47
Ich würd es als ziemlich wahrscheinlich ansehen, dass der User seinen search-query in eine Maske eingibt?
Da kannst du dann im QuerySave oder über einen Button den Agenten triggern.
Im Agenten erhälst du den SuchString über
Code
pseudocode: 
Document docCur = agentContext.getDocumentContext();
String queryString = docCur.getItemValueString("FELDWERT_VON_QUERY");
Titel: Re: Java und Agenten (effizient!)
Beitrag von: MichaelH am 09.03.05 - 12:34:47
keine maske ... hab ich auch vorgeschlagen, wird nicht gewollt...
Titel: Re: Java und Agenten (effizient!)
Beitrag von: Marinero Atlántico am 09.03.05 - 12:44:56
Wo sollen Suchanfragen denn sonst eingetragen werden, wenn nicht in Felder. Felder kann man in Lotus Notes nur in Masken einbinden.
Für mich drängt sich bei solchen Anforderungen der Verdacht auf, dass es den Anforderern zu gut geht. Erhöhe den Druck.  ;D
Titel: Re: Java und Agenten (effizient!)
Beitrag von: MichaelH am 09.03.05 - 13:03:06
rofl  ;)
Zitat
Erhöhe den Druck
es existiert eine Lösung die wohl über Web läuft (hier dauert die Suchanfrage zwischen 5 - 15 Sekunden). Ich soll es nun auf 0 - 2 Sekunden bringen (mittels LDAP).

Der Aufbau ist (angelehnt an das bestehnde programm), dass ein Agent wohl eine ID ausliest und mir diese an eine Script Lib schickt welche dann meinen Agenten triggert und ihm diese ID übergibt ...  [wenn die Notesbegriffe nicht 100% stimmen nicht beissen ich kenne Notes erst seit ner woche ;)]. Ich hab jetzt schon mit meinem Cheffe gesprochen, weil das viel einfacher (für mich logischer) über ne Maske zu realisieren wäre, aber anscheinend will er nicht immer ne Maske durchgehen. Sein kommentar ist nur (dein programm bekommt zwei Strings (1. Suchanfrage, 2. was soll zurückgeliefert werden) [ich darf sogar entscheiden wie er auszusehen hat *freu* ;D] und damit arbeitest du, der rest hat dich nicht zu interessieren). Nur wie es die 2 Strings bekommt ist auch mein Problem :-\

thx das du dir so viel die ohren von mir zublubben lässt :)
Titel: Re: Java und Agenten (effizient!)
Beitrag von: Marinero Atlántico am 09.03.05 - 13:09:40
[ich darf sogar entscheiden wie er auszusehen hat *freu* ;D] und damit arbeitest du, der rest hat dich nicht zu interessieren)
... Abschaum
... mit seiner Aufgabe überfordert
Titel: Re: Java und Agenten (effizient!)
Beitrag von: MichaelH am 09.03.05 - 13:22:41
bitte ?
Titel: Re: Java und Agenten (effizient!)
Beitrag von: Marinero Atlántico am 09.03.05 - 13:59:43
den Mitmenschen, den du chef nennst.
... sieht so aus als ob ihr ein Kommunikationsproblem habt.
Ich würd dran arbeiten. von beiden Seiten.

Ich bin manchmal schwierig.
Gestern hab ich z.B. 15 Minute meinem Chef 15 Minuten die Ohren vollgequatscht über Probleme in einer Anwendung, die er vor 3.5 Jahren entwickelt hat. Er bemerkte, dass es vielleicht gut wäre, wenn ich ihm die Schablone zuschicken würde, da er nicht kapiert, was ich meine. 
Er wurde nach 15 Minuten auch ein bischen genervt und bittete auf umsteigen auf Email + Schablone zuschicken.
Dabei löse ich Probleme am besten, wenn ich darüber rede  ;D
Und es hat echt was gebracht, weil ich hab dann die Lösung gefunden.

Wäre ich an seiner STelle hätte ich das vermutlich früher abgebrochen.  ::)
Titel: Re: Java und Agenten (effizient!)
Beitrag von: MichaelH am 09.03.05 - 14:07:11
jou das kommunikationsproblem haben wir ...

besteht eine Möglichkeit das zwei Agenten miteinander kommunizieren können (ohne irgendwelche Zwischenschritte (temp doc etc.))?   
Titel: Re: Java und Agenten (effizient!)
Beitrag von: Marinero Atlántico am 09.03.05 - 14:39:46
ja. database.getAgent("agentName").
agent.run().

ich eskaliere sowas.
ich versuche Konflikte zu vermeiden, aber das was du schilderst eskaliere ich auch mit Kunden. Auch wenns der Kaiser von China ist.
Titel: Re: Java und Agenten (effizient!)
Beitrag von: MichaelH am 09.03.05 - 14:53:23
jou aber irgendwann hab ich keine lust mehr zu sowas und machs wie er es haben will ...

Zitat
ja. database.getAgent("agentName").
agent.run().

aber wie kommuniziere ich mit ihm, übergebe ihm einen String (ohne zwischenschritt)?
Titel: Re: Java und Agenten (effizient!)
Beitrag von: Marinero Atlántico am 09.03.05 - 14:57:20
das geht dann nur per ID Übergabe und dann Dokument holen.
Das ist aber inperformant.
Du kannst einem Agenten keinen String übergeben. Nur eine DokID.
Titel: Re: Java und Agenten (effizient!)
Beitrag von: MichaelH am 09.03.05 - 15:17:05
ok dann mach ich es über die script lib ... dank dir für die hilfreiche diskussion!
Titel: Re: Java und Agenten (effizient!)
Beitrag von: koehlerbv am 09.03.05 - 15:28:21
Die Frage ist: Wie willst Du ScriptLib und Java-Agenten "vermählen" ?

Das mit der Übergabe eines Docs an den Agent ist übrigens nicht zwangsweise inperformant - Notes greift auf dieses Dokument auf dem schnellsten Weg (NoteID) zu, den es gibt.

Bernhard
Titel: Re: Java und Agenten (effizient!)
Beitrag von: MichaelH am 09.03.05 - 17:03:33
wie das gemacht wurde, versuche ich gerade zu verstehen ... (aus der bisherigen Lösung)
Titel: Re: Java und Agenten (effizient!)
Beitrag von: Marinero Atlántico am 09.03.05 - 17:13:50
Gut. Ich habe Lösungen mit runOnServer im Kopf. Da kann ich sicher sagen, dass es inperformant ist.
Die Zeitkosten von agent.run(docId) auf derselben Maschine weiss ich nicht.
Titel: Re: Java und Agenten (effizient!)
Beitrag von: koehlerbv am 09.03.05 - 19:00:48
RunOnServer wirkt immer zäh, Axel - der AMgr ist im Spiel, und der tut, wenn er Zeit hat. Aber miss mal die Zeit bis zur Ermittlung des übergebenen Docs - daran kann es nicht liegen.

Bernhard
Titel: Re: Java und Agenten (effizient!)
Beitrag von: MichaelH am 15.03.05 - 13:08:39
Die Lösung wurde nun mittels LS2J realisiert.  Die Javaklassen wurden in einer script library festgehalten.

Code
Dim session As JavaSession
Dim class As JavaClass
Dim object As JavaObject

Set session = New JavaSession

Set class = session.GetClass("javaclass")

Set object = class.createObject(...)

Hierdurch wurde ein Konstruktor der "startjava" klasse erzeugt, dem man einen übergabeparameter mitgeben konnte.
Titel: Re: Java und Agenten (effizient!)
Beitrag von: Marinero Atlántico am 15.03.05 - 14:54:33
LS2J ist mein absolutes Lieblingsthema:
http://www.benpoole.com/weblog/200501162217#AC4184AD29D036F888256F9700587465
Falls ihr also demnächst Anrufe wg. eines OutOfMemoryError bekommt, hast du schon mal einen Ansatzpunkt  8)
Muss aber nicht passieren. Bei Ralf M. Petter aus unserem südöstlichen Nachbarland läuft es.
Ich hab da hier eine massive Profiler-Analyse angekündigt, komme aber nicht dazu.
Titel: Re: Java und Agenten (effizient!)
Beitrag von: MichaelH am 15.03.05 - 16:03:35
naja wenn man alle objekte immer schön brav manuell "recycled" sollte das Problem nicht so schnell auftreten  ;D
Titel: Re: Java und Agenten (effizient!)
Beitrag von: Marinero Atlántico am 15.03.05 - 16:26:47
ehrlichgesagt bin ich mir da nicht so sicher, aber vielleicht ist es paranoia.
Titel: Re: Java und Agenten (effizient!)
Beitrag von: MichaelH am 16.03.05 - 11:28:01
in meinem letzten Projekt hab ich einen Server geschrieben der die Domino Java Klassen aus der NCSO.jar und der Notes.jar nutzt. Hierbei traten dann immer recht häufig fehler auf (Bulk Exceptions). Nachdem ich dann alle Objekte brav recycled habe, gabs keine Probleme mehr.
In der Domino Designer help heißt es, dass man nur die Notes Objekte (Document, View ...) recyceln muss da der garbage collector von java keinen Einfluss auf die Domino Objekte hat, aber irgendwo stand dann im kleingedruckten das man lieber so viel wie möglich recyceln sollte  ::) ... Der Server läuft jetzt seit 2 Wochen, seitdem ich alle objekte die ich nicht mehr brauch recycle.
Wenn da jemand andere Erfahrungen gemacht hat, wär es schön, wenn er sie erwähnen könnte  :)
Titel: Re: Java und Agenten (effizient!)
Beitrag von: Marinero Atlántico am 16.03.05 - 12:35:04
Congrats  8)
tja... und du kannst imho relativ sicher sein, dass diese "Erfahrungen" sich auch mit Workplace wiederverwenden lassen. Braucht Notes7 Client und das Problem wird damit imho fortbestehen (nicht getestet).
Aus diesem Posting http://www.swapcode.com/domdoc/page/lscode012.html (und der Diskussion von Ben Pooles Blog, s.o.) schliesse ich, dass sich mit LS2J das Problem verbreitert und zwar in dem Sinne, dass man offenbar auch mit dem NotesCode der deine LS2J Klassen einbindet, höllisch aufpassen muss und die auch explizit auf Nothing setzen muß.
Wenn dir hierzu etwas auffällt, bin ich sehr interessiert.

Ich selbst erachte mich zur Zeit als unwürdig, mit solch professionellen und strukturierten Lösungen wie Java auf Domino zu arbeiten.
Stattdessen beschäftige ich mich mit Studentendatenbanken wie PosgreSQL und Hypersonic sowie australischen Spinnerframeworks wie Spring und Hibernate.

peace

Axel
Titel: Re: Java und Agenten (effizient!)
Beitrag von: MichaelH am 16.03.05 - 13:33:35
danke für den Tipp mit dem Link! ich werde das mal berücksichtigen...
wenn noch irgendwas rauskommt, werd ich das mitteilen
Titel: Re: Java und Agenten (effizient!)
Beitrag von: Marinero Atlántico am 16.03.05 - 14:05:33
um das richtig analysieren zu können müßte man wissen, wie man Profiler in Notes Java Anwendungen einsetzt.
Profiler zeigen Memory Leaks an.
Ich will ja JProbe von Quest.com testen.
Solange sich bei mir in der Woche ständig die Frage stellt, ob ich den Nach-Hause-Zug um 21:10 Uhr oder um 22:10 Uhr nehme, ist das irgendwie nicht möglich.

ist nicht immer so

Axel