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://127.0.0.1/ -Djava.security.policy=java.policy NumberInGermanRegistration
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;
// (Your code goes here)
} 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.