EJB jar.xml und Name Service (JNDI) Applikationsserver Prof. Dr. Ch. Reich rch@fh furtwangen.de http://www.informatik.fh furtwangen.de/~reich/appserver/index.html
Beschreibung der Beans mit Deployment Descriptor ejb jar.xml
Deployment-Descriptor Name: ejb-jar.xml Ort: META-INF-Verzeichnis der Jar- Datei Header: <?xml version="1.0" encoding="utf-8"?> <!DOCTYPE ejb-jar PUBLIC "-//Sun Microsystems, Inc.//DTD Enterprise JavaBeans 2.0//EN" "http://java.sun.com/dtd/ejb-jar_2_0.dtd"> Root-Element: ejb-jar
Kind-Elemente des ejb-jar Element Beschreibung description? Textbeschreibung der ejb-jar-datei. display-name? Name, der von Tools benutzt wird. small-icon? large-icon? Pfad, innerhalb der jar-datei, für jpeg-bilder (16x16) Pfad, innerhalb der jar-datei, für jpeg-bilder (32x32) enterprisebean Nähere Beschreibung/ Definition der Beans. relationships? Definiert CMP Beziehungen Assemblydescriptor? Definiert Transaktionen und Security ejb-client-jar? Definiert JAR-Datei, die Stubs und Interfaces für Remote-Clients enhält.
enterprise-beans: Session Bean (wichtige Elemente) Element ejb-name ejb-class Beschreibung Spitzname des Beans, dient als Referenz Session-Bean Klasse + Package- Name Home-Interface Remote-Interface Local-Home-Interface Local-Interface Stateful Stateless home? remote? local-home? local? session-type transactiontype Container Bean
enterprise-beans: Session Bean (weniger wichtige Elemente) Element Beschreibung description? Textbeschreibung der ejb-jar-datei. display-name? Name, der von Tools benutzt wird. small-icon? Pfad, innerhalb der jar-datei, für jpeg-bilder (16x16) large-icon? Pfad, innerhalb der jar-datei, für jpeg-bilder (32x32) env-entry* Definition von Umgebungsvariablen ejb-ref* Definition von Referenzen zu anderen Beans. ejb-local-ref* Definition von Referenzen zu lokalen Beans. security-role-ref* Definiert Sicherheitsrollen Definiert wie Sicherheitskontexte ermittelt werden security-identity* können resource-ref* Definiert Referenzen zu Resourcen (z.b. JDBC) resource-env-ref* Bindet Resourcen-Factories zu JNDI Spitznamen
stateless Session Bean Bsp.... <enterprise-beans> <session> <ejb-name>hellobean</ejb-name> <ejb-class> StatelessSessionBean.HelloStatelessSessionBean </ejb-class> <home>statelesssessionbean.hellohome</home> <remote>statelesssessionbean.hello</remote> <session-type>stateless</session-type> <transaction-type>container</transaction-type> </session> </enterprise-beans> </ejb-jar>
enterprise-beans: Entity Bean (wichtige Elemente) Beschreibung Spitzname des Beans, dient als Referenz Session-Bean Klasse + Package- Name Home-Interface Remote-Interface Local-Home-Interface Local-Interface Element ejb-name ejb-class home? remote? local-home? local? primary-keyclass reentrant cmp-field* primkey-field? Klasse der Primärschlüssels true/false Definiert die Felder die der Container managen soll. Falls keine PK-Klasse, dann hier ein Feld als Key definieren. cmp-field besteht aus description? und field-name
enterprise-beans: Session Bean (weniger wichtige Elemente) Element Beschreibung description? Textbeschreibung der ejb-jar-datei. display-name? Name, der von Tools benutzt wird. small-icon? Pfad, innerhalb der jar-datei, für jpeg-bilder (16x16) large-icon? Pfad, innerhalb der jar-datei, für jpeg-bilder (32x32) env-entry* Definition von Umgebungsvariablen ejb-ref* Definition von Referenzen zu anderen Beans. ejb-local-ref* Definition von Referenzen zu lokalen Beans. security-role-ref* Definiert Sicherheitsrollen Definiert wie Sicherheitskontexte ermittelt werden security-identity* können resource-ref* Definiert Referenzen zu Resourcen (z.b. JDBC) resource-env-ref*bindet Resourcen-Factories zu JNDI Spitznamen cmp-version? Erlaubt EJB-Version zu setzen (1.x 2.x) query? Definitionen von EJB-QL für Finder- o. Select-Methoden
CMP Entity Bean Bsp.... <enterprise-beans> <entity> <ejb-name>counterentitybean</ejb-name> <ejb-class>counterentitybeancmp</ejb-class> <home>counterhome</home> <remote>counter</remote> <persistence-type>container</persistence-type> <prim-key-class>counterpk</prim-key-class> <reentrant>false</reentrant> <cmp-field> <field-name>counterid</field-name> </cmp-field> <cmp-field> <field-name>countervalue</field-name> </cmp-field> </entity> </enterprise-beans>...
assembly-descriptor Ermöglicht die Festlegung von Zugriffsberechtigungen, Transaktionen und das generelle Zusammenspiel von Beans einer Applikation. Element security-role* methodpermission* containertransaction* exclude-list? Beschreibung Security-Rollen können definiert werden. Spezifiziert für die einzelenen Methoden, die Zugriffsrechte. Definition der Transaktionen, der einzelnen Methoden Liste von methoden, die von niemandem aufgerufen werden dürfen.
assembly-descriptor: Bsp <assembly-descriptor> <container-transaction> <method> <ejb-name>counterentitybean</ejb-name> <method-name>*</method-name> </method> <trans-attribute>required</trans-attribute> </container-transaction> </assembly-descriptor>
Name Service Java Naming and Directory Interface (JNDI) JNDI Lookup
Namensdienst Der Client ist auf den Namensdienst angewiesen, um ein Bean zu finden. Namensdienst bildet Namen auf Remote Objekte ab. Remote-Objekt- Name b1 Referenz ref:xy452a b2 ref:yqwe82 b3 ref:90sjwds...... Der Name ist frei wählbar. JDNI wird benutzt bei EJB, RMI-IIOP, JDBC,...
Wie kommt der Client zum Home Interface 1. JNDI-Initialisierungsparamter definieren (jndi.properties) und InitialConect erzeugen. import javax.naming.initialcontext; InitialContext ctx = new InitialContext(); 2. lookup( Beanname ) mit InitialContext-Object Object obj = ctx.lookup( Name des Beans ); 3.Überprüfe, dass Object auch nach Home- Interface gecastet werden kann. import javax.rim.portableremoteobject <Home-Interface> homeif = null; homeif = (<Home-Interface>) PortableRemoteObject.narrow(obj, <Home-Interface>.class);
jndi.properties-datei java.naming.factory.initial=org.jnp.interfaces.namingcontextfactory java.naming.factory.url.pkgs=org.jboss.naming:org.jnp.interfaces java.naming.provider.url=localhost:1099 java.naming.factory.initial Initialisierungsklasse der Factory für den Namensdienst. JNDI Treiber. java.naming.factory.url.pkgs Packages, in dem sich die Init-Klassen befinden. java.naming.provider.url Adresse des JNDI-Servers.
Beans und Namensdienst Zur Laufzeit stellt der Container dem Bean deren Containerumgebung zur Verfügung. Folgende Namen für Dienste sind im Namensdienst definiert: java:comp/env/ java:comp/env/ejb java:comp/env/jdbc java:comp/env/jms java:comp/env/mail java:comp/env/url Umgebungsvariablen Referenzen auf andere Bean Klassen Zugriff auf JDBC Datenbanken Zugriff auf den java Messaging Service Zugriff auf den Mail dienst Zugriff auf Webserver und vergleichbare Dienste
Wie kommt das Bean zum Home Interface (mit EJBHome) Grundsätzlich ist die Vorgehensweise wie beim Client: InitialConext lookup casten Unterschied: Man braucht keine Initialisierungs-parameter (jndi.properties) mitgeben. Lookup mit: java:comp/env/ejb/<beanname>
Wie kommt das Bean zum Home Interface (mit local Interface) Vorgehensweise wie zuvor: InitialConext lookup des local-home-interfaces casten ohne PortableremoteObject.narrow Unterschied: local-home-interface wirft keine RemoteExceptions. Lookup mit: java:comp/env/ejb/<beanname> Beanname wurde statt mit <ejb-ref> mit <ejblocal-ref> im Deploymentdescriptor definiert.