Weitere aktuelle Java-Titel finden Sie bei dpunkt.
 Inhaltsverzeichnis   Auf Ebene Zurück   Seite Zurück   Seite Vor   Auf Ebene Vor   Eine Ebene höher   Index


17.1

Programmierung mit einem Namensdienst


< Jede JNDI-Abfrage beginnt zunächst mit dem InitialContext. Dieser stellt den Einstiegspunkt dar, unter dem man Objekte suchen und ablegen kann. Neben dem Klassennamen des Providers wird die URL zum Einstiegspunkt angegeben.

In dem folgenden Beispiel möchten wir die Windows-Registry abfragen.

  Hashtable env = new Hashtable();
  env.put(Context.INITIAL_CONTEXT_FACTORY, 
    "com.cogentlogic.jndi.winreg.WinregInitContextFactory");
  env.put(Context.PROVIDER_URL, 
    "winreg://localhost/HKEY_LOCAL_MACHINE\\SOFTWARE");
  InitialContext initctx = new InitialContext(env);

  // Subkontext auf den JDK-Ast in der Registry
  Context jdkContext = (Context) initctx.lookup(
    "JavaSoft\\Java Development Kit");

Ausgehend von dem InitialContext hat der Programmierer nun verschiedene Möglichkeiten, wobei die wichtigsten Operationen im Folgenden aufgelistet sind:

Das folgende Beispiel zeigt die Abfrage des Namensdienstes RMI (Abschnitt 19.2). Das Programm startet die RMI-Registry und registriert dann dort ein Objekt, um dieses mithilfe vom JNDI abzufragen.
  package de.dpunkt.jndi;
  
  import java.rmi.Remote;
  import java.rmi.RemoteException;
  import java.rmi.server.UnicastRemoteObject;
  import java.rmi.registry.LocateRegistry;
  import javax.naming.InitialContext;
  import javax.naming.Context;
  import java.util.Hashtable;
  
  public class RMIRegistryExample {
  
   public RMIRegistryExample() {}
  
   /**
    * Das Remote-Interface, welches die
    * öffentlichen Methoden beinhaltet
    */
   public static interface HelloInterface
                             extends Remote {
  
      public String getMessage()
          throws RemoteException;
  
   }
  
   /**
    * Remote-Objekt, welches HelloInterface
    * implementiert
    */
   public static class HelloImpl extends UnicastRemoteObject
                                 implements HelloInterface {
  
     public HelloImpl() throws RemoteException {}
     public String getMessage() {
         return "Hello World";
     }
  
   }
  
   public static void main (String[] args)
                           throws Exception {
     // Registry starten
     LocateRegistry.createRegistry(1099);
  
     // Kontext setzen
     Hashtable hashtable = new Hashtable(2);
     hashtable.put (Context.INITIAL_CONTEXT_FACTORY,
         "com.sun.jndi.rmi.registry.RegistryContextFactory");
     hashtable.put (Context.PROVIDER_URL,
                    "rmi://localhost:1099");
     InitialContext ictx = new InitialContext(hashtable);
  
     // Remote-Objekt binden
     ictx.bind ("HelloObj", new HelloImpl());
  
     // Remote-Objekt durch Namen holen
     HelloInterface helloObj =
          (HelloInterface) ictx.lookup("HelloObj");
  
     // Remote-Objekt abfragen
     System.out.println(helloObj.getMessage());
   }
  }


 Inhaltsverzeichnis   Auf Ebene Zurück   Seite Zurück   Seite Vor   Auf Ebene Vor   Eine Ebene höher   Index

Copyright © 2002 dpunkt.Verlag, Heidelberg. Alle Rechte vorbehalten.