Autor Thema: Servlets, Notes-Agents, Java-Programme die auf Notes zugreifen und Java Threads  (Gelesen 5748 mal)

Offline Axel_Janssen

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 769
Hi,

beginne diesen Thread, um zu versuchen ein bischen Klarheit in dieses Thema zu bringen. Deshalb sind wir hier.

Notes-Agenten starten keinen extra Thread. Kelleher 98 hat ein kurioses Beispiel mit einem awt-Programm in einem Agenten. Da läuft die awt-Gui in einem eigenen Thread. Das ist aber nicht der Normalfall.

Sobald man von einem Java-Programm ausserhalb von Notes auf Domino Objekte zugreift, dann liegt man die Notes-Kommunikation immer in einen eigenen Thread. Warum das so genau ist, weiss ich jetzt auch nicht so genau. Ich hab das mal irgendwo gelesen. Sicher. Nach schnellem überfliegen tendiere ich dazu, dass Rose Kelleher in ihrem Klassiker "Advanced Domino 5 Programming" aus dem Jahr 98, keine Antworten bzgl. des warums liefert. Werd mal woanders nachgucken.  

Bei Servlets wiederum ist es folgendermassen:
Das Servlet läuft immer innerhalb der Laufzeitumgebung Webcontainer (auch Servletengine bezeichnet).
Der Browser des Users sendet Requests grundsätzlich immer an den Webcontainer.
Der Webcontainer leitet die Requests an die Servlets weiter.
Ausserdem managed der Webcontainer die Servlets. Für einen neuen http-post (oder http-get) Request ruft der Container die entsprechende doGet oder doPost-Methode des Servlets in einem neuen Thread auf.
Der Servlet-Entwickler braucht sich dann gar nicht mehr um Thread-Handling zu kümmern. Das macht der Webcontainer nach bestimmten Regeln, die in verschiedenen Spezifikationen festgelegt sind. Implementierung dieser Funktionalität ist Sache des Web-Container Anbieters (Tomcat, Websphere, Weblogic, etc).

Der Entwickler kann sich ein Servlet immer als einzelnes Objekt vorstellen, das alle Requests verarbeitet. Ob es nicht wirklich vielleicht im Webcontainer mehrere Instanzen von einer Servlet-Klasse auf User-Anfragen warten, ist per Spezifikation nicht gesagt. Ich glaube viele Container-Hersteller arbeiten mit Servlet-Pools. Sicher ist für den Entwickler, dass es für jeden Request eben nicht 1 Servlet-Instanz gibt sondern sich mehrere Requests 1 Servlet-Instanz teilen.
Aus diesem Grund gelten Instanzvariablen nicht als Thread-Safe und solten nicht aus den doGet() und doPost() beschrieben werden (lesen ist o.k.). Das würde Chaos verursachen, da ja dann immer mehrere Threads auf 1 Instanzvariable schreiben.
Wenn man das an code ausprobiert wird das ganz offensichtlich.
Übrigens können Servlets auch das Interface SingleThreadModule implementieren. Dann ist per Spezifikation sichergestellt, dass pro einkommenden Request ein neues Servlet erzeugt wird. In der Praxis ist das aber performance-mässig  katastrophal, dass es nicht verwendet wird.

Die Tatsache, das die Servlet-Instanz speicherresident (so heisst das glaub ich) vorliegt, bringt performance-Vorteile.
Ausserdem gibt es bestimmte LifeCycle callbacks Methoden, die man benutzen kann. Bevor das Servlet auf über den Web-Container einkommende http-Requests wartet, ruft der Webcontainer genau 1 Mal die init() Methode auf. Hier können Instanzvariablen initialisiert werden, die dann später von den doGet() und doPost() Aufrufen gelesen werden können. Z.B. Datenbankverbindungen, oder moderner ConnectionPools (egal was Renegaten wie Till_21 auch immer behaupten mögen ;D).
Bevor das Servlet aus dem Webcontainer entfernt wird, ruft der Webcontainer genau 1 mal die destroy-Methode auf. Hier können dann Datenbankverbindungen geschlossen werden oder Pools geleert.

Also um Threads braucht (und soll) man sich gar nicht kümmern. Das regelt der Container. Dieses "automatische" Multithreading muss man aber als Entwickler kennen. Es hat nämlich Auswirkungen auf die Entwicklung. Explizit hier z.B. das man keine Instanzvariablen beschreiben kann.

auf fehler bitte aufmerksam machen
gibt keine dummen Fragen

Axel
« Letzte Änderung: 27.06.03 - 00:40:42 von Axel_Janssen »
... design patterns are abstract designs that help identify the structure and elements involved in a specific design solution. From this, a concrete implementation can be produced.
Kyle Brown

