Enterprise Computing Prof. Dr.-Ing. Wilhelm G. Spruth WS 2010/11 Teil 10 Enterprise Java Beans WEB Browser HTML Enterprise Java Bean(s) SQL JDBC (oder andere) WEB Browser WEB Server Servlet JSP WEB Browser WEB Application Server Datenbank Server Dynamischer WEB Seiten Inhalt (3) Im einfachsten Fall enthält das Java Servlet die Anwendungslogik. In komplexeren Fällen lohnt es sich, die Anwendung in Komponentenform zu implementieren. Java Beans implementieren das Java Komponentenmodell. Enterprise Java Beans sind Java Beans mit zusätzlicher Funktionalität, besonders Transaktionseigenschaften (ACID), Persistenz und Sicherheit. Mainframe PC, Workstation Java 2 Editionen Embedded Devices, Klein- und Kleinstgeräte J2EE (1) Die Java Platform, Enterprise Edition, abgekürzt Java EE oder früher J2EE, ist die Spezifikation einer Softwarearchitektur für die transaktionsbasierte Ausführung von in Java programmierten verteilten Geschäftsanwendungen und insbesondere Web-Anwendungen. Darin ist spezifiert: • Enterprise JavaBeans (EJB), die Komponenten der Geschäftsanwendungen, • Infrastruktur zur Ausführung von EJBs. Die Infrastruktur beinhaltet Web-Applikationsserver mit sogenannten Containern, in denen die EJBs ausgeführt werden. Der Server beziehungsweise der Container • • • • interagiert mit den Unternehmenssystem-Ressourcen (z.B. Datenbank) übernimmt die Interaktion mit verteilten Beans in anderen Servern und Maschinen. kontrolliert die Ausführung von selbst definierten Transaktionen handhabt Sicherheitseinstellungen. Client Klassen rufen EJB Methoden direct auf, wenn in der gleichen JVM. Wenn nicht, Remote Method Invocation (RMI). HTML Web Server Servlets JSPs EJBs SQL HTTP Server Servlet Container EJB Container Backend Java Application Server Browser Web Application Server Bevorzugte Struktur eines Web Application Servers Datenbank Server In dieser Konfguration ist der HTTP Server (Web Server) lediglich ein Zusatz und gehört nicht unbedingt zum Lieferumfang eines Web Application Servers. Servlet Container und EJB Container laufen in einer gemeinsamen Java virtuellen Maschine (JVM). Dies reduziert den Kommunikationsaufwand. Servlet Klassen können EJB Klassen direkt aufrufen. Bei getrennten JVMs erfolgt die entsprechende Kommunikation mit Hilfe eines RMI Protokolls (JRMP oder RMI/IIOP). Der Web Application Server enthält weitere Elemente für Administration und Datenbankzugriff. Typical application flow for Web browser clients using either a servlet or an EJB to access an application database. Der Servlet Container wird häufig auch als Web Container bezeichnet. The typical application flow is as follows: 1. A Web client requests a URL in the browser (input page). 2. The request is routed to the Web server over the Internet. 3. The Web server immediately passes the request to the Web server plug-in. All requests go to the Web server plug-in first. 4. The Web server plug-in examines the URL, verifies the list of host name aliases from which it will accept traffic based on the virtual host information, and chooses a server to handle the request. 5. A stream is created. A stream is a connection to the Web container. It is possible to maintain a connection (stream) over a number of requests. The Web container receives the request and, based on the URL, dispatches it to the proper servlet. 6. If the servlet class is not loaded, the dynamic class loader loads the servlet (servlet init(), then doGet()or doPost()). 7. JNDI is used for lookup of either datasources or EJBs required by the servlet. 8. Depending upon whether a datasource is specified or an EJB is requested, the JNDI directs the servlet: – To the corresponding database and gets a connection from its connection pool in the case of a data source. – To the corresponding EJB container, which then instantiates the EJB when an EJB is requested. 9. If the EJB request involves an SQL transaction, it goes back to the JNDI to look up the datasource. 10.The SQL statement is executed and the retrieved data is sent back either to the servlet or to the EJB. 11.Data beans are created and handed off to JSPs in the case of EJBs. 12.The servlet sends data to JSPs. 13.The JSP generates the HTML that is sent back through the plug-in to the Web server. 14.The Web server sends the output page (output HTML) to the browser. F\:redbooksWebSp\\WebSp13,pdf http Server Apache Microsoft IIS Lotus …….. Java Application Server Websphere Weblogic Netweaver Geronimo http Server – Web Application Server Interconnection Enterprise Java Beans (EJB) EJB EJB EJB EJB EJB EJB EJB EJB Container (andere Bezeichnungen:Laufzeitumgebung, Framework, Object Transaction Monitor - OTM) EJB Dienste JTS JIDL JNDI JMS JMAPI JDBC Enterprise Java Beans sind Java Beans mit erweiterter Funktionalität. Diese wird von dem EJB Container zur Verfügung gestellt und enthält unter anderem • JTS Java Transaction Service • JNDI Java Naming directory Interface • JMS Java Messaging Servics • JDBC Java Data Base Connectivity • JMAPI Java Management API • JIDL Java Interface Definition Language Enterprise Java Beans (EJB) Enterprise Java Beans sind Java Beans mit erweiterter Funktionalität. Dies sind unter anderem: • JTS, Transaction Service, an API for invoking transaction services. • JNDI, Java Naming and Directory Interface, an API for accessing naming and directory services. • JMS, Java Message Service, an API for invoking asynchronous message delivery services. • JDBC, Java Database Connectivity API, accesses data in existing databases through a common interface. • JMAPI, Java Management API, which defines access to a set of services for managing Java resources. • JIDL, Java interface definition language, an interface to the CORBA set of services for distributed computing. E M S M E Drei verschiedene Arten von EJBs E S S • Entity Beans EJB Container (andere Bezeichnungen:Laufzeitumgebung, Framework, Object Transaction Monitor - OTM) EJB Server (Web Application Server) • Session Beans • Message Beans S Session Bean (transientes Objekt) M E Message-driven Bean Entity Bean (persistentes Objekt) • EJBs sind Komponenten, die auf dem Server ablaufende Geschäftslogik implementieren. Sie modellieren Geschäftsprozesse, wie z.B. eine Überweisung. • EJBs sind Komponenten, die eine objektorientierte Sicht auf persistent gespeicherte Entitäten, also eindeutig identifizierbare und über Attribute beschreibare Informationseinheiten, repräsentieren. Diese Entitäten sind beispielsweise in einer Datenbank gespeichert. Handelt es sich dabei um eine relationale Datenbank, so korrespondieren Entity Beans z.B. mit einer Zeile der entsprechenden Datenbanktabelle. Entity Beans modellieren Geschäftskonzepte, bei-spielsweise ein Konto. Persistenz Die permanente Speicherung eines Objektes auf einem Plattenspeicher wird als Persistenz bezeichnet. Moderne RAID Technologien und Backup Strategien stellen sicher, dass Daten auch Fehlerfälle intakt überstehen. Konzeptuell können Objekte in einer Objektdatenbank (z.B. POET oder Jasmine) gespeichert werden.In der Praxis werden SQL (oder IMS, ADABAS oder VSAM) Daten als Objekte gekapselt; der Zugriff erfolgt z.B. über eine JDBC (Java Data Base Connectivity), SQLJ oder DB2Connect Schnittstelle. Persistente Objekte existieren permanent außerhalb des Gültigkeitsbereichs des Programms, das sie erzeugt hat. Persistenz wird implementiert, indem der Status (die Attribute) eines Objekts zwischen den einzelnen Programmausführungen gespeichert wird. Wenn das Objekt erneut benötigt wird, wird es aus seiner gespeicherten Form wieder hergestellt. Der Herstellungsprozeß erzeugt ein neues Objekt, das mit dem ursprünglichen identisch ist. Session Bean Man unterscheidet zustandslose (stateless) und zustandsbehaftete (stateful) Session Beans. Eine zustandsbehaftete Session Bean hat ein eigenes Gedächtnis. Sie kann Informationen aus einem Methodenaufruf speichern, damit sie bei einem späteren Aufruf einer anderen (oder der gleichen) Methode wieder zur Verfügung stehen. Die Zustandsbehaftung wird durch die Vergabe einer eindeutigen ID umgesetzt, über diese ID können die zustandsbehafteten (stateful) Session Beans unterschieden werden. Im Gegensatz dazu müssen einer zustandslosen Session Bean bei jedem Aufruf alle Informationen als Parameter übergeben werden, die für die Abarbeitung dieses Aufrufs benötigt werden. Da eine zustandslose Session Bean keine Informationen speichern kann, ist sie nicht von anderen Session Beans der gleichen Klasse unterscheidbar, sie hat also keine eigene Identität. Entity Beans Entity Beans repräsentieren für den Client eine objektorientierte Sicht auf einen Datensatz, z.B. eine Zeile in einer Datenbank. Sie erlauben im Gegensatz zu Session Beans auch Mehrbenutzerbetrieb: Auf eine Instanz eines Entity Beans können gleichzeitig mehrere Benutzer zugreifen. Der Container, in den Entity Beans während der gesamten Lebensdauer eingebettet sind, stellt dazu entsprechende Mechanismen bereit, um z.B. Sicherheit, Transaktionskonsistenz und Parallelität sicherzustellen. Da Entity Beans nicht an einen einzelnen Client gebunden sind, endet ihre Lebensdauer nicht nach dem Beenden einer Client - Verbindung. Im Gegensatz zu Session Beans können bzw. müssen sie sogar nach einem Systemausfall automatisch wiederhergestellt werden, da in der Regel ihre Existenz an das Vorhandensein der mit ihnen verbundenen Daten gebunden ist. Das heißt, die Erstellung einer Instanz eines Entity Beans erzeugt z.B. automatisch eine neue Zeile in einer Datenbank und fügt die bei der Erstellung mit übergebenen Daten des erstellten Datensatzes der Datenbank hinzu. Wird die Instanz entfernt, wird automatisch der mit dieser Instanz verbundene Datensatz aus der Datenbank gelöscht. Entity Bean EJB Client ruft Methoden der Session Bean auf EJB Client Session Fassade EJB Architektur Session Bean Entity Bean Aufgabenteilung: • Session Beans enthalten die Business Logik Entity Bean • Entity Beans speichern Daten Session Beans: • führen Geschäftsprozesse (Business Logik) aus • manipulieren persistente Objekte (Daten), die als Entity Beans modelliert sind Probleme mit dem Session Fassade EJB Architektur Modell: • Entity Beans sind verteilte Objekte, die von beliebigen Klienten aufgerufen werden können • Entity Beans sind transaktionsfähig Beides ist bei einer Session Fassade unnötiger Overhead. Der EJB 3.0 Standard enthält die Java Persistence API als eine Alternative zu den Entity Beans. Entity Beans werden heute als „deprecated technology“ betrachtet. Weitere Alternative: „Konnektoren“ sind Java Klassen, die einen Zugriff auf CICS, Oracle, DB2 ermöglichen. Message Based Queuing (MBQ) 1 Solaris 2 3 Queue Queue A B 4 z/OS DB2 Queues are persistent. Eine Nachricht wird zunächst an eine lokale (persistente) Queue, von dort an eine entfernte Queue, und von dort an einen Empfänger (hier DB2) geleitet. Die Übertragung erfolgt transaktionssicher (ACID Bedingungen werden eingehalten). • Schritte 1 - 3 : Wenn erfolgreich, Antwort senden, sonst retransmit • Step 4: Wenn z/OS nach DB2 versagt: roll back nach Queue B, dann recover. MBQexistiert unabhängig von Java. IBM MQSeries ist Marktführer. Für praktisch alle Betriebssysteme verfügbar: AIX, DG/UX, HP-UX, Windows, OS/390, OS/400, Psion Pervasive SOD, Sequent, Sinix, Solaris, Tandem, TPF, TrueUnix, VMS/VAX. JMS Message Message Driven Bean Der J2EE Java Message Service (JMS) ist ein Java-spezifisches MBQ; es ermöglicht eine Nachrichtenübermittlung durch asynchrone Methodenaufrufe Eine Message Driven Bean (MDB) ist eine spezielle Art einer Enterprise Java Bean (EJB). Eine Message Driven Bean ist ein potentieller Empfänger eines derartigen asynchronen Methodenaufrufes. Dieser Methodenaufruf kann von einer beliebigen anderen Java Klasse ausgehen. Der Sender (z.B. eine remote EJB, oder aber auch ein nicht-Java Objekt) wartet nicht auf eine Antwort. Eine Message-driven Bean ist ein Bestandteil der Enterprise Java Bean 2.0 Specification. Eine MDB ist ein Java Message Service (JMS) „Message Consumer“, auf den ein Client nicht direkt zugreifen kann. JMS Server Message Driven Bean MDBs "listen" on a specific JMS destination, which usually is a queue. When a message arrives on the destination, that message is delivered to the MDB, which causes the bean's onMessage() method to be invoked. The onMessage() method can be viewed as the only interface to an MDB. An MDB (message-driven bean ) knows that a message has arrived at a specific destination through the use of an MDB listener, which is provided by a Java Web Application Server (e.g. WebSphere). EJB Schnittstellen Die „EJB Object“ Schnittstelle (remote, lokal) empfängt alle Methodenaufrufe (z.B. get, put, modify). Sie implementiert die Transaktions- Zustandsverwaltungs, Persistenz- und Sicherheitsdienste für die Bean je nach den Angaben des Deployment Descriptors. Eine EJB Object Schnittstelle ist enteder eine „Remote“, oder eine „Local“ Schnittstelle. EJB Object Deployment Descriptor Methoden Enterprise Bean Klient find create remove Environment EJB Home EJB Container „EJB Home“ dient der Identifizierung des Beans. Auf die EJB Home Schnittstelle kann mit JNDI zugegriffen werden. Sie implementiert alle Life-Cycle Dienste für die Bean. EJB Object Schnittstelle The Enterprise Java Bean (EJB) 2.0 specification contains both a remote client view and a (new) local client view. Thus, session and entity beans can have a local home interface, and a local component interface, either with or instead of a remote home interface and a remote component interface (the latter is sometimes called "component interface", omitting the word "remote"). Local and remote interfaces. Which one to choose? Generally, an Enterprise Java Bean will need a remote client view if the bean is to be used in distributed environments. Specifically, these are the cases when the client that will be working with it will be in a different Java Virtual Machine (JVM). In the case of a remote client view, calling any method from the remote home interface and/or remote component interface will be handled via remote method invocation (RMI). An EJB can use local client view only if it is really guaranteed that other enterprise beans or clients will only address the bean within a single JVM. If this is the case, such access will be carried out with direct method calls, instead of RMI. Emterprise Bean remote Interface Home Interface Implementation Deployment Descriptor Beispiele für Parameter des Deployment Descriptors: EJB *.jar File EJB Container • • • • • Datenbank Name Verbindung zu Legacy Anwendungen JNDI Namensraum des Containers Transaktions-Semantik Umgebungseigenschaften Deployment Descriptor Der Deployment Descriptor legt die Laufzeit Parameter einer EJB fest Parameter können statisch zur Assembly Zeit oder dynamisch zur Laufzeit festgelegt werden Der Deployment Descriptor wird typischerweise durch den EJB Entwickler angelegt, kann aber durch einen Administrator mit Hilfe eines Tools abgeändert werden Deployment Descriptor Der Deployment Deskriptor ist eine Datei im XML – Format, die • eine oder mehrere EJBs, • deren Zusammenwirken und • die Art, wie der EJB – Container sie zur Laufzeit behandeln soll, beschreibt. Er enthält hauptsächlich deklarative Informationen, welche nicht im EJB – Code zu finden sind. Dies sind vor allem Informationen über die Struktur der EJB und ihrer Abhängigkeiten zu anderen EJBs oder Ressourcen wie z. B. einer Datenbankverbindung. Außerdem können im Deployment Deskriptor Umgebungsvariablen gesetzt werden, die von der EJB ausgelesen werden können und somit ihr Verhalten beeinflussen. Dies führt zu einer höheren Flexibilität, da dieselbe EJB in verschiedenen Umgebungen eingesetzt werden kann und nur der Deployment Deskriptor angepasst werden muss. Vergleich CICS – Enterprise Java Beans CICS EJB Definition Define Command Deployment Descriptor Installation Install Command Deploy Command Package Anwendungsprogramm Mapset TRID Group xxxx yyyy zzzz CICS Group JAR, WAR, EAR