Title: Programmierung von Client/Server-Anwendungen
1Programmierung von Client/Server-Anwendungen
- J2EE bzw. Java EE Back End Applikationen
(EJB-Container)
2Übersicht
- Java Naming and Directory Interface JNDI
- Enterprise Java Beans im Überblick
- Struktur von EJB-Komponenten (Implementierungsbeis
piel) - Vorbereitung des Deployment-Prozesses
- Auslösen des Deployment-Prozesses
- Installation von SUNs Referenzumgebung
- Funktionenen des SUN-Applikation Servers
3Java Naming and Directory Interface - JNDI
4JNDI
- Unterstützung der Kommunikation über
Rechnergrenzen - Angebotene Services eines Rechners?
- Wo sind entsprechende Objekte abgelegt?
- vgl. Suche im Rahmen eines Telefonbuches
- JNDI Spezifikation eines verwendbaren
Interfaces - Einhaltung der JNDI-Konventionen
- Implementierung eines konkreten Dienstes
- Service Provider Interface (kurz SPI)
5JNDI
Quelle Stark, T. J2EE Einstieg für
Anspruchsvolle,Addison-Wesley, Pearson Studium,
München 2005
6JNDI
- Beispiele für SPI-Implementierungen
- Lightweight Directory Access Protocol
(LDAP-Standard) - Domain Name Service (DNS)
- CORBA Naming Service (COS)
- RMI Registry
- Network Information System (NIS)
- Novel Directory Service (NDS)
- Windows Registry
7JNDI
- Naming Service Aufbau von Namen
- Atomic Name
- Nicht weiter zerlegbar
- Atomare Zeichenkette z.B. sun
- Compound Name
- Zusammengesetzter Name
- java.sun.com oder /products/jndi/index.jsp
- Composite Name
- Zusammengefasster Name
- java.sun.com/products/jndi/index.jsp
Quelle Stark, T. J2EE Einstieg für
Anspruchsvolle,Addison-Wesley, Pearson Studium,
München 2005
8JNDI
- Einstiegepunkt zum benötigten Service/Objekt
- InitialContext vom Typ javax.naming.Context
- Basis-Operationen des JNDI-Kontextobjektes
- bind (Ablegen eines Objektes im aktuellen
Kontext) - unbind (Löschen eines Objektes aus dem Kontext)
- rebind (Möglichkeit zum Überschreiben eines alten
Objektes) - list (Auflisten aller gebundenen Objekte)
- createSubcontext (Erzeugen eines Unterkontextes)
- lookup (Liefert ein gebundes Objekt zurück)
9JNDI
- Konstanten des Interface javax.naming.Context
- INITIAL_CONTEXT_FACTORY (Schnittstelle zum SPI)
- PROVIDER_URL (URL des Service)
- SECURITY_PROTOCOL (Typ des Protokolls z.B. SSL)
- SECURITY_PRINCIPAL (Nutzername)
- SECURITY_CREDENTIALS (Passwort)
Quelle Stark, T. J2EE Einstieg für
Anspruchsvolle,Addison-Wesley, Pearson Studium,
München 2005
10JNDI
- Konfiguration des InitialContext (hier Zugriff
auf LDAP) - try
- // Umgebung erzeugen
- Hashtable env new java.util.Hashtable()
- // Dienst spezifizieren
- env.put(Context.INITIAL_CONTEXT_FACTORY,
- com.sun.jndi.ldap.LdapCtxFactory)
- // Provider URL spezifizieren
- env.put(Context.PROVIDER_URL,
- ldap//localhost389)
- Context initCtx new InitialContext(env)
- catch(NamingException ne)
- ne.printStackTrace()
Quelle Stark, T. J2EE Einstieg für
Anspruchsvolle,Addison-Wesley, Pearson Studium,
München 2005
11Enterprise Java Beans im Überblick
12EJB-Überblick
SUNs EJB Definition Ein The Enterprise Java
Beans architecture is a component architecture
for the development and deployment of
component-based distributed business
applications. Applications written using the
Enterprise Java Beans architecture are scalable,
transactional, and multi-user secure. These
applications may be written once, and then
deployed on any server platform that supports the
Enterprise Java Beans specification.
13EJB-Überblick
- Enterprise-JavaBeans(EJB)-Architektur I
- Server-seitige Java-Komponenten (Focus
Anwendungslogik) - SUN bietet Spezifikation für EJBs, Container und
Server - Referenzimplementierung J2EE bzw. Java EE
- Vielzahl angebotener Applikation-Server
- JBoss (www.jboss.org)
- BEA WebLogic (www.bea.com)
- IBM WebSphere (www.ibm.com)
- Portable Anwendungen auf der Basis von EJBs
- Hardwareunabhängig
- Betriebssystemunabhängig
- Unterstützung verschiedener Sprachen und CORBA
14EJB-Überblick
- Enterprise-JavaBeans(EJB)-Architektur II
- Abstraktes Programmierinterface
- Entlastung von low-level Aufgaben wie z.B.
- Transaktionsverwaltung
- Multithreading
- Ressourcenverwaltung
- Unterstützung der Wiederverwendbarkeit
- Die Entwicklung sollte möglichst unabhängig von
der Installation, Konfiguration, Auslieferung und
dem Betrieb ablaufen können - ITIL Service Delivery
- ITIL Service Support
15EJB-Überblick
- Container-Konzept I
- Behälter bzw. Laufzeitumgebung für
Softwarekomponenten - Container definiert nach außen einen
abgeschlossenen Bereich - Überwachung des Lebenszyklus einer EJB
- Erzeugen von EJB-Instanzen
- Verwalten und Steuern der möglichen Zustände
eines EJB - Entfernen von EJB-Instanzen
- Bestandteil eines konkreten Applikation Servers
- ? Unzureichenden Portabilität durch Verwendung
Herstellerspezifischer APIs
16EJB-Überblick
- Container-Konzept II (Aufgaben)
- Überwachen des Lebenszyklus von EJBs
- Instanzen Pooling (Verwaltung eines Pools von
EJBs) - Namens- und Verzeichnisdienst
- Transaktionsdienst (ACID-Prinzip)
- Nachrichtendienst (Message Service)
- Persistenz (CMP - Container Managed Persistence)
- Clustermechanismen - meist Herstellerspezifisch!
17EJB-Überblick
- Container-Konzept III (unterstütze APIs
Spezifikation 2.1) - J2SE Version 1.3
- EJB Version 2.1
- JMS API Version 1.x
- JNDI Api Version 1.2
- JDBC API Version 2.0
- JavaMail API ab Version 2.1
- Java API for XML Processing (JAXP)
18EJB-Überblick
- EJB - Eigenschaften
- Component Model (Session-, Entity- und
Message-Driven Beans) - Component Persistence
- BMP - bean managed Persistence
- CMP - container managed Persistence
- Transaction-Management (Java-Transaction-API)
- Exceptions (Client und Server)
- Security
- Naming und Directory Service (JNDI)
- Protocoll-Support (RMI, IIOP,...)
- CORBA-Support (Mapping and Services)
- Attribute-based Programming (Deployment
Descriptor File) - Deployment (EJB JAR-Files)
19EJB-Überblick
20EJB-Überblick
- Rollenverteilung mit EJBs
- Das EJB-Modell unterstützt eine arbeitsteilige
Fertigung, Verarbei-tung, Auslieferung und
Administration beanbasierter Applikationen - EJB-Provider - Lieferant der Java-Kompoenten
- Application Assembler - Anwendungsentwickler
(komplexere EJBs) - EJB-Deployer - Installation und Konfiguration der
Umgebung - System-Administrator - Administration Server- und
Netzinfrastruktur - EJB-Server-Provider - Anbieter von
Applikation-Server - EJB-Container-Provider - Laufzeitumgebung für
EJBs (derzeit fast immer im Zusammenhang mit dem
Applikation-Server)
21EJB-Überblick
- EJB - Spezifikation 1.0
- Bean-Typen Session Beans, Entity Beans
(optional) - Aufruf von Funktionen synchron
- Deployment-Deskriptor serialisierte Klasse
- Kommunikationsprotokoll Java-RMI
- Benötigtes JDK Version 1.1
22EJB-Überblick
- EJB - Spezifikation 1.1
- Bean-Typen Session Beans, Entity Beans
- Aufruf von Funktionen synchron
- Deployment-Deskriptor XML-konforme Datei
- Kommunikationsprotokoll Java-RMI over IIOP und
CORBA/IIOP (optional) - Benötigtes JDK Version 1.2
23EJB-Überblick
- EJB - Spezifikation 2.0
- Bean-Typen SB, EB, Message-Driven Beans
- Aufruf von Funktionen synchron und asynchron
- Deployment-Deskriptor XML-konforme Datei
- lokale Ausprägungen des Home/Remote-Interface
- Kommunikationsprotokoll Java-RMI/IIOP
CORBA/IIOP - Datenbank-Mapping EJB QL (Persistenz-Managers)
- Relationen zwischen EJBs
- Benötigtes JDK Version 1.3.x
24EJB-Überblick
- EJB - Spezifikation 2.1
- erste Entwurfsversion war am 19. Juni 2002
verfügbar - Primäre Erweiterung - Web Service Unterstützung
- Web Services APIs (JAX-RPC and JAXM)
- Stateless Session Beans und Message Driven Beans
als Web Service - Erweiterungen der EJB-QL
- MDB-Erweiterung um JMS (weite MOM-Unterstützung)
- Steuerung des Nachrichtenaustausch zwischen EJBs
- Time/Event-Service
25EJB-Überblick
- EJB - Spezifikation 3.0 auffallende Änderungen
- Verwendung von Java-Annotationen
- Reduktion der benötigten Klassen und Interfaces
- Vermeidung redundanter Konfigurationen
- Beziehungen zur Umgebung bzw. JNDI festlegen
- Veränderung des Deployment-Vorganges
- Deployment-Discriptoren sind optional
- Vordefinierte Wertbelegungen für
Konfigurationsparameter - Konfiguration ggf. vorhandener Ausnahmen
- Beibehaltung der 3 EJB-Typen
- Home-Interface entfällt bei den Session Beans
- EntityBeans sind einfache Java-Klassen (POJO)
- JPA Java Persistence Architecture
26EJB-Überblick
- Bestandteile einer EJB (Fokus EJB Version 2.1)
- Component Interface nach außen sichtbare
Funktionalität - Local Interface
- Remote Interface (via RMI Mechanismus)
- Home Interface Steuerung des Lebenszyklus
- Local Home Interface
- Remote Home Interface (via RMI Mechanismus)
- Bean-Klasse fachliche Funktionalität
(Interface-Implementierung) - Bean-Kontext Identität der EJB (vgl.
Primärschlüssel) - Deployment Descriptor
27EJB-Überblick
28EJB-Überblick
- EJB-Typen (Session-Beans)
- Stateless Session-Beans (javax.ejb.SessionBean)
- genau dem Client zugeordnet von dem dieses
instanziert wurde - nach Herunterfahren des Server nicht mehr
vorhanden - ist keine Referenz mehr vorhanden erfolgt eine
Löschen - Stateful Session-Beans
- Verwaltung von Zuständen durch Handle-Mechanismus
- Speicherung der Zustände möglich, z.B. bei
TA-Sicherung notwendig
29EJB-Überblick
- EJB-Typen (Entity-Beans)
- Entity-Beans (javax.ejb.EntityBean)
- Repräsentiert ein Geschäftsobjekt
- Persistenzeigenschaften (zumeist Abbildung auf
RDBMS) - Eindeutige Identifizierung über Primärschlüssel
ist zwingend - Wiederherstellung der Bean zu einem späteren
Zeitpunkt - Persistenzmechanismen des Containers - CMP
- Persistenzmechanismen vom Bean verwaltet - BMP
30EJB-Überblick
- EJB-Typen (Message-Driven-Beans)
- Message Driven beans (javax.ejb.MessageDrivenBean)
- asynchrone Nachrichtenbehandlung (messaging)
- Interface javax.ejb.MessageDrivenBean wird
ebenfalls implementiert - Lebenszyklusverwaltung (create, remove, context)
- onMessage (Verarbeitung eingehender Nachrichten)
- Java Message Service (JMS)
- API zur Kodierung der zu sendenden/empfangenden
Nachrichten - Service Provider Interface (JMS-Treiber für
spezifische MOM-Impl.) - zwei Kommunikationsmodelle (Pub/Sub und PTP)
31Aufbau/Struktur von EJB-Komponenten
32EJB-Struktur
- Interner Aufbau einer EJB-Komponente
- Besteht aus mindestens 3 Java-Klassen und dem
Deployment-Deskriptor - Remote-Interface (bzw. die lokale Ausprägung ab
der EJB-Version 2.0) - Nutzung der EJB-Funktionalität über dieses
Interface - Home-Interface (bzw. die lokale Ausprägung ab der
EJB-Version 2.0) - Realisierung das Erzeugen, Auffinden und Löschen
des Beans - Bean-Implementierung
- Implementiert die im Remote-Interface
spezifizierten Methoden - XML - Deployment-Deskriptor (kurz DD)
- Informationen und Anpassungen zum betrachteten
Bean - Bem. Message Driven Beans besitzen weder Home-
noch Remote-Interface (sind Message Listener -
vgl. zustandslose Session Beans)
33EJB-Struktur
34EJB-Struktur
- Beispiel eines Home-Interfaces
- package example1import java.rmi.import
javax.ejb.public interface EuroCalcHome
extends EJBHome public EuroCalcRemote
create() throws CreateException,
RemoteException
35EJB-Struktur
- Beispiel eines Remote-Interfaces
- package example1import java.rmi.import
java.lang.import javax.ejb. - public interface EuroCalcRemote extends
javax.ejb.EJBObject // Umrechnung
Euro-Betrag in DM public double
euro_to_dm(double amount) throws
RemoteException - // Umrechnung DM-Betrag in Euro public
double dm_to_euro(double amount) throws
RemoteException
36EJB-Struktur
- Beispiel der EJB-Implementierung I
- import package example1import
java.rmi.import javax.ejb.import
javax.naming.public class EuroCalc implements
SessionBean private SessionContext
sessionContext - //Umrechnungskurs der DM zu einem Euro
double changerate 1.95583
37EJB-Struktur
- Beispiel der EJB-Implementierung II
- //Berechnung des Währungsbetrages in DM
public double euro_to_dm(double amount)
throws ArithmeticException double dm
0 dm amountchangerate
System.out.println(dm) return dm - //Berechnung des Währungsbetrages in Euro
public double dm_to_euro(double amount)
throws ArithmeticException double euro
0 euro amount/changerate
System.out.println(euro) return euro
38EJB-Struktur
- Beispiel der EJB-Implementierung III
- //Methoden zur Steuerung des Lebenzyklus des
EJB public void ejbCreate() - public void ejbRemove()
- public void ejbActivate()
- public void ejbPassivate()
- //Ermöglicht den Zugriff auf den Kontext des
EJB public void setSessionContext
(SessionContext context) sessionContext
context
39EJB-Struktur
- Aufgaben des Deployment-Deskriptor
- Auf der Basis des Deployment-Deskriptor soll
eine Anpassung entsprechender Attribute der EJBs
ermöglicht und ein Blackbox-Reuse unterstützt
werden. Der Deployment-Deskriptor kann als
Beipackzettel für ein EJB, oder einer aus
mehreren EJBs zusammengesetzten Applikation
betrachtet werden.
40EJB-Struktur
- Aufgaben des Deployment-Deskriptor kurz DD II
- Im DD konfigurierbare Eigenschaften (Attribute)
- Sicherheitsattribute
- Transaktionsattribute
- Umgebungsvariablen
- Verknüpfungen mit anderen Komponenten
- Verknüpfungen zu Datenquellen
- Struktur eines EJB-DD
- Struktur-Sektion (Basis- und Umgebungsinformatione
n) - Assemblierungs-Sektion (Zugriffsrechte,
Transaktionsattribute,...)
41EJB-Struktur
- Beispiel eines XML-Deployment-Descriptor
- lt?xml version"1.0"?gt
- lt!DOCTYPE ejb-jar PUBLIC '-//Sun Microsystems,
Inc.//DTD Enterprise JavaBeans 1.1//EN'
'http//java.sun.com/j2ee/dtds/ejb-jar_1_1.dtd'gt - ltejb-jargt
- ltdescriptiongtno descriptionlt/descriptiongt
- ltdisplay-namegtEjb1lt/display-namegt
- ltenterprise-beansgt
- ltsessiongt
- ltdisplay-namegtEuro Calculatorlt/display-name
gt - ltejb-namegtEuroCalclt/ejb-namegt
- lthomegtexample1.EuroCalcHomelt/homegt
- ltremotegtexample1.EuroCalcRemotelt/remotegt
- ltejb-classgtexample1.EuroCalclt/ejb-classgt
- ltsession-typegtStatelesslt/session-typegt
- lttransaction-typegtContainerlt/transaction-ty
pegt - lt/sessiongt
- lt/enterprise-beansgt
42EJB-Struktur
- Interaktionsreihenfolge Client/Server I
43EJB-Struktur
- Interaktionsreihenfolge Client/Server II
- Schritt 1 - Finden der Referenz zum Home Object
der benötigten Bean - Schritt 2 - EJB-Object Instanz erzeugen
- Schritt 3 - Rückgabe einer EJB-Object-Referenz
- Schritt 4 - Aufruf einer im EJB-Objekt
deklarieren Methode - Schritt 5 - Delegation des Methodenaufrufs
- Schritt 6/7 - Übergabe der Ergebnisse der
Methodenausführung
44EJB-Struktur
- Implementierung der Client-Anwendung 1
- public class EuroCalcClient
- Object object null
- EuroCalcHome home null
- EuroCalcRemote remote null
- public EuroCalcClient()
-
-
45EJB-Struktur
- Implementierung der Client-Anwendung 2
- public void getBean()
- try InitialContext ctx new
InitialContext()//JNDI, nachsehen ob die Bean
existiertobject ctx.lookup("EuroCalc")System
.out.println("object ctx.lookup, wurde
ausgefuehrt! \n")home (EuroCalcHome)PortableRe
moteObject.narrow (object,
EuroCalcHome.class)System.out.println("Zuweisung
nach home, erledigt! \n")
46EJB-Struktur
- Implementierung der Client-Anwendung 3
- remote home.create()System.out.println("Bean
Reference " remote "\n") - catch(Exception ex)System.out.println("Fehler
in getBean()! \n")ex.printStackTrace()
47EJB-Struktur
- Implementierung der Client-Anwendung 4
- public void umrechnung() try
remote.dm_to_euro(50000)
System.out.println("50000 DM sind "
remote.dm_to_euro(50000))
remote.euro_to_dm(50000)
System.out.println("50000 DM sind "
remote.euro_to_dm(50000)) catch
(Exception exc) exc.printStackTrace()
48EJB-Struktur
- Implementierung der Client-Anwendung 5
- public static void main(String args)
EuroCalcClient rechnerClient new
EuroCalcClient() rechnerClient.getBean()
rechnerClient.umrechnung()
49Vorbereitung des Deployment-Prozess
50Vorbereitung des Deployment
- J2EE-Referenzumgebung - Übersicht I
- Aufsetzen J2EE-komponentenbasierter Applikationen
- Erzeugen und Konfigurieren von EJB-Komponenten
- Erzeugen und Konfigurieren von Web-Komponenten
- Hinzufügen und Entfernen von JAR, WAR, EAR, RAR
- Auslösen der Installation (deployment) im
Container - Analyse der Komponenten auf J2EE-Konformität
- Installation entsprechender Client-Applikationen.
51Vorbereitung des Deployment
- J2EE-Referenzumgebung - Übersicht II
- Administrations Tool (Kommandozeile neu mit
Web-GUI) - Application Deployment Tool (Kommandozeile oder
GUI) - Key Tool (Kommandozeile)
- Realm Tool (Kommandozeile)
- Verifier (Kommandozeile oder GUI)
- Cleanup Script (Kommandozeile)
- Packager (Kommandozeile)
52Vorbereitung des Deployment
- J2EE-Referenzumgebung - Packager
- Enterprise Java Beans (jar-Files)
- Web Application (war-Files)
- Applikation Clients (jar-Files)
- J2EE Applikationen (ear-Files)
- Ressource Adapter (rar-Files)
53Vorbereitung des Deployment
54Vorbereitung des Deployment
- EJB-Wizard - Funktionsumfang
- Enterprise Festlegung des Namens der Java-Archive
und darin enthaltener Klassen und Interfaces - Definition des konkreten EJB-Typs (SB, EB, MDB)
- Festlegung potentieller Referenzen der
EJB-Komponente - Persistenz-, Security- und Transaktionseigenschaft
en - Festlegung von Umgebungsvariablen des EJBs
55Vorbereitung des Deployment
- Erzeugen eines JAR-Files innerhalb der
Applikation
56Vorbereitung des Deployment
57Vorbereitung des Deployment
- Transaktionseigenschaften
58Vorbereitung des Deployment
59Vorbereitung des Deployment
60Vorbereitung des Deployment
61Vorbereitung des Deployment
62Vorbereitung des Deployment
63Vorbereitung des Deployment
- Der generierte Deployment Desciptor
64Der eigentliche Deployment-Prozess
65Deployment/Installation
66Deployment/Installation
- Festlegung JNDI-Namen und Referenzen
67Deployment/Installation
- Bereitschaft zum Deployment-Vorgang
68Deployment/Installation
- Festlegung JNDI-Namen und Referenzen
69Deployment/Installation
70Installation derJ2EE-Referenzumgebung
71J2EE Referenzumgebung installieren
- Inhalte
- SUN Application Server
- PointBase-Datenbank
- J2EE Bibliotheken
- Bestandteile
- Web-Container
- EJB-Container
- Anforderungen
- 250 MByte HD Speicher
- 500 MByte Arbeitsspeicher
- Netzwerksintegration
- Windows 2000/XP o. UNIX
72J2EE Referenzumgebung installieren
73Lizenzvereinbarung J2EE
74J2EE Referenzumgebung installieren
75J2EE Referenzumgebung installieren
76J2EE Referenzumgebung installieren
77J2EE Referenzumgebung installieren
78J2EE Referenzumgebung installieren
79J2EE Referenzumgebung installieren
80Sun Java System Application Server Platform
Edition 8
81Informationen zum Application Server
82Verwendbare Tools
83Verwendbare Tools
- Starten und Stoppen
- Default Server (Standard)
- Samples Server (Beispiele)
- PointBase (Datenbank)
- Deploytool
- Komponenten erzeugen
- Komponenten installieren
- Komponenten verifizieren
- Weitere Tools
- Admin Console (2 mal)
- Online Dokumentation
- Deinstalltion J2EE
84Start des Application Server
85Test des Application Servers
86Das Deployment-Tool
- Session Bean
- Stateless Session Bean
- Bean-Klasse
- Name des EJB
- Beschreibung
- Ggf. verwendetes Icon
- JMS-Nutzung
87Das Deployment-Tool
- Entity Bean
- Bean-Klasse
- Name der PK-Klassen
- Remote Interface
- Security-Einstellungen
- Resource-Reference JDBC
- TA-Einstellungen hier CMP
88Das Deployment-Tool
- Message Driven Bean
- Bean-Klasse
- Name des EJB
- Keine Interface!
- Beschreibung
- Ggf. verwendetes Icon
- JMS-Nutzung
89Administration des Application Servers
90Administration des Application Servers