Enterprise Computing Prof. Dr.-Ing. Wilhelm G. Spruth Teil 12 Enterprise Java Beans Mainframe PC, Workstation Java 2 Editionen Embedded Devices, Klein- und Kleinstgeräte J2EE (1) Die Java 2 Enterprise Edition (J2EE) von Sun beinhaltet eine Spezifikation für Verteilte Geschäftsapplikationen. Darin ist neben den Komponenten der Geschäftsapplikation, den Enterprise JavaBeans (EJB), auch die Infrastruktur zu deren Ausführung spezifiziert. Die Infrastruktur beinhaltet Applikationsserver mit sogenannten Containern, in denen die EJB ausgeführt werden. Der Server beziehungsweise der Container interagiert mit den Unternehmenssystem-Ressourcen (z.B. Datenbank) und übernimmt auch die Interaktion mit verteilten Beans in anderen Servern und Maschinen. Weiterhin kontrolliert er die Ausführung von selbst definierten Transaktionen und handhabt Sicherheitseinstellungen. Eigenschaften einer EJBean und deren Anforderungen an die Ablaufumgebung (z.B. Sicherheit, Transaktionssteuerung) werden durch die Attribute eines „DeploymentDescriptors“ (Metadaten) deklarativ beschrieben. 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. J2EE (2) Die EJB Spezifikation legt fest: • • • • Regeln, denen eine EJBean entsprechen muß Funktionalität, die der Container über entsprechende Schnittstellen erbringt Art der Beschreibung einer EJBean für die Installation und für dieVerteilung Abbildung auf das CORBA IIOP Protokoll Eine EJB – Komponente verfügt über die Möglichkeit entfernter Zugriffe, z.B. auf ein RMI oder CORBA Objekt. Sie kann unter Nutzung von RMI oder RMI/IIOP als Remote – Objekt exportiert werden. Wie eine JavaBeans – Komponente hat sie Eigenschaften, die durch Introspektion untersucht werden können. Bei der Definition von Zugriffsmethoden verwendet sie JavaBeans – Konventionen. 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 Konfguratio ist der HTTP Server (Web Server) ist 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 JDBC (from a servlet) or EJB to access application databases 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 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 E S Session Bean (transientes Objekt) M Message-driven Bean E Entity Bean (persistentes Objekt) S S EJB Container (andere Bezeichnungen:Laufzeitumgebung, Framework, Object Transaction Monitor - OTM) Drei verschiedene Arten von EJBs • Entity Beans • Session Beans EJB Server (Web Application Server) • Message Beans • 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. • EJBs sind Komponenten, die auf dem Server ablaufende Geschäftslogik implementieren. Sie modellieren Geschäftsprozesse, wie z.B. eine Überweisung. 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. Bei der Persistenz werden den gespeicherten Daten alle Objektattribute (etwa Klassenname, Feldname und Zugriffs-Modifier) zugeordnet, so daß verhindert wird, daß die Daten versehentlich mit einem falschen Objekttyp abgelegt werden. Stateless und stateful Session Beans Es existieren zwei Arten von Session Beans: Stateless und Stateful. Session Beans speichern keine Daten persistent z.B. auf einem Plattenspeicher. Entity Beans speichern Daten persistent. Diese können sich entweder in einer Objektorientierten Datenbank oder einer relationalen Datenbank befinden. Stateless Session Beans Stateless Session Beans behalten keine Zustandsinformation von einem Aufruf zum nächsten. Man kann sie wie Funktionsaufrufe verstehen, die allein mit den übergebenen Parametern arbeiten. Zum Beispiel gibt man einen Wert und eine Währung an und erhält den Betrag in Euro. Sie haben keine Persistenz in der Datenbank und repräsentieren deshalb auch keine Datenbankdaten. Vielmehr stellen sie Geschäftsprozesse oder Abläufe dar, die auf Initiative eines Clients hin ausgeführt werden, der ihre Funktionen benutzt. Jeder Methodenaufruf ist hierbei unabhängig von anderen und vorangegangenen Methodenaufrufen. Aufgrund ihrer Zustandslosigkeit sind sie für den EJB Container relativ leicht zu handhaben und verbrauchen nicht viele Ressourcen. Stateful Session Beans Stateful Session Beans behalten einen Zustand von Aufruf zu Aufruf. Sie beziehen sich immer auf einen Clienten. Verschiedene Clients "sharen" niemals eine Session Bean. Damit der Container den „State„ einer Session Bean besser managen kann, wird ihm im Deployment Deskriptor der Bean mitgeteilt, ob es sich um eine stateless oder stateful Session Bean handelt. Bei einem Bestellvorgang werden, die zuvor selektieren Produkte in der Bestellung belassen. Beim Hinzufügen eines Artikels ein einen Warenkorb sind die vorher hinzugefügten weiterhin vorhanden. Session Beans werden entweder durch ein Time-out oder durch ein explizites Entfernen durch den Client zerstört. Bein Überschreiten eines bestimmten Zeitwerts löscht der Container die Session Bean. Ein Client muss sich darauf einstellen, das sein entferntes Interface nicht mehr gültig ist, weil der Container die Session Bean nach einer längeren Zeit der Inaktivität entfernt hat. Ein Client kann aber auch durch Aufrufen von remove() auf das entfernte EJBObject, die Session Bean entfernen. In jedem Fall wird die ejbRemove() der Session Bean vom Container vor der Zerstörung aufgerufen. Entity Beans Entity Beans repräsentieren für den Client eine objektorientierte Sicht auf einen Datensatz, .B. eine Zeile in einer Datenbank. Sie erlauben im Gegensatz zu Session Beans auch Mehrbenutzerbetrieb, das heißt, dass auf eine Instanz eines Entity Beans gleichzeitig mehrere Benutzer zugreifen können. 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. Für den Klienten ist der Container transparent, so dass keine zusätzlichen Schnittstellen existieren, die eine Manipulation des Containers ermöglichen würden. 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. Je nachdem, zu welchem Zweck Entity Beans entwickelt worden sind, unterscheidet man auch bei ihnen zwischen zwei verschiedenen Arten: • Container managed Persistence (CMP) Entity EJB • Bean managed Persistence (BMP) Entity EJB Container und Bean managed Persistence Bei Container managed Persistence EJBs wird die Persistenz der repräsentierten Daten von dem Container, in den die EJB eingebettet ist, garantiert. Der Entwickler braucht sich bei der Erstellung dieser Art von Entity Beans also nicht darum zu kümmern, wie die Daten des Entity Beans gesichert werden. Der Container kann z.B. zum lesenden und schreibenden Zugriff auf eine relationale Datenbank eigenständig SQL – Code generieren und ausführen. Der Entwickler muss somit nur festlegen, welche Daten er von den anzusprechenden Datenbanken im Entity Bean repräsentieren möchte und verknüpft diese dann mit der Bean – Klasse. Bei Bean managed Persistence EJBs ist es Aufgabe des Entwicklers, sich um die Art und Weise zu kümmern, wie die Daten des Entity Beans gesichert werden. in der Praxis können aber Situationen auftauchen, z.B. bei einer Datenbankanfrage mittels Join, in denen man mit BMP EJBs durch „handoptimierte„ SQL-Statements eventuell Leistungsverbesserungen erzielen kann. Joins über mehrere Datenbanken mit mehreren Tabellen sind mit CMP EJBs gar nicht oder nur schwer realisierbar, weswegen man auch hier meist BMP EJBs verwendet. Letztendlich kann der Entwickler bei BMP Entity Beans auch das Objektmodell freier gestalten, er ist hier nicht so sehr an das Datenbankschema gebunden wie bei CMP Entity Beans. Container Managed Persistence (CMP) Das Ziel ist, dass der Entwickler das Datenbankschema nicht kennen muss, sondern dass durch CMP ein Mapping zwischen dem abstrakten und dem physischen Schema vollzogen wird. Die Steuerung der Persistenz soll durch den Server erfolgen. Vom Beanentwickler müssen lediglich die Objekteigenschaften angegeben werden, die gesichert werden sollen. Um Entity Beans persistent zu machen, sieht dieses Konzept die Deklaration sämtlicher Attribute im Deployment Deskriptor vor. Weiterhin muss das objektrelationale Mapping, also die Abbildung zwischen den Attributen und den Datenbankstrukturen, im Deployment Deskriptor angegeben werden. Der Server ist somit in der Lage, selbständig die benötigte Datenbanktabelle zu erzeugen bzw. Eintragungen innerhalb dieser vorzunehmen. Auch bei Änderungen von Attributen einer Entity Bean werden die Daten vom Server automatisch in der Tabelle gespeichert. Bei einer Suchanfrage kommt ebenfalls der Server zum Einsatz. Hierzu verfügt jeder Server über ein Generatorwerkzeug, welches in der Lage ist, aus dem Deployment Deskriptor Code zu erzeugen, der die genannte Funktionalität bietet. Der Beanentwickler muss keinen Programmcode verfassen, die mit dem Datenbankzugriff zusammenhängt. Dies reduziert den Entwicklungsaufwand beträchtlich. Außerdem ergibt sich aus der Abhängigkeit von CMP Entity Beans von einem Generator ein weiterer Vorteil. Man ist unabhängig von der darunter liegenden Persistenzschicht, was zu einer sehr hohen Portierbarkeit führt. Eine verbesserte Wartbarkeit ist dadurch gegeben, dass Änderungen am Namensschema bzw. an den Attributen einer Bean konsistent durch den Generator berücksichtigt werden. Auch die Fehleranfälligkeit ist vergleichsweise gering, woraus folgt, dass der generierte Code nicht so intensiv getestet werden muss, wie selbst geschriebener Quelltext. Bean managed Persistence EJB Bei Bean managed Persistence EJBs ist es Aufgabe des Entwicklers, sich um die Art und Weise zu kümmern, wie die Daten des Entity Beans gesichert werden. Dies mag auf den ersten Blick ein Nachteil sein, in der Praxis können aber Situationen auftauchen, z.B. bei einer Datenbankanfrage mittels Join, in denen man mit BMP EJBs durch „handoptimierte„ SQL-Statements eventuell Leistungsverbesserungen erzielen kann. Joins über mehrere Datenbanken mit mehreren Tabellen sind mit CMP EJBs gar nicht oder nur schwer realisierbar, weswegen man auch hier meist BMP EJBs verwendet. Letztendlich kann der Entwickler bei BMP Entity Beans auch das Objektmodell freier gestalten, er ist hier nicht so sehr an das Datenbankschema gebunden wie bei CMP Entity Beans. 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. Lösungsansatz : „Java Data Objects“ (JDO) an Stelle der Entity Beans. JDOs sind reguläre Java Klassen, die über einen Persistence Encapsulation Mechanismus verfügen. Weitere Alternative: „Konnektoren“ sind Java Klassen, die einen Zugriff auf CICS, Oracle, DB2 ermöglichen. Message Based Queuing (MBQ) Message oriented Middleware (MOM) 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. MOM existiert 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 eine Java-spezifische MOM; Er 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. Die sendende EJB 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 The most visible difference between message-driven beans and session and entity beans is that clients do not access message-driven beans through interfaces. 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. Components of the JMS Server Message listener service An MDB (message-driven bean ) knows that a message has arrived at a specific destination through the use of an MDB listener, which in turn is part of the message listener service (also called a JMS server) provided by a Java Web Application Server (e.g. WebSphere). The message listener service manages an MDB's runtime configuration, which includes listener ports and listener settings, and also manages the MDB listener state. A listener manager controls and monitors one or more JMS listeners, each of which monitors a JMS destination. Listener ports A listener port is a component of the Web Application Server that monitors a JMS destination, looks for messages, and is managed by the message listener service. MDBs are bound to a specific listener port. When a message arrives at the destination that the listener port is monitoring, the message is taken off the destination (e.g. a receiving queue) by the message listener service and delivered to the appropriate MDB (message-driven bean). Message Driven Bean Alle Instanzen eines MDB – Typs sind gleich, da sie nicht direkt für den Client sichtbar sind und keine Zustände annehmen. Daraus resultiert die Möglichkeit für den Container, Pools aus MDB – Instanzen zu bilden, um Skalierbarkeit zu erzeugen. Message Driven Beans (MDB) Eine Message Driven Bean ist eine zustandslose Komponente, die von javax.jms.Message gesteuert wird. Wie die Session und Entity Beans sind auch MDB serverseitig und transaktionssicher. Eine MDB wird vom EJB – Container, in dem sie sich befindet, immer dann aufgerufen, wenn dieser eine Nachricht aus einer JMS Queue (oder einem JMS Topic) erhalten hat. Damit erfüllt eine MDB die Aufgabe eines Message Listeners. Es ist für in einem Applicationserver befindliche MDB von zweitrangiger Bedeutung, wer Absender einer Nachricht ist. Das kann ein Java Client, eine Enterprise Bean, eine JSP – Komponente oder aber auch eine Anwendung, die selbst nicht auf J2EE aufbaut, sein. Der allgemeine Client sendet die Nachricht zum EJB – Server, ohne sich der einzelnen vorhandenen MDB im Container bewusst zu sein. Der Grund für die mangelnde Sicht auf einzelne MDB ist das Fehlen von Home und Remote Interfaces bei diesem Beantyp. Eine MDB ist vom Typ her eine zustandslose Session Bean. Das bedeutet, dass man es mit relativ kurzlebigen Instanzen der MDB zu tun hat, die sich keinen Client merken können. Durch die Einführung der MDB wird der EJB – Container zu einem Listener für asynchrone Aufrufe und ruft direkt (ohne Interfaces) die MDB auf, die sich dann wie eine zustandslose Session Bean verhält. EJB Schnittstellen Die „EJB Object“ Schnittstelle (remote, lokal) empfängt alle Methodenaufrufe. 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, your Enterprise Java Bean will need a remote client view in cases when you plan to use the bean 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. Installing (Deploying) a newly developed Application within a CICS Server CICS is a production server. New applications are developed outside the CICS Server. If you want to develop a new CICS application, you first develop it on a development Server (an IDE, “Integrated Development Environment”, for example Eclipse), then test it on a separate test system, and the install (deploy) it on the CICS production Server. When you install a new application on a CICS production Server, you first “define” it to CICS, using one or several define commands.. This assures that CICS can find the new application whenever it is called. Subsequently you “install” it, which involves copying the new code (and related information) into the CICS address space. Installing (Deploying) a newly developed Application within a Web Application Server Just like CICS, a Web Application Server is a production server. New applications are developed outside the Web Application Server. The equivalent of the CICS “define” command is the Java EJB “Deployment Descriptor”. The equivalent of the CICS install command is called “deployment”. Emterprise Bean remote Interface Home Interface Implementation Deployment Descriptor Beispiele für Parameter: 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 Beans, • 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 Bean – Code zu finden sind. Dies sind vor allem Informationen über die Struktur der Bean und ihrer Abhängigkeiten zu anderen Beans oder Ressourcen wie z. B. einer Datenbankverbindung. Außerdem können im Deployment Deskriptor Umgebungsvariablen gesetzt werden, die von der Bean ausgelesen werden können und somit ihr Verhalten beeinflussen. Dies führt zu einer höheren Flexibilität, da dieselbe Bean in verschiedenen Umgebungen eingesetzt werden kann und nur der Deployment Deskriptor angepasst werden muss. Werkzeuge: Erstellen, Test, Deploy, Manage Aufgabenaufteilung JTS JDBC JNDI IIOP Enterprise Java Bean Container Session Beans, Entity Beans EJB Container Interface Servlet Container Native HTTP Server plug-in HTTP Server Apache, IIS, Netscape, Lotus Struktur eines Web Application Servers Der Web Server (http Server) betreut statische HTML Seiten, CGI und proprietäre Plug-ins Der Servlet Container ist die Laufzeitumgebung für Java Servlet Anforderungen und dynamische Seitenanforderungen (JSP) Die Servlets und JSPsbehandeln HTTP Anforderungen, verwaltet HTTP Sessions mit dem Klienten, erzeugt Presentation Logic via HTML, bewältigt nichttransaktionale (Business) Anwendungen Session und Entity Beans bewältigen (Business Logic) Anwendungen mit transaktionaler Integrität Web Server – HTTP Server The Apache HTTP Server is a web server notable for playing a key role in the initial growth of the World Wide Web and in 2009 became the first web server to surpass the 100 million web site milestone. Apache was the first viable alternative to the Netscape Communications Corporation web server, currently known as Sun Java System Web Server. Apache is developed and maintained by an open community of developers under the auspices of the Apache Software Foundation. Internet Information Services (IIS) - formerly called Internet Information Server - is a set of Internet-based services for servers created by Microsoft for use with Microsoft Windows. It is the world's second most popular web server in terms of overall websites behind the industry leader Apache HTTP Server. IBM HTTP Server (IHS) is a web server based on the Apache Software Foundation's Apache HTTP Server that runs on AIX, HP-UX, Linux, Solaris, Windows NT, and z/OS. It is available for download and use free of charge. The HTTP server is also included in the IBM WebSphere Application Server distribution packages. The Lotus Domino server provides enterprise-grade e-mail, collaboration capabilities, and a custom application platform. Its core services include: • Email server (supporting Lotus Notes, POP3, IMAP, web browser and Outlook clients and SMTP support) • Applications server (the Lotus Notes client provides the runtime) • Web server (Lotus Notes data or other surfaced via a web browser) • Database server (Notes Storage Facility) • Directory server (LDAP) Die Namen Web Server und HTTP Server hatten ursprünglich die gleiche Bedeutung. Heute sind die Begriffe Web Server und http Server zweideutig, weil man teilweise hierunter einen HTTP Server mit integriertem Servlet Container versteht. Auch der Servlet Container wird häufig als Web Container bezeichnet. Plug-in code The WebSphere HTTP Server plug-in is code that runs inside various Web servers: IBM HTTP Server, Apache, IIS, others. Requests are passed over to the plug-in, where they are handled based on a configuration file. The plug-in is code supplied with WebSphere. As workload comes into the HTTP Server, directives in the HTTP Server's configuration file (httpd.conf) are used to make a decision: is the incoming work request something the HTTP Server handles, or is it something that is to be passed over the plug-in itself. Once inside the plug-in, the logic that acts upon the request is determined by the plug-in's configuration file, not the HTTP Server's. That configuration file is by default called the plugin-cfg.xml file. Information on which of the supported application servers the request is to go to, is defined in this file. This file is something that is created by the WebSphere Application Server and mostly doesn't need modifying. In general, plug-ins provide functionality extensions for HTTP Server. There are many different plug-ins that can be configured to assist in customization of your Web environment. Another popular plug-in is the Lightweight Directory Access Protocol Server (LDAP) used for security authentication. HTTP Server plugin • This plugin is usually a .dll or .so file • It is included in the webserver's configuration file as a plugin (Service statement on z/OS) • It usually has it's own configuration, located in a file (or some other location). • It runs just like an API application in the HTTP server. • Performs some very specific functions for the Application Server, as an example 1. Load balancing across multiple App Servers, 2. Enforcing Server affinity, 3. Routing requests based on an URL. The z/OS HTTP Server has many facilities, which extend the functions of a basic Web server application server (WAS). One of these functions is the Plug-in interface of the z/OS HTTP Server. This allows one of several products to interface with HTTP Server. Here, for example, are some ways in which HTTP Server can pass control to WebSphere; • WebSphere plug-in, same address space • Web container (Servlet Container) inside HTTP Server, separate EJB container • Separate J2EE server with both Web container and EJB container WebSphere plug-in, same address space Address space Address space This figure shows a simple configuration in which no J2EE server is needed. This servlet can connect to CICS or IMS, or to DB2 through JDBC. However, coding business logic inside servlets is not recommended. Address space Address space Address space Servlet container inside HTTP Server, separate EJB container The figure above shows a more usable configuration in which the servlets run in a different address space than the EJBs, so the EJBs are invoked from remote calls using the RMI/IIOP protocol. The EJBs frequently then get information from other servers, for example CICS. Address space Address space Address space Separate J2EE server with both Web container and EJB container In addition to running your servlets locally within the WebSphere plug-in, you can also use the WebSphere plug-in to run servlets remotely in a Web container, as shown above. This allows you to localize your servlets and EJBs to the same z/OS address space, so that no remote EJB calls (using the RMI/IIOP protocol) are required. WebSphere includes a Web Component (the Web or Servlet Container and an EJB Component (EJB Container). Not shown is the HTTP Server (Web Server). Web-Application Server Schnitstellen zur Außenwelt Not shown is the HTTP Server (Web Server). Java Archive (jar) The jar tool combines multiple Java files into a single JAR archive file. jar is a general-purpose archiving and compression tool, based on ZIP and the ZLIB compression format. Compression reduces bandwidth when downloading an applet. However, jar was designed mainly to facilitate the packaging of java applications into a single archive. ejb – jar – Datei jar is a general-purpose archiving and compression tool, based on ZIP and the ZLIB compression format. Compression reduces bandwidth when downloading an applet. However, jar was designed mainly to facilitate the packaging of java applications into a single archive. Files with a .jar extension or JAR files, are essentially just a collection of files. Eine ejb – jar – Datei ist das standardmäßige Verpackungsformat für Enterprise JavaBeans. Dabei handelt es sich um eine normale Java – ARchivdatei (JAR), die mit Hilfe des Hilfsprogramms jar erzeugt werden kann. Sie enthält aber spezielle Dateien, die alle jene Informationen zur Verfügung stellen, die ein EJB – Container zur Inbetriebnahme der in der JAR – Datei enthaltenen Beans benötigt. In einer ejb – jar – Datei gibt es zwei Arten von Inhalten: • Die Klassendateien aller Beans einschließlich ihrer Home – und Client – Interfaces sowie die Bean – Implementationen. Darüber hinaus können auch containergenerierte Klassen enthalten sein.(beispielsweise konkrete Implementierungen der Home – und Client – Interfaces ). • die Deployment Deskriptor – Dateien. Als Minimum muss eine ejb – jar – Datei, eine standardmäßige ejb – jar.xml – Datei enthalten sein. Die kompilierten Java – Klassen, aus denen die EJBs bestehen, befinden sich in packagespezifischen Verzeichnissen innerhalb der ejb – jar – Datei, genau wie es bei normalen JAR – Dateien der Fall ist. Der Deployment Deskriptor, mit dem die EJBs beschrieben und konfiguriert werden, muss in der ejb – jar – Archivdatei unter META-INF/ejb-jar.xml zu finden sein. Web Archiv (WAR) The war file contains the web application that can be deployed on the any servlet/jsp container. The .war file contains jsp, html, javascript and other files for necessary for the development of web applications. Eine WAR – Datei (Web ARchiv) dient standardmäßig dazu, Web – Anwendungen zu verpacken. In einer WAR – Datei gibt es drei Arten von Inhalten: • Die Klassendateien aller Servlets, die Bestandteil der Webanwendung sind. Diese sind unter dem Verzeichnis WEB-INF/classes in einer package – spezifischen Verzeichnisstruktur zu finden. • Die statischen HTML – Seiten, welche für das Ausführen der Webanwendung nötig sind. Es ist aber auch möglich, JSP – Seiten, als dynamische Generierung von Response – Seiten zu verwenden. Diese Dokumente befinden sich innerhalb der WAR – Datei in einer Verzeichnisstruktur. Zum Beispiel könnten alle Bilder im Verzeichnis images abgelegt sein, während die index.html im context – root des Archivs liegt. • Die Deployment Deskriptor – Dateien. Der Deployment Deskriptor eines Web – Archives ist, wie auch schon der ejb – jar – Deskriptor, eine XML – Datei, welche eine Beschreibung der Anwendung, die Namen und die Parameter der Servlets zur Laufzeit, sowie sessionrelevante Einstellungen enthält. Als Minimum muss eine standardmäßige web.xml – Datei enthalten sein, welche im Verzeichnis WEB-INF zu finden ist. Wie bei den Java Archiven ist es auch hier möglich, das noch weitere Deskriptoren, je nach Art des Produktes und des Herstellers, in dem Web – Archiv Verwendung finden. Außerdem werden auch Sicherheitsaspekte, wie zum Beispiel der Loginmechanismus einer Anwendung definiert. web.xml Der Deployment Deskriptor eines Web – Archives ist, wie auch schon der ejb – jar – Deskriptor, eine XML – Datei, welche eine Beschreibung der Anwendung, die Namen und die Parameter der Servlets zur Laufzeit, sowie sessionrelevante Einstellungen enthält. Außerdem werden auch Sicherheitsaspekte, wie zum Beispiel der Log-in-mechanismus einer Anwendung definiert. EAR – Archive Zusammenspiel von WAR, JAR und EAR Eine J2EE Anwendung besteht aus Web – und EJB – Komponenten. Beide Arten von Komponenten sind in Archiven verpackt, Verhalten und Eigenschaften sind in Deployment Deskriptoren (DD) definiert. Alle Komponenten einer Anwendung sind in einem EAR (Enterprise Application Ressource) zusammengestellt. Eine vollständige Anwendung kann durch Installation eines EAR – Files auf einen anderen Application Server verteilt werden und sollte sich dort wie erforderlich konfigurieren lassen. DD Deployment Descriptor Die Application.xml – Datei ist eine XML – Datei, welche nur die Namen der Enterprise – Anwendung und deren Bestandteile enthält. Tag Library : see below WebSphere Application Server for z/OS Unter z/OS besteht ein WebSphere Application Server (WAS) aus einem Controller und mehreren Servants. Controller und Servant besitzen jeder eine eigene JVM, in der jeweils ein Servlet Container und ein EJB Container laufen. Servant Controller Servant Servant WebSphere Application Server (WAS) Controller und Servant laufen in unterschiedlichen virtuellen Adressenräumen; der Controller läuft mit Speicherschutzschlüssel 2 und im Kernel Status. Die Servants laufen mit Speicherschutzschlüssel 8 im User Status. Normalerweise eine (oder wenige) Anwendungen in einem Servant. Basic WebSphere Runtime Structure on z/OS A WebSpere Application Server (WAS) Servant houses Servlets, EJBs. and other Java classes. Queues managed by the Workload Manager (WLM) are used to distribute incoming messages to multiple Servants. Each servant runs in its own z/OS region. In the WebSphere Application Server for z/OS environment, the classification of each transaction is managed by a control region. This is a sepatate process running in its own virtual address space. The control region acts as a queuing manager that queues work requests to workload management for execution in server address spaces. HTTP Protocol Catcher In general, an “HTTP Protocol Catcher” is any program which communicates on the TCP/IP network using requests formatted in HTTP protocol. A protocol catcher understands the HTTP protocol and is capable of interpreting from the request format what the target of the request is. When WebSphere for z/OS is active on the same system, a protocol catcher can be used to route appropriate requests to WebSphere for z/OS web applications for processing. In WebSphere for z/OS, the primary protocol catcher is known as the HTTP Internal Transport. See (2) in the Figure above. This WebSphere component is configured to run in the Controller (CR) address space of a J2EE application server. The Internal Transport component will listen for incoming protocol requests using selected ports on the TCP/IP stack. When a request is received, the Internal Transport validates that the request can execute in this server. Provided the request is valid, the Internal Transport routes the request for execution to the web container in this server. The other supported HTTP protocol catcher on z/OS is the IBM HTTP server, which uses port 80 as a default.. See (1) in the Figure above. The HTTP server listens for incoming HTTP requests from remote clients on the network. You can activate the WebSphere HTTP Plug-in component in the HTTP server address space. The plug-in can be configured to filter HTTP requests received by the HTTP server and direct requests to run WebSphere web applications to the Internal Transport function of the appropriate J2EE application server. The plug-in uses HTTP protocol to re-direct the Web request to the WebSphere for z/OS Internal Transport. The J2EE Internal Transport validates the incoming request and then schedules the request to run in the web container of the application server. It is worth stressing here that once the request has reached the web container, the web application is scheduled in the same way, irrespective of the way in which the request was “caught”. So the web application does not need to be aware of the route by which the request arrived, although it can find this out if it is important. The HTTP Internal Transport is a component that executes in the CR address space of a z/OS J2EE application server. The Internal Transport will bind to two selected TCP/IP port addresses, which are configured by the WebSphere for z/OS V administrator, and listen for incoming requests. When an HTTP request is received, the Internal Transport checks the URL of the web container definition in the application server configuration to see if it matches a web application supported by this J2EE server. If this request is supported, the HTTP handler schedules the associated web application in the web container; if not, the request is failed. Basic WebSphere Runtime Structure on z/OS • • • • • • • The basic execution environment for WebSphere on z/OS is a server. A server is a Controller/Servant configuration, In WebSphere z/OS a region is a virtual address space For every Controller there are one or more Servant Regions The Controller is the protocol entry point. Multiple protocols are supported: HTTP(S) and IIOP. The Servant Region is where the J2EE components execute, with a WLM Queue between them • There can be multiple servers on a single z/OS system (image). WebSphere Application Server for z/OS Organization based on concepts: • Servers • Nodes (and Node Agents): a logical grouping of WebSphere-managed servers • Cells: a grouping of Nodes z/OS and Work Load Manager To balance work on the system, WebSphere uses the services of the WorkLoad Manager (WLM) provided by z/OS and z/OS. Three distinct WLM services are employed by WebSphere: 1. Routing The WLM routing service is used to direct clients to servers on a specific z/OS server, based on a measurement of current system utilization known as the performance index. 2. Queuing and address space management The WLM queuing service is used to dispatch work requests from the Websphere Application Server for z/OS Control Region to one or more Websphere Application Server for z/OS Server Regions. It is possible for a Work Manager to register with WLM as a “queueing manager” (e.g., Websphere Application Server for z/OS Control Region is a Queue Manager). This tells WLM that this server would like to use WLM-managed queues to direct work to other servers, which allows WLM to manage server spaces to achieve the specified performance goals established for the work. 3. Prioritizing work to meet performance goals WebSphere delegates the responsibility for starting and stopping Server Regions to the WLM Address Space management service. This allows WLM to manage application server instances in order to achieve the performance goals specified by the business. WebSphere Scalability under z/OS Scalability is a problem with most Unix, Linux and Windows implementations. The following figures represent the results of a WebSpere scalability test under z/OS The test was performed with five z990 Systems, with 16 CPUs each, and an additional z990 with 4 CPUs configured as a coupling facility. Trader Benchmark z/OS uses for many tests a standard client/server benchmark called the Trader application. This benchmark has been repeatedly updated over the years and is now available in versionTrade V6.1. Shown above is the Topologie of the Trade V6.1 Benchmark. CPUs WebSphere Scalability for the Trader benchmark, single System These are the benchmark results. for a single system with 8 CPUs. 18 585 WebSphere Scalability for the Trader benchmark, five Systems A single system with 16 CPUs is able to handle 3 717 Trader transactions/s. The theoretical maximum for 5 systems is 5 x 3717 tx/s = 18 585 tx/s. The actual measured throughput is 15 947 tx/s, or 15 947 / 18 585 = 86 % of the theoretical maximum. The Java Management Extensions (JMX) technology represents a universal, open technology for management, and monitoring Animation in F:\qrx\2005-2008\websphere\wasv6_architecture Neue Dienste IMS/DB Client/Server Aufgabenstellung DB2 WAS CICS Internet Servlet EJB Tuxedo Presentation Glue SAP • Browser orientierter Web Zugang • Datenhaltung in existierenden Datenbanken • Dominierender Anteil der Business Logik in existierenden Transaktionsprogrammen und/oder Stored Procedures • Neue Software (z.B. EJBs) stellen Querverbindungen zwischen existierenden Komponenten her (Glue) • System Management - TCO Browser IMS/DC Unternehmens-Architektur Die Anpassung existierender Transaktionsmonitor- oder Stored Procedure Anwendungen an das Internet erfolgt über einen vorgeschalteten Web Application Server, z.B. WebSphere. EJBs übernehmen nicht die Aufgaben existierender transaktionaler Mainframe Anwendungen, sondern ergänzen diese. Zusätzlich werden mit EJBs neue Dienste implementiert, besonders dann, wenn nur mäßige Anforderungen bezüglich Transaktionssicherheit und Zuverlässigkeit bestehen. Die persistente Datenspeicherung erfolgt beispielsweise über DB2.