Softwareentwicklung mit Enterprise JAVA Beans

Ähnliche Dokumente
J2EEKurs. Enterprise JavaBeans Einführung. Peter Thiemann. Sommercampus J2EEKurs, Freiburg, Germany, Universität Freiburg, Germany

Softwareentwicklung mit Enterprise JAVA Beans

Enterprise Java Beans

Softwareentwicklung mit Enterprise JAVA Beans

Der lokale und verteilte Fall

Anwendung eines Enterprise Java Beans

Session Beans & Servlet Integration. Ralf Gitzel ralf_gitzel@hotmail.de

Entwicklung von Web-Anwendungen auf JAVA EE Basis

EJB Beispiel. JEE Vorlesung 10. Ralf Gitzel

Client/Server-Programmierung WS2007/08. EJB/JSP: Schritt-für-Schritt Anleitung

Warum EJB Technologie (1)?

Themen. Web Service - Clients. Kommunikation zw. Web Services

EJB jar.xml und Name Service (JNDI)

ORACLE Business Components for Java (BC4J) Marco Grawunder

11. Enterprise Java Beans Grundlagen der Programmierung II (Java)

Erstellung eines Frameworks für Shop Systeme im Internet auf Basis von Java

Programmieren in Java

Java Reflection. Meta-Programmierung mit der java.lang.reflection API. Prof. Dr. Nikolaus Wulff

Software Engineering. Zur Architektur der Applikation Data Repository. Franz-Josef Elmer, Universität Basel, HS 2015

Remote Method Invocation

Enterprise Java Beans Einführung

SE2-10-Entwurfsmuster-2 15

Enterprise Java Beans (EJB)

Eclipse Equinox als Basis für Smart Client Anwendungen. Christian Campo, compeople AG, Java Forum Stuttgart 2007

Java: Vererbung. Teil 3: super()

3 Objektorientierte Konzepte in Java

Fujitsu BeanConnect TM V3.0 Software 0 FUJITSU LIMITED 2013

SEP 114. Design by Contract

3. Stored Procedures und PL/SQL

Java Enterprise Architekturen Willkommen in der Realität

WebService in Java SE und EE

JSP Grundlagen. JEE Vorlesung Teil 5. Ralf Gitzel

OP-LOG

Programmierkurs Java

Konfigurationslanleitung für J2EE und Eclipse im KBS-Pool

Online Banking System

EJB3.0 Unit-Testing Reloaded

