Enterprise Computing

Werbung
Enterprise Computing
Prof. Dr.-Ing. Wilhelm G. Spruth
WS 2011/12
Teil 11
Web Application Server
Maschinensprache der Java Virtual Machine (JVM)
Parallele Ausführung
von Java Klassen in
der Form von Java
Threads
Java Virtual Machine
Betriebssystem
JVM ist ein Emulator für die Java Hardware Architektur. Der Maschinencode des Java
Prozessors wird als Byte Code bezeichnet.
Emulator
Auf einem Rechner mit der Hardware-Architektur x (Host) kann ein Rechner mit der
Hardware-Architektur y (Gast) emuliert werden.
Beispiele sind:
Hercules und pDT emulieren einen zSeries Rechner mit dem z/OS Betriebssystem auf
einem Intel/AMD Windows oder Linux Rechner.
Microsoft VirtualPC emuliert einen Intel/AMD Windows Rechner auf einem (älterem) Apple
MAC PowerPC Rechner.(Vorsicht, unter dem gleichen Namen gibt es ein weiteres aber
unabhängiges Microsoft Produkt, welches ähnlich wie VMWare arbeitet.
Bochs ist ein in C++ geschriebener Open Source Emulator, der die Intel/AMD Architektur
auf vielen anderen Plattformen emuliert.
Eine Java Virtual Machine wird heute fast immer durch eine Emulation auf einer Pentium,
PowerPC oder System z Plattform usw. implementiert. Im Gegensatz zu anderen
Emulatoren ist der Leistungsverlust bei der Emulation der JVM Architektur relativ klein, z.B.
Faktor 3 im Vergleich zu einem Faktor 15 bei der Emulation der System z Architektur auf
einem Intel Processor.
Java Source Code
System z Object Code
System z Hardware
Byte Code
JVM
Unter z/OS ist die Ausführung sowohl als System zObject Code als auch als Byte Code möglich. In der
großen Mehrzahl der Fälle wird die Ausführung als Byte Code gewählt.
Browser
http Server
z.B. Apache
statische HTML Pages
Statische HTML Pages
Dynamische HTML Seite
Anderes Beispiel: www.google.de
<HTML>
<HEAD><TITLE> Login </TITLE> </HEAD>
<BODY>
<H2>Login to Secure Site</H2>
< FORM METHOD=POST
ACTION="http://abc.de/servlet/xyz.servlet" >
Username: <INPUT TYPE="TEXT" NAME="username"
SIZE="25"><BR>
Password: <INPUT TYPE="PASSWORD"
NAME="password" SIZE="25"><P>
<INPUT TYPE="SUBMIT" VALUE="Submit">
<INPUT TYPE="RESET" VALUE="Clear">
</FORM>
</BODY> </HTML>
HTML Forms
Der FORM Tag spezifiziert:
• Die zu benutzende HTTPMethode. Hier ist dies
POST; die Daten werden
innerhalb des Bodys der
Nachricht übertragen.
• Die Action. Dies ist
meistens die URL, es kann
aber auch die Action mit
ihrem Namen angegeben
werden.
• Der Typ der MIMEEnkodierung der Daten in
der FORM. Der Default ist
"application/x-www-formencoded".
HTTP
HTML
Web
Server
CGI
oder
Servlet
(WEB) Application Server
SQL
Datenbank
Browser
Dynamischer WEB Seiten Inhalt (1)
Alternativen:
• CGI
• Java Servlet.
HTML
WEB
Browser
WEB
Browser
JDBC
WEB
Server
Java
Servlet
SQL
WEB
Browser
(WEB) Application Server
Datenbank
Server
der HTML Code
<FORM METHOD=POST ACTION="/servlet/HelloWorld">
ruft ein Java Servlet mit dem Namen HelloWorld auf.
Dies setzt voraus:
(1) Der angesprochene Web Server unterstützt Servlets
(2) ein "Hello World" Servlet existiert in dem Directory, in dem der angesprochene
Webserver seine Servlets speichert.
Servlet Container
Servlets laufen in einer Servlet-spezifischen Laufzeitumgebung, die als Container oder
Servlet Engine bezeichnet wird. Diese verbessert u.a. die Servlet-Ausführungszeit und
stellen dem Programmierer vorgefertigte Strukturen zur Verfügung.
Servlet Container haben keine Transactions-, Persistence- und Sicherheitseigenschaften.
Ein Servlet Container ist eine Gruppe von Java Klassen, die Requests für Servlets und Java
Server Pages (JSP) behandelt. Der Servlet Container enthält Java Klassen mit Funktionen
für:
•
•
•
•
Erstellung von Servlet-Instanzen,
Initialisierung von Servlets,
Dispatching von Requests,
Verwaltung des Servlet-Kontextes für die Nutzung durch die Web-Anwendungen.
Eine Java Klasse erbt mit Hilfe von „extends HttpServlet“ die Servlet Eigenschaften.
public
class HalloWeltServlet extends HttpServlet
{
public final static String message = "<html>\n" +
"<head><title>Hallo Welt</title></head>\n" +
"<body>\n" +
"<h1>Hallo Welt</h1>\n" +
"</body></html>\n";
public void init()
{
System.out.println("In HalloWeltServlet init");
}
public void destroy()
{
System.out.println("In HalloWeltServlet destroy");
}
Beispiel:
HalloWeltServlet.java
Die Methode service ist für die
Bearbeitung des Servlet
Aufrufs zuständig.
public void service(ServletRequest req, ServletResponse res)
throws ServletException, IOException
{
PrintWriter out = res.getWriter();
out.println(message);
}
}
Java Server Pages (JSP)
Java Server Pages sind in der Java Programmiersprache geschrieben. Eine JSP ist in
Wirklichkeit eine andere Darstellungsform eines Servlets.
JSPs benutzen XML-artige Tags und Scriplets um die Logik zu kapseln, die den Inhalt der
Seite generiert.
Alternativ kann die Anwendungslogik woanders liegen, und die Java Server Page greift
hierauf mit den Tags und Scriplets zu.
Dies ermöglicht eine Trennung der Seiten-Logik vom Seitenentwurf und der
Seitenwiedergabe.
Einfache Java Server Page (1)
Java Server Pages sind im Aufbau vergleichbar mit HTML-Dokumenten. Sie bestehen
jedoch aus zwei Teilen, einem HTML – Text sowie beliebig vielen, darin eingebetteten
Anweisungen an den JSP – Server .
Den folgenden Text in einer Datei mit der .jsp extension im JSP directory speichern und mit
einem Browser ansehen:
<html>
<head>
<title>JSP Example </title>
</head>
<body>
Hello! The time is now <%= new java.util.Date() %>
</body> </html>
Die Zeichenfolgen <%= und %> schließen Java Epressions ein. Diese werden zur Run
Time ausgewertet. Bei jedem Reload der HTML Seite in den Browser wird die gültige Zeit
wiedergegeben. Normalerweise enthält ein JSP Programm eine komplexere
Präsentationslogik, z.B. in der Form eines Scriplets.
http://www.jsptut.com/
Web Server
Servlet Container
Interaktion Servlet JSP
Browser
Request
Servlet
Call Page
Response
Java
Server Page
Web Application
Server
In der Praxis ist es eher selten,
dass eine JSP direkt aufgerufen
wird.
In der Regel wird ein Servlet
aufgerufen, welches wiederum
eine JSP aufruft.
Web Application Server
Plattform für die Ausführung von
Java Servlets, Java Server Pages und EJBs
BEA Web Logic
IBM WebSphere
verfügbar auf allen Plattformen
Windows, Unix, Linux, z/OS
Deutlich mehr als die Hälfte aller in der Wirtschaft eingesetzten Web Application Server
verwenden die Firmen-eigenen Transaktionsmonitore: Tuxedo, CICS, SAP.
Der SAP Netweaver Web Application Server wird in der Regel in Verbindung mit SAP
Software Komponenten eingesetzt.
Die Microsoft DotNet Alternative ( .Net ) unterstützt kein Java.
Während Web Application Server ursprünglich nur Java Code verarbeiten konnten, werden
heute alle gängigen Programmiersprachen unterstützt, spezifisch also auch Cobol, PL/1
und C++ .
Web Application Server
Open Source Web Application Server sind:
• Tomcat (nur Servlets)
• Geronimo der Apache Foundation
• GlassFish (Sun)
Pseudo-Open Source :
• JBOSS (Red Hat)
JBOSS, Geronimo und GlassFish liegen bezüglich ihrer Funktionalität weit hinter
WebLogic, WebSphere oder Netweaver zurück.
Kompatibilität
Java Beans
Kleine Java-Programme (Klassen) mit festgelegten Konventionen für die Schnittstellen, die
eine Wiederverwendung in mehreren Anwendungen (Applikationen, Servlets und Applets)
ermöglichen.
Dafür gibt es ein eigenes Beans Development Kit BDK, das man zusätzlich zum JDK
installieren kann, und ein Package java.beans, das ab Version 1.1 im JDK enthalten ist,
JavaBeans sind ein Objektorientiertes Java Komponenten Modell - JavaBeans sind Java
binary parts. Sie werden häufig für visuelle Komponenten eingesetzt (etwa Buttons und
Scrollbalken)
Hauptmerkmale der Java Beans sind:
• Methoden
• Properties (Eigenschaften, z.B. Methoden wie get und set)
• Events (Ereignisse)
• Namens Konventionen
• Introspection (BeanInfo Klasse)
CICS
oder Java
Java
Presen- Business
tation
Logik
DatenbankProzeß
z.B. Oracle,
DB2
AnwendungsProzeß
PC
Registrierkasse
Geldausgabeautomat
Business- und Präsentationslogik
Browser
HTML
Page
(Form )
Web Application Server
Servlet prepare Bean
call
HTML
Page
(Ergebnis)
JSP
Bean
SQL
access Bean
Nutzung von Java Beans
Ein Servlet ist ein Java Programm, das Bildschirm Output in der Form einer HTML Datei
produziert.
Eine JAVA ServerPage ist eine HTML Seite mit zusätzlichen JSP Tags.
Wird eine JSP Seite aufgerufen, so kompiliert sie ein JSP Übersetzer in ein Servlet.
Servlet
Architektur einer JSP
Web Anwendung
Model - View - Controller Ansatz
1. HTML page: static or dynamic HTML page, created from a previous step, contains one or multiple forms that invoke a servlet for
processing of the next interaction.
2. Servlet gets control from the Application Server to perform validation and control of flow; sets up and calls command beans that
perform the business logic.
3. Command beans control the processing of the business logic; logic may be imbedded in the command bean, or it can be delegated to
back-end or enterprise systems, such as relational databases, transactions systems (CICS, MQSeries, IMS, and so forth); command bean
may perform one specific function or it may contain many methods, each for a specific task (task wrappers). Command beans invoke
database and transaction systems using „connectors“.
4. Results of command beans (or back-end systems) processing are stored in data beans. Data beans could contain an SQL result or a
CICS communication area.
5. View beans provide the contract between the output producing JSPs and the data beans that contain the dynamic data to be displayed
in the output; servlet initializes the view beans and registers them with the request block so that the JSPs can find them.
6. Servlet calls a JSP for output processing and formatting depending on the results of the command beans; JSPs generate the output
for the browser.
7. JSP use tags to declare the view beans and get access to all the dynamic data that must be displayed in the output.
8. View beans contain one or multiple data beans and provides tailored methods so that the JSP has access to the data stored in the data
beans; data beans may not provide the necessary methods for a JSP to access the data.
9. JSP assembles the output and sends it back to the browser as an HTML page with dynamic data; in many cases, that output again
contains form(s) to enable the user to continue the dialog with the application.
Servlet is the controller
Command beans provide the model
JSP is the view
Web
Browser
HTML
Enterprise
Java
Bean(s)
SQL
JDBC (oder
andere)
WEB
Server
Servlet
JSP
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 (EJB) 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
JEE
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.
JEE Entwicklung
Version
Datum
JEE Version 1.0
JEE Version 1.2
JEE Version 1.3
JEE Version 1.4
JEE Version 5
JEE Version 6
1998
1999
2001
2003
2006
2009
Zum Teil sehr wesentliche Änderungen !!!
Java EE umfasst mehrere API Specifikations, z.B. JDBC, RMI, JMS, Web Services und XML,
sowie Spezifikationen für eigene Komponenten wie Servlets und JavaServer Pages,
Enterprise Java Beans, Connectors, ......
z.B. Servlet
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 des RMI Protokolls (JRMP oder
RMI/IIOP).
Der Web Application Server enthält weitere Elemente für Administration und Datenbankzugriff.
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
• JTS
• JNDI
Java Transaction Service
Java Naming and 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
Drei verschiedene
Arten von EJBs
S
Container
(andere Bezeichnungen:Laufzeitumgebung,
Framework, Object Transaction Monitor - OTM)
JIDL
JNDI
JMS
• Session Beans
• Message Beans
EJB Dienste
JTS
• Entity Beans
JMAPI
JDBC
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.
EJB Client
(z,B. Servlet) ruft
Methoden der
Session Bean auf
Entity Bean
Session Fassade
EJB Architektur
Aufgabenteilung:
EJB Client
Session Bean
Entity Bean
Entity Bean
• Session Beans
enthalten die
Business Logik
• Entity Beans
speichern Daten
Für Entity Beans war die persistente Speicherung in Objekt Datenbanken (z. B. Poet,
Jasmin) vorgesehen, an Stelle von relationalen Datenbanken. Dies hat sich jedoch nicht
durchgesetzt.
Emterprise Java Bean
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 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
Group
Anwendungsprogramm
Mapset
TRID
xxxx
yyyy
zzzz
CICS Group
JAR, WAR, EAR
Enterprise Application Ressource
EAR
Web Application Ressource
WAR
HTML
Servlet
JSP
Deployment
Descriptor
EJB – Java Archiv
JAR
..EJB
Deployment
Descriptor
EJB
Deployment
Descriptor
..EJB
Enterprise Archive (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.
Herunterladen