Es soll zunächst aus einer Notes-Maske heraus ein NotesAgent gestartet werden, der als RMI-Client mit einem Java-Programm als RMI-Server kommuniziert.
Ich habe für das coden inklusive Aufbau dieses Blitztutorials 2.25 Stunden gebraucht.
Den theoretischen Hintergrund bitte
http://www.javabuch.de , Kapitel 46 sowie dem entsprechenden Kapitel im Sun - Tutorial entnehmen.
1. Schritt: Folgenden Code in je 1 Datei tun (3 Dateien) und mit einem jdk (ich verwende 1.4.02 (oder so ähnlich) kompilieren:
| import java.rmi.*; |
| |
| public interface NumberInGerman extends Remote { |
| |
| public String getNameNumber (int number) throws RemoteException; |
| |
| } |
| |
| import java.rmi.*; |
| import java.rmi.server.*; |
| |
| public class NumberInGermanImpl |
| extends UnicastRemoteObject |
| implements NumberInGerman{ |
| |
| |
| public NumberInGermanImpl () throws RemoteException { |
| } |
| |
| public String getNameNumber (int number) |
| throws RemoteException{ |
| String result = "Null"; |
| switch (number) { |
| case 0: |
| result = "Null"; |
| break; |
| case 1: |
| result = "Eins"; |
| break; |
| case 2: |
| result = "Zwei"; |
| break; |
| case 3: |
| result = "Drei"; |
| break; |
| case 4: |
| result = "Vier"; |
| break; |
| case 5: |
| result = "Fünf"; |
| break; |
| case 6: |
| result = "Sechs"; |
| break; |
| case 7: |
| result = "Sieben"; |
| break; |
| case 8: |
| result = "Acht"; |
| break; |
| case 9: |
| result = "Neun"; |
| break; |
| default: |
| result = "Kenne nur Zahlen zwischen Null und Neun"; |
| } |
| return result; |
| } |
| |
| public static void main(String[] args) { |
| } |
| |
| } |
| import java.rmi.*; |
| |
| public class NumberInGermanRegistration { |
| |
| |
| public static void main(String[] args) { |
| System.setSecurityManager(new RMISecurityManager()); |
| try { |
| System.out.println("NumberInGerman registrieren"); |
| NumberInGermanImpl numberInGerman = new NumberInGermanImpl(); |
| Naming.rebind("NumberInGerman", numberInGerman); |
| System.out.println(" Fertig."); |
| } catch (Exception e) { |
| System.err.println(e.toString()); |
| System.exit(1); |
| } |
| |
| } |
| } |
2. Schritt:
Mit dem rmic (wie javac Teil des jsdk) stubs und skeletons erzeugen:
Kommandozeile auf OS öffnen:
Über cd in das Verzeichnis wechseln, wo die 3 eben kompilierten Dateien stehen. Folgenden Befehl absetzen:
Dann folgenden Befehl absetzen
3. Schritt:
In das gleiche Verzeichnis mit einem Text-Editor ein File namens java.policy erstellen.
Folgender Inhalt:
| grant codeBase "file:*" { |
| permission java.security.AllPermission; |
| }; |
(o.k. da habe ich ein bischen gepfuscht. Das ist eine sehr liberale Policy  Kenn mich da nicht so aus.
Im Prinzip ist dieses Zeug sowas ähnliches wie ECL in Notes.
)
4. Schritt:
Neues Dos-Fenster öffnen und den folgenden Befehl absetzen:
So wird ein Naming-Service von RMI gestartet (auch Bestandteil des jsdk). Damit clients das auch finden können. Der Service lauscht standardmässig auf Port 1099
5. Schritt:
Folgendes in RegisterNumberInGerman.bat abspeichern (selbes Verzeichnis wie die 3 Java-Files.
java -Djava.rmi.server.codebase=http:
RegisterNumberInGerman.bat von Dos-Box aus starten.
6. Schritt:
In Notes neue Datenbank erstellen (oder alte benutzen). Ich habe eine Datenbank auf dem Server angelegt.
Folgenden Java-Agenten erstellen:
TestRmi
Start from Action Menu
Run once @commands can be used.
| import lotus.domino.*; |
| import java.rmi.*; |
| |
| public class JavaAgent extends AgentBase { |
| |
| public void NotesMain() { |
| |
| try { |
| Session session = getSession(); |
| AgentContext agentContext = session.getAgentContext(); |
| Document doc = agentContext.getDocumentContext(); |
| int number = doc.getItemValueInteger("nummer"); |
| String host = "127.0.0.1"; |
| String port = "1099"; |
| String srv = "NumberInGerman"; |
| String url = "rmi://" + host + ":" + port + "/" + srv; |
| System.out.println("Looking-up NumberInGerman " + url); |
| NumberInGerman numberInGerman = (NumberInGerman)Naming.lookup(url); |
| |
| System.out.println(" Nummer ist " + numberInGerman.getNameNumber(number)); |
| numberInGerman=null; |
| |
| |
| } catch(Exception e) { |
| e.printStackTrace(); |
| } |
| } |
| } |
Dann:
Edit Project und zu Verzeichnis, wo 3 Java-Klassen sind bewegen und die folgenden beiden Dateien importieren:
NumberInGerman.class
NumberInGermanImpl_Stub.class
Notes-Maske erstellen. Name egal.
Feld „Nummer“. In Feldeigenschaften auf ersten Reiter Type=number wählen.
Daneben als Bezeichner schreiben: Zahl (am besten zwischen 0 und 9)
Button erstellen. Hinter Button die folgende Formel:
@Command([ToolsRunMacro];"TestRmi");
7. Schritt:
Java Debug Console öffnen. Die Maske öffnen. In das Feld 3 eingeben und auf Button klicken. Sich Ergebnis in Java Debug Konsole anzeigen.