Offline Ralf_M_Petter

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.879
  • Geschlecht: Männlich
  • Jeder ist seines eigenen Glückes Schmied
    • Ralf's Blog
@Axel

Das mit dem AWT im Agent verwende ich auch, das ist unter R5 ziemlich die einzige Möglichkeit  Java Guis mit Notes zu verquicken, vor allem wen man so wie du Java Applets für Tod erklärt.  ;D

Ebenfalls das mit dem eigenen Thread bei Java Programmen ist zumindest bei meinen bisherigen Programmen nicht so. Das einzige was man machen muß ist bei lokalen Zugriff wie bereits ein paar mal von mir beschrieben, dass ich den aktuell verwendeten Thread für Notes initialisieren muß. durch den Aufruf von NotesThread.sinitThread(). Das hängt irgendwie mit den C++ Objekten im Hintergrund zusammen.

Zu den Servlets wollte ich noch ergänzen, dass das sehr gut von dir beschriebene natürlich für alle von Servlet abhängigen Technologien ebenfalls gilt. z.B. JSP

Grüße

Ralf
Jede Menge Tipps und Tricks zu IT Themen findet Ihr auf meinem Blog  Everything about IT  Eine wahre Schatzkiste sind aber sicher die Beiträge zu meinem Lieblingsthema Tipps und Tricks zu IBM Notes/Domino Schaut doch einfach mal rein.

Offline Axel_Janssen

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 769
... den aktuell verwendeten Thread für Notes initialisieren muß. durch den Aufruf von NotesThread.sinitThread().
oops. Ich dachte, dass würde im Hintergrund auch irgendwie einen neuen Thread erzeugen. Ist natürlich quatsch. Muss mir das mal irgendwo genau durchlesen.

Zitat
...von Servlet abhängigen Technologien ebenfalls gilt. z.B. JSP
genau. JSPs sind nämlich einfach eine Technologie, wo die JSP Engine aus dem JSP-code Servlet-quellcode generiert und denselben dann kompiliert.
Dieses generierte Servlet wiederum bedient wie jedes andere Servlet User-Requests.
Man kann sich diese generierten Dateien angucken. In Tomcat liegen sie im Verzeichnis-Baum von Tomcat unterhalb von <Tomcat_Root>\work.
... design patterns are abstract designs that help identify the structure and elements involved in a specific design solution. From this, a concrete implementation can be produced.
Kyle Brown

Offline qojote

  • Aktives Mitglied
  • ***
  • Beiträge: 229
  • I love YaBB 1G - SP1!
Hi,
@Ralf_M_Petter,@Axel_Janssen

Zitat:
Zitat
Das mit dem AWT im Agent verwende ich auch, das ist unter R5 ziemlich die einzige Möglichkeit  Java Guis mit Notes zu verquicken, vor allem wen man so wie du Java Applets für Tod erklärt


Kann mir dazu einer von euch ein Beispiel posten ??

Danke
Gruß
Qojote

Offline Axel_Janssen

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 769
leider nicht.
Auf Seite 271 von Rose Kellehers Buch Advanced Domino 5 Programming ist so ein Beispiel. Du erwartest jetzt nicht von mir, dass ich das abtippe, oder?

Leider ist der source nicht von ihrer webseite downzuloaden (oder ich habe ihn nicht gefunden: http://www.ramblingrose.com

Auch google search "Lotus Agent gui java" ergab kein Ergebnis.

Wofür brauchst du das?
Wenn es mehr zum lernen ist, würde ich mit Domino6 arbeiten. Java2 Unterstützung ist wirklich wichtig. Das macht richtig Spaß.
... design patterns are abstract designs that help identify the structure and elements involved in a specific design solution. From this, a concrete implementation can be produced.
Kyle Brown

Offline qojote

  • Aktives Mitglied
  • ***
  • Beiträge: 229
  • I love YaBB 1G - SP1!
Ja ist mehr zum lernen gedacht.
Hat sich einfach interessant angehört.
Vielleicht hat ja Ralf_M_Petter ein Stück Code für mich.
Ich hab gesehen du hast hier während meines Urlaubs richtig spannende Sachen gemacht. Hab leider noch nicht alles gelesen, werd ich aber gleich nachholen :-)

Gruß
Qojote

Offline Axel_Janssen

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 769
Für GUI Java würde ich mir wirklich Domino6 besorgen, weil dann Swing möglich ist.
Netbeans3.5 ist dafür ein gutes Entwicklungswerkzeug.

... unten ist Screenshot für die noch nicht fertige Oberfläche eines Gruppentermin-Kallenders.

