Java EE - FHWS 2014 - 5 EJB

51
Java EE Full Stack for Business Applications Enterprise Java Beans 2014-10- 25

description

Java EE - FHWS 2014 - 5 EJB

Transcript of Java EE - FHWS 2014 - 5 EJB

Page 1: Java EE - FHWS 2014 - 5 EJB

Java EEFull Stack for Business

Applications

Enterprise Java Beans

2014-10-25

Page 2: Java EE - FHWS 2014 - 5 EJB

Referent: MATTHIAS REINING

Technical Manager Insurance at RGI Deutschland GmbH

blog: http://blog.matthias-reining.com

twitter: https://twitter.com/MatthiasReining

about.me: http://about.me/matthiasreining

2014-10-25

Page 3: Java EE - FHWS 2014 - 5 EJB

ENTEPRISE JAVA BEANS

2014-10-25

Page 4: Java EE - FHWS 2014 - 5 EJB

BESTANDSAUFNAHMEWer hat mit EJBs bisher gearbeiet?

2014-10-25

Page 5: Java EE - FHWS 2014 - 5 EJB

DAS PROGRAMM

Die Spec Idee, Historie

Der App Server Containerkonzept Paketierung (JAR, WAR, EAR) Marktüberblick

Das Projekt Entwicklung eines Beispielprojektes IDE Settings, Oberflächen (Servlets, JSF),

Business Logic (EJB), Persistence (JPA), Java EE Patterns (CDI), Web Services (JAX-RS)

Die Produktion Buildmanagement (maven, Jenkins) Deployment einer Java EE Anwendung in

der Cloud bei einem PaaS Anbieter

2014-10-25

Page 6: Java EE - FHWS 2014 - 5 EJB

Java EE

Low-Level-Technologien Servlets JSP JDBC

High-Level-Technologien JSF JPA

2014-10-25

Page 7: Java EE - FHWS 2014 - 5 EJB

Was gibt‘s noch?„Eigentlich“ geht schon alles…

2014-10-25

Page 8: Java EE - FHWS 2014 - 5 EJB

Enterprise Java Beans Session Beans Message Driven Beans

2014-10-25

Page 9: Java EE - FHWS 2014 - 5 EJB

Enterprise Java Beans

Enterprise JavaBeans (EJB) sind standardisierte Komponenten innerhalb eines Java-EE-Servers (Java Enterprise Edition). Sie vereinfachen die Entwicklung komplexer mehrschichtiger verteilter Softwaresysteme mittels Java. Mit Enterprise JavaBeans können wichtige Konzepte für Unternehmensanwendungen, z. B. Transaktions-, Namens- oder Sicherheitsdienste, umgesetzt werden, die für die Geschäftslogik einer Anwendung nötig sind.

