Open Source im professionellen Einsatz

Newsletter abonnieren
Seite durchsuchen

HEFTARCHIV | NEWS | E-BIBLIOTHEK | VIDEO | BLOGS | WHITEPAPER | EVENTS | ACADEMY | ABO | SHOP

user friendly

  Home  »  Heft & Abo  »  Heftarchiv  »  2001  »  01  »  Auskunft, wo ist mein Objekt?  

RSS-Feed der aktuellen News von Linux-Magazin Online Folgen Sie Linux-Magazin Online auf Twitter
Diesen Artikel druckenDiesen Artikel weiterempfehlen Diesen Artikel kommentieren Newsletter abonnieren
Share/Bookmark

Neues aus der Zustandsfabrik

Objekte in serialisierter Form oder als Referenzen abzuspeichern sind nur zwei Spezialfälle für ein allgemeines Prinzip. In Abbildung 2 ist dargestellt, was beim Speichern oder Lesen passiert. Das Java-Objekt wird mittels einer StateFactory in eine LDAP-speicherbare Form umgewandelt. State ist hier mit Zustand zu übersetzen: Das Objekt wechselt den Zustand (seine Klasse), behält aber alle Informationen. Beim Lesen dient eine ObjectFactory dazu, aus den gespeicherten Informationen (zu denen natürlich auch die Originalklasse gehört) das Objekt wieder zu erzeugen.

Listing 1: Beispiel
1

01: import javax.naming.*;
02: import java.io.File;
03: import java.util.Hashtable;
04:
05: public class Beispiel1 {
06:  public static void main(String[] args) {
07:
08:   try {
09:    Hashtable cfg = new Hashtable();
10:     cfg.put(Context.INITIAL_CONTEXT_FACTORY,
11:        "com.sun.jndi.fscontext.RefFSContextFactory");
12:       cfg.put(Context.PROVIDER_URL, "file:/home/bablokb");
13:       Context initCtx = new InitialContext(cfg);
14:
15:       File f = (File) initCtx.lookup(".emacs");
16:       System.out.println(f);  //  Ausgabe: /home/bablokb/.emacs
17:
18:       initCtx.close();
19:     } catch (Exception e) {
20:       e.printStackTrace();
21:     }
22:   }
23: }

Eine eigene StateFactory für serialisierbare Objekte oder Referenzen zu schreiben, ist nicht notwendig. Braucht man aber volle Kontrolle über die Speicherung, muss man dies tun. Alle StateFactories und ObjectFactories, die das JNDI-Framework verwenden soll, müssen über den Hashtable, der zur Konfiguration dient, bekannt gemacht werden (analog zur InitialContextFactory).

Listing 2: Beispiel
2

01: import javax.naming.*;
02: import javax.naming.directory.*;
03: import java.io.File;
04: import java.util.Hashtable;
05:
06: public class Beispiel2 {
07:   public static final String MYDN = "cn=Bablokb, o=CSP, c=DE";
08:   public static void main(String[] args) {
09:
10:     try {
11:       Hashtable cfg = new Hashtable();
12:       cfg.put(Context.INITIAL_CONTEXT_FACTORY,
13:          "com.sun.jndi.ldap.LdapCtxFactory");
14:       cfg.put(Context.PROVIDER_URL, "ldap://localhost:389");
15:       DirContext initCtx = new InitialDirContext(cfg);
16:
17:       String[] attribs = new String[2];
18:       attribs[0] = "sn";
19:       attribs[1] = "mail";
20:       Attributes res = initCtx.getAttributes(MYDN,attribs);
21:       for (int i = 0; i<attribs.length; ++i) {
22:         Attribute a = res.get(attribs[i]); // immer res != null
23:         if (a != null) {
24:           System.out.println(attribs[i] + ":");
25:           NamingEnumeration en = a.getAll();
26:           while(en.hasMoreElements())
27:             System.out.println("t" + en.nextElement());
28:         }
29:       }
30:       initCtx.close();
31:     } catch (Exception e) {
32:       e.printStackTrace();
33:     }
34:   }
35: }