... mußte aber mit MultiThreading arbeiten, um es performant zu bekommen, was seine Tücken hat.
Z.b. zieht es jetzt noch ziemlich viele RAM. Es ist performant , bremst aber die restlichen Anwendungen ganz schön aus. Vielleicht kann ich da noch mit Thread Priority und solchen Dingen arbeiten.

Gruß Axel
... design patterns are abstract designs that help identify the structure and elements involved in a specific design solution. From this, a concrete implementation can be produced.
Kyle Brown

Offline Ralf_M_Petter

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.879
  • Geschlecht: Männlich
  • Jeder ist seines eigenen Glückes Schmied
    • Ralf's Blog
Muss Axel recht geben, das mit den Agenten macht unter Domino 6 keinen Sinn mehr, weil es jetzt ja das fantastisch LS2J gibt. Damit wird die Verbindung Notes Gui zu Java Gui wirklich sehr praktisch.  Das wird auch in dem sehr guten Kurs von Lotus Exploring the new Features von Domino 6 behandelt. Ich habe diesen Kurs erst vor ein paar Wochen gemacht, aber schon sehr viel in die Praxis umsetzen können.

Grüße

Ralf
Jede Menge Tipps und Tricks zu IT Themen findet Ihr auf meinem Blog  Everything about IT  Eine wahre Schatzkiste sind aber sicher die Beiträge zu meinem Lieblingsthema Tipps und Tricks zu IBM Notes/Domino Schaut doch einfach mal rein.

Offline qojote

  • Aktives Mitglied
  • ***
  • Beiträge: 229
  • I love YaBB 1G - SP1!
Ich muß leider für den Moment noch auf Notes5 bleiben.
Und suche eine Alternative zu Applets.

Gruß
qojote

Offline Axel_Janssen

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 769
Versuchs erstmal mit Swing Clients, die Notes.jar einbinden.
1. jdk runterladen.
2. mit Netbeans entwickeln
3. Notes.jar mounten.

Es gibt mit JavaWebStart auch eine Möglichkeit diese Clients automatisch zu verteilen.
Poste sobald ich mich damit beschäftige.

Du hast dann eine Notes-Klasse, die sich um die Kommunikation Gui-LoNo kümmert.

Dort gibt es 2 Möglichkeiten:
1. Du holst dir die Connection, das NotesDatabase Object, sowie Views, NotesDocuments etc. jedesmal neu. (stateless)

2. Du cachst das NotesDatabase-Object. (statefull) Dann mußt du aber mit NotesThread arbeiten und steckst mitten in der  Java-Thread Programmierung, Kommunikation zwischen Threads und anderen Dingen die IMHO gerade aus swing nicht unbedingt trivial sind. Ich würde erstmal mit Lösung 1 anfangen. 2 geht aber auch und bringt signifikante Performance-Gewinne.
« Letzte Änderung: 24.07.03 - 17:16:21 von Axel_Janssen »
... design patterns are abstract designs that help identify the structure and elements involved in a specific design solution. From this, a concrete implementation can be produced.
Kyle Brown

Offline meichhorner

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 616
  • Geschlecht: Männlich
    • Webseite von Martin Eichhorner
@qojote

Bin mich auch grad am einarbeiten in Java mit Notes. ;)

Ich hätte dir ein beispiel aber ich kann es hier nicht posten weil es scheinbar zu lange ist  :o, aber ich meinte ich hätte hier auch schon mal so lange Postings gesehen  ???

Ich könnte es dir aber zuschicken.

Cu
Martin
Martin Eichhorner
Schulungen zu Lotus Notes Domino 5 & 6 z.B. Westösterreich(A), Ostschweiz(CH), Bodenseeraum(D)
Tip´s, Trick´s, Tools und eine große Linksammlung findest du unter
http://www.eimsolution.net

Offline Axel_Janssen

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 769
kannst du es nicht als txt attachen ?
... design patterns are abstract designs that help identify the structure and elements involved in a specific design solution. From this, a concrete implementation can be produced.
Kyle Brown

Offline meichhorner

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 616
  • Geschlecht: Männlich
    • Webseite von Martin Eichhorner
@Axel

Ja könnte ich wenn ich an dem Arbeitsplatz an dem ich momentan sitze nicht nur einen Citrix Client hätte >:(

Unsere Security Hampelmänner machen uns das Leben oft unnötig schwer :(


Soll ich es dir schicken und du hängst es als Attachment an?
done. Axel
« Letzte Änderung: 24.07.03 - 18:51:15 von Axel_Janssen »
Martin Eichhorner
Schulungen zu Lotus Notes Domino 5 & 6 z.B. Westösterreich(A), Ostschweiz(CH), Bodenseeraum(D)
Tip´s, Trick´s, Tools und eine große Linksammlung findest du unter
http://www.eimsolution.net

 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz