Zusammenfassung - Software Bakery

Werbung
Enterprise Applications
Leaann to be a Tai-neese In gen-ea
Bruno Leupi
Tobias Maestrini
14. Januar 2015
Inhaltsverzeichnis
1 Architekturplanung
1.1
1.2
1.3
1.4
1.5
4
Tiered applications . . . . . . . . . . . . . . . . . . . . . . . .
1.1.1 Client Tier . . . . . . . . . . . . . . . . . . . . . . . . .
1.1.2 Middle Tier: Web Tier . . . . . . . . . . . . . . . . . .
1.1.3 Middle Tier: Business Tier . . . . . . . . . . . . . . . .
1.1.4 Enterprise Information System Tier (EIS) . . . . . . . .
Containers . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1.2.1 Der Web Container . . . . . . . . . . . . . . . . . . .
1.2.2 Der Enterprise Java Bean Container (EJB-Container) .
1.2.3 Application Client-Container . . . . . . . . . . . . . .
Beans und Klassen . . . . . . . . . . . . . . . . . . . . . . . . .
Planen von Domain-Modell Entitäten . . . . . . . . . . . . . .
Merkmale einer guten Architektur . . . . . . . . . . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
2 Servlets
2.1
2.2
2.3
2.4
2.5
2.6
Anwendung . . . . . . . . . . . . . . . .
Funktionen und Aufgaben von Servlets
2.2.1 Vor- und Nachteile von Servlets
2.2.2 Aufgaben . . . . . . . . . . . . .
2.2.3 Servlet-Lifecycle . . . . . . . . .
2.2.4 Session Management . . . . . .
2.2.5 Filter . . . . . . . . . . . . . . . .
2.2.6 Java Server Pages (JSP) . . . . .
2.2.7 Java Server Faces (JSF) . . . . . .
Architekturen . . . . . . . . . . . . . . . .
2.3.1 Web-zentrische Architektur . . .
2.3.2 B2B Architektur . . . . . . . . . .
2.3.3 Web Service Architektur . . . . .
Tier to Layer Mapping . . . . . . . . . . .
Komponentenbasierte Entwicklung . .
Java EE Patterns . . . . . . . . . . . . . .
2.6.1 MVC: Model – View – Controller
2.6.2 Service Locator Pattern . . . . .
2.6.3 View Helper Pattern . . . . . . .
4
4
5
5
5
5
6
6
7
7
7
8
9
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
9
9
10
10
11
12
13
13
14
14
14
15
15
15
16
16
17
17
18
1
2.6.4
2.6.5
Data Access Object . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Session Facade Pattern . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3 Enterprise JavaBeans (EJB)
3.1
3.2
3.3
3.4
3.5
3.6
3.7
19
Einführung . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.1.1 Vorteile von Enterprise JavaBeans . . . . . . . . .
3.1.2 Verwendung von EJBs . . . . . . . . . . . . . . . .
Verschiedene EJB Typen . . . . . . . . . . . . . . . . . . .
3.2.1 Entity Beans . . . . . . . . . . . . . . . . . . . . . .
3.2.2 Session Beans . . . . . . . . . . . . . . . . . . . . .
3.2.3 Message Driven Beans . . . . . . . . . . . . . . . .
Die Rolle des Containers . . . . . . . . . . . . . . . . . . .
EJB Methoden-Typen (Bean Interfaces) . . . . . . . . . . .
lokale oder verteilte Sicht der Clients (Business-Interface)
3.5.1 Local clients . . . . . . . . . . . . . . . . . . . . . .
3.5.2 Remote Clients . . . . . . . . . . . . . . . . . . . .
Session Beans . . . . . . . . . . . . . . . . . . . . . . . . .
3.6.1 Stateless Session Beans . . . . . . . . . . . . . . .
3.6.2 Stateful Session Beans . . . . . . . . . . . . . . . .
Client-Zugriff auf Beans . . . . . . . . . . . . . . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
4 AJAX – Asynchronous JavaScript and XML
4.1
4.2
4.3
4.4
4.5
4.6
5.2
5.3
5.4
Vergleich des Lebenszyklus von klassischer Applikation und Ajax-Applikation
AJAX-Komponenten . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
4.2.1 Attribute des Tags f:ajax . . . . . . . . . . . . . . . . . . . . . . . . . .
Lifecycle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
JavaScript API . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
JSON – JavaScript Object Notation . . . . . . . . . . . . . . . . . . . . . . . . .
Java Web Start . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
2
26
27
27
28
28
28
29
30
Java Messaging Service . . . . . . . . . . . . . . . . . . . . . . . . . . .
5.1.1 Konzept . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
5.1.2 JMS API Architecture . . . . . . . . . . . . . . . . . . . . . . . .
JMS-Architekturen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
5.2.1 Point-to-Point Architektur . . . . . . . . . . . . . . . . . . . . .
5.2.2 Publish / Subscribe Architektur . . . . . . . . . . . . . . . . . .
5.2.3 Message-Objekte . . . . . . . . . . . . . . . . . . . . . . . . .
5.2.4 Sicheres Messaging . . . . . . . . . . . . . . . . . . . . . . . .
5.2.5 Erzeugen eines Message Producers (nicht prüfungsrelevant)
Message Driven Beans . . . . . . . . . . . . . . . . . . . . . . . . . . .
Java EE Web Services (JAX-WS) . . . . . . . . . . . . . . . . . . . . . .
5.4.1 Nutzung von Web Services mit SOAP . . . . . . . . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
6 JNDI
6.1
19
19
19
20
20
20
21
21
21
22
22
22
23
23
24
24
26
5 Messaging
5.1
18
18
30
30
31
32
32
33
33
33
34
35
36
36
38
JNDI Naming Service . . .
6.1.1 JNDI API . . . . . .
6.1.2 Packages . . . . .
6.1.3 Namenskonzepte
6.1.4 JNDI Lookup . . .
Hochschule Luzern (TA.ENAPP)
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
38
38
38
39
39
6.2
LDAP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
6.2.1 Unterschiede zu einer Datenbank . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
6.2.2 LDAP-Modelle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
7 JavaEE Security
7.1
7.2
7.3
41
Java Platform Security (Java SE Security) . . . . . . . .
7.1.1 Der Byte Code Verifier . . . . . . . . . . . . . .
7.1.2 Der Class Loader . . . . . . . . . . . . . . . . .
7.1.3 Der Security Manager . . . . . . . . . . . . . .
Java Authentication and Authorization Service (JAAS)
JavaEE Security Architecture . . . . . . . . . . . . . . .
7.3.1 Ziele . . . . . . . . . . . . . . . . . . . . . . . .
7.3.2 Realms . . . . . . . . . . . . . . . . . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
8 ReST (Representational State Transfer)
8.1
8.2
8.3
8.4
ReST-Architektur . . . . . . . . . . . . . . . . . . .
8.1.1 Exkurs: URL, URN und URI . . . . . . . . .
8.1.2 Web Services mit ReST . . . . . . . . . .
fundamentale Aspekte vom ReST Design Pattern
ReST und fundamentale Web-Komponenten . .
Vorteile . . . . . . . . . . . . . . . . . . . . . . . .
40
40
40
41
41
42
42
42
43
44
44
45
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
Hochschule Luzern (TA.ENAPP)
.
.
.
.
.
.
45
45
46
47
47
47
3
1 Architekturplanung
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 Anwendungen und insbesondere WebAnwendungen. Sie ist eine der grossen Plattformen, die um den Middleware-Markt kämpfen. Grösster Konkurrent
ist dabei die .NET-Plattform von Microsoft. (JavaEE, 2014)
Die Java EE-Plattform hilft dem Entwickler bei der Entwicklung von grossen Applikationen, Multi Tiering, Skalierbarkeit, Zuverlässigkeit, Sicherheit. Mit Hilfe eines Entwicklungsmodells, einer entsprechenden API sowie einer
geeigneten Laufzeitumgebung wird die Komplexität einer Anwendung reduziert. Ziel ist die Fokussierung des
Entwicklung auf die Funktionalität ( Code schreiben“ ).
”
1.1 Tiered applications
Tiers sind – im Gegensatz zu Layers – vertikal geschichtete bzw. nebeneinander angeordnete und isoliert
funktionelle Abschnitte. Der Vorteil von Tiers liegt in der Skalierbarkeit. So kann
• der Client Tier aus einem Programm bestehen und die Anfragen an den Middle Tier weiterreichen
• der Middle Tier weiter in Web Tier und Business Tier unterteilt werden sowie Anfragen und Applikationsdaten behandeln
• der Data Tier Applikationsdaten permanent speichern
Client Tier
Middle Tier
Data Tier (EIS)
Abbildung 1: Tiers einer Java EE-Architektur
1.1.1 Client Tier
Der Client Tier besteht aus Applikationen, die normalerweise auf verschiedenen Maschinen laufen. Diese
interagieren mit einem Server – so zum Beispiel Web Browser, Stand alone Applikationen (fat clients), andere Server
– und sind meistens nicht einmal Java-Applikationen. Dadurch werden verschiedene Typen von Applikationen,
also Java EE Clients, unterstützt.
4
Hochschule Luzern (TA.ENAPP)
1.1.2 Middle Tier: Web Tier
Der Web Tier enthält Komponenten, die Interaktion zwischen Clients und Business Tier ermöglichen. Usereingaben werden aggreggiert und die richtigen Resultate von den Komponenten im Business Tier abgefragt und
retourniert. Weiter kontrolliert der Web Tier den Ablauffluss (Ansicht des Clients) und unterhält den Status der
Daten einer User Session. In Servlets werden Anfragen verschiedener Java-Klassen bearbeitet und Antworten –
meist in HTML – generiert.
Java Server Faces (JSF)
sind User Interface Komponenten, welche eine besondere View-Technologie darstellen
und auf die Gestaltung von Ausgabe-Content in einem Browser zielen. Standard Tags können dabei in FaceletPages verwendet werden.
Context and Dependency Injection (CDI)
bietet innerhalb der gesamten Konstruktion Kontext-bezogene
Services, welche die Verwendung von JSF mit speziellen Enterprise Beans (Backing Beans) relativ einfach und komfortabel
ermöglichen.
1.1.3 Middle Tier: Business Tier
Der Business Tier enthält Komponenten mit der Businesslogik einer Applikation und damit die Logik der
Funktionalität einer bestimmten Business-Domäne. Normalerweise sind darin die Kernfunktionalitäten enthalten, welche von diversen Technologien wie Enterprise Java Beans, JAX-RS RESTful web Services oder Java Persistence API (JPA)-Entitäten unterstützt werden.
Businessapplikationen sind Gegenstände einer Domäne. So sind dies also logisch gepackte“ Einheiten, die
”
nach Business-Funktionalität getrennt werden.
1.1.4 Enterprise Information System Tier (EIS)
Der Enterprise Information System Tier (EIS) enthält DB-Server und andere Datenquellen wie bspw. Mainframes.
Diese Ressourcen sind typischerweise auf separaten Maschinen abgelegt – und die Komponenten des Business
Tiers greifen darauf zu. Dies kann komplexe Modelle wie bspw. LDAP beinhalten; verschiedene Technologien wie
bspw. JDBC, JPA oder JTA (Java Transaction API) unterstützen den EIS in der Funktionalität.
1.2 Containers
Ein Java EE-Server besteht aus folgenden Teilen:
a) Web Container
b) Enterprise Java Bean Container (EJB)
c) Application Client Container
Definition 1: Container
Container sind verschiedene Laufzeitumgebungen in einem Applikationsserver.
Eine Applikation wird in eine Laufzeitumgebung (eben einen Container) deployed, die der Anwendung Services
– wie beispielsweise den Datenbankzugriff – zur Verfügung stellt.
Es gibt folgende Container-Typen, die sich vor allem darin unterscheiden, welche Services sie den AnwendungsKomponenten bereitstellen:
Hochschule Luzern (TA.ENAPP)
5
Java EE Tooling
Seite 16/163
3 Java goes web
Abbildung
EE Container-Typen
Typen von Anwendungs-Komponenten
Abbildung
12: Java 2:
EE Java
Container-Typen
und Typen vonund
Anwendungs-Komponenten
(z.B. Servlet)
7
(z.B. Servlet)
Wir sehen, es gibt folgende Container-Typen, die sich vor allem darin unterscheiden, welche Services sie
1.2.1den
Der
Web Container
Anwendungs-Komponenten
bereitstellen (keine Angst, die wichtigsten kryptischen Kürzel wie „JAXWS“ usw. werden im Laufe des Skripts erläutert):
Der Web Container (oft synonym verwendet zu Servlet-Container“ ) ist die Schnittstelle zwischen Web Kom”
Applet-Container
ponenten und
Web Server. Er verwaltet den Lebenszyklus der Komponenten, versendet Anfragen an ApplikatiApplication Client-Container
onskomponenten und beinhaltet die Schnittstellen zu Kontextdaten (bspw. Informationen über eine momentane
Web-Container (oft synonym verwendet zu „Servlet-Container“)
Anfrage). DerEJB-Container
Web Container erlaubt also die Ausführung von in Java geschriebenen Web-Anwendungen
(Servlets oder auch die veraltete JSP-Technologie).
Und folgende
Typen
von Anwendungs-Komponenten:
Beispiele
dazu sind
Apache
Tomcat (Open Source), Apache TomEE (die Java Enterprise Edition von Apache Tomcat; Tomcat + Java EE = TomEE) oder WebSphere (IBM).
Applets (GUI-Anwendungen, die normalerweise im Browser ausgeführt werden; mittlerweile eher
veraltet)
Application Clients (eigenständige GUI-Applikationen auf den Client-Rechnern, z.B. in Swing,
1.2.2 Der Enterprise
Java
Bean Technologien
Container (EJB-Container)
JavaFX oder
ähnlichen
realisiert)
JSP und Servlet (stehen für eine ganze Familie von Web-Komponenten)
Der EJB-Container
läuft auf dem Java
EE-Server
und arbeitet als Vermittlungsschicht
zwischen Client und SerEJB (Geschäftslogik
in einer
transaktionsunterstützen
Umgebung)
ver (Middleware): ein Client nimmt dabei Benutzereingaben entgegen und sendet sie an den EJB-Container, wo
Im folgenden
Abschnitt
werden
wir uns zunächst
dem Web-Container
beschäftigen.
sie dann
in geeigneter
Form3.1
von
den Enterprise
Beansmit
(standardisierte
Komponenten)
verarbeitet werden. Das
Ergebnis geht zurück an den Client und wird dem Benutzer dargestellt.
Damit bildet der EJB-Container die Schnittstelle zwischen Enterprise Beans (Business Logik der Applika7
Quelle: „Java™ Platform, Enterprise Edition (Java EE) Specification, v6“, Kapitel EE.2.1, Figure EE.2-1;
tion) und
dem Java EE Server.
http://download.oracle.com/otndocs/jcp/javaee-6.0-fr-eval-oth-JSpec/ (abgerufen am 30.07.2014)
Merke:
Der EJB-Container beinhaltet den Teil der Applikation, der für die Geschäftslogik verantwortlich ist. EJBs sind
das Prunkstück von Java EE, da sie Services wie Transaktionen, Security oder Job scheduling bieten.
Enterprise Java Beans gibt es in mehreren unterschiedlichen Ausprägungen für verschiedene Klassen von Anwendungsfällen. Sie können entweder remote ( entfernt“ , also über Prozess- und Rechnergrenzen hinweg) oder lokal
”
(innerhalb einer VM) angesprochen werden.
Im EJB-Container existieren verschiedene solcher Beans: Entity Beans (persistieren Daten des Systems), (stateful oder stateless) Session Beans (bilden Vorgänge im System ab) oder Message Driven Beans (im Zusammenhang mit JMS eingesetzte Komponenten zur Kommunikation mit anderen Systemen).
6
Hochschule Luzern (TA.ENAPP)
1.2.3 Application Client-Container
Der Application Client-Container ist die Schnittstelle zwischen Java EE-Clients (App Clients in Java SE – z.B. eine
Konsolen- oder Swing-Applikation – welche EE-Komponenten verwenden) und Server. Er stellt also ein Gateway
zwischen Client Applikationen und Java EE-Komponenten, die der Client verwenden will, dar.
Merke:
Der Application Client-Container ist dazu da, ein reines standalone Java-Programm mit der Geschäftslogik – sprich einem EJB-Projekt – plaudern“ zu lassen.
”
Services
Folgende Services werden bspw. von einem JEE Container zur Verfügung gestellt:
• Web-Services
• Security-Services
• Persistence
• Transactions
• Messaging
• Remote Connectivity
1.3 Beans und Klassen
Klassen besitzen keine Konstruktoren mehr und werden deshalb Beans genannt. Deren Lebenszyklus wird vom
entsprechenden Container verwaltet. POJOs (bspw. für DTOs) können seit EJB 3.0 allerdings (wieder) verwendet
werden.¹
Merke:
EJBs brauchen den Container! Dementsprechend werden EJB-Objekte nie mit new erzeugt, sondern immer
mit @Inject / @EJB injiziert (= vom Container gemanagt).a Das heisst, dass die Objekterzeugung von EJBs
Sache des Containers ist und dieser entscheidet, wann ein Objekt erzeugt werden muss!
aDer wesentliche Unterschied zwischen @Inject und @EJB ist, dass mit @Inject Instanzen vieler verschiedener Klassen-Typen (sogar
POJOs) injiziert werden können, mit @EJB hingegen wirklich nur EJBs. Also: @Inject für Injizierung von Klassen innerhalb des EJBContainers, @EJB für Injizierung der EJB-Interfaces.
1
2
3
4
5
public class ChatService {
@Inject
ChatmessageManager chatmessageManager;
@Inject
ChatmessageConverter chatmessageConverter;
6
public ChatService() {
// keine Konstruktion nötig; der Container übernimmt die Erzeugung!
}
7
8
9
10
}
1.4 Planen von Domain-Modell Entitäten
Wir wissen im Voraus, dass die Applikation im Laufe der Zeit wachsen, bzw. skalieren wird. Dazu erstellt man gleich
zu Beginn sogenannte Domänen, welche auf verschiedene Rechner verteilt werden können. Dies ermöglicht dann
eine grenzenlose Skalierbarkeit der Applikation.
¹Achtung: diese Objekte unterliegen aber nicht der Kontrolle des Containers!
Hochschule Luzern (TA.ENAPP)
7
Definition 2: Domain-Modell
Das Domain-Modell umfasst die wichtigsten Objekte im Kontext einer Business-Anwendung. Es repräsentiert die existierenden Objekte oder Anwendungen in einem Geschäftszweig.
1.5 Merkmale einer guten Architektur
Charakteristiken einer guten Architektur sind:
Konzeptuelle Integrität konsistente Anleitung für die Systementwicklung (d.h. alle Beteiligten verstehen, was
hier entwickelt werden soll)
Korrektheit und Vollständigkeit enthält high-level Entscheidungen über Layers, …. Offene Entscheidungsgrund-
lagen sind wichtig.
Machbarkeit die Planung sollte in machbarer Zeit durch das Team umsetzbar und dabei stets offen für Änderungen sein.
Die Performance wird dadurch aber zu einem Diskussionsthema: bspw. kann Clustering der Zugriff auf Ressourcen
zeitlich verzögern.
8
Hochschule Luzern (TA.ENAPP)
2 Servlets
Definition 3: Servlet
Als Servlets bezeichnet man Java-Klassen, deren Instanzen innerhalb eines Webservers Anfragen von
Clients entgegennehmen und beantworten. Sie sind also Controller-Klassen. Der Inhalt der Antworten
kann dabei dynamisch, also im Moment der Anfrage, erstellt werden und muss nicht bereits statisch (etwa in
Form einer HTML-Seite) für den Webserver verfügbar sein. (Servlet, 2014)
Grundvoraussetzung für die Verwendung von Servlets ist ein Servlet-fähiger Applikations- oder Webserver, wie es z.B. alle Java-EE-Anwendungsserver sind. Das Servlet ist die spezielle Java-Klasse, die innerhalb des
Webcontainers instantiiert wird. Der Webcontainer stellt bekanntlich die Laufzeitumgebung für Servlets zur Verfügung und übernimmt deren Zustandsverwaltung. Dazu gehören die Kommunikation des Servlets nach aussen
sowie die Verwaltung von dessen Lebenszyklus (siehe Kapitel 2.2.3). (Servlet, o. J.)
Im Deployment Descriptor – einer speziellen xml-Datei namens web.xml – wird der Aufbau der Directorystruktur einer Applikation und die Zuweisung des Servlets festgeschrieben.
Servlet-Beispiel: http://www.heimetli.ch/ffh/tomcat.html
2.1 Anwendung
Ein Servlet wird implementiert, indem eine Klasse erstellt wird, die die Schnittstelle javax.servlet.Servlet implementiert.² Es gibt die Klasse javax.servlet.http.HttpServlet, die diesen Vorgang vereinfacht. Anschliessend wird
eine oder beide Methoden doGet() und doPost() überschrieben, um die beiden wichtigsten HTTP-Methoden
GET und POST verarbeiten zu können. (Servlet, 2014)
1
2
3
import java.io.IOException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
4
5
6
7
8
9
10
11
12
13
14
@WebServlet(”/report”)
public class SchnarchServlet extends HttpServlet
{
@Override
protected void doGet( HttpServletRequest req, HttpServletResponse res ) throws IOException
{
res.getWriter().println( ”’Chr! Schnarch! Razong! Chr! Chr! Rapüh!’” );
res.getWriter().println( ”(Disneys beste Comics, Band 5, S. 218)” );
}
}
Ein Servlet erweitert also die besondere Oberklasse HttpServletund realisiert darin bspw. eine doGet()-Methode.
Der Servlet-Container ruft die Methode immer dann auf, wenn der Client eine Standard-Anfrage über HTTP stellt.
Die Implementierung der doGet()-Methode schreibt in einen besonderen Ausgabestrom, der für die Daten bestimmt ist, die vom Server zum Client gelangen. (Ullenboom, o. J.)
2.2 Funktionen und Aufgaben von Servlets
Die ursprüngliche Funktionalität des Webs war ausschliesslich auf die Übertragung von Daten beschränkt – dies
entspricht nicht den Anforderungen, dass ein Server irgendetwas berechnen soll. Aufwendige CGI-Skripts in Pearl
²Beachte hierbei die Annotation @WebServlet, welcher die Spezifikation eines URL-Patterns folgen muss. Auf dieses URL-Pattern hört“
”
dann das Servlet bzw. das Servlet ist dann unter diesem URL-Pattern ansprechbar: bspw. @WebServlet(”/report”)
Hochschule Luzern (TA.ENAPP)
9
limitierten die Anwendungsbereiche.
Container: Web Evolution
JavaScript™/
Visual Basic
APIs
CGI
Fast, but
complicated
So limiting
Powerful, but
doesn’t scale
Neat, but
slow
Stone Age
1991
Enlightenment
1993
Bruno Joho
Intranets
1996
Enterprise Application
Application
Servers
Scales and
it’s
standardsbased!
E-Commerce
1999
17
Als Folge dessen wurden APIs entwickelt, diverse historische Meilensteine folgten. JavaScript – und als Kopie
des Softwaregiganten Microsoft Visual Basic – kamen auf den Markt und waren powerful, aber nicht wirklich skalierbar. Daran schloss der Beginn der JEE-Welt an: es entstanden Applikationsserver, die sehr gut skalieren und auf
Standards basieren.
2.2.1 Vor- und Nachteile von Servlets
+ bereits vorgefertigte HTTP-Requests und -Response-Objekte können direkt verwendet werden – und nehmen dem Entwickler die Arbeit ab, diese zuerst selbst schreiben zu müssen
+ Servlets sind multithreading-fähig und unterstützten dadurch die Skalierbarkeit
+ es gibt viele Komponenten für den Web-Container, welche die Funktionalität des Servlets ergänzen
+ Servlets leiten Anfragen zum EJB weiter – was durch Annotationen wie @Inject sehr einfach möglich wird
– mehrere Welten prallen aufeinander: HTML & Java-Code kommen im Web-Container vermischt zum Einsatz³
2.2.2 Aufgaben
Der Aufruf von Daten vollzieht sich in sechs Schritten:
³daraus ist dann .JSF bzw. .JSP entstanden
10
Hochschule Luzern (TA.ENAPP)
Servlets verwalten aufgrund ihrer Art eben Anfragen und Antworten – und unterstützen echtes Multithreading!⁴ Aufgrund von Java sind Servlets verteilbar (RMI, Corba, …) und es existieren viele Komponenten.
Als Herausforderung stellt sich der Compiler / Deploy-Zyklus dar – und für den Programmierer ist ein solides
Wissen über HTML unabdingbar!
Die Aufgabe eines Servlets
besteht darin, Anfragen (bspw. HTTP-Requests) zum EJB zu leiten und eine Antwort zu produzieren (formatierte HTML-Seite). Es stellt eine Controller-Klasse für eine View dar und ist – wie
wir bereits wissen – von der Klasse HTTPServlet abgeleitet.
Im Ready-Zustand des Servlet-Lebenszyklus analysiert die service()-Methode die ankommende Anfrage und involviert den entsprechenden Typ der Anfrage oder einer Antwort: doGet() oder doPost(). Konkret
wird dabei die service()-Methode typischerweise überschrieben (siehe nächste Grafik).
Service Methods (1)
Für jeden HTTP-Requesttyp steht eine entsprechende Service-Methode zur Verfügung.
Bruno Joho
26
Enterprise Application
Threading
gilt zu bedenken, dass in derServlet
service()-Methode
jegliche Anzahl
Threads gleichzeitig ausgeführt werden können – und dadurch auf globale Variablen zugreifen!
In Bezug auf die Sicherheit eines Servlets
Achtung
Kritische Abschnitte in einem Servlet sollten unbedingt mit den Synchronisationsprimitiven geschützt
werden:
synchronized(this){
//Hier ist nur ein Thread gleichzeitig
}
2.2.3 Servlet-Lifecycle
Bruno Joho
28
Enterprise Application
Der Lebenszyklus eines Servlet wird durch den Container, der das Servlet bereitstellt, gesteuert. Bei einem ServletAufruf werden folgende Schritte durchlaufen:
1. Falls die Instanz des Servlets fehlt
a) lädt der Web-Container die Servlet-Klasse
b) erstellt eine Instanz der Servlet-Klasse
c) initialisiert die Servlet-Instanz durch den Aufruf der init()-Methode.
2. der Container ruft die service()-Methode auf und übergibt Request- und Response-Objekte.
⁴innerhalb des Prozesses haben die Threads jeweils einen eigenen Stack, Adressraum und Programmcounter
Hochschule Luzern (TA.ENAPP)
11
Wenn das Servlet entfernt werden muss, so schliesst
der Container dieses durch den Aufruf der destroy()Methode des Servlets.
2.2.4 Session Management
Web Tier Session Management (Session-ID)
Im Web Tier ist im Zusammenhang mit dem Seitenaufruf ein besonderes Augenmerk auf das Session Management zu legen:
Bruno Joho
Enterprise Application
31
Dieses kann unter Verwendung von Cookies (Container liest und schreibt die Cookies automatisch) oder unter
Verwendung von URL Rewriting (Developer stellt sicher, dass die Session ID immer zur URL hinzugefügt wird)
erfolgen. Das Session Management wird in Abhängigkeit von sogenannten Scopes“ realisiert und wird
”
nachfolgend kurz zusammengefasst.
Verschiedene Scopes
ermöglichenden den Informationsaustausch zwischen den Webkomponenten (im Zusammenhang mit JSF und Managed Beans relevant):
Application
gültig über alle User Aktionen mit der Web Applikation
Praxis-Beispiel: Datenbankzugriff
Session
gültig über mehrere HTTP Anfragen in einer Web Applikation (Deklaration: @SessionScoped)
Praxis-Beispiel: Warenkorb
Flow
gültig während User-Interatktionen mit einem spezifischen (definierten) Ablauf“ einer Webap”
plikation
Request
gültig während einer einzigen HTTP-Anfrage in einer Webapplikation (Deklaration: @RequestScoped)
Praxis-Beispiel: Suche
12
Hochschule Luzern (TA.ENAPP)
2.2.5 Filter
Ein Filter ist eine simple Java-Klasse, die das javax.servlet.Filter-Interface implementiert. Es definiert drei Methoden:
1
2
3
public void doFilter (ServletRequest, ServletResponse, FilterChain)
public void init(FilterConfig filterConfig)
public void destroy()
Filter Chains
Filter werden vom Servlet zur Verfügung gestellt. Bestimmte Requests können durch diese Filter beeinflusst, verändert oder analysiert werden. Dies reduziert die Notwendigkeit, komplexe Programmierroutinen selber
zu schreiben.
Das Registrieren eines Filters geschieht mittels Annotation @WebFilter und diversen
Attributen. Filter lassen sich kaskadieren:
Dies wird über ein XML-File umgesetzt:
1
2
3
4
5
6
7
8
9
10
11
12
In Servlet 3.0 kann @WebFilter verwendet werden
Bruno Joho
<filter>
<filter-name>LogFilter</filter-name>
<filter-class>LogFilter</filter-class>
<init-param>
<param-name>test-param</param-name>
<param-value>Initialization Paramter</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>LogFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
Enterprise Application
39
The Path of a Servlet
2.2.6 Java Server Pages (JSP)
Java Server Pages (JSP) ist eine View-Technologie, welche im
Servlet Container läuft. Ein JSPFile wird beim ersten Laden compiliert und in eine Servlet-Klasse
(.class-File) – also zum einem
HTTPServlet – erweitert. Die
Technologie erlaubt das Schreiben eines Templates in clientseitiger Sprache (HTML, CSS, JavaScript).
en.wikipedia.org
Bruno Joho
21
Enterprise Application
Hochschule Luzern (TA.ENAPP)
13
Sogenannte taglibs (<% … %>) erlauben die Integration von Java-Code in der JSP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
<HTML>
<BODY>
<%
// Scriptlet deklariert und initialisiert ”date”
System.out.println( ”Evaluating date now” );
java.util.Date date = new java.util.Date();
%>
Hello! The time is now
<%
// Scriptlet generiert HTML Output
out.println( String.valueOf( date ));
%>
</BODY>
</HTML>
Diese Injection sorgt allerdings für eine Vermischung – und macht Code schwer lesbar.
Merke:
JSP werden eigentlich nicht mehr verwendet – deren Einsatz ist nach wie vor möglich.
2.2.7 Java Server Faces (JSF)
JSF ist ein komponentenbasiertes Framework.⁵ Sogenannte Facelets eliminieren die Verwendung von JSP und
wurden als Technologie entwickelt, um die vielfältigen Ansätze zur Entwicklung von Webanwendungen unter
Java zu standardisieren. Die Facelets arbeiten in der Regel mit Model-Komponenten, den sogenannten Managed
Beans (Java-Klassen) zusammen, die vom Container verwaltet werden. JSF gilt als aktuelle View-Technologie
in Java, um Model und View zu verknüpfen.
Eine der schönsten Hauptsachen von JSF ist, dass diese View-Technologie das (vorgängig beschriebene) Schreiben von Servlets überflüssig macht. Ein FacesServlet nimmt dabei die Anfragen eines Clients entgegen und
interagiert mit der View und ihrem Status.
JSF-Beispiel⁶: http://docs.oracle.com/javaee/6/tutorial/doc/gipob.html
2.3 Architekturen
2.3.1 Web-zentrische Architektur
Web zentrische Architektur
Die web-zentrische Architektur verwendet nur den Web Container der EE Technologie. Er beinhaltet alle benötigten Komponenten:
⁵Das bedeutet, dass eigene Komponenten geschrieben und zur bestehenden JSF-Library hinzugefügt werden können (z.B. PrimeFaces).
⁶siehe auch Tooling Verwendet
Skript, S. 68
nur den Web Container der EE Technologie.
Der Web Server beinhaltet alle benötigten Komponenten
14
Hochschule Luzern (TA.ENAPP)
2.3.2 B2B Architektur
B2B Architektur
Die Business-to-Business Architektur ist eine
Erweiterung der komponentenbasierten Architektur. Sie verwendet zwei EJB Server, wobei jeder aus Web- und EJB-Container besteht.
Erweiterung der Komponenten basierten Architektur.
Verwendet zwei EJB Server, jeder besteht aus Web- und EJB Container
2.3.3 Web Service Architektur
Bruno Joho
Web Service Architektur
7
Enterprise Application
Eine EE Business-Komponente veröffentlicht
die Funktionalität nach aussen (Service Endpoint Interface). Ein Stateless Session Bean
dient als Zugriffspunkt für die Servicefunktion
und liefert die gewünschten Daten:
Tier to Layer Mapping
2.4 Tier to Layer Mapping
Eine EE Business-Komponente veröffentlicht Funktionalität
Stateless Session
Bean dient
als(Business-,
Zugriffspunkt
für die
Servicefunktion
1.  Conceptual
Layer:
Application-,
Informationand Technical
Architecture.
2.  Logical Tiers: Client-, Web-, EJB- and Information Tier.
3.  Physical Tiers:
mappingApplication
of Technical Tiers and Locical Layers to Physical8
Bruno Joho
Enterprise
2
Applikationen sind gruppiert in sogenannten Layers“ . Tiers.
”
Dies widerspiegelt sich in logischen Schichten, die aber
ausschliesslich Software-Konstruktionen darstellen:
1. Conceptual Layer: Business-, Application-,
Information- and Technical Architecture.
2. Logical Tiers: Client-, Web-, EJB- and Information
Tier.
3. Physical Tiers: mapping of Technical Tiers and Locical Layers to Physical Tiers.
1
3
Bruno Joho
9
Enterprise Application
In verteilten Umgebungen müssen diese Layers allerdings in Tiers aufgeteilt – und die Funktionalitäten damit
auf verschiedene Lokationen – werden:
Die Trennschärfe ist dabei meisten allerdings nicht so klar, wie schön in der Grafik dargestellt: in der Praxis gehen
die Diskussionen über Grenzen der Tiers und die entsprechende Zugehörigkeit von Layern auseinander.
Hochschule Luzern (TA.ENAPP)
15
2.5 Komponentenbasierte Entwicklung
Für Komponenten gelten sozusagen ungeschriebene Gesetze, so zum Beispiel: Komponenten sollten lokale und
verteilte Eigenschaften beinhalten, ansonsten die Komponenten im Falle der Skalierung nicht mehr verwendet
werden können.
Die komponentenbasierte Entwicklung fördert eine parallele Entwicklung. Die Einhaltung von Schnittstellen
unterstützt die Skalierbarkeit und vereinfacht die Erweiterbarkeit einer Applikation.
Komponenten werden vom entsprechenden Container gekapselt (d.h. verwaltet), sind definiert und kontrolliert
durch Interfaces:
Interaktion von EE Komponenten
Die meisten Komponenten sind definiert und kontrolliert durch Interfaces.
Die eine Komponente kommuniziert durch das Interface der anderen.
Auch
wenn Beide
in der gleichen
Java
Machine
laufen!
Die eine Komponente
kommuniziert
ausschliesslich
durch
dasVirtual
Interface
der anderen
Komponente!
Die Komponenten Infrastruktur stellt dafür auch Proxies zur Verfügung.
Merke:
RMI Infrastruktur für Verteilte Komponenten
In verteilten Umgebungen kommunizieren verteilte Komponenten über die RMI-Schnittstelle:
Bruno Joho
Enterprise Application
11
•  Marshalling und Unmarshalling von Argumenten und Rückgabewerten
2.6 Java EE Patterns
siehe dazu auch http://www.torsten-horn.de/techdocs/sw-patterns.htm
•  Übergeben von verteilten
JavaExceptions.
EE Patterns (2)
•  Übergeben von Security- und Transaktions- Kontext zwischen Aufrufer
und Ziel.
Bruno Joho
12
Enterprise Application
Verschiedene Pattern sind leicht erkennbar im EE Blockdiagramm
16
Bruno
Joho
Hochschule
Luzern
(TA.ENAPP)
Enterprise Application
47
framework
Prof. M.C. Govil
Praveen Gupta
Govt. Mahila Engineering College
2.6.1 MVC:
Model
– View
– Controller
Research
Scholar,
Singhania
University
Ajmer, Rajasthan, India
Pacheri Bari, Rajasthan, India
[email protected]
Das [email protected]
Model-View-Controller (MVC)-Pattern ist ein grundlegendes Design-Muster
für die Trennung von Logik der
Java EE Tooling
Benutzerschnittstelle
und der Business-Logik. Es kommt zum Einsatz in Multi-Tier-Systemen mit PräsentationsSeite 48/163
schicht, Geschäftsschicht, Datenpersistenz-Schicht und Datenbankschicht.
4 Java goes enterprise
work on the internet. And today stills it works as building
Abstract— The model view controller (MVC) is a
block for the all Internet based programming languages. The
fundamental design pattern for the separation between
user has to interact with the static pages. The information
user interface logic and business logic. Since applications
written on the pages had to change manually. As the time
are very large in size these days and the MVC design
grows the demand arises for a language that can interact with
pattern can weak the coupling among the different
the user and page can be changed as per the requirement of the
application tiers of application. this paper presents a web
user.
application framework based on MVC in J2EE platform,
and extends it with XML so that the framework is more
1.2
MVC Model 1: The first major change in the
flexible, expansible and easy to maintain. This is a multi
architecture comes with the introduction of the MVC Model
tier system including presentation layer, business layer,
1 Architecture. This architecture was completely based on the
data persistence layer and database layer. This separate
page centric approach. In this model a Java Server Pages to
codes, and improve maintainability and reusability of the
program to control the Presentation, Business Logic and flow
application. In this paper, we implemented MVC using
23
ofmitDatenbank
the
program.
In this
model
the concept of the Business
37: MVC für
Java
EE
und für
JSF,Java
hier
mit
Zugriff
auf die
Abbildung
3:research
MVC
EEdirektem
und
JSF,
hier
direktem
Zugriff
auf die
Datenbank
spring and struts Abbildung
framework.
Our
study
show
Logic was introduced. The business logic was hard coded in
that applying multiple framework to design the
the form of the Java Beans and scriptlets and expressions. All
applications Inusing
makes Logik
applications
diesemMVC
Modellconcepts
wird die gesamte
des Aufrufs und
danach
anschliessenden
vom Let us
thisdercodes
was
used to write Anwendungslogik
within the JSP page.
easier compare
to
a
single
framework.
Servlet, das als Controller funktioniert, behandelt. Das Model,
im Falle
von when
Java EE
dastoEJB-Projekt,
beinhaltet
assume
a case
wealso
want
transfer the
flow of the jsp
application
based
on
the
data
we
received
from
the input.
dabei die gesamte Geschäftslogik.
Index Terma: MVC, Spring, XML
Im Web-Kontext kommt unter Anwendung des MVCPatterns ein seitenzentriertes Modell zum Tragen. Dabei
kontrollieren
Server Pages sowohl die PräsentatiI. Java
INTRODUCTION
on
(View),
die
Geschäftslogik
undSince
den the
Ablauf
desofProWeb is the very complex issues these days.
desire
gramms
Grafik rechts).
the companies
and(siehe
organizations
are increasing so the
complexity and the performance of the web programming
matters. Complexity
with the different types of
Servlets
communication devices is increasing. The business is
Einsatz einesusing
Servlets
in Abbildung
3 entdemanding Der
applications
thewie web
and many
communication
devices.
So with the die
increase
load of the
fernt
(im MVC-Kontext)
Businesslogik
vondata
der
on the internet
we
have
to
take
care
of
the
architecture
issue.
Seite, weil dieses sämtliche Bedien- und AnwenLet us discuss in brief the research done so far in MVC.
dungslogik behandelt.
A.JSP
B.JSP
C.JSP
Data Base
In The initial phase of the web development
the pages were used to be designed in the html. Html is the
Das
Servlet
wird
also
zum Gatekeeper
für alle
gängigen Aufgaben
die gemeinsamen
wie
Figure 1 und
Pagestellt
Navigation
in MVC -1Dienste
Architecture
plain text only.
This
was the
first
markup
language which
can
Authentifizierung, Autorisierung, Fehlerkontrolle und Anwendungsfolge zur Verfügung.
1. 1 NO MVC:
Abbildung 38: MVC für Java EE und JSF, hier mit Zugriff auf die Geschäftslogik im EJB-Layer
24
2.6.2 Service Locator Pattern
ISSN : 0975-3397
Das Service Locator Pattern kommt im BusinessTier zum23 Einsatz. Es abstrahiert Komponenten vom
Quelle: http://jsfatwork.irian.at/book_de/introduction.html#!idx:/introduction.html:fig:einfuehrung_model2 (abgerufen am 05.08.2014)
24
Lookup- und
Connect-Mechanismus
zu entfernten
ObQuelle:
rad_ws_8_programming guide.pdf
im ILIAS, Kapitel
19.1.3, Figure 19-1
jekten (Vereinfachung und Performancegewinn).
1047
Bei Remote-Zugriffen müssen Referenzen auf entfernte Objekte erzeugt werden. Das Initialisieren⁷ kann
mehrere Sekunden dauern. Damit diese Vorgänge nur
einmal stattfinden, sollten die EJBHome-Objekte gecacht werden. Dies bezeichnet man als Service Locator.
anschauliches Beispiel: siehe Oracle-Referenz
⁷bspw. des InitialContext, der lookup() im InitialContext wie auch weitere Aufrufe
Hochschule Luzern (TA.ENAPP)
17
2.6.3 View Helper Pattern
Das View Helper Pattern findet Anwendung im Präsentations-Tier. Es dient als Hilfskonstrukt für Komponenten,
die von View-Komponenten benötigte Hilfsfunktionen anbieten (z.B. Datenobjekte erzeugen).
Das Pattern stellt einen Business Data-Adapter dar, der zur Aufbereitung der Geschäftsdaten für Anzeigen – zum
Beispiel Zwischenspeicherung, Umwandlung zu Strings, Formatierung – dient.
DAO Pattern Structure
2.6.4 Data Access Object
Ein Data Access Object (DAO) erzeugt Komponenten, die Daten kapseln. Diese werden zur Interaktion mit
der Datenbank verwendet. Das Pattern ist ein typisches
Integrations-Pattern.
Es stellt einen Adapter zur Abstrahierung und Entkopplung von Datenzugriffen – zum Beispiel auf relationale und objektorientierte Datenbanken – dar.
2.6.5 Session Facade Pattern
Bruno Joho
Enterprise Application
63
Das Session Facade Pattern stellt dem Client /
den Clients ein einfacheres Interface zur Verfügung
mit allen Methoden bzw. Funktionalitäten, und verbirgt dadurch komplexere Interaktionen zwischen den
Business-Komponenten hinter sich bzw. blendet diese aus. Somit reduziert es also die Anzahl an BusinessObjekten, die ein Client direkt in einem Service-Layer
über das Netzwerk ansprechen müsste.
Der Einsatz dieses Patterns ermöglicht eine bessere Verwaltbarkeit der Funktionalitäten, die Zentralisierung der
Wechselwirkungen (Verantwortung), mehr Flexibilität und erhöht die Fähigkeit, mit Veränderungen umzugehen.
Überdies stellt es einen grob-granularen Service-Layer zur Verfügung, welcher die Implementation von BusinessObjekten von abstrakten Business-Services separiert.
Über alles hinweg wird damit also eine enge Kopplung zwischen Client und Businessobjekten umgangen, denn
durch die Session Facade werden die entsprechenden Elemente voneinander unabhängig gemacht.
http://www.oracle.com/technetwork/java/sessionfacade-141285.html
18
Hochschule Luzern (TA.ENAPP)
3 Enterprise JavaBeans (EJB)
Enterprise JavaBeans (EJB) sind standardisierte Komponenten (serverseitig) innerhalb eines Java EE-Servers
(Java Enterprise Edition), welche die Businesslogik einer Applikation kapseln. Sie vereinfachen die Entwicklung komplexer mehrschichtiger verteilter Softwaresysteme mittels Java.
3.1 Einführung
Mit Enterprise JavaBeans können wichtige Konzepte für Unternehmensanwendungen, z. B. Transaktions-, Namensoder Sicherheitsdienste, umgesetzt werden, die für die Geschäftslogik einer Anwendung nötig sind. (Enterprise
JavaBeans, 2014)
Businesslogik ist dabei der Code, der die Aufgabe der Applikation erfüllt. Wenn die Applikation bspw. ein
Flugbuchungssystem ist, dann implementiert das Enterprise Bean entsprechende Methoden (z.B. bookFlight()
oder payFlight()).
Enterprise Java Beans
Web
Browser
Rich
Client
SOAP
REST
Smart
Phone
JMS
View Layer modelliert
verschiedene Views
Business Layer
modelliert Aktionen.
Verben (createBook,
editCustomer, buySong)
JSF
managed
Beans
@stateless
External
DBs
JPA Layer modelliert
Domain Klassen.
Substantive (CDs,
Artist, Customer)
@stateful
Bruno Joho
Abbildung 4: EnterpriseEnterprise
JavaBeansApplication
im Business Layer / Business Tier
14
3.1.1 Vorteile von Enterprise JavaBeans
EnterpriseBeans vereinfachen die Entwicklung von grossen verteilten Applikationen. Der Container stellt
System-Services für die Beans zu Verfügung und ermöglicht dem Entwickler, den Fokus auf die Business-Probleme
zu legen. Heikle System-Services wie bspw. Transaktionsmanagement und Sicherheitsauthorisierungen
sind damit also nicht Sache des Entwicklers.
Ein Client-Entwickler schreibt keinen Code, welcher Business-Regeln einhalten muss und konzentriert sich dadurch auf Ausführungen des Presentation Layers (GUI-Design).
3.1.2 Verwendung von EJBs
Ist Skalierbarkeit einer Applikation gefordert, so sind EJBs immer eine gute Wahl. Sie gewähren in ihrer Konzeption die Integrität von Daten bei Transaktionen. Durch diese Eigenschaften besteht die Möglichkeit, dass mehrere
Clients die Applikation gleichzeitig nützen können.
Hochschule Luzern (TA.ENAPP)
19
EJB Typen
Enterprise Java Beans Technology
Session Beans
• Stateless
• Stateful
• Singleton
3.2 Verschiedene EJB Typen
Bruno Joho
Message Driven Beans
(sind stateless)
Enterprise Application
15
3.2.1 Entity Beans
Entity Beans modellieren die dauerhaften (persistenten) Daten des Systems. Beispiele sind physikalisch vorhandene Dinge wie Benutzer, Informationsstrukturen wie Adressen oder archivierte Vorgangsinformationen wie
Rechnungen. Sie repräsentieren z. B. einen Datensatz aus einer Datenbank.
Die Persistenz kann entweder vom Bean-Entwickler selbst programmiert („Bean Managed Persistence“, BMP)
oder von einem EJB-Container bereitgestellt werden („Container Managed Persistence“, CMP). Bei CMP wird im
Deployment Descriptor unter anderem der Name eines abstrakten Schemas definiert, was üblicherweise dem
Namen einer Datenbanktabelle entspricht, in der EJBs einer Klasse abgelegt werden.
Von der Version 5 an unterstützt Java EE ein Attachment, Detachment und Reattachment. Die Entity Bean ist
nun ein POJO, dessen Persistenz mit Hilfe des EntityManagers gesteuert werden kann. Das bekannte JavaEE-Entwurfsmuster Datentransferobjekt“ (engl. data transfer object, kurz DTO) ist somit aus technischer Sicht
”
nicht mehr erforderlich, da nun Geschäftsobjekte über verschiedene Schichten, beispielsweise zu einem Client,
transportiert werden könnten. Datentransferobjekte dienten zuvor der Abstraktion von Geschäftsobjekten (also
der Repräsentation reiner Daten ohne Verhalten), und der Entkopplung verschiedener Anwendungsschichten.
(Enterprise JavaBeans, 2014)
1
2
import java.io.Serializable;
import javax.persistence.*;
3
4
5
6
7
/** The persistent class for the customer database table. */
@Entity
@Table(name=”customer”)
public class Customer implements Serializable { <output omitted> }
3.2.2 Session Beans (siehe auch Kapitel 3.6)
Session Beans bilden insbesondere Vorgänge ab, die der Nutzer mit dem System durchführt. Sie bedienen
sich häufig mehrerer Entity Beans, um die Auswirkungen des Prozesses darzustellen.
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. (Enterprise JavaBeans, 2014)
20
Hochschule Luzern (TA.ENAPP)
3.2.3 Message Driven Beans
Message Driven Beans sind diejenigen Komponenten, die EJB-Systeme für asynchrone Kommunikation zugänglich machen. Hierzu wird der Java Message Service (JMS) verwendet. Diese Sorte von Beans wird häufig
für die Kommunikation mit Legacy-Systemen genutzt. Auch für die Ausführung von klassischerweise asynchron
auszuführenden Operationen (z. B. dem Verschicken einer Mail), von deren Erfolg und Dauer die Performanz einer
übergeordneten Anwendung nicht abhängen sollte, bieten sich Message Driven Beans an. (Enterprise JavaBeans,
2014)
3.3 Die Rolle des Containers
Der EJB-Container verwaltet die Beans und kümmert sich sowohl um die persistente Speicherung der
Zustände, als auch um die Verfügbarkeit der EJB-Komponenten für jeden autorisierten Client.
Der EJB-Container arbeitet auch als Vermittlungsschicht zwischen Client und Server, daher spricht man von
Die Rolle
Containers
Middleware. Der Client nimmt die Benutzereingaben entgegen und sendet
sie an dendes
EJB-Container,
dort werden
sie in geeigneter Form von den Beans verarbeitet und das Ergebnis zurück an den Client geschickt, der es dem
Benutzer darstellt. (EJB-Container, 2013)
Container stellen den EJBs wichtige Dienste zur Verfügung
Der Container kapselt die Zugriffe zu externen
Ressourcen und managed den Lebenszyklus der instantiierten EJBs. Ferner isoliert dieser auch die Klasse mit der Implementation von ihrem Client (Aufrufe
durch andere Beans) und stellt Timer Zeit-Services⁸
zur Verfügung, welche zeitdefinierte Methodenaufrufe
ermöglichen.
Für Message-Driven Beans überwacht der Container
auch eine Message Queue.
Bruno Joho
3.4 EJB Methoden-Typen (Bean Interfaces)
19
Enterprise Application
Der Entwickler kann einerseits Methoden definieren, welche vom Container selbstständig aufgerufen werden: die Lebenszyklus- oder Callback-Methoden mit der Annotation @PreDestroy oder @PostConstruct (siehe auch Kapitel 3.6)
sind Beispiele dafür.
Weiter können auch Business-Methoden implementiert werden. Generell werden Business-Methoden typischerweise in einem Business-Interface definiert, welches von der Bean-Klasse dann implementiert wird:
Interface
Beschreibung
Annotation
Remote
Methoden-Parameter sind serialisierbar (values)
@Remote
Local
Methoden-Parameter sind Referenzen
@Local
No-Interface
Gleich wie local“ , aber ohne Business-Interface (nur für Module innerhalb
”
des EAR-Projekts)
@LocalBean
Merke:
Die Verwendung von No-Interface Methoden ist eine Vereinfachung der Anwendung.
Im Zweifelsfalle sollte das Remote-Interface verwendet werden (Joho, 2014).
⁸Timer Events können ausgelöst werden zu einer bestimmten Zeit, nach einer bestimmten verstrichenen Zeit oder zu bestimmten sich
wiederholenden Zeitintervallen. Die Methodenaufrufe können nur in stateless-, Singleton- und Message Driven Beans gemacht werden.
Hochschule Luzern (TA.ENAPP)
21
3.5 lokale oder verteilte Sicht der Clients (Business-Interface)
Wie wir wissen, stellt der EJB ein Business-Interface zur Verfügung. Damit wird dem Client ein Zugriffspunkt
zur Verfügung gestellt und dient als Framework für das Verhalten einer EJB-Komponente.
Dabei existieren die folgenden drei Business-Interface-Typen:
Lokale Interfaces
local client view
Verteilte Interfaces
distributed or remote client view
Web Service Interface
web service view
Merke:
Ein Client kann ein Session Bean nur über die im Business Interface definierten Methoden aufrufen.
3.5.1 Local clients
Local clients müssen in der gleichen JVM laufen wie der EJB-Container (bspw. in einer Anwendung innerhalb
des Applikaktionsservers). Sie können Web-Komponenten oder auch ein anderes EJB sein. Vom lokalen Client aus
gesehen ist die Lokalität des zugegriffenen Beans nicht transparent.
Ein lokales Interface wird folgendermassen gestaltet:
1
import javax.ejb.Local;
2
3
4
5
// Annotiere entweder das Business Interface vom Enterprise Bean als @Local Interface …
@Local
public interface InterfaceName { <output omitted> }
6
7
8
9
// …oder dekoriere die implementierende Bean Klasse mit @Local und spezifiziere das / die Interface(s):
@Local(InterfaceName.class)
public class BeanName implements InterfaceName { <output omitted> }
3.5.2 Remote Clients
Das Remote Interface definiert die Business- und Lebenszyklus-Methoden, die zum Bean gehören und von ausserhalb der JVM, in der die Applikation läuft, erreicht werden sollen.
Ein entferntes Interface wird folgendermassen gestaltet:
1
import javax.ejb.Remote;
2
3
4
5
// Annotiere entweder das Business Interface vom EJB mit der @Remote-Annotation …
@Remote
public interface InterfaceName { <output omitted> }
6
7
8
9
// …oder dekoriere die implementierende Bean Klasse mit @Remote und spezifiziere das / die Interface(s):
@Remote(InterfaceName.class)
public class BeanName implements InterfaceName { <output omitted> }
Die @Remote-Annotation kann entweder auf das Interface angewendet werden oder auf die implementierende Klasse mit dem Hinweis, um welches @Remote-Interface es sich handelt.
Falls unsicher, welcher Zugriff gewählt werden soll: wähle @Remote.
22
Hochschule Luzern (TA.ENAPP)
Mögliche EJB-Aufrufe
zu einem remote platzierten Session Bean können a) über JNDI oder b) durch Verwendung von Annotations bewerkstelligt werden:
a) Initialisierung einer Referenz zu einem remote Session Bean mit JNDI:
1
2
3
4
5
6
7
private MankMgr bankMgr = null;
public void init(){
try {
InitialContext ic=new InitialContext();
bankMgr = (BankMgr)ic.lookup( ”java:comp/envBankMgr”);
} catch( Exception e) { throw new ServletException(e); }
}
b) unter Verwendung von Annotations:
1
2
@EJB(beanName=”BankMgr”) // der Name des Services kann angegeben werden!
private BankMgr bankMgr;
Der Container setzt die Variable, sobald das Servlet initialisiert wird. Die Initialisierung wirft keine Exception.
c) Empfehlung der Software Bakery (Aufruf eines EJB aus einem (Managed) Backing Bean):
1
2
3
4
5
6
@javax.inject.Named
Public Class BookController {
@EJB
private BookEJB bookEJB;
//do something
}
3.6 Session Beans
Session Beans werden vom Container aufgerufen (sobald benötigt). Ein Entwickler kann eigene Methoden
mit folgenden Annotationen implementieren: @PreDestroy (Methode wird dann nach der Erzeugung des Beans
ausgeführt) oder @PostConstruct (Methode wird dann vor der Zerstörung des Beans ausgeführt).
3.6.1 Stateless Session Beans
Stateless
Session
Bean
Kardinalität
Stateless Session Beans haben keinen Status und sind im Gegenteil
zu Stateful
Beans
leichtgewichtig.⁹
Einmal
konstruiert, verbleiben diese im Container und sind ready to use. Ein stateless Bean behält den Status nicht
Operationale Eigenschaften von stateless Session Beans
länger
als der Methodenaufruf
Clients
dauert (d.h. ein Bean für mehrere Client-Aufrufe):
Lebenszyklus
Statelesseines
Session
Bean
Methode
Existiert
nicht
Dependency Injection
Post Construct Callbacks
Bereit
Pre Destroy Callbacks
Timeout
Callbacks
Abbildung 5: Lebenszyklus (links) und Kardinalität (rechts) von Stateless Session Beans
Ein stateless Bean behält den Status nicht länger als der Methodenaufruf eines Clients dauert.
Bruno Joho
42
Enterprise Application
import javax.ejb.Local;
Enterprise Application
import javax.ejb.Remote;
import javax.ejb.Stateless;
1Bruno Joho
2
3
45
⁹Generell sind Session Beans schwergewichtig und beinhalten viele Informationen.
Hochschule Luzern (TA.ENAPP)
23
4
5
6
7
8
9
/** Session Bean implementation class CustomerService */
@Stateless
@Local(CustomerServiceLocal.class)
@Remote(CustomerServiceRemote.class)
public class CustomerService implements CustomerServiceRemote, CustomerServiceLocal, Serializable { ... }
Listing 1: Stateless Session Bean mit lokalem und entferntem Interface
3.6.2 Stateful Session Beans
Pro Stateful Session Bean, das durch den Programmierer definiert wird, besteht immer eine eindeutige
Stateful
Session
Bean Kardinalität
Beziehung zum entsprechenden Session Bean (Kardinalität
1:1). Dadurch
funktionieren
diese Beans sehr zuverlässig – brauchen aber auch mehr Speicher.
Lebenszyklus Stateful Session Bean
Operationale Eigenschaften von stateful Session Beans
Java EE Tooling
Seite 69/163
Methode
beendet
Dependency Injection
Post Construct Callbacks
Pre Destroy Callbacks
Remove or Timeout
Existiert
nicht
5 Face it
Pre Passivate
Callbacks
Bean führt
Das liegt
am Deployment Descriptor:
Nur diejenigen Dateien Dateien, auf die das Muster „*.faces“ und
Business
Bereit
Passiv
„/faces/*“
zutrifft,
werden
von
JSF
verarbeitet.
Das ist suboptimal, und zwar deshalb, weil dann auch alle
ruft Business
Post Activate
Methode aus Client
Methode seiner
Callbacks
stateful Instanz
anderen Dateien,
dieauf KEINE JSF-Tags beinhalten (bzw. von denen man gar nicht will, dass sie von JSF
47
Bruno Joho
Enterprise Application
geparst
werden, z.B. CSS-Dateien),
durch das FacesServlet
laufen, was zu unschönen Ergebnissen führen
Abbildung 6: Lebenszyklus (links) und Bruno
Kardinalität
(rechts) von Stateful
43
Joho
Enterprise Session
Application Beans
34
kann.
1
import
javax.ejb.Local;
Wir
entfernen
also die servlet-mappings aus der web.xml und fügen stattdessen dieses hier ein:
2
import javax.ejb.Remote;
<servlet-mapping>
3
import javax.ejb.Stateless;
<servlet-name>Faces Servlet</servlet-name>
4
5
/** Session
Bean implementation class ShoppingCartService */
<url-pattern>*.xhtml</url-pattern>
6
@Stateful
</servlet-mapping>
7
@Local(ShoppingCartServiceLocal.class)
8
@Remote(ShoppingCartServiceRemote.class)
Geht
natürlich auch entsprechend im grafischen Editor. „Run on Server“ und testen, ob alles funktioniert
9
public
ShoppingCartService
implements
ShoppingCartServiceRemote,
(Queltext class
anschauen,
der im Browser
dargestellt
wird). Falls nicht, mal ShoppingCartServiceLocal,
das Projekt vom Server entfernen
und neuSerializable
deployen. { ... }
Listing 2: Stateful Session Bean mit lokalem und entferntem Interface
Was jetzt noch fehlt, ist das Einbinden von Java-Methoden aus unserer Businesslogik. Das funktioniert so,
dass auf der xhtml-Seite bestimmte Tags eingebunden werden, dadurch JSF Managed Beans (eim WebProjekt) aufgerufen werden, welche dann wiederum unserer Service-Beans im EJB-Layer aufrufen. Das ist
3.7 Client-Zugriff auf Beans
in Abbildung 50 nochmals grafisch dargestellt.
Servlets oder Managed Beans / Backing Beans (wie im nächsten Beispiel) können stateless wie auch stateful
Session Beans aufrufen. Der Zugriff erfolgt dabei in der Regel folgendermassen:
24 50:Hochschule
Luzern (TA.ENAPP)
Abbildung
Zusammenhang
xhtml, Managed Bean, EJB
Dazu erstellen wir zuerst das Package „ch.hslu.edu.enapp.eatmemine.jsf“ und darin eine normale Java
(1.) Aufruf einer xhtml-Seite, welche bestimmte Tags einbindet, wodurch (2.) ein JSF Managed Bean aufgerufen
wird, welches dann (3.) entsprechende Service-Beans im EJB-Layer aufruft.
1
2
3
import javax.ejb.EJB;
import javax.enterprise.context.SessionScoped;
import javax.inject.Named;
4
5
6
7
8
9
10
11
@Named // Deklariert dieses Bean als Managed Bean unter dem javax.enterprise.context-Scope
@SessionScoped // Scope der Bean auch aus javax.enterprise.context
public class ShoppingCart implements Serializable {
@EJB
ShoppingCartServiceRemote shoppingCartService;
@EJB
CustomerServiceRemote customerService;
12
... // weitere Codezeilen weggelassen
13
14
public void addItem(final ProductDTO product) {
shoppingCartService.addItem(product);
}
15
16
17
18
public CustomerDTO getCustomer() {
return customerService.getCustomer();
}
19
20
21
22
}
Listing 3: Beispiel-Zugriff aus dem Backing Bean Shopping Cart im Web-Tier auf zwei Session Beans
Merke:
Aus diesem und dem vorangehenden Kapitel wissen wir nun, dass sowohl die Geschäftslogik (EJBs), als auch
die JSF-Beans einen Status haben können. Diese Status werden in den Session Beans (EJB) und Managed Beans
(JSF) über entsprechende Annotationen gesteuert.
Bei der Anwendung sollte der Entwickler folgende Regeln beachten:
• keine Entitätsklassen aufrufen durch Servlets → kann zu Ineffizienz und Fehler führen
stattdessen Aufrufe immer über EntityManager Beans absetzen
• wenige – dafür komplexe – anstatt vieler Methodenaufrufe von Servlets
• stateless Session Beans können zur Initialisationszeit lokalisiert werden
Hochschule Luzern (TA.ENAPP)
25
4 AJAX – Asynchronous JavaScript and XML
Definition 4
AJAX bezeichnet ein Konzept der asynchronen Datenübertragung zwischen einem Browser und dem Server.
Dieses ermöglicht es, HTTP-Anfragen durchzuführen, während eine HTML-Seite angezeigt wird, und die Seite
zu verändern, ohne sie komplett neu zu laden. (Ajax (Programmierung), 2014)
Das Modell einer traditionellen Webanwendung (links) im direkten Vergleich mit einer
Ajax-Webanwendung (rechts). Sämtliche Anwendungsdaten werden auf dem Server in
einer Datenbank und/oder einem LegacySystem abgespeichert.
Klassische Interaktion
Lebenszyklus in AJAX
4.1 Vergleich des Lebenszyklus von klassischer Applikation und Ajax-Applikation
4 Enterprise Application
Enterprise
Application
Abbildung
7: Klassische
(links) und AJAX-Interaktion
(rechts)
BrunoWeb-Interaktion
Joho
no Joho
Der Lebenszyklus in AJAX ist aus der rechten Darstellung in Abbildung 7 ableitbar: während in herkömmlichen
26
Hochschule Luzern (TA.ENAPP)
Web-Projekten der Lebenszyklus bei jedem Seitenaufruf initiiert und bei abgeschlossenem Laden beendet wird,
so kann dieser in einer AJAX-Applikation über mehrere Seitenaufrufe hinweg angegeben werden.
4.2 AJAX-Komponenten
AJAX Komponenten
Eine Ajax-Anwendung basiert auf folgenden Web-Techniken:
a) HTML (oder XHTML)
b) Document
Object
Model
(DOM) zur RepräsentaJava
Script
definiert
tion der Daten oder Inhalte
Busines Regeln und
c) JavaScript zur Manipulation des Document ObProgramm
Ablauf
ject Models
(Business-Logik)
und zur dynamischen
DasderDocument
Object
Darstellung
Inhalte. JavaScript
dient auch als
Schnittstelle
zwischen
Komponenten.
Model
undeinzelnen
das Cascading
d) Das XMLHttpRequest-Objekt,
Bestandteil
Style Sheet erlauben
der vieler
Browser,Applikation
um Daten auf asynchroner
Basis mit dem
ihr Aussehen
Webserver austauschen zu können.
aufgrund der neuen Daten,
Im Zusammenhang
mit Ajax-Anwendungen
die im Hintergrund
per werden
auch andere Webtechnologien eingesetzt, die ursächXMLHttpRequest Object
lich aber keinen Zusammenhang mit Ajax haben: CSS
vom Server geholt wurden,
zur Formatierung einer Webseite oder XSLT zur Datenzu verändern.
transformation.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
<h:form id=”form”>
<h:panelGrid id=”baseData” columns=”2”>
<!-- ... -->
<h:selectBooleanCheckbox id=”useCreditCard”
Bruno Joho
Enterprise Application
value=”#{customerBean.customer.useCreditCard}”
valueChangeListener=”#{customerBean.useCreditCardChanged}”>
<f:ajax render=”ccData” /> // AJAX-Call in JSF
</h:selectBooleanCheckbox>
</h:panelGrid>
<h:panelGrid id=”ccData” columns=”2”>
<!-- ... -->
</h:panelGrid>
<!-- ... -->
</h:form>
Die 4 Hauptkomponenten von AJAX
8
Listing 4: AJAX-Handling in JSF 2.0 zur Manipulation des panelGrid ’ccData’
4.2.1 Attribute des Tags f:ajax
Das im Listing 4 gezeigte Beispiel <f:ajax render=”ccData”/> kann ausführlich so geschrieben werden:
<f:ajax event=”valueChange” execute=”@this” render=”ccData”/>
Die Attribute haben dabei folgende Bedeutung:
event Name des Ereignisses, das die Ajax-Anfrage auslöst. Mögliche Werte sind valueChange für Eingabekomponenten, action für Steuerkomponenten.
execute Eine durch Leerzeichen separierte Liste der IDs jener Komponenten, die beim Bearbeiten der Ajax-
Anfrage durch JSF im Lebenszyklus ausgeführt werden sollen.
→ Angabe der Komponenten, welche einer Änderungsverfolgung unterliegen
Hochschule Luzern (TA.ENAPP)
27
render Eine durch Leerzeichen separierte Liste der IDs jener Komponenten, die beim Bearbeiten der Ajax-Anfrage
durch JSF im Lebenszyklus gerendert werden sollen.
onevent Erlaubt das Registrieren einer JavaScript-Callback-Funktion für Ajax-Ereignisse.
onerror Erlaubt das Registrieren einer JavaScript-Callback-Funktion für Fehler, die beim Bearbeiten der Ajax-Anfrage
auftreten.
disabled Das Ajax-Verhalten wird abgeschaltet“ , wenn dieses Attribut auf true gesetzt ist.
”
4.3 Lifecycle
Bruno
Joho
4.4 JavaScript
API
Lifecycle
Enterprise Application
15
jsf.ajax.request(source, event, options) Diese Methode sendet eine Ajax-Anfrage an den Server.
jsf.ajax.response(request, context) Diese Methode bearbeitet die Anwort des Servers auf die Ajax- Anfrage
und ist für Endanwender nicht relevant
jsf.ajax.addOnError(callback) Diese Methode registriert eine Callback-Funktion zum Behandeln von Fehlern,
die während der Bearbeitung der Ajax-Anfrage aufgetreten sind.
jsf.ajax.addOnEvent(callback) Diese Methode registriert eine Callback-Funktion zum Behandeln von Ajax-Ereignissen.
4.5 JSON – JavaScript Object Notation
Definition 5
Die JavaScript Object Notation, kurz JSON, ist ein kompaktes Datenformat in einer einfach lesbaren Textform zum Zweck des Datenaustauschs zwischen Anwendungen. Jedes gültige JSON-Dokument soll ein
gültiges JavaScript sein und per eval() interpretiert werden können. Aufgrund kleiner Abweichungen in der
Menge der erlaubten Unicode-Zeichen ist es jedoch möglich, JSON-Objekte zu erzeugen, die von einem normkonformen JavaScript-Interpreter nicht akzeptiert werden. Davon abgesehen ist JSON aber unabhängig von
der Programmiersprache. Parser existieren in praktisch allen verbreiteten Sprachen. (JavaScript Object Notation, 2014)
28
Hochschule Luzern (TA.ENAPP)
Beispiel: JSON-Notation (links) und XML-Notation (rechts)
{
”Herausgeber”: ”UBS”,
”Nummer”: ”1234-5678”,
”Deckung”: 2e+6,
”̈Wahrung”: ”EURO”,
”Inhaber”: {
”Name”: ”Mustermann”,
”Vorname”: ”Max”,
”̈mannlich”: true,
”Hobby”: [
”Reiten”,
”Golfen”,
”Lesen”],
”Alter”: 42
}
}
<Kreditkarte
Herausgeber=”UBS”
Nummer=”1234-5678”
Deckung=”2e +6”̈
Wahrung=”EURO”>
<Inhaber
Name=”Mustermann”
Vorname=”Max”̈
mannlich=”true”
Alter=”42”>
<Hobby>Reiten</Hobby>
<Hobby>Golfen</Hobby>
<Hobby>Lesen</Hobby>
</Inhaber>
</Kreditkarte>
4.6 Java Web Start
Definition 6
Java Web Start ist ein Verfahren zur Übertragung von Java-Anwendungen über das Internet und zum Start mit
nur einem Klick. Im Unterschied zu Java-Applets benötigen Java-Web-Start-Anwendungen keinen Browser, um
ablaufen zu können. (Java Web Start, 2014)
Die Ausführung geschieht über JNLP (Java Network Launching Protocol)¹⁰, wonach der Container die Applikationsdaten (JAR-File) im Hintergrund lädt.
¹⁰die JRE registriert sich mit dem application/x-java-jnlp-file MIME-Type
Hochschule Luzern (TA.ENAPP)
29
5 Messaging9 Java Message Service
9 Java Message Service
5.1 Java Messaging
Service
ren, das eher
an einen Briefwechsel oder eine E-Mail-Kommunikation
erinnert. Dabei kann der Informationssender seine Nachricht verfassen,
sich weiteren Aufgaben widmen, während der Informatiren, das
eher an einen Briefwechsel
oderSoftware-Komponenten,
eine E-Mail-Kommunikation
Der Java Messagingabschicken
Serviceund
(JMS)
beschreibt eine
Kommunikation
zwischen
welonsempfänger nur regelmäßig sein Postfach auf neue Eingänge überprüerinnert. Dabei kann der Informationssender seine Nachricht verfassen,
fen
muss.
che asynchron verläuft: Sender und Empfängerabschicken
müssenund
nicht
online
sein,
der Sender
braucht den
sich gleichzeitig
weiteren Aufgaben
widmen,
während
der InformatiDie Idee
hinter Message-Systemen
ist dabei
einfach:
Statt
Senonsempfänger
nur regelmäßig
sein Postfach
auf neue Eingänge überprüEmpfänger auch nicht
zu kennen.
Damit ist JMS
– imganz
Gegensatz
zudass
anderen
Kommunikationsmöglichkeiten
wie
der und Empfänger eines Methodenaufrufs
direkt miteinander in Verbinfen muss.
gekoppelt:
bspw. TCP, Sockets oder
RMI¹¹–wielose
dung treten,
es etwa
bei der Remote Method Invocation (RMI) der Fall
Loose Kopplung
Die Idee hinter
Message-Systemen
ist, kommunizieren beide mit einem Vermittler,
dem so
genannten Mes- ist dabei ganz einfach: Statt dass Sender und
Empfänger
eines
Methodenaufrufs
direkt miteinander in Verbinsage Broker. Dieser nimmt die Anforderung
entgegen
und stellt
sicher,
dass
treten, zugestellt
wie es etwa
bei der Remote Method Invocation (RMI) der Fall
diese zu einem späteren Zeitpunkt demdung
Empfänger
wird.
ist, kommunizieren beide mit einem Vermittler, dem so genannten Message Broker. Dieser nimmt die Anforderung entgegen und stellt sicher, dass
diese zu einem späteren Zeitpunkt dem Empfänger zugestellt wird.
Synchrone Kommunikation
Abbildung 9.1
Klassischer Methodenfernaufruf vs. Messaging
Abbildung99.1 Java
Klassischer Methodenfernaufruf vs. Messaging
Message Service
Transparente Aufgabenverteilung
Da der Sender einer Nachricht diese nicht an einen konkreten Empfänger sendet, sondern lediglich in einem »Eingangskorb« ablegt, kann er
auch nicht entscheiden, wer die Nachricht letztendlich entnimmt und
Asynchrone
bearbeitet.
Für ihn ist es Kommunikation
vollkommen transparent, ob am anderen Ende
der Leitung ein einzelner oder eine Gruppe von gleichberechtigten
Empfängern die Bearbeitung der Informationen übernimmt.
Hierdurch können auf einfache Art und Weise gut skalierende Systeme
implementiert werden, die anstehende Aufgaben zunächst sammeln
und ab einer genügend großen Anzahl in einem Rutsch erledigen. Ein
Beispiel hierfür sind Datenbank- oder Logging-Operationen.
9.1 Asynchrone Kommunikation
Hohe Integrationsfähigkeit
Durch dieeinlose
istder
Messaging vor allem für die plattformObwohl nachrichtenbasierte Kommunikation
sehrKopplung
altes Thema
und
programmiersprachenübergreifende
Kommunikation
ist und die Wurzeln Message
OrientedApplication
Middleware (MOM) bis
5 von AnwenBrunoInformatik
Joho
Enterprise
Abbildung
8: Vergleich zwischen
synchroner
und asynchroner
Kommunikation
9.1
Asynchrone
Kommunikation
in die frühen achtziger Jahre zurückreichen,
gab
es bis 1998
einheitdungen
geeignet.
So kein
kann
ein
verteiltes System leicht um neue Komliches Java API für die Kommunikation
mit Message
Broker-Systemen.
ponenten
erweitert
werden oder bestehende Teile lassen sich
Obwohl nachrichtenbasierte
ein sehr altes Thema der
Zwar bieten einige Hersteller eigene Bibliotheken
für den Zugriff aufKommunikation
ihr
austauschen
und
durch
andere
Systeme
ersetzen.
Die Umsetzung desSystem
Services
geschieht
über
Queues.
Als Vorteile
dessen
nennt man
die bis
lose Koppist Implementierungen,
und
die Wurzeln
Message
Oriented
Middleware
(MOM)
an und
hin und wieder
gabsogenannte
esInformatik
auch eigene
in diebrachte
frühen jedoch
achtziger
zurückreichen, gab es bis 1998 kein einheitden großen Durchbruch für Java-Entwickler
erstJahre
Suns Spelung, einfache Integration,
asynchrone Kommunikation,
One-to-many
Kommunikation
und die Garantie, dass die Liezifikation für den Java Message Serviceliches
(JMS).
Java API für die Kommunikation mit Message Broker-Systemen.
Zwar bieten
einige
Hersteller eigene
Bibliotheken für den Zugriff auf ihr
ferung sicher ankommt.
Der Messagebestand
Flow diesmal
ist
überdies
Transaktionen
9.2
Konzept
Die Herausforderung
nichtDas
in durch
der Schaffung
einer guten geschützt.
5.1.1 Konzept
System
an und
hin und wieder
Referenzimplementierung, sondern darin,
ein API
zu definieren,
das einegab es auch eigene Implementierungen,
den Systeme
großen Durchbruch für
Java-Entwickler
brachte jedoch erst Suns Spemöglichst große Anzahl bereits Analog
etablierter
kann.
So
zum Javaunterstützen
Naming and
Directory
Interface ist JMS als allgemeines
zifikation
für den
Java Message
Service (JMS).
entstand eine sehr allgemeine und
stark
abstrahierende
Bibliothek,
die
von
API spezifiziert, dessen Implementierung vom Anbieter eines MessageDienst zu Dienst mit individuellen Eigenschaften
versehen werden
kann.
Die Herausforderung
bestand
diesmal nicht in der Schaffung einer guten
Diensts gestellt wird. Die Anbieter implementieren auf Grundlage eines
Referenzimplementierung, sondern darin, ein API zu definieren, das eine
ServiceKapitel
Provider Interface
(SPI)
Adapter,
die z.B. und
auch Klassen
den Zugriff
auf
Die Anwendung greift über die JMS-API (siehe
welche
diverse
Interfaces
möglichst 5.1.2),
große Anzahl
bereits
etablierter
Systeme unterstützen
kann.beinhaltet,
So
Message-Dienste
anderer
Programmiersprachen,
wie
etwa
IBMs
MQSeries,
entstand eine sehr allgemeine und stark abstrahierende Bibliothek, die von
auf
den Dienst zu:
320
ermöglichen.
Dienst zu
Dienst mit individuellen Eigenschaften versehen werden kann.
Das
Konzept
Abbildung 9.2
Aufbau und Zugriff auf
Messaging-Systeme
320
Auch andere Message Dienste
können mit demselben API
verwendet werden.
IBM MQ Series
Joho
Enterprise
Application zu kennen
¹¹bei den genanntenBruno
Technologien
braucht eine Applikation
die Remote-Methoden
322
30
Hochschule Luzern (TA.ENAPP)
7
Ein JMS Provider ist dabei ein Messaging System, das eine Implementation des JMS-API zur Verfügung stellt.
Vorbereitung der benötigten Ressourcen:
Context jndiContext = new InitialContext();
ConnectionFactory factory = (ConnectionFactory) jndiContext.lookup(”ConnectionFactory”);
Queue myQueue = (Queue) jndiContext.lookup(”myQueue”);
JMS Komponenten
Relationen
Listing 5: Erzeugung einer QueueConnectionFactory
und einer
Queue
Der Dienst wird dann über die nachfolgend gezeigte Komponenten-Relation genutzt:
Als erstes wird eine Connection
Connection
erzeugt (Connection), auf der eiFactory
ne Session gestartet wird. Darauf
Producer
wird dann, je nachdem, ob gecreates
creates
sendet oder empfangen wird, ein
creates
Sender bzw. ein Receiver geöffcreates
Connection
Session
net und an der Queue registriert.
Darüber können nun Messages
gesendet bzw. empfangen werConsumer
den (Java Message Service, 2014):
Msg
sends/
publishes to
Destination
Msg
Receive from/
subscribes to
Connection connection = factory.createConnection();
Session session = connection.createSession(false,
QueueSession.AUTO_ACKNOWLEDGE);
Bruno Joho
Enterprise Application
connection.start(); // evtl. nicht nötig
MessageProducer sender = session.createProducer(myQueue);
Message message = session.createTextMessage(messageData);
sender.send(message);
8
Listing 6: JMS zum Senden einer Message
Die JMS-Nachricht wird erst verschickt, wenn die Session geschlossen wird. Alternativ muss man der EJB das Transaktionsmanagement wegnehmen und das Senden mit connection.start() auslösen.
... // Programmcode ausgelassen
QueueReceiver receiver = session.createReceiver(myQueue);
connection.start();
Message message = receiver.receive();
Listing 7: JMS zum Empfangen einer Message (Client)
JMS API Architecture
5.1.2 JMS API Architecture
Der JMS Provider ermöglicht die administrative Kontrolle des Systems. Die Java EE Plattform (Container) beinhaltet einen solchen. JMS Clients sind dabei in Java geschriebene Programme oder Komponenten, die Nachrichten produzieren und konsumieren. Jede Java EE Applikation kann als JMS Client agieren. Messages sind Objekte, die Nachrichten zwischen Clients tragen.
Administrative Objekte sind vorkonfigurierte
JMS Objekte, die durch den Administrator erzeugt werden und für den Gebrauch durch Clients bestimmt
sind.
Bruno Joho
@Ressource( lookup =„jms/ConnectionFactory“)
@Ressource( mappedName =„jms/ConnectionFactory“)
(@Ressource siehe JEE 7 Tutorial Seite 108)
Enterprise Application
Hochschule Luzern (TA.ENAPP)
25
31
Destinations
Es gibt zwei Arten von administrierten
Objekten
(siehe Abbildung
9): Destinations
und ConnectionFactories:
Administrierte
Objekte
(Connection
Factories)
Abbildung 9: Destinations sind Nachrichten-Verteil-Punkte“
”
Destination empfangen, halten und verteilen Nachrichten
Bruno Joho
Enterprise Application
10
5.2 JMS-Architekturen
JMS und der durch diesen angesteuerte Dienst unterstützen zwei unterschiedliche Ansätze zum Versenden
von Nachrichten (?):
1. zum einen die Nachrichtenwarteschlange (queue) für sogenannte point-to-point Verbindungen und
2. zum anderen ein Anmelde-Versendesystem (engl. topic) für Publish / Subscribe-Kommunikation.
5.2.1 Point-to-Point Architektur
Point to Point Architektur
Bei der Warteschlange sendet
derMessage-Queue
Sender an einekann
Queue,
an der
ein oderhaben..
mehrere Empfänger hängen. Ist
Die
mehrere
Consumer
Wenn
einer
Consumer
die Message
von der
Queue
konsumiert
kein Empfänger verfügbar,
kann
dieder
Nachricht
optional
gespeichert
werden
und
potentielle Empfänger können
(liest),
dann
wird
diese
gelöscht.
sie jederzeit später abholen.
Für den Fall eines einzelnen Empfängers kann man dies am besten mit einem Paketdienst vergleichen: jede
Sendung hat genau einen Empfänger. Ist dieser nicht zu Hause, kann er sich die Sendung zu einem beliebigen
11
Bruno Joho
Enterprise
Application
Zeitpunkt später abholen.
Bei mehreren Empfängern
wird
bei der Zustellung der Nachrichten
sichergestellt, dass
jede eingereihte Nachricht exakt einmal zugeteilt wird. Hierdurch lässt sich Load Balancing realisieren, bei
dem Empfänger beliebig hinzugefügt und entfernt werden können. (Java Message Service, 2014)
Merke:
Eine Message Queue hält alle Nachrichten zurück bis sie konsumiert sind. Die Message-Queue kann mehrere Consumer haben. Wenn einer der Consumer die Message von der Queue konsumiert (liest), dann
wird die Message aus der Queue entfernt.
32
Hochschule Luzern (TA.ENAPP)
5.2.2 Publish / Subscribe Architektur
Publish / Subscribe Architektur
Bei dem Anmelde-Versendesystem werden die Nachrichten an ein Topic geschickt, auf das eine beliebige
Anzahl von Empfängern hört. Wird die Nachricht nicht konsumiert, weil kein Empfänger sich an das Topic angemeldet hat, dann ist dies unerheblich. Man kann dies am besten mit einem Fernsehsender vergleichen (BroadDieman
Topic-Queue
alle Messages
von allen
casting): entweder
schaltet den hält
Fernseher
ein und siehtbis
diesie
Nachricht
oderSubscribern
man lässt den Fernseher aus
konsumiert
wurden.können
Fällt ein
Subscriberauch
aus,zwischengespeichert
behält die Topic-werden (durableund sieht die Nachricht
nicht. Wahlweise
die Nachrichten
Queue
die2014)
Message bis der Consumer zurückkommt.
subscription). (Java Message
Service,
ssage Konstruktion und Typen
Bruno Joho
12
Enterprise Application
Merke:
Die Topic-Queue hält alle Messages, bis sie von allen Subscribern konsumiert wurden. Fällt ein Subscriber
Message Objekte
kapseln
die dieInformation
aus, behält
die Topic- Queue
Message solange bis der Consumer zurückkommt.
5.2.3 Message-Objekte
Der JMS Header
Header
Properties
Body
Enterprise Application
beinhaltet Informationen über Routing und Identifikation.
Jedes Header-Feld beinhaltet Get-/Set-Methoden. Praktisch alle Felder werden
automatisch gesetzta durch durch die send() und publish()-Methoden. Der Client kann natürlich eine Auswahl davon selber setzen.
JMS Properties halten Werte als Ergänzung zu den Header-Feldern. Die
Property-Namen sind durch das JMS-API vordefiniertb und beginnen allesamt
mit JMS. Der JMS-Provider kann (in Abhängigkeit von der Implementation) die
Properties unterstützen.
Der JMS Body unterstützt 5 verschiedene Message-Formate:
– StreamMessage Ein Stream von primitiven Java Werten, aufgefüllt und gelesen sequentiell.
– TextMessage Ein java.lang.String-Objekt
– ObjectMessage ein serialisierbares Java-Objekt
– ByteMessage ein Stream von uninterpretierten Bytes oder binären Daten
– MapMessage Ein Set von Werte-Paaren, z.B: Hash Table
adefault-Werte, sofern nichts anderes angegeben
14
bBeispiele: JMSMessageID, JMSDeliveryMode,
JMSExpiration, JMSPriority, JMSRedelivered.
5.2.4 Sicheres Messaging
In gewissen Fällen soll ein Administrator entscheiden können, wie lange eine Message maximal in der entsprechenden Queue verweilen soll. Dafür kennt JMS verschiedene Mechanismen:
1. Setting time-to-live (in ms) – die Nachricht wird nicht geliefert wird wenn sie out-of-date ist
Hochschule Luzern (TA.ENAPP)
33
2. Specifying message persistence – die Nachricht darf nicht verloren gehen (bspw. bei einem Serverausfall)
3. Controlling acknowledgment – Optionen zu Debug-Zwecken (bspw. eine Bestätigungsnachricht bei Zustellung erhalten)
4. Creating durable subscribers Nachrichten werden im Pub / Sub-Modell sicher zugestellt.
5. Setting priorities (0 – 9) – Priorisierung der Zustellung
Dies kann über folgendes Codefragment definiert werden:
//producer.setDeliveryMode(Message Persistence, Priorität, Time-to-live)
producer.setDeliveryMode(DeliveryMode.NON_PERSISTENT, 2, 1000);
Listing 8: JMS zum Empfangen einer Message (Client)
In diesem Beispiel gingen Messages verloren, wenn der Server offline wäre. Dies könnte aber wie unter Punkt 2
beschrieben umgangen werden.
5.2.5 Erzeugen eines Message Producers (nicht prüfungsrelevant)
Erzeugen eines Message Producers
1. Beschaffe eine ConnectionFactory unter Verwendung von Injection am JNDI API. Die ConnectionFactory ist
ein administriertes Objekt und wird verwendet um ein Connection-Objekt (3) zu erzeugen.
2. Beschaffe die MessageQueue unter Verwendung von Injection am JNDI API. Die MessageQueue ist ein admi21
Bruno
Johound implementiert das p-to-p
Enterprise
Application
nistriertes
Objekt
Message-Protokoll
Ziel.
3. Erzeuge ein Connection-Objekt unter Verwendung der ConnectionFactory. Eine Connection ermöglicht Messages an Clients zu senden oder von diesen zu empfangen.
4. Erzeuge ein Session-Objekt (single threaded) unter Verwendung des Connection-Objektes.
5. Erzeuge ein QueueSender-Objekt unter Verwendung des Session-Objektes. Das QueueSender-Objekt stellt
das API um Messages an die Ziel-Queue zu versenden.
6. Erzeuge ein oder mehrere Message-Objekte unter Verwendung von Session-Objekten. Verwende das SessionObjekt um den benötigten Typ von Message-Objekten zu erzeugen. Nach dem Erzeugen fülle die Message mit
den benötigten Daten.
7. Fülle die Message unter Verwendung der Methode setText() im TextMessage-Objekt mit Text.
8. Versende eine oder mehrere Message-Objekte unter Verwendung des QueueSender-Objekts. Verwende die
send()-Methode um Messages an die Ziel-Queue zu versenden.
34
Hochschule Luzern (TA.ENAPP)
Beispiel 5.1 (Messaging System
im Verkauf
).
Beispiel:
Messaging
Bruno Joho
System imVerkauf
Enterprise Application
27
5.3 Message Driven Beans
Ein JavaEE Application Server ermöglicht die Erzeugung von Message Driven Beans (MDB). Message Driven Beans erlauben die asynchrone Kommunikation zwischen Java EE-Applikationen.¹² Der Application Server besitzt eine (oder mehrere) JMS Listener Queues, die JMS Messages empfangen können – Messages können dabei
von jeder Java EE-Komponente gesendet und empfangen werden.
Trifft eine Message ein und das MDB hat sich zu dieser Queue eingeschrieben, dann wird die onMessage()Methode des MDB aufgerufen. MDBs sind mit folgender Annotation gekennzeichnet:
@javax.ejb.MessageDrivenBean
Unterschied zwischen MDB und Session Bean
Clients greifen nicht über Interfaces auf die MDB zu; sie sind einem Stateless Bean ähnlich. Ein MDB hält keine
Daten oder Status für einen Client.
Asynchrone Aufrufe von EJBs (MDBs)
MDBs beginnen
kurz nach
dem Erhalt einer Nachricht zu laufen, sind kurzlebig und werden asynchron ausgeführt.
EJB operieren
asynchron.
Der Entwickler schreibt onMessage();
Der Entwickler überschreibt im MDB onMessage:
MDB
Bruno Joho
Enterprise Application
35
public void onMessage(Message message) {
try {
// Extract out information from message
MapMessage mapMessage = (MapMessage)
message;
int userId = mapMessage.getInt(”userId”);
String email = mapMessage.getInt(”email”);
// perform business logic here...
}
}
Merke:
MDBs sind zustandslos (gleich wie Stateless Beans) und können transaktionsgesteuert sein.
¹²MDBs sind nicht Teil des EJB light-Profils (wie bspw. Tomcat). Weiter können sie nicht in einem war“ -File deployed werden.
”
Hochschule Luzern (TA.ENAPP)
35
5.4 Java EE Web Services (JAX-WS)
Typische Web Service-Architekturen bestehen aus dem typischen Dreieck Consumer – Provider – Service Registry:
Abbildung 10: http://help.sap.com/saphelp_mdm550/helpdata/en/45/018c03166a0486e10000000a155369/
TEMPLATE_image002.gif
Requester und Provider kommunizieren über ein Protokoll miteinander, der Verbindungsaufbau dazwischen
beruht auf UDDI (Universal Description, Discovery and Integration).
Web Service Description Language (WSDL)
wird seit Version 2.0 erst richtig unterstützt. Sie nutzt UDDI (Universal Description, Discovery and Integration), was eigentlich dazu entwickelt wurde, um in SOAP-Messages Formate und Protokoll-Bindings zu ermöglichen.
5.4.1 Nutzung von Web Services mit SOAP
SOAP URI
Im Gegensatz zu JMS verwendet JAX-WS ein Protokoll, das normiert ist und eigentlich auch von nicht Java“ ”
Clients verstanden wird: SOAP. SOAP (ursprünglich für Simple Object Access Protocol) ist ein Netzwerkprotokoll, mit dessen Hilfe Daten zwischen Systemen ausgetauscht und Remote Procedure Calls durchgeführt
Es ist kein Requirement, dass alle SOAP Messages zur gleichen URL zeigen
werden können. Es stützt sich auf XML zur Repräsentation der Daten und auf Internet-Protokolle der Transportund Anwendungsschicht (in der Regel TCP) zur Übertragung der Nachrichten. (SOAP, 2014)
HTTP POST
HTTP POST
getPartsList()
URL 1
SOAP
Server
getPart(id)
submit(PO)
HTTP POST
Abbildung 11: Beispiel-URI des SOAP-Servers: http://www.parts-depot.com/soap/servlet/messagerouter
Trotzdem ist es “best practice” unter SOAP Herstellern.
Zum Beispiel, hier die URL wenn man Apache SOAP benützen will
SOAP beinhaltet in der sogenannten
Envelope einen Header und Body:
[host]/soap/servlet/messagerouter
Apache SOAP: http://ws.apache.org/soap/
36 Bruno
Hochschule
Joho Luzern (TA.ENAPP)
Enterprise Application
47
6.
Im Gegensatz zu JMS verwendet JAX-WS ein Protokoll das normiert ist und eigentlich
auch von „nicht Java“ Beteiligten verstanden wird. Wie heisst dieses und wie ist es
aufgebaut?
Simple Object Access Protocol (SOAP).
Quelle: (SOAP, 2014)
7.
<soap-env:Envelope
<?xml version=”1.0”?>
xmlns:soap-env="http://schemas/xmlsoap.org/soap/envelope/">
<soap:Envelope
xmlns:soap=”http://www.w3.org/2001/12/soap-envelope”
<soap-env:Header>
soap:encodingStyle=”http://www.w3.org/2001/12/soap-encoding”>
<!– Header Information -->
<soap:Body pb=”http://www.acme.com/phonebook”>
</soap-env:Header>
<pb:GetUserDetails>
<soap-env:Body>
<!–<pb:UserID>12345</pb:UserID>
Body Information -->
</pb:GetUserDetails>
</soap-env:Body>
</soap:Body>
</soap-env:Envelope>
</soap:Envelope>
Welche Dienste und welche Spezifikation sind für einen verteilten Web Service
Beispiel 5.2. (1) Der Client erzeugt ein SOAP-Dokument, das die gewünschten Prozeduren definiert. Er schickt dieses in
notwendig?
einem HTTP
POST zumand
Webservice
(SOAP
Server).
(2) Derund
Server
entnimmt
dem Dokument
den entsprechend
Universal
Description
Discovery
Interface
(UDDI)
Web
Service Description
Language
(WSDL) gewünschten Service und gibt die Daten zum Client zurück. (3) Der Client erzeugt abermals ein SOAP-Dokument, das die gewünschte Methode mit den entsprechenden Parametern spezifiziert und sendet diesen per HTTP POST zum SOAP Server. (4) Der
Web Service mit SOAP
Server entnimmt dem übermittelten Dokument wiederum die Info, welche Methoden er involvieren muss. Daraus resultiert die Rückgabe
Service: der
Gibgewünschten
mir eine ListeDaten.
von Teilen
Der Client erzeugt ein SOAP Dokument das die gewünschten Prozeduren
definiert.
(1)
(2)
<?xml version="1.0"?>
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
Daten Rückgabe– Liste von Teilen
<?xml version="1.0"?>
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
<p:getPartsList xmlns:p="http://www.parts-depot.com"/>
</soap:Body>
</soap:Envelope>
Der Client schickt mit einem HTTP POST das Dokument zum SOAP Server (Web
Service):
http://www.parts-depot.com/soap/servlet/messagerouter
Der SOAP Server entnimmt dem Dokument welchen Service er aufrufen muss.
Starten Web Service mit SOAP
<p:getPartsListResponse xmlns:p="http://www.parts-depot.com">
<Parts>
<Part-ID>00345<Part-ID>
<Part-ID>00346<Part-ID>
<Part-ID>00347<Part-ID>
<Part-ID>00348<Part-ID>
</Parts>
<p:getPartsListResponse>
Service: Welches sind die detaillierten Infos?
</soap:Body>
Daten
48
Enterprise Application
Der Client erzeugt ein SOAP Dokument das die gewünschte Methode </soap:Envelope>
(3) spezifiziert mit den part-id Parametern.
(4)
Bruno Joho
Rückgabe – gesuchtes Teil
Wieso keine Links? Eine URL die zu einem SOAP Service zeigt ist Nutzlos, da der Link
version="1.0"?>
<?xml version="1.0"?>
nur zum<?xml
Server
zeigt und der Server nocht nicht weiss welchen Service er aufrufen soll.
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
<soap:Body>
<p:getPart xmlns:p="http://www.parts-depot.com"> Bruno Joho
49
Enterprise Application
<p:getPartResponse xmlns:p="http://www.parts-depot.com">
<part-id>00345</part-id>
<Part-ID>00345</Part-ID>
</p:getPart>
<Name>Widget-A</Name>
</soap:Body>
<Description>This part is used with…</Description>
</soap:Envelope>
<UnitCost currency="USD">0.10</UnitCost>
<Quantity>10</Quantity>
</p:getPartResponse>
Der Client macht einen HTTP POST mit diesem Dokument auf den SOAP Server:
http://www.parts-depot.com/soap/servlet/messagerouter
</soap:Body>
Das ist die gleiche URL wie bei den anderen Diensten. Der SOAP Server entnimmt dem</soap:Envelope>
Dokument welche Methoden er involvieren muss.
Bruno Joho
Abbildung 12: Beispiel einer50SOAP-Abfrage (Teile-Liste)
Enterprise Application
Bruno Joho
ENAPP_Survey_05_Messaging.docx
Seite 2 von 2
51
Enterprise Application
http://www.notenstatistik.ch
Hochschule Luzern (TA.ENAPP)
37
6 JNDI
Definition 7
Java Naming and Directory Interface (JNDI) ist eine Programmierschnittstelle (API) innerhalb der Programmiersprache Java für Namensdienste (Objekte) sowie Verzeichnisdienste (erweiterte Namensdienste). Mit Hilfe dieser Schnittstelle können Daten und Objektreferenzen anhand eines Namens abgelegt und von
Nutzern der Schnittstelle abgerufen werden.
Die Schnittstelle ist dabei unabhängig von der tatsächlichen Implementierung. Vielmehr ist JNDI ein sogenanntes Service Provider Interface (SPI), das Herstellern erlaubt, eigene Lösungen in dieses Framework
einzubinden (bspw. bei LDAP). (JNDI, 2014) Damit bildet das SPI die Gegenstelle zum API und ermöglicht eine
problemlose Kommunikation mit dem Java API.
JNDI Architecture
Abbildung 13: JNDI Architecture
Bruno Joho
Enterprise Application
5
6.1 JNDI Naming Service
6.1.1 JNDI API
Die API enthält einen Mechanismus zur Bindung eines Objektes an einen Namen und Methoden für den
Abruf von Informationen anhand eines Namens. Des weiteren enthält die API ein Ereigniskonzept, über das
Clients von Änderungen informiert werden sowie spezielle Erweiterungen für LDAP-Funktionalitäten.
JNDI erlaubt die Unterstützung bereits vieler Arten von Namens- und Verzeichnisdiensten. Beispiele sind LDAP,
DNS, NIS, CORBA oder auch das Dateisystem.
6.1.2 Packages
javax.naming definiert die Basismethoden für den Zugriff auf Namendienste (Interface): lookups, bind /
unbind, renaming für Objekte und erzeugen / löschen von Subkontext darstellt.
javax.naming.directory erweitert das naming-Paket mit den Zugriffen auf Namensdienste. Erlaubt das Abholen
von Attributen, assoziert mit im Directory gespeicherten Objekten.
javax.naming.event unterstützt die Event-Notifikation in Directory Services. Es gibt dabei Events und Listeners.
javax.naming.ldap erweitert das javax.naming.directory-Paket mit erweiterten Operation Controls und funk-
tioniert auf der Basis von LDAPv3
javax.naming.spi unterstützt die Entwickler von Namensdiensten bei der Implementierung von Services.
38
Hochschule Luzern (TA.ENAPP)
6.1.3 Namenskonzepte
Merke:
Ein Namensservice hat die Aufgabe Menschen-freundliche“ Namen auf Objekte abzubilden.
”
Beispiele:
• File Systeme mappen Filenamen zu Filehandling
• DNS mappt Domainnamen zu IP-Adressen
Merke:
Das Namenssystem beschreibt die Syntax, die für den Namensservice befolgt werden muss.
Beispiele:
• Im File System werden Objekte mit /“ (bspw. /etc/hosts) deklariert
”
• Im DNS werden Objekte mit .“ (bspw. www.enterpriselab.ch) deklariert.
”
Die Assoziation eines Namens zu einem Objekt wird binding genannt.
6.1.4 JNDI Lookup
Über den Lookup werden die gewünschten Objekte ermittelt. Die Namen (bspw. com.mydomain.MyBean) sind
dabei hierarchisch angeordnet und implementieren die Schnittstelle javax.naming.Name. Im Namens- bzw. Verzeichnisdienst ist für jeden Namen entweder das ihm zugeordnete Objekt selbst gespeichert oder eine JNDIReferenz auf das zugeordnete Objekt. Die JNDI API definiert, wo nach dem Objekt zu suchen ist. (JNDI, 2014)
JNDI Lookup Name
Associated Reference
java:comp/env
Einträge der Applikationsumgebung
java:comp/env/jdbc
JDBC DataSource, ResourceManager, ConnectionFactories
java:comp/env/ejb
EJB Referenzen
java:comp/UserTransaction
UserTransaction Referenzen
java:comp/env/mail
JavaMail Session Connection Factories
java:comp/env/url
URL Connection Factories
java:comp/env/jms
JMS Connection Factories and Destinations
java:comp/ORB
ORB Instanzen shared über die Applikationskomponenten
Beispiel 6.1 (Externe JNDI Ressourcen). java:comp/env enthält Properties für die JEE-Komponente (Webapp oder
eine EJB):
Context envContext = (Context)initContext.lookup(”java:comp/env”);
erlaubt die Definition einer direkt auf diesen Node zeigenden Variable. Danach ist möglich:
SomeBean s = (SomeBean) envContext.lookup(”ejb/someBean”);
DataSource ds = (DataSource) envContext.lookup(”jdbc/dataSource”);
Besser als
SomeBean s = (SomeBean) initContext.lookup(”java:comp/env/ejb/someBean”);
DataSource ds = (DataSource) initContext.lookup(”java:comp/env/jdbc/dataSource”);
Quelle: http://stackoverflow.com/questions/11631839/what-is-javacomp-env
Hochschule Luzern (TA.ENAPP)
39
6.2 LDAP
Definition 8
Das Lightweight Directory Access Protocol […] ist ein Anwendungsprotokoll aus der Netzwerktechnik. Es
erlaubt die Abfrage und die Modifikation von Informationen eines Verzeichnisdienstes (eine im Netzwerk verteilte hierarchische Datenbank) über ein IP-Netzwerk. Die aktuelle Version ist in RFC 4510 / RFC
4511 spezifiziert. (LDAP, 2014)
LDAP beinhaltet folgende Komponenten:
X.501 The models
X.509 Authentication
X.511 Services
X.518 Distribution
X.519 Protocol
X.520 Attributes
X.521 Objects
X.525 Replication
6.2.1 Unterschiede zu einer Datenbank
LDAP unterscheidet sich wesentlich im Lese- / Schreib-Verhältnis zu einer Datenbank. Die LDAP-Struktur kann
nicht frei gewählt, sondern lediglich erweitert werden. Des weiteren ist LDAP verteilbar und replizierbar. Durch die
standardisierte baumartige“ Struktur ist die Lesegeschwindigkeit (und nur diese!) wesentlich höher.
”
6.2.2 LDAP-Modelle
(1) Das Informations-Modell
beinhaltet Object Entries (grüne Punkte), welche aus Attributen (d.h. die eigentlichen Informationen der Object Entries) bestehen
und einem Schema
folgen. Dieses können
Das Informations
Modelwiederum
Entries (Objects)
bestehen
aus Attributen
welche Typen
habenbesitzen.
mit einem oder
diverse
Typen mit
einem
/ mehreren
Werten
mehreren Werten.
The Organisation itself
Neben dem Distinguished Name“ gibt es noch den
”
Relative Distinguished Name“ (RDN). Dieser ist eine
”
Komponente des DN, im vorhergehenden Beispiel ist
CN=Bruno Joho“ ein RDN relativ zum übergeordneten
”
Objekt OU=People
(oder auchModel
des übergeordneten
Das“ Namens
”
Objekts DC=ch“ ).
”
dn: dc=el, dc=hslu, dc=ch
dc=el, dc=hslu, dc=ch
o=el.hslu.ch
Organisational Units
(Departments)
ou=people
ou=ISIS
ou=IfE
ou=servers
dn: ou=people, dc=el, dc=hslu, dc=ch
dn: ou=devices, dc=el, dc=hslu, dc=ch
ou=people
ou=devices
cn=web server
dn: cn=printer, ou=devices, dc=el, dc=hslu, dc=ch
dn: uid=zajoho, ou=people, dc=el, dc=hslu, dc=ch
uid=zajoho
Server Applications
Bruno Joho
Description: in D303
cn: B. Joho
Person
cn: Printer
Resolution: 600
cn: Bruno Joho
sn: Joho
Enterprise Application
17
Bruno Joho
Enterprise Application
18
Einträge (Objekte) im Verzeich- (3) Das Funktionale Modell von LDAP ermögnisbaum werden mit dem Distinguished Name“ (DN) licht sogenannte Interrogation Operations (Abfragen;
”
eindeutig
(d.h. vom entsprechenden Eintrag bis zur mit dem search filter werden die Abfragen ausgeführt,
Horw, 12.
April 2013
Seite 8/44
Betriebssystem-Sicherheit
Wurzel) referenziert. Dabei gelten für den DN die folgen- pendant in der DB-Welt: select), Update Operations soTheorie
wie Authentication & Control Operations.
den Abkürzungen (definiert in X.500, nicht abschliesdemnach „CN=Fritz Meier, OU=Informatik, O=HSLU, C=CH“. Es gibt verschiedene
Definitionen,
wie der Distinguished Name dargestellt werden kann. Die oben verwendete Form entspricht der in
RFC send):
2253 festgelegten Form. Dabei gelten folgende X.500-Definitionen (nicht abschliessend):
(4) Das Sicherheits-Modell erlaubt eine flexible ZuCountry Name
Domain Component
C
DC
Organizational Name
UserID
O
UID
griffskontrolle auf die gesamte Baumstruktur. Die VerbinOrganizational Unit Name
Locality Name
OU
L
Common Name
State or Province Name
CN
ST
dung zum LDAP-Server kann zudem über SSL oder TLS
Neben dem „Distinguished Name“ gibt es noch den „Relative Distinguished Name“ (RDN). Dieser (nicht gleichzeitig!) gesichert werden; LDAP über SSL
ist ein Teil des Namens, der ein Attribut des Objekts selber darstellt. Im vorhergehenden Beispiel
Beispiel 6.2. Beispiel Bruno
Joho“ : CN=Bruno Joho,
lautet der RDN des Benutzerobjekts „CN=Fritz
” Meier“ und der RDN des übergeordneten Objektsnennt man dann ldaps, was auf x.509-Zertifikaten ba„OU=Informatik“.
OU=People, DC=el, DC=hslu, DC=ch.
siert.
(2) Namens-Modell.
4
3.
Das Active Directory
40
3.1. ArchitekturHochschule Luzern (TA.ENAPP)
Seit der Serverversion Windows 2000 verwaltet Microsoft alle wesentlichen Informationen von
Infrastrukturen im Active Directory (AD). Das Active Directory basiert auf dem LDAP Protokoll,
wurde aber von Microsoft in verschiedener Hinsicht erweitert. Es stehen aber grundsätzlich alle
LDAP-Mechanismen zur Verfügung.
7 JavaEE Security Gastvortrag: Fabian Aschwanden
Im Enterprise-Umfeld bestehen verschiedene Bedrohungen (bspw. Trojaner, XSS, Viren und Würmer, Spoofing,
DDoS-Attacken, MitM), welche auf ein System einwirken können. Dem entgegen stehen Konzepte (bspw. Benutzerschulung, Identifikation, Kryptographie, Auditing), welche durch entsprechende Technologien (bspw. Firewalls,
PKI [Public Key Infrastructure], Antiviren-Software, Transport Layer Security, Intrusion Detection Systems, Vulnerability Analysis Tools) gestützt werden.
Security beleuchtet folgende Fragen:
Mit welchen Mitteln können entsprechende Massnahmen gegen die verschiedenen Bedrohungen schützen?
JavaEE ist als Plattform für die Entwicklung von verteilten Systemen ausgelegt. Leider sind aber längst nicht alle
Sicherheits-Probleme abgedeckt. Aus diesem Grund exisiteren sichere und robuste APIs, welche SicherheitsKonfigurationen zur Deployment-Zeit ermöglichen und dadurch den Sicherheitsaspekt erhöhen.
7.1 Java Platform Security (Java SE Security)
Java Platform Security - Java Security Flow
Java wurde entwickelt mit dem Ziel Anwendungen eine Java Source -Code
Java Libraries
sichere Platform zu bieten.¹³ Der Java Security Flow soll
diese Sicherheit durch mehrere Prüfungen garantieren.
Java Compiler
Byte Code Verifier
Class Loader
Das Sandbox-Model der Java-Plattform steht dabei im Zentrum: die JVM überwacht die ProgrammByte Code
Security Manager
ausführung, basierend auf entsprechenden Rechten durch (1.) den Byte Code Verifier, (2.) den Class
JVM
Loader und (3.) den Security Manager.
Alle drei Komponenten werden benötigt damit das System sicheren Java Code ausführen kann.
Operating System / Platform
Die Java Platform Security ist eine typische ZugriffsFabian Aschwanden
Enterprise Applications
kontrolle nach Herkunft des Codes (codezentriertes
Abbildung 14: Java Security Flow
Sicherheitsmodell).
Zudem sind (a) strenge Typisierung, (b) Einschränkungen punkto Sichtbarkeit, (c) Exceptions zum Zwecke des kontrollierten Programmabbruchs, (d) strenge Arraygrenzen¹⁴ sowie (e) die Verwendung von Objektreferenzen statt PoinPlatform
Security - Byte Code Verifier
tern weitere Aspekte in Java, welche dieJava
Sicherheit
erhöhen.
7.1.1 Der Byte Code Verifier
• Unveränderter Bytecode nach Kompilation
Der Java Byte Code Verifier der JVM
überprüft den Byte Code nach dessen Kompilation in vier Schritten. Dies
ist in Bezug auf sicheren Code wichtig,
da Java Code nicht zwingend von einem Java-Compiler stammen muss.
Grundsätzlich werden bei der Überprüfung alle Klassendateien des Benutzers
sowie die Konformität mit der JavaSprachspezifikation untersucht.
Pass 1 –
Format
Java Interpreter überprüft Class File
(See 0xCAFEBABE in .class)
Pass 2 –
Java-Konzepte
Vererbungshierarchie,
gültige Objekt-Verweise
Pass 3 –
Programmausführung
Datenflussanalyse der Methoden
während dem Linken
Pass 4 –
Referenzen
Verweise auf fremde Klassen, auf
Methoden und Attribute während
dem dynamischen Linken
¹³ob das gelungen ist, bleibt der Intention des geneigten Lesers überlassen.
¹⁴verhindern den Zugriff auf benachbarte Entitäten
Fabian Aschwanden
Enterprise Applications
Hochschule Luzern (TA.ENAPP)
15
41
14
7.1.2 Der Class Loader
Der Class Loader sorgt dafür, dass die richtigen Klassen (nicht mehrfach) in die Virtual Machine geladen
werden. Dabei geht der Class Loader in drei verschiedenen Schritten vor:
1. Namespaces: gleichnamige Klassen in unterschiedlichen Packages sind nicht gleich! Die Sicherheit wird
aufgrund der Namespace-Prüfung erhöht. Das besagt insbesondere, dass falls zwei unterschiedliche Class
Loader die selbe Klasse laden, diese beiden (identischen) Klassen nicht miteinander kommunizieren können,
da sie zu unterschiedlichen Namensräumen gehören.
Aber: unterschiedliche Namensräume (Namespaces mit Class Loaders) verbergen keine Klassen vor anderen Class
Loaders – lediglich die Zugriffsrechte der einzelnen Klassen werden damit geregelt.
2. Trusted Class Libraries sind die Pakete, die von der Java Virtual Machine als definitiv sicher angesehen werden.
Dazu gehören die Klassen der Core Java API. Die Class Loader beinhalten eine Hierarchie: Bootstrap Class
Loader (zuoberst; lädt Klassen der Java API) – Extension Class Loader – Application Class Loader – System
Class Loader (zuunterst, lädt die erste Klasse der Applikation). Der Ladevorgang beginnt zuunterst, jede
Anfrage wird nach oben weitergereicht; findet der Bootstrap Class Loader die Klasse nicht in der Java API,
gibt er den Ladeauftrag wieder zurück. Findet er sie, so gibt er die Referenz auf die Klasse zurück, weist sie
einer Protection Domain zu und die Sache ist beendet.
3. Protection Domains: Mittels Domänen werden Objekte, die geschützt werden sollen, gruppiert und isoliert. Die sogenannten Protection Domains (Sicherheitsdomänen) ordnen Rechte bestimmtem Code zu –
basierend auf zwei Attributen: Location und Signierer (CodeSource, Principal)¹⁵ – und regeln also, inwiefern
eine Klasse auf Systemressourcen zugreifen darf. Diese Zuordnung zur Protection Domain passiert bei der
Erzeugung der Klasse und kann während der Lebenszeit dessen nicht mehr geändert werden. Sie kapselt
Code Source, Principal Array, ClassLoader und PermissionCollection.
7.1.3 Der Security Manager
Die Klasse java.lang.SecurityManager ist der zentrale Punkt, was die Authorisierung von Zugriffen betrifft: er
realisiert die Zugriffskontrolle. Die Klasse enthält verschiedene Methoden (check-methods), die zur Überprüfung
der Permissions dienen¹⁶. Es gibt zum Beispiel die Methode checkRead(String file), welche den Zugriff auf ein
bestimmtes File überprüft. Die Methode checkPermission(Permission perm, Object context) überprüft, ob die
benötigte Permission durch eine sogenannte Policy gegeben ist oder nicht.
Mit der Methode System.setSecurityManager() kann ein SecurityManagerJAAS
beim System
registriert werden.
- Objects
Benutzer
sind(JAAS)
entweder Personen oder Dienste (Subject) und
7.2 Java Authentication and Authorization
Service
können mehrere Identitäten (Principal) und Berechtigungen
- Benutzername
JAAS ist eine Java-API, die es ermöglicht, Dienste(Credential) besitzen
Principal
- E-Mail Adresse
für Authentifikation und Zugriffsrechte in Java- Kreditkartennummer
- ...
Programmen bereitzustellen. Sie entspricht der ErweiName
Name
Name
terung der Java Platform Security zu einem benutz„Geheimnis“
Geheimnis
erzentrierten Sicherheitsmodell. JAAS beschreibt die
Geheimnis
- Passwort
Credentials
Standard-Implementierung des JEE-Modells und ist für
- Zertifikat
- Kerberos Ticket
Multiuser-Applikationen wichtig.¹⁷ Es gibt mehrere ferti- Public Keys
- ...
ge Implementationen, bspw. den jdbcRealm oder den
Subject
fileRealm.
Aschwanden
Applications
¹⁵Der Signierer ist die Entität, die den Code signiert hat. Falls niemandFabian
den Code
signiert, ist der signerEnterprise
= null. Die
Location oder die CODEBASE
legt fest (als URL) woher die Java-Klassen stammen.
¹⁶Die eigentlichen Permissions werden in einem Policy-File angegeben.
¹⁷Wir haben dies im ENAPP-Projekt verwendet im Zusammenhang mit der User-Anmeldung; siehe dazu auch Tooling Skript S. 109 / 110.
42
Hochschule Luzern (TA.ENAPP)
30
Die wichtigsten Objekte in JAAS
sind Benutzer, welche entweder Personen oder Dienste (Subject) darstellen
und mehrere Identitäten (Principal) und Berechtigungen (Credentials) besitzen können (siehe Grafik oben).
Die Anwendung geschieht auf einfache Weise über die LoginContext API:
LoginContext lc = new LoginContext(”ldaplogin”);
try {
lc.login(”Benutzername”, ”Passwort”);
} catch (Exception ex) { ... }
7.3 JavaEE Security Architecture
Java EE Security – Architecture Overview
JavaEE Security verbindet mehrere Security-Layers und setzt ein rollenbasiertes Sicherheits-Modell oben auf:
EJB Security Modell
Web Security Modell
(Zugriff auf Methoden)
(Zugriff auf URL)
Roles
Container Security Services
Principals
Transport Level Security (SSL)
Network Infrastructure
Abbildung
15: JavaEE Security
Architecture
Overview im EJB- oder Web-Tier
35
Fabian Aschwanden
Enterprise
Applications
Die Sicherheitseingrenzung der Rollen kann auf zwei Wegen geschehen (i.d.R. zusammen verwendet):
deklarative Sicherheit: in XML-Files (Deployment
programmatische Sicherheit: Sicherheitsprüfungen
Descriptor) oder im Programmcode mittels Annotationen festgelegt, wer auf welche EJB und
/ oder welche Methoden (im EJB-Tier) oder URL
und Ressourcen (im Web-Tier) zugreifen darf. Im
EJB-Tier wird die deklarative Sicherheit in 3 Schritten umgesetzt:
werden im Source Code umgesetzt durch Logikabfragen oder Annotationen.¹⁸ Im EJB-Tier wird
die programmatische Sicherheit in 4 Schritten
umgesetzt:
1. Der Deployer definiert die Rollen im Deployment Descriptor (oder auch durch Annotationen im Code).
2. Der Deployer definiert die Zugriffsrechte der
Business-Methoden durch Rollen-Zuweisung
(oder auch durch Annotationen im Code).
3. Der Deployer definiert das Mapping der Gruppen zu den deklarierten Rollen im herstellerspezifischen Deployment Descriptor.
→ Beispiele: siehe Folien 43 – 47 von Fabian Aschwanden
1. Der Applikationenentwickler implementiert
die programmatische Logik innerhalb des
Bean-Codes.
2. Der Applikations-Entwickler deklariert die abstrakte Security-Rolle im Deployment Descriptor der Bean.
3. Der Deployer definiert das Mapping der abstrakten Security-Rollen zu den deklarierten
Rollen.
4. Weiter kann der Deployer zudem das Mapping
der Gruppen zu den deklarierten Rollen im herstellerspezifischen Deployment Descriptor festlegen.
¹⁸Innerhalb der Bean-Implementation kann auf die Identity zugegriffen werden, damit Context-spezifische Security angewendet werden kann
Hochschule Luzern (TA.ENAPP)
43
deklarative Sicherheit vor programmatischer
JavaEE priorisiert die deklarative Sicherheit gegenüber der programmatischen. Dadurch können zur ProgrammLaufzeit oft auch Seiteneffekte auftreten, weshalb dann der Deployment Descriptor kontrolliert werden sollte.
7.3.1 Ziele
Die Security-Grundsätze aus der Java Platform Security sollen im Enterprise-Umfeld natürlich noch immer Gültigkeit haben. Bei der Planung einer Sicherheitsarchitektur existieren verschiedene Ziele, die laut der Java EESpezifikation zu beachten sind:
• Portabilität Write Once, Run Anywhere“
”
• Transparenz Applikationsentwickler müssen keine tiefgründigen Kenntnisse über Security haben um ihre Ap-
plikationen zu entwickeln
• Isolation / Abstraktion Trennung von Business und Security; der Deployer kann die Sicherheit hinzufügen
• Erweiterbarkeit Die Portabilität der Applikation wird durch die Einbindung von Sicherheits-Services nicht be-
hindert
• Unabhängigkeit Die Einbindung von verschiedenen Sicherheitstechnologien soll möglich sein
7.3.2 Realms
Realms sind komplette Umgebungen, die aus User und Gruppen bestehen – also Sicherheitsdomänen, die
für einen Webserver definiert werden. Sie identifizieren valide User einer Applikation. Wörtlich übersetzt steht
der Begriff für Reich, Bereich, Domäne“ und kennt folgende Typen:
”
Realm
die Überprüfung der User erfolgt über…
File-Realm
eine Datei, die auf dem Server liegt
Certificate-Realm
ein Zertifikat
LDAP-Realm
eine LDAP-Struktur
JDBC-Realm
eine DB-Tabelle (bspw. MySQL) via JDBC
Die zur Realm gehörenden User und deren Rollen müssen in einem speziellen Deployment Descriptor der Applikation bekannt gemacht werden (Mapping-Tabelle)
und danach über den Deployment Deskriptor an den
richtigen JAAS-Kontext gekoppelt werden.¹⁹
Abbildung 16: Quelle:
http://blog.triona.de/
development/java/sicherheit-in
-java-ee6-webapplikationen.html
¹⁹siehe dazu auch Tooling Skript S. 109 / 110 oder http://blog.triona.de/development/java/sicherheit-in-java-ee6
-webapplikationen.html.
44
Hochschule Luzern (TA.ENAPP)
8 ReST (Representational State Transfer)
Merke:
ReST ist kein Standard, sondern ein Design Pattern für die Implementation von vernetzten Systemen.
Der Client referenziert eine Web Ressource unter Verwendung einer URL. Eine Repräsentation der Ressource wird
zurückgegeben (in diesem Falle als HTML-Dokument):
Der Client erhält also einen neuen Status, welche mit jeder neuen Ressourcen-Repräsentation wechselt. Der
Zugriff auf eine URL ist die Ressourcen-Repräsentationen einer logischen Entität – er beschreibt lediglich
die gewünschte Ressource (und existiert nicht wirklich als solche, bspw. als physisch existierende Webseite).
8.1 ReST-Architektur
Merke:
Für jeden Service wird eine Ressource erzeugt, die unter Verwendung einer URL identifiziert werden kann.
Die Motivation hinter der Entwicklung von ReST war ein Design Pattern, das beschreibt, wie das Web funktionieren
sollte. Entstanden ist ein wegweisendes und anerkanntes Framework für Web Standards und Web Service Design.
HTTP-Protokoll als Grundlage.
HTTP stellt ein einfaches Set von Operationen bereit. Überraschenderweise
werden alle Web Exchanges durch dieses HTTP API gemacht:
POST (Create) ”Hier sind neue Informationen”
GET (Retrieve) ”Gib mir Informationen”
PUT (Update) ”Hier sind Update Informationen”
DELETE (Delete) ”Lösche Informationen”
Das HTTP API erfüllt das CRUD-Paradigma: Create, Retrieve, Update und Delete.
8.1.1 Exkurs: URL, URN und URI
Definitionen: URL, URN und URI
URL bestimmte
und URN sind beide
URI‘s
Abbildung 17: URL und URN sind beide URI‘s. Eine
URI
kann Name und gleichzeitig auch Locator sein.
Eine bestimmte URI kann ein Name und gleichzeitig auch ein Locator sein.
• URL: Uniform Resource Locator;
ist vom Typ URI und ist eine Referenz auf eine Web Ressource. Um bspw. ein
•  URL: Uniform Resource Locator - ist vom Typ URI und ist eine Referenz auf eine Web
Ressource.
ein Buch zuz.B:
finden
braucht man eine Lokation; z.B: file:///home/username/
Buch zu finden braucht man
eine Um
Location;
file:///home/username/
books
books
•  URN: Uniform Resource Name - Sag nichts aus über die Verfügbarkeit einer Ressource. ZB:
eine ISBN Nummer ist eine URN.
•  URI: Uniform Resource Identifier - folgt einem URI Schema (RFC 396) - können klassifiziert
werden als Namen, Lokator oder beides.
Hochschule Luzern (TA.ENAPP)
Bruno Joho
Enterprise Application
19
45
• URN: Uniform Resource Name; sagt nichts aus über die Verfügbarkeit einer Ressource. ZB: eine ISBN Nummer
ist eine URN.
• URI: Uniform Resource Identifier; folgt einem URI Schema (RFC 396) und kann klassifiziert werden als Namen,
Locator oder beides.
Design Web Services mit REST
8.1.2 Web Services mit ReST
Die Daten, die von einem Web Service retourniert werden, sollten Links zu anderen Daten enthalten.
URL 1
Response
(HTML/XML doc)
HTTP response
HTTP GET request
URL 2
Response
(HTML/XML doc)
HTTP POST
Parts
List
Web Server
HTTP GET request
HTTP response
PO
(HTML/XML)
URL 3
Part
Data
PO
HTTP response
URL to submitted PO
Bruno Joho
29
Enterprise Application
Zustandsübergänge in ReST-Netzwerken
spielen eine wesentliche Rolle, denn jede Ressource wechselt bei
Erhalt einer weiteren Ressourcen-Repräsentation ihren Status (im Bild mit Sx bezeichnet). Jede Repräsentation
beinhaltet selber Hyperlinks: folgt ein Client diesem, so bringt ihn das in einen neuen Zustand.
Zustandsübergänge in ReST Netzwerken
erhalte Resource 3b
Representation
erhalte Resource 2a
Representation
3a
3b
erhalte Resource 1
Representation
2a
2b
2c
S0
S2a
S2b
S3a
4a
4b
4c
S3b
S1
S2c
Abbildung 18: Ressourcen-Repräsentationen sind Pointers zum nächsten Zustand.
Jeder Ressource Repräsentation beinhaltet Hyperlinks. Folgt ein
einem
Hyperlink
bringt
ihn
dassemantisches
in einenWeb
neuen
Zustand.
Also
ReSTClient
unterstützt
die Vision
Tim Berners-Lee,
das Web
in ein
zu überführen:
jeder Ressource
sind
in
den
Ressourcen-Repräsentationen
selber
Pointer
vorhanden
(überall) kann eine URI zugewiesen werden.²⁰
zum nächsten Zustand.
Merke:
Ein wichtiger Schlüssel von ReST (und vom Web) ist: jede Ressource hat ein generisches Interface. Das heisst,
56
Bruno
Application
dass auf
jedeJoho
Ressource per HTTP GET, POST,Enterprise
PUT und DELETE
zugegriffen werden kann.
²⁰Diese Axiomatik wird als Universalität“ bezeichnet.
”
46
Hochschule Luzern (TA.ENAPP)
Der Schlüssel im Web zur Interoperabilität ist die Standardisierung.
Der Grund dafür, weshalb unabhängige Ressourcen im Web imstande sind miteinander zu interagieren, sind die Web Standards:
• Adress- und Namensgebungen umgesetzt über URI
• Generisches Ressourcen-Interface umgesetzt über HTTP POST, GET, PUT, DELETE
• Ressourcen Repräsentationen umgesetzt über HTML, XML, GIF, JPEG, etc.
• Media Typen umgesetzt über MIME types (text/html, text/plain, etc.)
8.2
Die 3 fundamentalen Aspektevom REST
Design
Pattern
fundamentale Aspekte vom
ReST Design
Pattern
Ressourcen
URLs
Einfache Operationen
Ressourcen.
Jede unterscheidbare Entität ist eine Ressource. Eine Ressource kann eine Webseite, eine HTML
Page, ein XML-Dokument, ein Web Service, ein physikalisches Device, etc. sein.
Bruno Joho
Enterprise Application
77
URLs identifizieren Ressourcen.
Jede Ressource wird einzigartig identifiziert durch eine URL. Das entspricht Tim Berners-Lee‘s Idee des Designs eines semantischen Webs.
8.3 ReST und fundamentale Web-Komponenten
Das Web ist zusammengesetzt aus den folgenden Komponenten:
Firewalls entscheiden, welche HTTP-Nachrichten hinaus- und hineingehen. Diese Komponenten setzen die Web
Security durch.
Routers entscheiden, wohin die HTTP-Nachrichten zugestellt werden. Diese Komponenten verwalten das Web
Scaling.
Caches entscheiden, ob eine gespeicherte Kopie verwendet werden darf. Diese Komponenten erhöhen den
Web Speed.
Merke:
Damit sind ReST-Anfragen abhängig (oder unabhängig?) von den Web-Komponenten; die Entscheidungen
basieren allesamt auf dem HTTP-Header.
Da alle Methodenparameter im Header bzw. der URL stehen, kann ReST von sich aus keine Sicherheit implementieren.
8.4 Vorteile
• ReST-Abfragen werden von Proxy Servern unterstützt: dieser kann basierend auf der gewünschten Ressource und der HTTP-Methode im Header entscheiden ob er die Operation erlaubt oder nicht.
Hochschule Luzern (TA.ENAPP)
47
• ReST-Abfragen können auch in verschlüsseltem Transportmodus übermittelt werden: die Abfrage wird
durch die URL und die HTTP-Methode definiert – der (verschlüsselte) Inhalt muss nicht ausgewertet werden.
• jede Ressourcen-Repräsentation beinhaltet Hyperlinks: dadurch sind in jeder Ressourcen-Repräsentationen
Pointer vorhanden, die zum nächsten Zustand führen.
• ReST-Abfragen können durch Caching beschleunigt werden: das Resultat einer Ressourcenanfrage (über
GET) beinhaltet im HTTP-Header die Entscheidung, ob die Anfrage Cache-bar ist oder nicht. Da URI und HTTPMethode somit auswertbar sind, kann die Caching-Entscheidung durch eine Web-Komponente (bspw. Proxy
Server) gefällt werden.²¹
• ReST unterstützt die Vision eines semantischen Webs: der Stil von ReST ist konsistent mit der Vision, dass
jede Ressource eine lokale URI hat.
• Jede ReST-Abfrage hat ein generisches Interface: die Kombination von URI und einem generischen MethodenSet (HTTP-Methoden POST, GET, PUT, DELETE) kann Web-Komponenten schnell und einfach zu Entscheidungen
veranlassen. Zudem sind keine Interface-Spezifikationen auf Applikations-Basis nötig.
• ReST unterstützt alle Web-Standards: URI, generisches Ressourcen-Interface, Ressourcen-Repräsentationen
(HTML, XML, GIF, JPEG, etc.) und Media Typen (MIME types text/html, text/plain, text/json etc.)
²¹im Gegensatz zu SOAP, wo alles über POST gesendet wird und deshalb ein Caching nicht möglich ist
48
Hochschule Luzern (TA.ENAPP)
Literatur
Ajax (programmierung). (2014, Oktober). Zugriff am 23.10.2014 auf http://de.wikipedia.org/wiki/Ajax
_(Programmierung)
Ejb-container. (2013, September). Zugriff am 16.10.2014 auf http://de.wikipedia.org/wiki/EJB-Container
Enterprise javabeans. (2014, September). Zugriff am 16.10.2014 auf http://de.wikipedia.org/wiki/Enterprise
_JavaBeans
JavaEE. (2014, September). Zugriff am 02.01.2015 auf http://de.wikipedia.org/wiki/Java_Platform,
_Enterprise_Edition
Java message service. (2014, September). Zugriff am 30.10.2014 auf http://de.wikipedia.org/wiki/Java
_Message_Service
Javascript object notation. (2014, Oktober). Zugriff am 23.10.2014 auf http://de.wikipedia.org/wiki/JavaScript
_Object_Notation
Java web start. (2014, August). Zugriff am 23.10.2014 auf http://de.wikipedia.org/wiki/Java_Web_Start
JNDI. (2014, August). Zugriff am 06.11.2014 auf http://de.wikipedia.org/wiki/Java_Naming_and_Directory
_Interface
LDAP. (2014, Juli). Zugriff am 06.11.2014 auf http://de.wikipedia.org/wiki/Lightweight_Directory_Access
_Protocol
Servlet. (o. J.). Zugriff am 04.01.2015 auf http://www.itwissen.info/definition/lexikon/Servlet.html
Servlet. (2014, Januar). Zugriff am 25.09.2014 auf http://de.wikipedia.org/wiki/Servlet
SOAP. (2014, Oktober). Zugriff am 02.01.2015 auf http://de.wikipedia.org/wiki/SOAP
Ullenboom, C. (o. J.). Java 7 – mehr als eine insel. Zugriff am 12.10.2014 auf http://openbook.galileocomputing.de/
java7/1507_14_001.html
Hochschule Luzern (TA.ENAPP)
49
Herunterladen