[Quelle: http://de.wikipedia.org/wiki/Enterprise_JavaBeans]

2014-10-25

Page 10: Java EE - FHWS 2014 - 5 EJB

Enterprise Java Beans Technology

Enterprise JavaBeans (EJB) technology is the server-side component architecture for Java Platform, Enterprise Edition (Java EE). EJB technology enables rapid and simplified development of distributed, transactional, secure and portable applications based on Java technology.

[Quelle: http://www.oracle.com/technetwork/java/javaee/ejb/index.html ]

2014-10-25

Page 11: Java EE - FHWS 2014 - 5 EJB

Session BeansBasics

2014-10-25

Page 12: Java EE - FHWS 2014 - 5 EJB

4-Tier-Architecture

Quelle: http://docs.oracle.com/javaee/6/tutorial/doc/geysj.html

2014-10-25

Page 13: Java EE - FHWS 2014 - 5 EJB

ANFORDERUNGEN

[Ursprünglich]

Interoperabilität mit Standalone-Anwendungen und Systemen, die nicht auf der Java-Plattform basieren

Verteilung von Anwendungskomponenten auf einer Server-Farm. (Bei einer Server Farm werden meherer Java EE Server zu einem Cluster verbunden). Wegen der Lastverteilung wird die Performance des Gesamtsystems verbessert

Transaktionsverwaltung von verteilten Systemen[Quelle: Professionell entwickeln mit Java EE 7 , S. 902]

2014-10-25

Page 14: Java EE - FHWS 2014 - 5 EJB

Umgangssprachlich werden Session Beans oft als EJBs bezeichnet

2014-10-25

Page 15: Java EE - FHWS 2014 - 5 EJB

Historie

Session Beans waren von Anfang an Bestandteil des Java EE Standards „Entfernte Zugriffe“ sollten über CORBA realisiert werden

(Standard unter den platfformunabhängigen Middleware-Technologien)

Ab 2001 (J2EE 1.3) lokaler Zugriff auf Session Beans[mittlerweile eig. der Normalfall, da der Client der Web Browser ist und die Web Anwendung in der gleichen JVM läuft / funktioniert allerdings nicht auf Server Farmen]

2014-10-25

Page 16: Java EE - FHWS 2014 - 5 EJB

Was ist ein Session Bean?

Java Klasse im „Backend“ einer Unternehmensanwendung Bindeglied zwischen Frontend und Zugriffsschicht zu einem RDBMS Ihre Aufgabe: Implementierung der Geschäftslogik der

Unternehmensanwendung

Unterscheidung Statless Session Bean (SLSB) (javax.ejb.Stateless) Stateful Session Bean (SFSB) (javax.ejb.Stateful) Singleton Session Bean (javax.ejb.Singleton)

2014-10-25

Page 17: Java EE - FHWS 2014 - 5 EJB

Namenskonventionen

Übliche EmpfehlungRegister

RegisterBean oder RegisterEJBfür die SLSB Klasse

Interface RegisterBeanRemote / RegisterBeanLocal

…. Meine Empfehlung ;-) Bei No-Inteface-Bens nur fachliche Bezeichnung

2014-10-25

Page 18: Java EE - FHWS 2014 - 5 EJB

Business Methoden von Session BeansRegeln: Muss public sein Darf nicht final oder static sein Darf nicht mit ejb beginnen Bei Remote-Calls müssen die Parameter und der Rückgabetyp „RMI“-

fähig sein.

2014-10-25

Page 19: Java EE - FHWS 2014 - 5 EJB

Business Methoden von Session Beans Meist werden in Business Methoden die Geschäftsdaten gespeichert Hierbei kommt JPA und JTA zum Einsatz Besondere Funktionen bieten Business Methoden im Bereich

Transaktionen

2014-10-25

Page 20: Java EE - FHWS 2014 - 5 EJB

REMOTE und LOCAL CALLS

2014-10-25

Page 21: Java EE - FHWS 2014 - 5 EJB

REMOTE CALL

Aufruf aus einer externen JVM (Standalone Applikation, bspw. Java Swing GUI) Java EE definiert hierfür zwei Kommunikationswege

RMI-IIOP RMI

Remote Method Invocation (geht nur wenn auf beiden Seiten eine JVM ist) IIOP

Internet Inter-ORB Protocol: Kommunikationsprotokoll für CORBA „RMI over IIOP“ RMI-IIOP

RMI wird um Sprachunabhängigkeit erweiter

Web Services EJBs SOAP Web Services

Der Aufruf geht immer an eine ClientView und nicht direkt an den Session Bean.Die ClientView wird vom Container erzeugt und ist für den Aufruf transparent

2014-10-25

Page 22: Java EE - FHWS 2014 - 5 EJB

REMOTE CALL

[Quelle: Professionel Entwickeln mit Java, S. 907]

2014-10-25

Page 23: Java EE - FHWS 2014 - 5 EJB

CLIENT VIEW

Die Client View ist eine Art Interceptor und Proxy für den Session Bean Die Client View ist ein Abbild der Session Bean Die Client View leitet die Anfrage an die entsprechende Business Methode weiter Der EJB Container ist daher in der Lage ein Instanz-Pooling vorzunehmen. Durch die Entkoppelung beim Zugriff, kann die Session Bean sich „irgendwo“

befinden. In Cluster Instanzen kann hierdurch ein Failover oder Balancing vorgenommen

werden.

Die Client View ist für den Entwickler transparent!!

2014-10-25

Page 24: Java EE - FHWS 2014 - 5 EJB

LOCAL CALL

Aufrufer aus dem WEB-Container oder EJB-Container der gleichen JVM

Das Gesamtsystem darf keine Rechner-Farm mit Cluster-Instanzen sein.

Der Aufruf geht immer an eine ClientView und nicht direkt an den Session Bean.Die ClientView wird vom Container erzeugt und ist für den Aufruf transparent

2014-10-25

Page 25: Java EE - FHWS 2014 - 5 EJB

LOCAL CALLS

[Quelle: Professionell Entwickeln mit Java, S. 908]

2014-10-25

Page 26: Java EE - FHWS 2014 - 5 EJB

REMOTE oder LOCAL ?

Standalone Client, immer REMOTE Web-Container Client, meist LOCAL

Falls allerdings eine Server Farm eingesetzt wird mit verbunden Cluster-Instanzen funktionieren LOCAL Calls nicht mehr.

Architektonische Unabhängigkeit: immer REMOTE

über die Architektur nachdenken und pragmatisch vorgehen!

2014-10-25

Page 27: Java EE - FHWS 2014 - 5 EJB

BUSINESS INTERFACE

Interface für Remote Call

Kennzeichnung @Remote am Interface oder direkt in der Session Bean mit dem Interface als Parameter

Local CallKennzeichnung @Local am Interface oder direkt in der Session Bean mit dem Interface als Parameter

No-Interface View Alle public Methoden sind lokal aufrufbar. Der Container erstellt keine No-Interface View falls ein Business Interface vorhanden ist. Falls trotzdem erwünscht kann dies mit @LocalBean trotzdem angefordert werden

2014-10-25

Page 28: Java EE - FHWS 2014 - 5 EJB

DEPLOYMENT DESKRIPTOREN

ejb-jar.xml alternativ zu den Annotations XML überschreibt immer die Annotations

Individuelle Deployment Deskriptoren Der Standard sieht vor, dass ein App-Server Hersteller individuelle

Deplyoment Deskriptoren zusätzlich verwenden kannBspw: glassfish-ejb-jar.xml

In den Beans kann bpsw die install der Instanzen in einem Pool festgelegt werden (steady-pool-size, resize-quantity, max-pool-size, pool-idle-timeout-in-seconds)

2014-10-25

Page 29: Java EE - FHWS 2014 - 5 EJB

TRANSAKTIONEN

2014-10-25

Page 30: Java EE - FHWS 2014 - 5 EJB

Java EE Transactions

Session Beans können folgende Transaktionstypen haben:

CMT - Container Managed TransactionsDer EJB Container kümmert sich um die Transaktionen

BMT - Bean Managed TransactionsDer Entwickler kümmert sich programmatisch um die Transaktionen

Transaktionen beziehen sich letztendlich immer auf ein RDBMS (COMMIT, ROLLBACK)

2014-10-25

Page 31: Java EE - FHWS 2014 - 5 EJB

CMT

Business Methoden wie folgt gekennzeichnet werden:

@javax.ejbTransactionAttributeType REQUIRED (default) REQUIRES_NEW MANDATORY SUPPORTS NOT_SUPPORTED NEVER

2014-10-25

Page 32: Java EE - FHWS 2014 - 5 EJB

TransactionAttributeType: REQUIRED

[Quelle: Professionell Entwickeln mit Java, S. 946]

2014-10-25

Page 33: Java EE - FHWS 2014 - 5 EJB

TransactionAttributeType: REQUIRES_NEW

[Quelle: Professionell Entwickeln mit Java, S. 947]

2014-10-25

Page 34: Java EE - FHWS 2014 - 5 EJB

TransactionAttributeType: MANDATORY

[Quelle: Professionell Entwickeln mit Java, S. 947]

2014-10-25

Page 35: Java EE - FHWS 2014 - 5 EJB

TransactionAttributeType: SUPPORTS

[Quelle: Professionell Entwickeln mit Java, S. 948]

2014-10-25

Page 36: Java EE - FHWS 2014 - 5 EJB

TransactionAttributeType: NOT_SUPPORTED

[Quelle: Professionell Entwickeln mit Java, S. 948]

2014-10-25

Page 37: Java EE - FHWS 2014 - 5 EJB

TransactionAttributeType: NOT_NEVER

[Quelle: Professionell Entwickeln mit Java, S. 949]

2014-10-25

Page 38: Java EE - FHWS 2014 - 5 EJB

Java EE | Updating Multiple Databases

[Quelle: http://docs.oracle.com/javaee/7/tutorial/doc/transactions006.htm]

2014-10-25

Page 39: Java EE - FHWS 2014 - 5 EJB

BMT

Session Beans werden bei BMT wie folgt gekennzeichnet

@Stateless

@TransactionManagement(TransactionManagementType.BEAN)public class …

Die Transaktionen müssen mit @Resource UserTransaction behandelt werden (begin(), commit(), rollback())

2014-10-25

Page 40: Java EE - FHWS 2014 - 5 EJB

SESSION BEANS Stateless Session Bean (SLSB) Stateful Session Bean (SFSB) Singleton Session Bean

2014-10-25

Page 41: Java EE - FHWS 2014 - 5 EJB

SLSB

Zustandsloser Service SLSB bieten Callback-Methoden an

@PostConstruct, @PreDestroy SLSB werden gepoolt

ACHTUNG: Properties an der Klasse können gesetzt werden, werden allerdings beim nächsten Aufruf ggf. von einem anderen Client gelesen.

2014-10-25

Page 42: Java EE - FHWS 2014 - 5 EJB

ASYNCHRONUS@Asynchronous

@Asynchronous public Future<….> …. { … return new AsyncResult<…>(…); }

2014-10-25

Page 43: Java EE - FHWS 2014 - 5 EJB

ENDE SESSION BEANS

2014-10-25

Page 44: Java EE - FHWS 2014 - 5 EJB

Message Driven BeansBasics

2014-10-25

Page 45: Java EE - FHWS 2014 - 5 EJB

JMS und Message Driven Beans

Java Messaging System (JMS) Seit Java EE 7 JMS2.0 (Simplified JMS API) Davor: Classic JMS API

Asynchrone Nachrichtenübermittlung JMS Client kann Sender und/oder Empfänger sein JMS Provider verwaltet und routet die Nachrichten

2014-10-25

Page 46: Java EE - FHWS 2014 - 5 EJB

JMS – SpecReference Implementation: Open MQ (Open Message Queue)Alternative: ActiveMQ, HornetQ, Red Hat Jboss A-MQ, IBM WebSphere MQ

Konkrete Implementierung hängt vom Application Server ab!

2014-10-25

Page 47: Java EE - FHWS 2014 - 5 EJB

Asynchrone Kommunikation beim Messaging

[Quelle: Professionell Entwickeln mit Java, S. 971]

2014-10-25

Page 48: Java EE - FHWS 2014 - 5 EJB

Timer-Service

2014-10-25

Page 49: Java EE - FHWS 2014 - 5 EJB

Timer programmieren

@Resource TimerService timerService @Timeout timerService.createTimer timerService.getTimers().get( ).cancel()

2014-10-25

Page 50: Java EE - FHWS 2014 - 5 EJB

Zeitplangesteuerter Timer

@Schedule(hour=„7“, „dayOfWeek=„*“)

2014-10-25

Page 51: Java EE - FHWS 2014 - 5 EJB

Web ServicesJAX-WS

2014-10-25