Der SUN-Service-Provider hat noch für drei weitere Spezialfälle eingebaute Logik. Das betrifft einmal Objekte, die das DirContext-Interface implementieren und mittels der Methode getAttributes() verlustfrei in Attribute umgewandelt werden können. Die beiden anderen Spezialfälle sind RMI-Objekte und CORBA-Objekte. Die Speicherung der entsprechenden Objektreferenzen in einem LDAP-Server ist in verteilten Enterprise-Lösungen eine wichtige Maßnahme, um die Anzahl der Namensdienste, die eine Entwicklerin kennen und ansprechen muss, zu reduzieren.

Für alle Methoden der Objektspeicherung sind ausführliche Beispiele im JNDI-Tutorial (einschließlich Code-Beispiele) vorhanden.

finally{}

Mit dem JNDI ist es SUN geglückt, ein einfaches API zur Verfügung zu stellen, um einheitlich auf verschiedene Namens- und Verzeichnisdienste zuzugreifen. Über einen einfachen Satz von Konfigurationsparametern, die man bei geschickter Programmierung auch über die D-Option des Java-Interpreters setzen kann, lässt sich die zugrunde liegende Infrastruktur transparent für den Rest des Programms ändern.

Auch wenn ich das SPI nicht behandelt habe, lohnt sich ein Blick in die Dokumentation. Das entsprechende Paketz enthält nur wenige Klassen sowie eine Reihe von Interfaces, die meist nur eine Methode enthalten. Diese Einfachheit ist auch der Grund, warum es schon auf breiter Front Service Provider gibt.

In den nächsten Folgen, in denen es um den Java-Message-Service (JMS) und anschließend (endlich!) um Enterprise-JavaBeans geht, wird uns das JNDI immer wieder begegnen als das Mittel der Wahl, Objekte und andere Ressourcen im Netz zu lokalisieren. (uwo)

Der
Autor

Bernhard Bablok arbeitet bei der AGIS mbH (Allianz Gesellschaft für Informatik Service mbH) als Systemprogrammierer im Systems-Management-Bereich. Wenn er nicht Musik hört, mit dem Radl oder zu Fuß unterwegs ist, beschäftigt er sich mit Themen rund um Objektorientierung.

Infos

[1] Coffee-Shop: Von Sandkästen, Schlüsseln und Signaturen, Linux-Magazin 7/2000, S. 106ff.

[2] Die JNDI-Homepage: http://java.sun.com/products/jndi/

[3] Die OpenLDAP-Homepage: http://www.openldap.org

Copyright © 2002 Linux New Media AG

Copyright © 2002 Linux New Media AG

Diesen Artikel druckenDiesen Artikel weiterempfehlen Diesen Artikel kommentieren Newsletter abonnieren
Share/Bookmark
Whitepaper
The Role of Open Source in Data Integration

Obwohl in den letzten Jahren viele technische Fortschritte erzielt werden konnten, verfügen die meisten Datenintegrationsprozesse nach wie vor nur über eine sehr begrenzte Automatisierung. Das vorliegende White Paper von dem Industry Analyst Mark Madson wird zunächst ein grundlegendes Verständnis von Daten Integration vermitteln, die Vorzüge von Open Source Lösungen für Daten Integration erläutern und Ihnen professionelle Empfehlungen geben, damit Sie Ihre Integrationsjobs noch einfacher und produktiver gestalten können.

Download PDF (Registrierung erforderlich)
Open Source Datenintegration in der Praxis: Fallstudien und Anwendungsbeispiele (Folge 2)

Der zweite Teil des Open Source Datenintegration in der Praxis: Fallstudien und Anwendungsbeispiele White Papers beleuchtet anhand weiterer ausgewählter Case Studies die Implementierung von Open Source Datenintegration in der Praxis und benennt die daraus resultierenden Vorteile.

Download PDF (Registrierung erforderlich)
Kommentare (0)