Verhindert, dass eine Methode überschrieben wird. public final int holekontostand() {...} public final class Girokonto extends Konto {...

Prof. Dr. Uwe Schmidt. 21. August Aufgaben zur Klausur Objektorientierte Programmierung im SS 2007 (IA 252)

Analyse und praktischer Vergleich von neuen Access- Layer-Technologien in modernen Webanwendungen unter Java. Oliver Kalz

Einführung in die Java- Programmierung

Haben Sie schon einmal aus einem ScreenCobol Requestor ein Java Programm aufgerufen?

Anleitung. Ein einfaches RMI-Beispiel. (ab Java 5.0) c Y. Pfeifer. (Juni 2014)

Objektorientierte Programmierung

Problemstellung. Informatik B - Objektorientierte Programmierung in Java. Vorlesung 24: Reflection 1. IDE und automatische Tests.

Übungen zu Softwaretechnik

Workshop Java Webentwicklung Einführung in Hibernate. Ulrich Stärk

Innovator 11 classix. Enterprise JavaBeans (EJB) für JBuilder. Connect. Alexander Borschet.

Die Programmiersprache Java. Dr. Wolfgang Süß Thorsten Schlachter

Mobile und Verteilte Datenbanken

Einführung in die objektorientierte Programmierung mit Java. Klausur am 19. Oktober 2005

How-to: Webserver NAT. Securepoint Security System Version 2007nx

Innere Klassen in Java

Abteilung Informatik, JFC/Swing 2004 Diego Schmidlin V2.2

Java Einführung Umsetzung von Beziehungen zwischen Klassen. Kapitel 7

Übung: Verwendung von Java-Threads

Assoziation und Aggregation

Etablierung serviceorientierter Architekturen mit Web Services

Objektorientierte Programmierung. Kapitel 12: Interfaces

Factory Method (Virtual Constructor)

Workshop Java Webentwicklung Tapestry. Ulrich Stärk

6. Java Java Beans und Enterprise Java Beans

Dieses Tutorial gibt eine Übersicht der Form Klassen von Struts, welche Besonderheiten und Unterschiede diese aufweisen.

Große Übung Praktische Informatik 1

Internet und WWW Übungen

Java 2, Enterprise Edition Einführung und Überblick

Java RMI Remote Method Invocation

Java Einführung Packages

6.9 Java Server Pages

Anwendungshinweis Nr. 12. Wie konfiguriere ich redundante Serververbindungen

OERA OpenEdge Reference Architecture. Mike Fechner PUG Infotag 19. Mai 05 Frankfurt

Auszug aus JAX-WS Folien

seit Java 1.1 Bestandteil der API: packages java.sql, javax.sql

Database Exchange Manager. Infinqa IT Solutions GmbH, Berlin Stralauer Allee Berlin Tel.:+49(0) Fax.:+49(0)

Grundlagen von Python

SUB-ID- VERWALTUNG MIT GPP SETUP-GUIDE FÜR PUBLISHER

Java Database Connectivity (JDBC) Walther Rathenau Gewerbeschule 1

Einführung in die Java- Programmierung

Es wird das Struts <html:option> Element erläutert und anhand von kleinen Beispielen der Umgang veranschaulicht.

Musterlösung zur Vorlesung Modellbasierte Softwareentwicklung Wintersemester 2014/2015 Übungsblatt 9

Android Remote Desktop & WEB

IAC-Programmierung HELP.BCFESITSIACPROG. Release 4.6C

Enterprise java beans step-by-step

Virtual Private Network

Standardisiert aber flexibel

Einleitung. Funktion. Panzenböck Phillipp. Download Installation. Testen. Konfiguration

Prozessarchitektur einer Oracle-Instanz

Transkript:

Softwareentwicklung mit Enterprise JAVA Beans Enterprise JavaBeans Basics

Enterprise JavaBeans (EJB) Enterprise JavaBeans (EJB) Komponenten sind wohl definiert verteilt (MI-based) serverseitig Sie dienen der serverseitigen ealisierung der Applikationslogik auf der mittleren Ebene. Das Java Package javax.ejb.* enthält die Enterprise JavaBeans API. Enterprise Beans benutzen viele esourcen. Ein sorgfältiger Entwurf der J2EE Applikation ist unumgänglich. EJB2-2

EJB Komponenten W eb Browser Application HTML Pages HTTP W eb Server TCP IP Der EJB Container ist die Laufzeitumgebung der Enterprise Beans. Java Server Pages JSP & Servlet Engine JSP Processor Java Servlet Clients kommunizieren immer über den Container mit den Bohnen - nie direkt. Session Bean Message-driven Bean EJB Container Entity Bean JNDI Context J2EE Components EJB2-3

Enterprise Beans leben nur innerhalb EJB Container Der Container umhüllt die Bohnen unsichtbar für die Client- Anwendung: Er kontrolliert den "Life-Cycle" der Enterprise Bean Instanzen: Erzeugung / Löschung Aktivierung / Passivierung Concurrency Der Container kümmert sich um die geordnete Abwicklung paralleler Client Zugriffe. Verteilung über Prozesse und Server: Der Anwender braucht kein Wissen darüber, auf welchem Server sich seine Bohnen befinden. Er bietet Dienste über standardisierte Schnittstellen: Transaktionsverwaltung, Persistenz und Security-Management können vom EJB Container oder der Bohne selbst kontrolliert werden. Der Bean Entwickler kann sich auf die Business Logik konzentrieren. EJB2-4

EJB 1.1 Bean Typen Enterprise JavaBean Session Bean Entity Bean Stateless Session Bean Stateful Session Bean Containermanaged Persistence Bean-managed Persistence EJB2-5

EJB 2.0 Bean Typen Ab EJB 2.0 ein komplett neuer Bean Typ: die Message-Driven Bean (MDB). EJB2-6

Session Beans and Entity Beans Session Bean Entity Bean epräsentiert einen serverseitigen Dienst. Ist eine private esource für einen Client. Clients beeinflussen sich nicht. Ist flüchtig epräsentiert ein Business Objekt. Daten werden permanent gespeichert. Ist eine zentrale esource, die von mehreren Clients zur gleichenzeit zugrgriffen werden kann. Ist persistent : Lebt so lange, wie die zugehörigen Daten in der DB existieren. EJB2-7

Session Beans repräsentiert typischerweise die Logik eines Geschäftsprozesses Z.B.: Banktransaktion, Bericht Erstellung,... serverseitige Erweiterung eines Client-Programms. kann auch mit persistenten Daten arbeiten: kann: Verwendung von Entity Beans Implementierung eigener Persistenzmechanismen Z.B. durch Verwendung von JDBC, JDO oder JPA: bean-managed persistence Transaktionsverwaltung dem EJB Container überlassen: container-managed transaction demarcation Transaktionen selbst innerhalb der Implementierung der Bohne verwalten: bean-managed transaction demarcation EJB2-8

Entity Beans 1 Objektorientierte epräsentation eines persistenten Business Objektes. Beispiele: Ein Entity, das in einer relationalen DB gespeichert ist Ein Entity, das von einem Legacy-System verwaltet wird. Zur Verwaltung der persistenten Daten: persistent attributes primary key methods providing access to attributes. Ermöglicht parallelen, transaktionssicheren Zugriff auf persistente Daten. Sie sollten nur sehr wenig Geschäftsprozesslogik enthalten. EJB2-9

Entity Beans 2 Entity Beans können: einen automatischen Persistenzmechanismus des EJB Containers verwenden: container-managed persistence oder ihren eigenen Persistenzmechanismus implementieren: bean-managed persistence Entity Beans müssen das Transaktionshandling immer dem EJB Container überlassen: container-managed transaction demarcation EJB2-10

Entwicklung einer Enterprise Bean 1 Sie sind (MI-basierte) Objekte unter der Kontrolle des EJB Containers Der Bean Provider erzeugt: Java Schnittstellen: home interface remote interface Java Klassen: bean class (implementing bean s methods) primary key class (for entity beans, optional) Deployment Descriptor: ein XML File: ejb-jar.xml es enthält Metadaten über die Bean Alle Bestandteile kommen in ein EJB JA Archiv EJB2-11

Entwicklung einer Enterprise Bean 2 Zum Deploy-Zeitpunkt generiert der EJB Container: EJBHome Klasse Die Implementierung des Home Interfaces EJBObject Klasse Die Implementierung des emote Interfaces Der Deployment Descriptor Liefert dem EJB Container die notwendigen Infos zur Erzeugung der EJBHome- und der EJBObject Klasse EJB2-12

Entwicklung einer Enterprise Bean 3 Eine Enterprise Bean zur Laufzeit: an EJBHome class instance: EJBHome object an EJBObject class instance: EJBObject object a bean class instance: bean instance (entity beans only): primary key class instance Der Client kann nur auf die Client Stub-Implementierung zugreifen Auf die Instanzen der Bean-Klasse hat nur der EJB-Container Zugriff EJB2-13

Bestandteile einer Enterprise Bean «Interface» EnterpriseBean «Interface» Session/EntityBean «Interface» EJBObject «Interface» EJBHome Bean Class «Interface» emote Interface «Interface» Home Interface «XML file» Deployment Descriptor EJB Spec (package javax.ejb) Provided by the Developer EJBObject Object EJBHome Object Generated at Deployment by the EJB Container EJB2-14

Beziehung Bean Instanz und EJB-Client (source: SUN Microsystems) Methodenaufrufe des Clients sind MI Calls MI Overhead unvermeidlich! In EJB1.1 könne auch alle anderen Clients der Bean (z.b. andere Beans, Web Komponenten ) nur über MI mit dieser kommunizieren. Ab EJB 2.0: Local Interfaces EJB2-15

Das EJB-Client File Eine Client-Anwendung benötigt ein spezielles Client-File mit den Stub-Implementierungen. Für jede Anwendung, die deployed wurde, gibt es ein zugehöriges ejb-client Archiv für den Client. Das ejb-client Archiv muss auf der Client-Seite installiert werden, um die Beans zugreifen zu können. EJB2-16

Home Interface Das Home Interface erweitert das Interface javax.ejb.ejbhome Darin befinden sich die Klassenmethoden - d.h. die Methoden, die nicht auf eine einzelne Instanz angewandt werden Erzeugungs- und Suchoperationen Namenskonventionen create find<method> (nur für Entity Beans) Eigenschaften java.rmi.emoteexception MI-IIOP egeln befolgen - d.h. für alle eturn- and Parameterwerte: Java primitive types (int, double, byte,...) Alle Klassen, die java.io.serializable implementieren EJB2-17

Ein einfaches Home Interface package demo; import java.rmi.*; import javax.ejb.*; public interface DemoHome extends EJBHome { public Demo create() throws emoteexception, CreateException; } EJB2-18

Home Interface und EJBHome Objekt Die EJBHome Klasse wird zum Deploy- Zeitpunkt generiert. Sie implementiert: Home Interface Methoden (definiert durch den Bean Provider) javax.ejb.ejbhome Interface Methoden Die Instanziierung erfolgt zur Laufzeit: Es gibt genau eine EJBHome Instanz für jede Enterprise Bean Klasse. «Interface» EJBHome «Interface» Home Interface EJBHome Object «XML File» Deployment Descriptor Clients benutzen das EJBHome Objekt Zum Erzeugen (create) und Suchen (find) von Bean Objekten J2EE Spec Developer Generated by the EJB Container EJB2-19

Das emote Interface Das emote Interface erweitert das Interface javax.ejb.ejbobject Darin werden vom Bean Provider Business Methoden deklariert, die die Bean ihren Clients anbietet. Alle Methoden müssen den MI-IIOP egeln folgen und eine java.rmi.emoteexception deklarieren. package demo; import java.rmi.*; import javax.ejb.*; public interface Demo extends EJBObject { /* Deklaration der Business-Methoden */ public String tuwas(string arg) throws emoteexception; } EJB2-20

emote Interface und EJBObject Objekt Die EJBObject Klasse wird zum Deploy-Zeitpunkt generiert. Sie implementiert: emote Interface Methoden (definiert durch den Bean Provider) javax.ejb.ejbobject Interface Methoden «Interface» EJBObject «Interface» emote Interface «XML File» Deployment Descriptor Zur Laufzeit verbindet der EJB Container jeweils eine zugehörige EJBObject Instanz mit jedem Client. "EJBObject Object" Diese Instanz dient dem Client als Proxy für die Bean. EJBObject Object J2EE Spec Developer Generated by the EJB Container EJB2-21

Client Sicht einer Session (Entity) Bean (source: SUN Microsystems) Eine EJBHome Instanz für jeden installierten ("deployten") Enterprise Bean Type. Viele EJBObject Instanzen als Proxy für die jeweiligen Enterprise Bean Instanzen. EJB2-22

Die Bean Klasse 1 Abhängig von der Bean-Art wird eines der beiden Interfaces implementiert: javax.ejb.sessionbean (session bean) javax.ejb.entitybean (entity bean) Beide erweitern javax.ejb.enterprisebean «Interface» EnterpriseBean «Interface» «Interface» EntityBean SessionBean SessionBean- und EntityBean Interfaces enthalten sogenannte: container callback methods (Container-Callbacks). Zur Laufzeit ruft der EJB Container die Container-Callbacks auf den Bean Instanzen auf Der Bean Provider sollte dafür passende Implementierungen liefern. Entity Bean Class Session Bean Class EJB2-23 J2EE Spec Developer

Das Interface javax.ejb.sessionbean Zu bestimmten Zeiten ruft der EJB Container die Methoden des Interfaces javax.ejb.sessionbean auf der Instanz auf. EJB2-24

Das Interface javax.ejb.entitybean EJB2-25

Die Bean Klasse 2 Der Bean Provider liefert Implementierungen für: Benutzerdefinierte Methoden im Home und emote Interface Eigene Attribute und zusätzliche interne (helper) Methoden können auch eingeführt werden. Die Container-Callbacks aus javax.ejb.sessionbean oder javax.ejb.entitybean Keine Vererbungshierarchie! EJB2-26

Die Bean Klasse - Beispiel package demo; import javax.ejb.*; public class DemoBean implements SessionBean { /* Implementierung der Business-Methoden */ public String tuwas(string arg) {... } /* Container Callback Methoden des Home-Interfaces */ public void ejbcreate() {}; /* Container Callback Methoden von SessionBean */ public void ejbemove() {}; public void ejbactivate() {}; public void ejbpassivate() {}; public void setsessioncontext (SessionContext sc){}; } EJB2-27

Aufruf von Enterprise Bean Methoden Clients greifen nie direkt auf die Bean zu. Der Zugriff erfolgt immer über Proxy-Objekte: EJBObject und EJBHome Objekte Für den Client sind nur die Methoden der EJBHome- und EJBObject Instanzen verfügbar! Der EJB Container regelt alle Angelegenheit, die Persistenz, Transaktionen, Security der Bean betreffen. Beispiel: Dazu ruft der Container die passenden Callback-Methoden auf. Auf Client Seite wird die Business Methode sayhello() auf einer EJBObject Instanz aufgerufen. Die zugehörige ("matching") Methode sayhello() auf der zugehörigen Instanz der Bean Klasse wird auf dem Server ausgeführt. EJB2-28

Methoden: Home Interface und Bean-Klasse Jede create Methode im Home Interface wird in der Bean- Klasse implementiert : ejbcreate Methode mit der gleichen Argumentliste ejbpostcreate Methode mit der gleichen Argumentliste (Nur Entity Beans) Jede find<method> Methode im Home Interface wird in der Bean-Klasse implementiert : ejbfind<method> Methode mit der gleichen Argumentliste (Nur Entity Beans) Die throws-klausel der Bean-Klassen Methoden enthält die gleichen Exceptions wie die throws-klausel der entsprechenden Home Interface Methode Zusätzlich wird java.rmi.emoteexception im Home Interface deklariert. EJB2-29

Matching Methods: emote Interface und Bean-Klasse Die Methoden im emote Interface und in der Bean-Klasse entsprechen sich: Die Signatur muss übereinstimmen Name, Argumentliste, ückgabetyp Die throws-klausel der Bean-Klassen Methoden enthält alle Exceptions wie die throws-klausel der entsprechenden emote Interface Methode Zusätzlich wird java.rmi.emoteexception im emote Interface deklariert. EJB2-30

esource Management Instance Pooling Caller Nicht alle Bean-Instanzen werden gleichzeitig benötigt. invoke business method EJB Object (Customer 4711) Take from Pool and initialize Der EJB Container kann einen Pool leerer Bean- Instanzen vorhalten. Eine neue Anforderung einer Instanz wird aus dem Pool bedient. Customer 4711 Used Beans Customer (empty) Bean Pool EJB Container Pooling Beans EJB2-31

esource Management Aktivierung / Passivierung Caller Passivierung Auslagern nicht benötigter Beans auf Sekundärspeicher. EJB Object (Bean 1111) Aktivierung Eine leere Bean wird mit einem zuvor serialisierten Zustand aktiviert. invoke business method Bean 1111 Used Beans Initialize Swap In /Out Bean 4711 Bean 1111 Swap Space (HardDisk) Für Client-Anwendungen ist dies völlig transparent Beim Zugriff einer passivierten Bean wird diese vom EJB Container automatisch aktiviert EJB Container Pooling Beans EJB2-32

Der Deployment Deskriptor Beschreibung der Struktur und des Verhaltens der Bean Als wohldefinierte XML-Files Bestandteile: bean name, names of beanùs components class files security issues, persistence mechanism, transactional behaviour references to other beans, data sources, other resources used... Ermöglicht Anpassung und Wiederverwendung einer Bean ohne Änderungen im Source Code! Standard Deployment Deskriptor für EJB Komponenten: ejb-jar.xml Im META-INF Unterverzeichnis des jar-archivs der Bean EJB2-33

Beispiel für ejb-jar.xml <ejb-jar> <enterprise-beans> <session> <ejb-name>sessionejb</ejb-name> <home>sqlueb.model.sessionejbhome</home> <remote>sqlueb.model.sessionejb</remote> <ejb-class>sqlueb.model.sessionejbbean</ejb-class> <session-type>stateless</session-type> <transaction-type>container</transaction-type> <ejb-local-ref> <ejb-ref-name>ejb/local/personal</ejb-ref-name> <ejb-ref-type>entity</ejb-ref-type> <local-home>sqlueb.model.personallocalhome</local-home> <local>sqlueb.model.personallocal</local> <ejb-link>personal</ejb-link> </ejb-local-ref> </session> </enterprise-beans> <assembly-descriptor> <container-transaction> <method> <ejb-name>sessionejb</ejb-name> <method-name>*</method-name> </method> <trans-attribute>equired</trans-attribute> </container-transaction> </assembly-descriptor> </ejb-jar> Zuständig: Bean Provider Zuständig: Application Assembler Änderungen durch: Bean Provider Application Assembler Der EJB Container benutzt diese Informationen zur Deploy-Zeit und zur Laufzeit EJB2-34

Zugriff auf Enterprise Beans Der Einstieg erfolgt immer über eine Server-spezifische JNDI Context Implementierung Interface javax.naming.context Über den JNDI Context können EJBHome Objekte gefunden werden. Durch den Aufruf einer create-methode auf dem EJBHome Objekt erhält man eine eferenz auf die zugehörige EJBObject Instanz. Diese Instanz ist mit einer Bean Instanz auf dem Server verbunden. Jetzt kann die Anwendung Business Methoden auf dem EJBObject aufrufen. EJB2-35

Beispiel: emote Client Implementierung public static void main(string [] args) { try { // Zugriff auf den JNDI-Kontext: Hashtable env = new Hashtable(); env.put(context.initial_context_factoy, initialcontextfactory); env.put(context.secuity_pincipal, user); env.put(context.secuity_cedentials, password); env.put(context.povide_ul, host_url); Context ctx = new InitialContext(env); // Zugriff auf das Home Interface (MI/IIOP-konform) Object ref = ctx.lookup("personal"); PersonalHome personalhome = (PersonalHome)PortableemoteObject. narrow(ref, PersonalHome.class); // Beispiel für Aufruf einer Business-Methode Collection coll = personalhome.findbynname("duck"); Iterator iter = coll.iterator(); while (iter.hasnext()) { Personal personal = (Personal)iter.next(); //... } } catch (Throwable ex) { System.err.println ("Fehler aufgetreten: ", ex); ex.printstacktrace(); } } EJB2-36

emote Object Communication Basics TCP / IP GetAge() GetName() Network Comm Network Comm GetAge() GetName() GetAge() GetName() Person Stub Person Skeleton Stub Person Instance Client Side Server Side Auf dem Client: Für jede emote Instanz, muss ein sogenannter Stub (Proxy) existieren. Beim Aufruf einer Methode auf dem Stub: EJB: EJBObject parts EJB: bean class instance Übertragung der Parameter zum Server und Aufruf der korrespondierenden Methoden auf dem Skeleton. Das Skeleton ist ein Server-side Proxy für das emote Object. Empfängt den Aufruf und führt die Methode auf dem richtigen Objekt aus. EJB2-37

Erstellen einer einfachen Stateless Session Bean Anwendung Entwickeln der SessionBean Komponenten: Java class: home interface (declare the create() method) Java class: remote interface (declare business methods) Java class: bean class (implement business methods) XML file: deployment descriptor (security, transaction settings) Zusammenpacken der EJB Komponenten: Bearbeiten des deployment deskriptors: Server-spezifische Informationen angeben (database connections, security mappings, ) Deployen des EA Files auf dem J2EE Server. Erzeugen der ejb-client Library auf dem Server und mit dem Projekt linken ejb-jar File generieren Erzeugen des Enterprise Archis (EA) Implementierung der emote Client Klasse Test der Applikation EJB2-38

Übung Schreiben Sie eine einfache "Stateless Session Bean" Diese implementiert genau eine "Business Methode" sayhello(string text) Diese Methode hängt den Präfix Hello an den übergebenen String. Schreiben Sie eine emote Client Klasse und testen Sie die Applikation! EJB2-39