J2EE-Praktikum - JNDI · 2020. 12. 8. · J2EE-Praktikum JNDI Peter Thiemann Universität Freiburg...
Transcript of J2EE-Praktikum - JNDI · 2020. 12. 8. · J2EE-Praktikum JNDI Peter Thiemann Universität Freiburg...
![Page 1: J2EE-Praktikum - JNDI · 2020. 12. 8. · J2EE-Praktikum JNDI Peter Thiemann Universität Freiburg J2EE-Praktikum, WS2005/2006. Inhalt 1 Naming Services 2 JNDI-Typen 3 JNDI-Verwendung](https://reader036.fdocument.pub/reader036/viewer/2022070212/6101db3c4f59fe2d4d2142af/html5/thumbnails/1.jpg)
J2EE-PraktikumJNDI
Peter Thiemann
Universität Freiburg
J2EE-Praktikum, WS2005/2006
![Page 2: J2EE-Praktikum - JNDI · 2020. 12. 8. · J2EE-Praktikum JNDI Peter Thiemann Universität Freiburg J2EE-Praktikum, WS2005/2006. Inhalt 1 Naming Services 2 JNDI-Typen 3 JNDI-Verwendung](https://reader036.fdocument.pub/reader036/viewer/2022070212/6101db3c4f59fe2d4d2142af/html5/thumbnails/2.jpg)
Inhalt
1 Naming Services
2 JNDI-Typen
3 JNDI-Verwendung
4 Directory-Kontexte
5 Namen
6 Zusammenfassung
![Page 3: J2EE-Praktikum - JNDI · 2020. 12. 8. · J2EE-Praktikum JNDI Peter Thiemann Universität Freiburg J2EE-Praktikum, WS2005/2006. Inhalt 1 Naming Services 2 JNDI-Typen 3 JNDI-Verwendung](https://reader036.fdocument.pub/reader036/viewer/2022070212/6101db3c4f59fe2d4d2142af/html5/thumbnails/3.jpg)
Java Naming and Directory Interface (JNDI)
Zweck
Auffinden von Services
Zugriff auf Services
Directory Struktur
JNDI ist virtuell
Directory Services können ortsunabhängig verlinkt werden
JNDI ist dynamisch
Treiber für Services werden bei Bedarf geladen
JNDI und EJB
EJB Server müssen JNDI unterstützen
![Page 4: J2EE-Praktikum - JNDI · 2020. 12. 8. · J2EE-Praktikum JNDI Peter Thiemann Universität Freiburg J2EE-Praktikum, WS2005/2006. Inhalt 1 Naming Services 2 JNDI-Typen 3 JNDI-Verwendung](https://reader036.fdocument.pub/reader036/viewer/2022070212/6101db3c4f59fe2d4d2142af/html5/thumbnails/4.jpg)
Java Naming and Directory Interface (JNDI)Verwendungen
JDBC
DataSource -Objekte enthalten Information über eineDatenquelle (z.B. eine Datenbank)
diese Informationen sind: Namen, Treiber, Ort, etc
JDBC enpfiehlt DataSource n mit JNDI abzulegen
JMS (Java Messaging Service)
Verwendet JNDI für Zugriff auf
Konfigurationsinformation
Message Queues
Topics
EJB
Zugriff auf Home-Interface mit JNDI
![Page 5: J2EE-Praktikum - JNDI · 2020. 12. 8. · J2EE-Praktikum JNDI Peter Thiemann Universität Freiburg J2EE-Praktikum, WS2005/2006. Inhalt 1 Naming Services 2 JNDI-Typen 3 JNDI-Verwendung](https://reader036.fdocument.pub/reader036/viewer/2022070212/6101db3c4f59fe2d4d2142af/html5/thumbnails/5.jpg)
Java Naming and Directory Interface (JNDI)Vorteile von JNDI
Eine zentral verwaltete Informationsquelleeinfach zu verwalten und zu durchsuchen
JNDI kann Java-Objekte direkt ablegen
![Page 6: J2EE-Praktikum - JNDI · 2020. 12. 8. · J2EE-Praktikum JNDI Peter Thiemann Universität Freiburg J2EE-Praktikum, WS2005/2006. Inhalt 1 Naming Services 2 JNDI-Typen 3 JNDI-Verwendung](https://reader036.fdocument.pub/reader036/viewer/2022070212/6101db3c4f59fe2d4d2142af/html5/thumbnails/6.jpg)
Naming Services
B?
Client
A
B
C
Service
Service
Service
A
B
CNaming Service
Binding
Binding
Binding
Naming Service verwaltet Menge von Bindungen
Jede Bindung ordnet einen Namen einem Objekt zu
![Page 7: J2EE-Praktikum - JNDI · 2020. 12. 8. · J2EE-Praktikum JNDI Peter Thiemann Universität Freiburg J2EE-Praktikum, WS2005/2006. Inhalt 1 Naming Services 2 JNDI-Typen 3 JNDI-Verwendung](https://reader036.fdocument.pub/reader036/viewer/2022070212/6101db3c4f59fe2d4d2142af/html5/thumbnails/7.jpg)
Naming ServicesBeispiele
Common Object Services (COS) Naming
Naming Service für CORBA
Domain Name System (DNS)
Verteilter Naming Service für Internet Domain-Namen
Bildet Namen auf Ressourcen (z.B. IP-Adressen) ab
Lightweight Directory Access Protocol (LDAP)
Hierarchische Struktur von Knoten mit je einer Menge vonName-Wert Bindungen
Network Information System (NIS)
Naming Servives für Netzwerkadministration
![Page 8: J2EE-Praktikum - JNDI · 2020. 12. 8. · J2EE-Praktikum JNDI Peter Thiemann Universität Freiburg J2EE-Praktikum, WS2005/2006. Inhalt 1 Naming Services 2 JNDI-Typen 3 JNDI-Verwendung](https://reader036.fdocument.pub/reader036/viewer/2022070212/6101db3c4f59fe2d4d2142af/html5/thumbnails/8.jpg)
Naming ServicesAnforderungen/Gemeinsamkeiten
MindestfunktionalitätDefinition einer BindungZugriff auf Objekt über Name
Meist nur Referenzen auf Objekte
JNDI
JNDI ist ein Interface für die Mindestfunktionalität
Keine Implementierung eines Naming Service
Erlaubt den Zugriff auf eine Implementierung durch einenunterliegenden Naming Service
Abstrahiert von Unterschieden
![Page 9: J2EE-Praktikum - JNDI · 2020. 12. 8. · J2EE-Praktikum JNDI Peter Thiemann Universität Freiburg J2EE-Praktikum, WS2005/2006. Inhalt 1 Naming Services 2 JNDI-Typen 3 JNDI-Verwendung](https://reader036.fdocument.pub/reader036/viewer/2022070212/6101db3c4f59fe2d4d2142af/html5/thumbnails/9.jpg)
Naming ServicesUnterschiede
Namenskonventionen
DNS: mopo.informatik.uni-freiburg.de
LDAP: cn=Peter Thiemann, o=Uni Freiburg,c=DE
JNDIRepräsentiert Namen durch Klassenhierarchie Name
Namebesteht aus Folge von Namensteilen
Methoden darauf sind unabhängig von Namenskonvention
![Page 10: J2EE-Praktikum - JNDI · 2020. 12. 8. · J2EE-Praktikum JNDI Peter Thiemann Universität Freiburg J2EE-Praktikum, WS2005/2006. Inhalt 1 Naming Services 2 JNDI-Typen 3 JNDI-Verwendung](https://reader036.fdocument.pub/reader036/viewer/2022070212/6101db3c4f59fe2d4d2142af/html5/thumbnails/10.jpg)
JNDI-TypenDas Context -Interface
Kontext: Menge von Bindungen mit gleicherNamenskonventionContext -Objekt erlaubt
Erstellen und Löschen von BindungenUmbenennenAuflisten von Bindungen
Für strukturierte NamensräumeErzeugen und Löschen von SubkontextenNavigation
Einstiegspunkt: Klasse InitialContextArt des verwendeten Naming ServiceID und Passwort (falls erforderlich)
![Page 11: J2EE-Praktikum - JNDI · 2020. 12. 8. · J2EE-Praktikum JNDI Peter Thiemann Universität Freiburg J2EE-Praktikum, WS2005/2006. Inhalt 1 Naming Services 2 JNDI-Typen 3 JNDI-Verwendung](https://reader036.fdocument.pub/reader036/viewer/2022070212/6101db3c4f59fe2d4d2142af/html5/thumbnails/11.jpg)
JNDI-TypenContext — Binden und Anfragen
void bind(String stringName, Object object)
Binds a name to an object. The name must not be bound to anotherobject. Intermediate contexts must exist.
void rebind(String stringName, Object object)
Binds a name to an object. Intermediate contexts must exist.
Object lookup(String stringName)
Returns the specified object.
void unbind(String stringName)
Unbinds the specified object.
void rename(String stringOldName, String stringNewName)
Changes the name to which an object is bound.
![Page 12: J2EE-Praktikum - JNDI · 2020. 12. 8. · J2EE-Praktikum JNDI Peter Thiemann Universität Freiburg J2EE-Praktikum, WS2005/2006. Inhalt 1 Naming Services 2 JNDI-Typen 3 JNDI-Verwendung](https://reader036.fdocument.pub/reader036/viewer/2022070212/6101db3c4f59fe2d4d2142af/html5/thumbnails/12.jpg)
JNDI-TypenContext — Auflisten
NamingEnumeration listBindings(String stringName)
Returns an enumeration containing the names bound to thespecified context, along with the objects bound to them.
NamingEnumeration list(String stringName)
Returns an enumeration containing the names bound to thespecified context, along with the class names of the objectsbound to them.
Zu jeder Methode gibt es eine Variante mit Nameanstellevon String , damit Programme unabhängig vonNamenskonventionen gehalten werden können.
![Page 13: J2EE-Praktikum - JNDI · 2020. 12. 8. · J2EE-Praktikum JNDI Peter Thiemann Universität Freiburg J2EE-Praktikum, WS2005/2006. Inhalt 1 Naming Services 2 JNDI-Typen 3 JNDI-Verwendung](https://reader036.fdocument.pub/reader036/viewer/2022070212/6101db3c4f59fe2d4d2142af/html5/thumbnails/13.jpg)
JNDI-VerwendungBeispiel
Funktionen im BeispielVerbinden mit Naming ServiceAuflisten aller BindungenAbfragen einer Bindung
Verwendet file system service provider von SunSicht auf Filesystem als Naming ServiceBindet Namen an vollen Pfad (gewöhnliche Datei) oder anSubkontext (Directory)
Download der service provider vonhttp://java.sun.com/products/jndi/serviceproviders.html
J2EE Container haben einen “eingebauten” JNDI-Provider,der eine interne Datenbank verwendet
![Page 14: J2EE-Praktikum - JNDI · 2020. 12. 8. · J2EE-Praktikum JNDI Peter Thiemann Universität Freiburg J2EE-Praktikum, WS2005/2006. Inhalt 1 Naming Services 2 JNDI-Typen 3 JNDI-Verwendung](https://reader036.fdocument.pub/reader036/viewer/2022070212/6101db3c4f59fe2d4d2142af/html5/thumbnails/14.jpg)
JNDI-VerwendungCode, Erzeugen des Kontexts
Hashtable env = new Hashtable ( ) ;env . put (
Context . INITIAL_CONTEXT_FACTORY ,"com. sun . j n d i . f s c o n t e x t . RefFSContextFactory "
) ;env . put ( Context .PROVIDER_URL, args [ 0 ] ) ;Context c t x = new I n i t i a l C o n t e x t ( env ) ;
Initialer Kontext wird aus einer Umgebung env erzeugt, die
den JNDI Provider und
die Start-URL (hier file:///... )
spezifiziert
![Page 15: J2EE-Praktikum - JNDI · 2020. 12. 8. · J2EE-Praktikum JNDI Peter Thiemann Universität Freiburg J2EE-Praktikum, WS2005/2006. Inhalt 1 Naming Services 2 JNDI-Typen 3 JNDI-Verwendung](https://reader036.fdocument.pub/reader036/viewer/2022070212/6101db3c4f59fe2d4d2142af/html5/thumbnails/15.jpg)
JNDI-VerwendungCode, Auflisten
i f ( args . leng th == 1) {NamingEnumeration bnds = c tx . l i s t B i n d i n g s ( " " ) ;while ( bnds . hasMore ( ) ) {
Binding bnd = ( Binding ) bnds . next ( ) ;System . out . p r i n t l n (
bnd . getName ( ) + " " + bnd . getObject ( )) ;
}}
Auflisten aller Bindungen, falls keine weiterenKommandozeilenargumente
![Page 16: J2EE-Praktikum - JNDI · 2020. 12. 8. · J2EE-Praktikum JNDI Peter Thiemann Universität Freiburg J2EE-Praktikum, WS2005/2006. Inhalt 1 Naming Services 2 JNDI-Typen 3 JNDI-Verwendung](https://reader036.fdocument.pub/reader036/viewer/2022070212/6101db3c4f59fe2d4d2142af/html5/thumbnails/16.jpg)
JNDI-VerwendungCode, Abfragen einer Bindung
else {fo r ( i n t i = 1 ; i < args . leng th ; i ++) {
Object ob j = c tx . lookup ( args [ i ] ) ;System . out . p r i n t l n ( args [ i ] + " " + ob j ) ;
}}c t x . c lose ( ) ;
Auflisten der angefragten Bindungen
![Page 17: J2EE-Praktikum - JNDI · 2020. 12. 8. · J2EE-Praktikum JNDI Peter Thiemann Universität Freiburg J2EE-Praktikum, WS2005/2006. Inhalt 1 Naming Services 2 JNDI-Typen 3 JNDI-Verwendung](https://reader036.fdocument.pub/reader036/viewer/2022070212/6101db3c4f59fe2d4d2142af/html5/thumbnails/17.jpg)
Directory-KontexteKlasse DirContext
Subklasse von Context
ErweiterungenAttributeSubkontexteSuche
Nur String Variante, NameVariante existiert auch
![Page 18: J2EE-Praktikum - JNDI · 2020. 12. 8. · J2EE-Praktikum JNDI Peter Thiemann Universität Freiburg J2EE-Praktikum, WS2005/2006. Inhalt 1 Naming Services 2 JNDI-Typen 3 JNDI-Verwendung](https://reader036.fdocument.pub/reader036/viewer/2022070212/6101db3c4f59fe2d4d2142af/html5/thumbnails/18.jpg)
Directory-KontexteDirContext — Attribute
void bind(String stringName,Object object,Attributes attributes
)void rebind(
String stringName,Object object,Attributes attributes
)
Bei rebind werden die Attribute der vorherigen Bindungbeibehalten, falls keine neuen Attribute spezifiziert sind.
![Page 19: J2EE-Praktikum - JNDI · 2020. 12. 8. · J2EE-Praktikum JNDI Peter Thiemann Universität Freiburg J2EE-Praktikum, WS2005/2006. Inhalt 1 Naming Services 2 JNDI-Typen 3 JNDI-Verwendung](https://reader036.fdocument.pub/reader036/viewer/2022070212/6101db3c4f59fe2d4d2142af/html5/thumbnails/19.jpg)
Directory-KontexteDirContext — Attributabfrage und Erzeugung
AttributesgetAttributes(
String objName// String [] whichAttributes
)
DirContextcreateSubcontext(
String stringName,Attributes attributes
)
![Page 20: J2EE-Praktikum - JNDI · 2020. 12. 8. · J2EE-Praktikum JNDI Peter Thiemann Universität Freiburg J2EE-Praktikum, WS2005/2006. Inhalt 1 Naming Services 2 JNDI-Typen 3 JNDI-Verwendung](https://reader036.fdocument.pub/reader036/viewer/2022070212/6101db3c4f59fe2d4d2142af/html5/thumbnails/20.jpg)
Directory-KontexteDirContext — Suche
NamingEnumeration search(String name,Attributes toMatch // String [] attrsToReturn
)NamingEnumeration search(
Name name,String rfc2254Filter,SearchControls searchcontrols
)
RFC2254: String-Repräsentation für LDAP SuchfilterBeispiele dafür(cn=Babs Jensen)(!(cn=Tim Howes))(&(objectClass=Person)(|(sn=Jensen)(cn=Babs J*)))(o=univ*of*mich*)
![Page 21: J2EE-Praktikum - JNDI · 2020. 12. 8. · J2EE-Praktikum JNDI Peter Thiemann Universität Freiburg J2EE-Praktikum, WS2005/2006. Inhalt 1 Naming Services 2 JNDI-Typen 3 JNDI-Verwendung](https://reader036.fdocument.pub/reader036/viewer/2022070212/6101db3c4f59fe2d4d2142af/html5/thumbnails/21.jpg)
Directory-KontexteSearchControls
SearchControls(int nSearchScope,// OBJECT_SCOPE, ONELEVEL_SCOPE, SUBTREE_SCOPElong maxEntriesToReturn,int maxTime,String[] attributesToReturn,boolean returnObjects,boolean dereferenceLinks
)
![Page 22: J2EE-Praktikum - JNDI · 2020. 12. 8. · J2EE-Praktikum JNDI Peter Thiemann Universität Freiburg J2EE-Praktikum, WS2005/2006. Inhalt 1 Naming Services 2 JNDI-Typen 3 JNDI-Verwendung](https://reader036.fdocument.pub/reader036/viewer/2022070212/6101db3c4f59fe2d4d2142af/html5/thumbnails/22.jpg)
Namen
Name(Interface) definiert Operationen auf Folge vonNamensteilenKann gemischt (composite) oder zusammengesetzt sein
composite: Teile aus verschiedenen Namensräumencompound: hierarchische Benennung
Komponenten sind nummeriert [0, N)
Komponente 0 ist an der Wurzel der Hierarchie
![Page 23: J2EE-Praktikum - JNDI · 2020. 12. 8. · J2EE-Praktikum JNDI Peter Thiemann Universität Freiburg J2EE-Praktikum, WS2005/2006. Inhalt 1 Naming Services 2 JNDI-Typen 3 JNDI-Verwendung](https://reader036.fdocument.pub/reader036/viewer/2022070212/6101db3c4f59fe2d4d2142af/html5/thumbnails/23.jpg)
Zusammengesetzte Namen
CompositeNameJede Namenskomponente ist String aus einemNamensraumFür hierarchische Namensräume kann eine Komponenteweiter aufgeteilt werden, durch Parsen des Strings.(CompoundName)Standard-Stringrepräsentation: / -separierteNamenskomponentenNamenskomponenten können beliebige Strings sein (auchleer)
CompoundNameDefiniert Parser für einen NamensraumKonfiguriert durch verschiedene Properties
![Page 24: J2EE-Praktikum - JNDI · 2020. 12. 8. · J2EE-Praktikum JNDI Peter Thiemann Universität Freiburg J2EE-Praktikum, WS2005/2006. Inhalt 1 Naming Services 2 JNDI-Typen 3 JNDI-Verwendung](https://reader036.fdocument.pub/reader036/viewer/2022070212/6101db3c4f59fe2d4d2142af/html5/thumbnails/24.jpg)
Zusammenfassung
JNDI ist eine generische Schnittstelle für Namens- undDirectory-Services
Service-Provider für LDAP, Filesystem, DNS, . . .
Integriert mit Java
Abstraktion von konkreten Namensräumen