Java EEFull Stack for Business
Applications
Enterprise Java Beans
2014-10-25
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
ENTEPRISE JAVA BEANS
2014-10-25
BESTANDSAUFNAHMEWer hat mit EJBs bisher gearbeiet?
2014-10-25
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
Java EE
Low-Level-Technologien Servlets JSP JDBC
High-Level-Technologien JSF JPA
2014-10-25
Was gibt‘s noch?„Eigentlich“ geht schon alles…
2014-10-25
Enterprise Java Beans Session Beans Message Driven Beans
2014-10-25
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
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
Session BeansBasics
2014-10-25
4-Tier-Architecture
Quelle: http://docs.oracle.com/javaee/6/tutorial/doc/geysj.html
2014-10-25
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
Umgangssprachlich werden Session Beans oft als EJBs bezeichnet
2014-10-25
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
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
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
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
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
REMOTE und LOCAL CALLS
2014-10-25
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
REMOTE CALL
[Quelle: Professionel Entwickeln mit Java, S. 907]
2014-10-25
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
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
LOCAL CALLS
[Quelle: Professionell Entwickeln mit Java, S. 908]
2014-10-25
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
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
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
TRANSAKTIONEN
2014-10-25
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
CMT
Business Methoden wie folgt gekennzeichnet werden:
@javax.ejbTransactionAttributeType REQUIRED (default) REQUIRES_NEW MANDATORY SUPPORTS NOT_SUPPORTED NEVER
2014-10-25
TransactionAttributeType: REQUIRED
[Quelle: Professionell Entwickeln mit Java, S. 946]
2014-10-25
TransactionAttributeType: REQUIRES_NEW
[Quelle: Professionell Entwickeln mit Java, S. 947]
2014-10-25
TransactionAttributeType: MANDATORY
[Quelle: Professionell Entwickeln mit Java, S. 947]
2014-10-25
TransactionAttributeType: SUPPORTS
[Quelle: Professionell Entwickeln mit Java, S. 948]
2014-10-25
TransactionAttributeType: NOT_SUPPORTED
[Quelle: Professionell Entwickeln mit Java, S. 948]
2014-10-25
TransactionAttributeType: NOT_NEVER
[Quelle: Professionell Entwickeln mit Java, S. 949]
2014-10-25
Java EE | Updating Multiple Databases
[Quelle: http://docs.oracle.com/javaee/7/tutorial/doc/transactions006.htm]
2014-10-25
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
SESSION BEANS Stateless Session Bean (SLSB) Stateful Session Bean (SFSB) Singleton Session Bean
2014-10-25
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
ASYNCHRONUS@Asynchronous
@Asynchronous public Future<….> …. { … return new AsyncResult<…>(…); }
2014-10-25
ENDE SESSION BEANS
2014-10-25
Message Driven BeansBasics
2014-10-25
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
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
Asynchrone Kommunikation beim Messaging
[Quelle: Professionell Entwickeln mit Java, S. 971]
2014-10-25
Timer-Service
2014-10-25
Timer programmieren
@Resource TimerService timerService @Timeout timerService.createTimer timerService.getTimers().get( ).cancel()
2014-10-25
Zeitplangesteuerter Timer
@Schedule(hour=„7“, „dayOfWeek=„*“)
2014-10-25
Web ServicesJAX-WS
2014-10-25