Entwicklung eines Java Server Add-In Tasks Mathias Bierl Wabion GmbH 1 Agenda • • • • • • Kurze Vorstellung Allgemeines zu Server Add-In Tasks Warum in Java ? Aufbau eines Java Server Add-In Tasks Tips & Tricks Fragen und Antworten 2 Geschäftsfeld Wabion GmbH Die Wabion GmbH bietet alles rund um das Thema Workgroup Lösungen – im besonderen Lotus Notes und Websphere. Das Portfolio umfasst neben den Infrastrukturthemen (Konzept, Betrieb, Migration von und zu Lotus Notes, mobile Datenanbindung) und der Datenbankentwicklung, auch die Programmierung und den Vertrieb eigener Anwendungen (z.B. Wabion Archive). Ergänzend dazu bieten wir als Google/Postini Partner auch Google Message Security und Google Apps Lösungen an. 3 Referenzen 4 Wer bin ich ? • Mathias Bierl, Staatl. Gepr. Wirtschaftsinformatiker ([email protected]) • Notesentwicklung / Administration seit 1997 (R 4 – ND 8.5) • Anti-Spam/Anti-Virus Lösungen • Google Lösungen (Search, Apps,…) • Server-Virtualisierung 5 Wer bin ich ? • Projekte mit Lotus / Domino: – Lotus Notes R4 – ND 8.5.1 – Sametime, Domino.Doc, Lotus Workflow, LEI, DECS, DGW – Formelsprache, Skript, Klassen, Java, JS, HTML, AJAX – Migration R4-R5-ND6-ND7-ND8, Microsoft Exchange, … – C-/C++-API, WIN 3.11-WIN 7, OS/2, AIX, AS/400, Linux, ... – Datenanbindungen an SAP, RDBS – XML/XSL, Servlets, Web Services – Mobile Datenanbindung (Blackberry, OBMG,…) 6 Server Add-In Tasks • Verschiedene Typen – Gestartet zur Ausführung einer bestimmten Aktion z.B. Compact, Fixup,... – Dauerhaft laufender Task z.B. Router, HTTP, SMTP,... – Periodische Aktionen • Läuft im Kontext des Domino Servers • Zugriff auf Serverfunktionen 7 Server Add-In Tasks • Keine eigene Oberfläche: Ausgabe nur auf Domino Konsole • Traditionell in C/C++ entwickelt mit dem C/C++API Toolkit • 8 Warum in Java ? C • Plattformabhängig Neukompilierung für jede Platform notwendig • Nur bestimmte Entwicklungsplattformen Java • Plattformunabhängig Nur einmalige Kompilierung notwendig • Beliebige Entwicklungsplattform • 9 Warum in Java ? C • Java • Frei verfügbare JavaKlassenbibliotheken nutzbar 10 Warum Server AddIn Tasks anstatt Agenten ? • • • • • • Zeitliche Ungenauigkeit in der Ausführung Anwendungsübergreifende Funktionalitäten Entlastung des Agent Managers Bessere Kontrolle während der Laufzeit Unabhängigkeit von Agenten-Sicherheit 11 Besonderheiten • Domino liefert eine leicht angepasste JVM beim Server mit Domino Version JVM Version 7.0 1.4.2 8.0 1.5.0 8.5 1.6.0 • 12 Aufbau eines Java Server Add-In Tasks • Hauptklasse erweitert JavaServerAddin • Klassenkonstruktor kann Aufrufparameter auswerten • Hauptmethode runNotes() wird beim Start aufgerufen – – – – Initialisierung des AddIn Tasks Setzen der Informationen in Domino Task Liste Sonstige Basisarbeiten Ausführung Aufgaben bzw Warten auf Nachrichten 13 Aufbau eines Java Server Add-In Tasks Statuszeile • Erstellen einer Status Zeile für Show Tasks Ausgabe – ID = AddInCreateStatusLine(Text) • Verändern des Statustextes – AddInSetStatusLine(ID, Text) • Löschen der Status Zeile – AddInDeleteStatusLine(ID) 14 Aufbau eines Java Server Add-In Tasks Server-Task Ausgaben • Informationsmeldungen – AddInLogMessageText(Text) • Fehlermeldungen – AddInLogErrorText(Text) • Debugging (Prefix RunJava JVM:) – System.out.println(Text) 15 Aufbau eines Java Server Add-In Tasks MessageQueue • Anweisungen an die Task werden über eine MessageQueue übergeben • MessageQueue muss einen eindeutigen Namen besitzen – messageQueue.create(MessageQueueName, 0, 0) • MessageQueue-Name muss großgeschrieben sein • MessageQueue-Name wird für Kommandos und Shutdown verwendet 16 Aufbau eines Java Server Add-In Tasks MessageQueue • Prüfung ob Task bereits läuft – MessageQueue.ERR_DUPLICATE_MQ • Warten auf nächste Nachricht an den Task – MessageQueue.get(Kommandozeile, 256, MessageQueue.MQ_WAIT_FOR_MSG, 500); • Prüfung ob Task ein Shutdown Kommando bekommen hat – MessageQueue.ERR_MQ_QUITTING 17 Periodische Aufgaben • Prüfung auf abgelaufene Zeit – AddInDayHasElapsed() Neuer Tag – AddInHasMinutesElapsed(Min) – AddInHasSecondsElapsed(Sec) Sekunden/Minuten vergangen Wichtig: beim Aufruf der Funktion müssen genau x Sekunden/Minuten vergangen sein, sonst wird false zurückgeliefert 18 Zugriff auf Domino Daten • Der Zugriff auf Notes Datenbanken und Informationen geschieht über NotesFactory – NotesFactory.createSession() • Da der Add-In Task im Kontext des Servers läuft ist im Gegensatz zu einem Client Programme keine Passworteingabe notwendig • Detailzugriff erfolgt dann über die Standard Lotus Notes Java API 19 Einbinden eines Java Add-In Task • RunJava verwaltet die Java Add-In Tasks • Java-Class Dateien müssen ins Programmverzeichnis von Domino bzw in den Classpath der Domino JVM kopiert werden • Mitgelieferte Java Add-Ins – ISpy – RMEval – ChangeMan 20 Einbinden eines Java Add-In Task • Add-In Tasks in Java werden über eine eigene Server Add-In Task gesteuert → RunJava – Load RunJava AddIn Startet den AddIn Task – Tell RunJava Show Tasks bzw Show Tasks Anzeige von laufenden Java Tasks bzw aller Tasks – Tell AddIn Quit bzw Tell RunJava Unload AddIn Beenden der AddIn Task – Tell AddIn Kommando Übergabe eines Kommandos an die AddIn Task 21 Besonderheiten • Aufräumen der Domino Objekte ist sehr wichtig → Recycle-Methoden • Thread Management muss programmiert werden • Java Max Heap Size sollte erhöht werden Empfehlung: JavaMaxHeapSize=256MB • Keine offizielle Dokumentation verfügbar, allerdings entspricht die Struktur, die Parameter und die Funktionsnamen meistens denen der C bzw C++-API 22 Besonderheiten • Server Task ist auf die jeweilige Server Version durch die JVM Version festgelegt • Java-Class-Dateien werden gecacht. Zum Neuladen muss der RunJava Task neu gestartet werden 23 Vergleich C/C++/Java • Funktionsnamen und Parameter sind relativ ähnlich – C: ID = AddInCreateStatusLine(Name) Java: ID = AddInCreateStatusLine(Name) • Klassenmodelle in C++ und Java sehr ähnlich 24 Dokumentationen • Beispiel Code von Julian Robichaux http://www.nsftools.com/tips/JavaTips.htm#javaaddin • API Dokumentationen für Domino http://www.ibm.com/developerworks/lotus/documentation/capi/ • 25 Q&A • Fragen ?? 26 Ich danke für Ihre Aufmerksamkeit 27 Kontakt Wabion GmbH Katharinenstrasse 57 D-73728 Esslingen Phone: +49 (0)711 – 25 25 52 24 Fax: +49 (0)711 – 25 25 52 29 Web: http://www.wabion.com Mathias Bierl eMail: [email protected] Mobil: +49 (0) 172 877 27 65 28