Autor Thema: Extreme Remoting mit Domino508 und Java  (Gelesen 2895 mal)

Offline Axel_Janssen

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 769
Extreme Remoting mit Domino508 und Java
« am: 26.06.03 - 13:59:12 »
Hallo,

o.k. ich bin von Ralf und Klaussal wohl nicht ganz zu unrecht in diesem Thread wg. overdesigns kritisiert worden.  

Ich habe mich nun auf diesen Thread zurückgezogen.
Was ist das Ziel?
Aus einer Domino Maske im Web soll ein Javaprogramm auf irgendeinem Computer angesprochen werden. Dieses soll einen Wert zurückgeben. Der Wert soll im Frontend in die Maske geschrieben werden.

Ich finde das eine ganz vernünftige Lösung:
1. Ein Button ruft über JavaScript/LiveConnect ein Corba-Applet auf.
2. Das Corba-Applet ruft einen Agenten auf.
3. Der Agent ruft über java-rmi ein Java-Programm auf, das einen Wert zurückliefert.
4. Der Agent speichert den Ergebnis-Wert irgendwo hin.
5. Das Corba-Applet holt sich den Wert und schreibt ihn über Life-Connect in ein Feld.  

Gruss Axel
« Letzte Änderung: 26.06.03 - 14:06:40 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 Axel_Janssen

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 769
Re:Extreme Remoting mit Domino508 und Java
« Antwort #1 am: 26.06.03 - 14:02:06 »
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:

Code
import java.rmi.*;

public interface NumberInGerman extends Remote {
   
   public String getNameNumber (int number) throws RemoteException;
   
}




Code
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) {
   }
        
}


Code
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:
Code
rmic NumberInGermanImpl
Dann folgenden Befehl absetzen
Code
dir



3. Schritt:
In das gleiche Verzeichnis mit einem Text-Editor ein File namens java.policy erstellen.
Folgender Inhalt:
Code
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:
Code
start rmiregistry
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.

Code
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.
Code
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.
« Letzte Änderung: 26.06.03 - 15:07:08 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 Rob Green

  • Freund des Hauses!
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 2.651
  • Geschlecht: Männlich
    • Meipor
Re:Extreme Remoting mit Domino508 und Java
« Antwort #2 am: 26.06.03 - 18:17:02 »
mal schauen, ob ich am WE, wenn ich dazu komme, alles nachvollziehen kann.

"Mit dem rmic (wie javac Teil des jsdk) stubs und skeletons erzeugen" .. na klasse, da hab ich was zum wühlen. NEIN, nicht verraten, laaaaass mich, das bekomm ich schon raus  ;D ;D ;D
Vielleicht verdirbt Geld wirklich den Charakter.
Auf keinen Fall aber macht Mangel an Geld ihn besser.
(John Steinbeck)

Meiporblog: http://www.meipor.de/blog
allg. Unternehmerblog: http://www.m-e-x.de/blog

 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz