Vergleich und Integrationsmöglichkeiten

Werbung
Spring 2.0 und EJB 3
Vergleich und
Integrationsmöglichkeiten
Stefan Scheidt
OPITZ CONSULTING GmbH
Spring 2.0 und EJB 3 – Vergleich und Integrationsmöglichkeiten
Seite 1
Agenda
● Vorstellung Spring und EJB
Was ist Spring? Was ist EJB? Historie
● Vergleich
Dependency Injection, Persistenz, Transaktionsmanagement,
Sicherheit, Aspektorientierte Programmierung,
Stateful Business Logic, Asynchrone Verarbeitung,
Remoting, Deployment
● Integrationsmöglichkeiten
Nutzung von JPA, EJB als Fassade für Spring,
Spring als EJB Client, Dependency Injection
von Spring Beans in EJBs, Projekt Pitchfork
Spring 2.0 und EJB 3 – Vergleich und Integrationsmöglichkeiten
Seite 2
- Spring und EJB Kurzvorstellung
Spring 2.0 und EJB 3 – Vergleich und Integrationsmöglichkeiten
Seite 3
Was ist Spring?
● Das Spring Framework ist ein mehrschichtiges
Java EE Applikationsframework
● Primäre Ziele:
● Der Einsatz von Java EE soll vereinfacht werden
● OO-Designprinzipien sollen leichter anwendbar sein
● Die einzelnen Bestandteile einer Applikation sollen möglichst
leicht in Isolation getestet werden können
● Praxiserprobte Lösungen für bestimmte Aufgabenstellungen
sollen leicht integrierbar sein – „It‘s all about choice!“
● Der Anwendungscode soll möglichst nicht von Spring abhängen
siehe http://www.springframework.org/about
Spring 2.0 und EJB 3 – Vergleich und Integrationsmöglichkeiten
Seite 4
Historie Spring
Sep 04: Spring 1.1
Juli 04: J2EE
without EJB
Mai 06: EJB 3.0
März 04: Spring 1.0
Feb 03: Gründung
Open-Source-Projekt
Nov 02: J2EE Design
and Development
2003
2004
Okt 06: Spring 2.0
Mai 05: Spring 1.2
2005
Spring 2.0 und EJB 3 – Vergleich und Integrationsmöglichkeiten
2006
2007
Seite 5
Typeisch Architektur Spring-basierter Enterprise-Anwendungen
Remote Exporter
Präsentationsschicht
Transaktionsgrenzen
Service Interface
+ Asynchrone Verarbeitung
+ Sicherheitsaspekte
Service Implementierung
Domänen
Objekte
DAO Interface
DAO Implementierung
Container
EIS
Spring 2.0 und EJB 3 – Vergleich und Integrationsmöglichkeiten
Seite 6
Was ist EJB 3.0
● EJB ist eine (Server-seitige) Komponentenarchitektur für
Java EE. Sie vereinfacht die Entwicklung verteilter und
transaktionaler Applikationen auf Basis von Java.
● Primäre Ziele von EJB 3:
● Vereinfachung des Programmiermodells im Vergleich zu EJB 2
● Einführung eines POJO-basierten Programmiermodells
● Konfiguration durch die Verwendung von Annotationen
● Einfachere Konfiguration durch „Configuration by Exception“
● Persistenz durch objektrelationales Mapping
Spring 2.0 und EJB 3 – Vergleich und Integrationsmöglichkeiten
Seite 7
Historie EJB
Okt 06: Spring 2.0
März 04: Spring 1.0
Mai 06: EJB 3.0
Nov 03: EJB 2.1
Aug 01: EJB 2.0
Nov 99: EJB 1.1
1999
2000
2001
2002
2003
Spring 2.0 und EJB 3 – Vergleich und Integrationsmöglichkeiten
2004
2005
2006
2007
Seite 8
- Spring und EJB Vergleich
Spring 2.0 und EJB 3 – Vergleich und Integrationsmöglichkeiten
Seite 9
Vergleichskriterien
●
●
●
●
●
●
●
●
●
●
Grundsätzliches
Dependency Injection
Persistenz
Transaktionsmanagement
Sicherheit
Aspektorientierte Programmierung
Stateful Business Logic
Asynchrone Verarbeitung
Remoting
Deployment
Spring 2.0 und EJB 3 – Vergleich und Integrationsmöglichkeiten
Seite 10
Vergleich: Grundsätzliches
● Voraussetzungen für den Einsatz von Spring:
● Java SE, JDK ab Version 1.3
● Dadurch nutzbar in
Stand-Alone- oder Client/Server-Umgebungen
● Servlet Containern (Tomcat)
● Java EE Application Servern
● Verwendet man JDK 1.5, so werden die neuen
Sprachfeatures unterstützt
●
● Voraussetzungen für den Einsatz von EJB 3:
● Java SE, JDK ab Version 1.5
● EJB-3-Container, aufbauend auf JNDI, JTA, JMS etc.
Spring 2.0 und EJB 3 – Vergleich und Integrationsmöglichkeiten
Seite 11
Vergleichskriterien
●
●
●
●
●
●
●
●
●
●
Grundsätzliches
Dependency Injection
Persistenz
Transaktionsmanagement
Sicherheit
Aspektorientierte Programmierung
Stateful Business Logic
Asynchrone Verarbeitung
Remoting
Deployment
Spring 2.0 und EJB 3 – Vergleich und Integrationsmöglichkeiten
Seite 12
Vergleich: Dependency Injection
● Merkmale Spring:
● Dependencies werden vom „Application Context“ verwaltet
● Definition in der Regel durch XML-Konfiguration
● Public Setter- und Constructor-Injection
● Nutzbar für beliebige Java Beans
● Instanzen-Verwaltung: singleton, prototype, custom scope
(z.B. request, session)
● Merkmale EJB:
● Dependencies werden vom EJB-Container mit JNDI verwaltet
● Definition durch Annotationen, alternativ/überschreibend mit XML
● Field- und Setter-Injection
● Nutzbar nur für spezielle Java-EE-Typen
● Instanzen-Verwaltung: Stateless, Stateful
Spring 2.0 und EJB 3 – Vergleich und Integrationsmöglichkeiten
Seite 13
Vergleichskriterien
●
●
●
●
●
●
●
●
●
●
Grundsätzliches
Dependency Injection
Persistenz
Transaktionsmanagement
Sicherheit
Aspektorientierte Programmierung
Stateful Business Logic
Asynchrone Verarbeitung
Remoting
Deployment
Spring 2.0 und EJB 3 – Vergleich und Integrationsmöglichkeiten
Seite 14
Vergleich: Persistenz
● Merkmale Spring:
● Unterstützung für diverse Persistenz-Frameworks, u.a.
●
●
●
●
JPA, JDO, Hibernate, TopLink, iBATIS, JDBC
Integration von Data Sources und Transaktionsmanagement
Übersetzung von Exceptions des Persistenz-Frameworks
in Spring Data Access Exceptions (optional)
Einfachere Programmierung durch Template-Klassen (optional)
Basisklassen für die Implementierung von DAOs (optional)
● Merkmale EJB:
● Unterstützung für „plain JDBC“ und JPA
● Transparente Integration von JPA Entity Manager
bzw. Entity Manager Factory
● Unterstützung für Stateful Session Beans durch
Extended Persistence Context
Spring 2.0 und EJB 3 – Vergleich und Integrationsmöglichkeiten
Seite 15
Vergleichskriterien
●
●
●
●
●
●
●
●
●
●
Grundsätzliches
Dependency Injection
Persistenz
Transaktionsmanagement
Sicherheit
Aspektorientierte Programmierung
Stateful Business Logic
Asynchrone Verarbeitung
Remoting
Deployment
Spring 2.0 und EJB 3 – Vergleich und Integrationsmöglichkeiten
Seite 16
Vergleich: Transaktionsmanagement
● Merkmale Spring:
● Unterstützung für diverse Tx-APIs, u.a.
JDBC-basierte APIs (Hibernate, TopLink, JPA), JDO, JTA
● Abstraktion und Austauschbarkeit durch Interface
PlattformTransactionManager und Transaction Exceptions
● Programmatisches und deklaratives Tx-Management
● Deklaration mittels XML-Konfiguration oder Annotationen,
inkl. Roleback Rules
● Merkmale EJB:
● Tx-Management ausschließlich mittels JTA
● Programmatisches und deklaratives Tx-Management
● Deklaration mittels Annotationen, alternativ/überschreibend
mit XML, Roleback Rules durch @ApplicationException
Spring 2.0 und EJB 3 – Vergleich und Integrationsmöglichkeiten
Seite 17
Vergleichskriterien
●
●
●
●
●
●
●
●
●
●
Grundsätzliches
Dependency Injection
Persistenz
Transaktionsmanagement
Sicherheit
Aspektorientierte Programmierung
Stateful Business Logic
Asynchrone Verarbeitung
Remoting
Deployment
Spring 2.0 und EJB 3 – Vergleich und Integrationsmöglichkeiten
Seite 18
Vergleich: Sicherheit
● Merkmale Spring:
● Security in Spring durch das Acegi Security System
(zukünftig „Spring Security“).
● Sicherheit für Spring Beans durch Method Security Interceptors,
erlauben auch Domain Object Instance Security durch ACLs.
● Konfiguration im Spring Application Context und
optional durch Security Annotations
● Extrem flexibel konfigurieren durch konsequente Nutzung von DI
● Merkmale EJB:
● Unterstützung für Authentifizierung und Autorisierung
● Definition programmatisch oder deklarativ
● Deklaration durch Security Annotations, alternativ in XML
Spring 2.0 und EJB 3 – Vergleich und Integrationsmöglichkeiten
Seite 19
Vergleichskriterien
●
●
●
●
●
●
●
●
●
●
Grundsätzliches
Dependency Injection
Persistenz
Transaktionsmanagement
Sicherheit
Aspektorientierte Programmierung
Stateful Business Logic
Asynchrone Verarbeitung
Remoting
Deployment
Spring 2.0 und EJB 3 – Vergleich und Integrationsmöglichkeiten
Seite 20
Vergleich: Aspektorientierte Programmierung
● Merkmale Spring:
● Proxy-Basiert
● Einfaches Joinpoint-Modell: Public Methods von Spring Beans
● Mächtige AspectJ Pointcut Language
● Transparente Integration von AspectJ möglich
● Merkmale EJB:
● Realisierung der Aspekte ausschließlich durch Interceptors
●
durch @Interceptor auf Methoden-Ebene
duch @Interceptors auf Klassenebene
● Nur für spezielle Typen (EJB-Container-verwaltete Beans)
● Keine Pointcut-Language
Spring 2.0 und EJB 3 – Vergleich und Integrationsmöglichkeiten
Seite 21
Vergleichskriterien
●
●
●
●
●
●
●
●
●
●
Grundsätzliches
Dependency Injection
Persistenz
Transaktionsmanagement
Sicherheit
Aspektorientierte Programmierung
Stateful Business Logic
Asynchrone Verarbeitung
Remoting
Deployment
Spring 2.0 und EJB 3 – Vergleich und Integrationsmöglichkeiten
Seite 22
Stateful Business Logic
● Merkmale Spring:
● Spring bietet kein Zustandsmanagement für Service-Objekte
● Ein Scope-Konzept existiert für Spring Beans
z.B. innerhalb von Web-Applikationen
● Merkmale EJB:
● Zentrales Paradigma innerhalb der Java EE
● @Stateful macht eine Klasse zu einer durch den
EJB-Container gemanagten Ressource, die einer
dedizierten Client-Sitzung zugeordnet wird, und erlaubt
so Konversationen
Spring 2.0 und EJB 3 – Vergleich und Integrationsmöglichkeiten
Seite 23
Vergleichskriterien
●
●
●
●
●
●
●
●
●
●
Grundsätzliches
Dependency Injection
Persistenz
Transaktionsmanagement
Sicherheit
Aspektorientierte Programmierung
Stateful Business Logic
Asynchrone Verarbeitung
Remoting
Deployment
Spring 2.0 und EJB 3 – Vergleich und Integrationsmöglichkeiten
Seite 24
Asynchrone Verarbeitung
● Merkmale Spring:
● Vereinfachtes Programmiermodell, um Versand und Empfang
von JMS-basierten Nachrichten durchzuführen (JmsTemplate).
● Für den Empfang asynchroner Nachrichten werden
Message Driven POJOs (MDP) eingesetzt. Diese implementieren
das Interface javax.jms.MessageListener.
● Für das Management des Transports und der Benachrichtigung
muss die Laufzeitumgebung eine JMS-Implementierung
bereitstellen
● Merkmale EJB:
● Message Driven Beans (MDB) sind grundlegender Bestandteil
der Java EE und erlauben die Verarbeitung asynchron
empfangener Nachrichten.
● Das Management des Transports und der Benachrichtigung
übernimmt der EJB-Container.
Spring 2.0 und EJB 3 – Vergleich und Integrationsmöglichkeiten
Seite 25
Vergleichskriterien
●
●
●
●
●
●
●
●
●
●
Grundsätzliches
Dependency Injection
Persistenz
Transaktionsmanagement
Sicherheit
Aspektorientierte Programmierung
Stateful Business Logic
Asynchrone Verarbeitung
Remoting
Deployment
Spring 2.0 und EJB 3 – Vergleich und Integrationsmöglichkeiten
Seite 26
Remoting (1)
● Merkmale Spring:
● Spring bietet durch „Remote Exporter“ und „Local Proxies“
ein einfach Programmiermodell,um eine
Remote-Kommunikation zu realisieren
● „Zwischen“ serverseitigen Exportern und clientseitigen Proxies
können verschiedene Protokolle eingesetzt werden:
HTTP, Burlap/Hessian, RMI, Web Services
● Merkmale EJB:
● Mit @Remote annotierte Klassen stehen über RMI/IIOP
als Remote-Komponente zur Verfügung.
● Mit @WebService annotierte Klassen exportieren Geschäftslogik
wahlweise über JAX-WS 2.0 oder SOAP 1.2 via JAX-RPC API
● Remote-Komponenten können an verteilten Transaktionen
partizipieren.
Spring 2.0 und EJB 3 – Vergleich und Integrationsmöglichkeiten
Seite 27
Vergleichskriterien
●
●
●
●
●
●
●
●
●
●
Grundsätzliches
Dependency Injection
Persistenz
Transaktionsmanagement
Sicherheit
Aspektorientierte Programmierung
Stateful Business Logic
Asynchrone Verarbeitung
Remoting
Deployment
Spring 2.0 und EJB 3 – Vergleich und Integrationsmöglichkeiten
Seite 28
Vergleich: Deployment
● Merkmale Spring:
● Sammlung aller relevanten JARs z.B. in WEB-INF/lib
● Konfiguration (meist) durch XML-Konfigurationsdatei(en)
● Keine Java-EE-spezifischen Deployment-Deskriptoren
● Merkmale EJB:
● EJB-JAR in EAR
● Konfiguration durch Annotationen und ggf.
EJB-Deployment-Deskriptor
● Ggf. Container-spezifische Deployment-Deskriptoren
● EJB-Container (bzw. dessen Konfiguration) legt Provider für
Diensten fest, z.B. für JPA oder JTA
Spring 2.0 und EJB 3 – Vergleich und Integrationsmöglichkeiten
Seite 29
- Spring 2.0 und EJB Vergleich: Fazit
Spring 2.0 und EJB 3 – Vergleich und Integrationsmöglichkeiten
Seite 30
Fazit zum Vergleich
● Spring liefert nicht-invasive Unterstützung in Form eines
Infrastruktur-Frameworks
EJB 3 bindet an einen EJB-3-Container
● Spring liefert in vielen Bereichen im Detail mehr Funktionen
EJB 3 ist für einfache Anwendungsfälle leichter zu handhaben,
läßt aber die Spring Programmiervereifachungen vermissen
● Spring bietet vollwertige Unterstützung für AOP
EJB 3 bietet vollwertige Unterstützung für zustandsbehaftete
und verteilte Komponenten
Spring 2.0 und EJB 3 – Vergleich und Integrationsmöglichkeiten
Seite 31
Bitte nicht vergessen…
– Integration –
● JMX
● JCA CCI
– Präsentation –
● Web MVC
Action-Basiertes Webframework
Support für JSP, Velocity, FreeMarker,
XSLT, PDF, Excel, JasperReports
DAO-Support durch CciTemplate
● E-Mail
● Scheduling
● Integration anderer WebFrameworks
Quartz Scheduler, JDK Timer,
TaskExecutor
● Dynamic Languages
Groovy, BeanShell, JRuby
●
●
●
●
●
JavaServer Faces, Struts, Tapestry,
WebWork
● Portlet MVC
MVC-basiertes Portlet-Framework
– Subprojekte –
Acegi Security
● Extentions
Web Flow
● IDE for Eclipse
Web Services
● BeanDoc
LDAP
● OSGi
Rich Client
● .NET
Spring 2.0 und EJB 3 – Vergleich und Integrationsmöglichkeiten
Seite 32
- Spring 2.0 und EJB Integrationsmöglichkeiten
Spring 2.0 und EJB 3 – Vergleich und Integrationsmöglichkeiten
Seite 33
Motivation
● Warum ist eine Integration überhaupt wünschenswert?
Folgende Szenarien sind denkbar:
● Man möchte als Persistenzframework den neue JPA-Standard
verwenden
● Mittelschichtkomponenten wurden mit Spring entwickelt
und müssen als EJBs „exportiert“ werden
● Die Präsentationsschicht wird mit Hilfe von Spring entwickelt
und muss auf EJBs zugreifen
● Man möchte mit EJB 3 entwickeln, aber die Spring
Programmiervereinfachungen nutzen
● Für die Implementierung „hinter“ einer EJB möchte man Spring
nutzen
Spring 2.0 und EJB 3 – Vergleich und Integrationsmöglichkeiten
Seite 34
- Spring und EJB Integration Teil 1: JPA
Spring 2.0 und EJB 3 – Vergleich und Integrationsmöglichkeiten
Seite 35
Einschub: Wo wird JPA eingesetzt?
Remote Exporter
Präsentationsschicht
Transaktionsgrenzen
Service Interface
Service Implementierung
Domänen
Objekte
DAO Interface
DAO Implementierung
DI-Container
Datenbank
Spring 2.0 und EJB 3 – Vergleich und Integrationsmöglichkeiten
Seite 36
Einschub: Objektrelationales Mapping
● O/R Mapping: „Abbildung von Klassen auf Tabellen“
● Domänen-Objekte auf Datensätze
● Attribute auf Spalten
● Assoziationen auf FK-Referenzen
● Vererbungshierarchien auf eine oder mehrere Tabellen
● Objektidentität verwalten
● Optimistic Locking / Versionierung
Mapping-Metadaten
● Persistenz-Manager: Schnittstelle für CRUD-Operationen
● CRUD: Create, Read, Update, Delete
● API oder objektorientierte Abfragesprache zur
Formulierung und Durchführung von Abfragen
Spring 2.0 und EJB 3 – Vergleich und Integrationsmöglichkeiten
Seite 37
Einschub: Historie von JPA
Eigenentwicklungen
2006: JPA als Teil von EJB 3.0
2001: JDO
1999: EJB 1.1 Entity Beans
1997: CocoBase
2003: JSR 220 – EJB 3.0
2001: Hibernate
1997: TopLink for Java
1998
2000
2002
Spring 2.0 und EJB 3 – Vergleich und Integrationsmöglichkeiten
2004
2006
Seite 38
Einschub: JPA – die Java Persistence API
●
●
●
●
●
Bestandteil der JSR-220: Enterprise Java Beans 3.0
Nachfolger der EJB Entity Beans
Weiterentwicklung unabhängig von EJB-Standard
POJO-basiertes Domain Model
Vereint die besten Ideen und Patterns aus
● Hibernate
● Toplink
● JDO
● Einsatzumgebungen
● In JEE5-Container: Container-Managed Persistence
● Standalone in JSE-Anwendungen
● Spring 2.0 emuliert Container-Verhalten für Einsatz in beliebigen
JSE/JEE-Anwendungen
Spring 2.0 und EJB 3 – Vergleich und Integrationsmöglichkeiten
Seite 39
Einschub: Abbildung von Java-Klassen auf RDBMS-Tabellen
MappingMetadaten
Spring 2.0 und EJB 3 – Vergleich und Integrationsmöglichkeiten
Seite 40
Einschub: Mapping-Metadaten mit Java 5 Annotationen – Einfach
Objektidentität
Optimistic Locking
1-n Assoziation
n-1
einfaches Attribut
Zeitattribut
Spring 2.0 und EJB 3 – Vergleich und Integrationsmöglichkeiten
Seite 41
Mapping-Metadaten mit Java 5 Annotationen – Ausführlich
Spring 2.0 und EJB 3 – Vergleich und Integrationsmöglichkeiten
Seite 42
Bestandteile der Spring JPA-Unterstützung
● Unterstützung analog zu anderen Persistenz-Frameworks
(u.a. Hibernate, TopLink, JDO, iBATIS, JDBC)
● Integration von Data-Source- und Transaktionsmanagement
● Unterstützung bei JPA-Ressourcen-Management
● Optional: Übersetzung von JPA-Exceptions in
Springs Data-Access-Exceptions
● Optional: Programmiervereinfachung mit Template-Klassen
● Optional: Basisklassen für die Implementierung von DAOs
Spring 2.0 und EJB 3 – Vergleich und Integrationsmöglichkeiten
Seite 43
Einschub: Entity Manager und Persistence Context
„Lebensraum“ der persistenten Entitäten zur Laufzeit
JPA-DAOs
Persistence
Persistence Context
Context
cd Logica l Vie w
DAO
Entity
Implementierun
gManager
Orde r 1
Cus tomer 1
RDBMS
Order 2
Orde r 3
Spring 2.0 und EJB 3 – Vergleich und Integrationsmöglichkeiten
Synchronisation
Custome r 2
Seite 44
Einschub: Entity Manager
● Definiert die Operationen für die Interaktion
zwischen DAOs und Persistence Context
● Modus 1: Container-Managed
● Erzeugung, Transaktionssteuerung und Schließen
werden vom Container übernommen
● Modus 2: Application-Managed
● Steuerung erfolgt manuell im Applikationscode
● Interface für den typischen CRUD-Workflow
● persist()
● find(), createQuery()
● merge()
● remove()
≈ CREATE
≈ READ
≈ UPDATE
≈ DELETE
Spring 2.0 und EJB 3 – Vergleich und Integrationsmöglichkeiten
Seite 45
Konfiguration der Entity Manager Factory
Konfiguration der Entity Manager Factory in Spring:
● Lösungsansatz 1:
●
●
Vollständig Konfiguration einer Persistence Unit (PU) in der Datei
META-INF/persistence.xml
Springs LocalEntityManagerFactoryBean nutzt diese
Informationen und kann die PU z.B. in Datenzugriffsobjekte injizieren
● Lösungsansatz 2:
●
●
●
Springs LocalContainerEntityManagerFactoryBean gestattet
volle Kontrolle über das Bootstrapping der Persistence Unit.
In Spring bereits deklarierte Data Sources können dabei verwendet
werden
Byte-Code-Instrumentierung für many-to-one oder one-to-one
Lazy-Loading kann auf Classloader-Ebene geschehen
Spring 2.0 und EJB 3 – Vergleich und Integrationsmöglichkeiten
Seite 46
Transaktionsunterstützung
● Spring unterstützt zwei verschiedene
Transaktions-Strategien für JPA
● Eine Bean vom Typ JpaTransactionManager
in Kombination mit
transaction-type="RESSOURCE_LOCAL"
in persistence.xml steuert Transaktionen auf der Basis
des JDBC-Treibers („lokale Tx“)
● Eine Bean vom Typ JtaTransactionManager
in Kombination mit
transaction-type="JTA"
in persistence.xml ermöglicht die Teilnahme an
XA-Transaktionen („globale Tx“)
Spring 2.0 und EJB 3 – Vergleich und Integrationsmöglichkeiten
Seite 47
Verwendung des Entity Managers in Spring (1)
● Es stehen unterschiedliche Strategien für die Verwaltung
von Entity Manager Factory und Entity Manager
zur Verfügung
● „Plain-JPA-Programmiermodell“
Container-Managed
● Application-Managed
● „Spring-Template-Programmiermodell
● Mit und ohne Ableiten aus Springs JpaDaoSupport
●
● Mischformen sind möglich, aber nur bei speziellen
Anforderungen sinnvoll
Quelle: http://static.springframework.org/spring/docs/2.0.x/reference/orm.html#orm-jpa
Spring 2.0 und EJB 3 – Vergleich und Integrationsmöglichkeiten
Seite 48
Verwendung des Entity Managers in Spring (2)
Plain-JPA-Programmiermodel
Container-Managed, inkl. Exception Translation
Spring 2.0 und EJB 3 – Vergleich und Integrationsmöglichkeiten
Seite 49
Verwendung des Entity Managers in Spring (3)
Spring-Template-Programmiermodell
inkl. Verwendung von JpaDaoSupport
Spring 2.0 und EJB 3 – Vergleich und Integrationsmöglichkeiten
Seite 50
- Spring und EJB Integration Teil 2: Sonstiges
Spring 2.0 und EJB 3 – Vergleich und Integrationsmöglichkeiten
Seite 51
Motivation
● Warum ist eine Integration überhaupt wünschenswert?
Folgende Szenarien sind denkbar:
● Man möchte als Persistenzframework den neue JPA-Standard
verwenden
● Mittelschichtkomponenten wurden mit Spring entwickelt
und müssen als EJBs „exportiert“ werden
● Die Präsentationsschicht wird mit Hilfe von Spring entwickelt
und muss auf EJBs zugreifen
● Man möchte mit EJB 3 entwickeln, aber die Spring
Programmiervereinfachungen nutzen
● Für die Implementierung „hinter“ einer EJB möchte man Spring
nutzen
Spring 2.0 und EJB 3 – Vergleich und Integrationsmöglichkeiten
Seite 52
Integration: EJBs als Fassade für Spring Beans (1)
● EJB als Fassade für Spring Beans:
● Idee:
Implementierung eines Business Service als Spring Bean
Bereitstellung des Service als EJB
● Das Problem:
Bereitstellen des Application Context für die Fassaden-Bean
● Grundlegender Support dafür in Spring:
ContextXxxBeanFactoryLocator
„Defines a contract for the lookup, use, and release of a BeanFactory,
or BeanFactory subclass such as ApplicationContext.”
Spring 2.0 und EJB 3 – Vergleich und Integrationsmöglichkeiten
Seite 53
Integration: EJBs als Fassade für Spring Beans (2)
● EJB als Fassade für Spring Beans:
● Für EJB 2:
Spring-Basisklasse AbstractEnterpriseBean
für Entwicklung von EJB 2.1 Enterprise Beans,
vererbt Methode getBeanFactory für Zugriff auf Spring Beans
Quelle: http://www.javaworld.com/javaworld/jw-02-2005/jw-0214-springejb.html
● Für EJB 3:
(Noch?) Keine Basisklassen
Adaption der Vorgehensweise für EJB 2.1 ist relativ einfach
Aber will man dass?
Spring 2.0 und EJB 3 – Vergleich und Integrationsmöglichkeiten
Seite 54
Integration: EJBs als Fassade für Spring Beans (3)
class ej b
«interface»
ej b::SessionBean
spring::
AbstractStatelessSessionBean
+
«interface»
service::EmployeeService
getBeanFactory(String) : Object
SessionFacadeEJB
Spring 2.0 und EJB 3 – Vergleich und Integrationsmöglichkeiten
serv ice::EmployeeServ iceImpl
Seite 55
Integration: EJBs als Fassade für Spring Beans (4)
Spring 2.0 und EJB 3 – Vergleich und Integrationsmöglichkeiten
Seite 56
Motivation
● Warum ist eine Integration überhaupt wünschenswert?
Folgende Szenarien sind denkbar:
● Man möchte als Persistenzframework den neue JPA-Standard
verwenden
● Mittelschichtkomponenten wurden mit Spring entwickelt
und müssen als EJBs „exportiert“ werden
● Die Präsentationsschicht wird mit Hilfe von Spring entwickelt
und muss auf EJBs zugreifen
● Man möchte mit EJB 3 entwickeln, aber die Spring
Programmiervereinfachungen nutzen
● Für die Implementierung „hinter“ einer EJB möchte man Spring
nutzen
Spring 2.0 und EJB 3 – Vergleich und Integrationsmöglichkeiten
Seite 57
Integration: Spring als EJB-Client (1)
● Spring als EJB-Client
● Grundlegender Support: JndiObjectLocator
„Convenient superclass for JNDI-based service locators.“
● Für EJB 2.1:
XxxStatelessSessionProxyFactoryBean für SLSBs
JndiObjectFactoryBean für SFSBs
● Für EJB 3:
JndiObjectFactoryBean reicht Aufgrund der
Vereinfachungen bei EJB 3 aus.
Quellen:
● http://www.javaworld.com/javaworld/jw-02-2005/jw-0214-springejb.html
● http://www.breddy.net/2006/07/06/accessing-a-jboss-ejb3-session-bean-with-spring/
Spring 2.0 und EJB 3 – Vergleich und Integrationsmöglichkeiten
Seite 58
Integration: Spring als EJB-Client (2)
EJB 2: Deklaration der SLSB Factory Bean im Application Context
Spring 1.2:
<bean id="employeeService"
class="...LocalStatelessSessionProxyFactoryBean">
<property name="jndiName" value="ejb/EmployeeServiceBean"/>
<property name="businessInterface" value="...EmployeeService"/>
</bean>
Spring 2.0 Namespaces:
<jee:local-slsb id="employeeService"
jndi-name="ejb/EmployeeServiceBean"
business-interface="...EmployeeService"/>
Anschließend kann die Referenz einfach in einen Client injiziert werden.
Spring 2.0 und EJB 3 – Vergleich und Integrationsmöglichkeiten
Seite 59
Integration: Spring als EJB-Client (3)
EJB 3: Deklaration der JNDI Factory Bean im Application Context
Spring 1.2:
<bean id="employeeService"
class="...JndiObjectProxyFactoryBean">
<property name="jndiName" value="ejb/EmployeeServiceBean"/>
<property name="expectedType" value="...EmployeeService"/>
</bean>
Spring 2.0 Namespaces:
<jee:jndi-lookup id="employeeService"
jndi-name="ejb/EmployeeServiceBean"
expected-type="...EmployeeService"/>
Anschließend kann die Referenz einfach in einen Client injiziert werden.
Spring 2.0 und EJB 3 – Vergleich und Integrationsmöglichkeiten
Seite 60
Motivation
● Warum ist eine Integration überhaupt wünschenswert?
Folgende Szenarien sind denkbar:
● Man möchte als Persistenzframework den neue JPA-Standard
verwenden
● Mittelschichtkomponenten wurden mit Spring entwickelt
und müssen als EJBs „exportiert“ werden
● Die Präsentationsschicht wird mit Hilfe von Spring entwickelt
und muss auf EJBs zugreifen
● Man möchte mit EJB 3 entwickeln, aber die Spring
Programmiervereinfachungen nutzen
● Für die Implementierung „hinter“ einer EJB möchte man Spring
nutzen
Spring 2.0 und EJB 3 – Vergleich und Integrationsmöglichkeiten
Seite 61
Nutzung von Spring als Klassenbibliothek
● Spring kann häufig auch einfach als Klassenbibliothek
genutzt werden:
Spring 2.0 und EJB 3 – Vergleich und Integrationsmöglichkeiten
Seite 62
Motivation
● Warum ist eine Integration überhaupt wünschenswert?
Folgende Szenarien sind denkbar:
● Man möchte als Persistenzframework den neue JPA-Standard
verwenden
● Mittelschichtkomponenten wurden mit Spring entwickelt
und müssen als EJBs „exportiert“ werden
● Die Präsentationsschicht wird mit Hilfe von Spring entwickelt
und muss auf EJBs zugreifen
● Man möchte mit EJB 3 entwickeln, aber die Spring
Programmiervereinfachungen nutzen
● Für die Implementierung „hinter“ einer EJB möchte man Spring
nutzen
Spring 2.0 und EJB 3 – Vergleich und Integrationsmöglichkeiten
Seite 63
Integration: DI von Spring Beans in EJBs (1)
● Feingranulare Komposition von EJBs und Spring Beans
● Beispiel: Service als EJB Session Bean, DAOs als Spring Beans
Problem: EJB DI erfasst Spring Beans nicht.
● Lösungsansatz 1:
Spring Beans im Enterprise Naming Context publizieren und
anschließend mit @Resource in EJB injizieren
Publizieren im JNDI z.B. durch einen Servlet Context Listener
oder Application-Server-spezifische Erweiterungen,
z.B. JBoss Spring Deployer
Quellen:
● http://chris-richardson.blog-city.com/...
the_ejb_cult_part_3__integrating_spring_and_ejb_30_dependency_injection.htm
● http://java.sys-con.com/read/180386.htm
Spring 2.0 und EJB 3 – Vergleich und Integrationsmöglichkeiten
Seite 64
Integration: DI von Spring Beans in EJBs (2)
● Feingranulare Komposition von EJBs und Spring Beans
● Lösungsansatz 2:
EJBs werden im Spring Application Context bekannt gemacht
und können dort wie Spring Beans konfiguriert werden.
Hierfür werden jedoch entweder
Container-spezifische Erweiterungen (siehe z.B.
BEA WebLogic Server EJB 3.0 Tech Preview)
oder
AOP (AspectJ)
benötigt, um in den Erzeugungsprozess der EJBs einzugreifen
Quellen:
● http://dev2dev.bea.com/pub/a/2005/09/spring_integration_weblogic_server.html
● http://springide.org/project/wiki/JeeWithSpringAndBea
● http://www.jroller.com/page/malbari?entry=javaee_5_spring_2_and
● http://springide.org/project/wiki/SpringDependencyInjectionWithEjb3
Spring 2.0 und EJB 3 – Vergleich und Integrationsmöglichkeiten
Seite 65
Integration: DI von Spring Beans in EJBs (3)
● Feingranulare Komposition von EJBs und Spring Beans
● Lösungsansatz 3:
Definition einer Annotation @SpringBean zur Deklaration einer
Dependency zwischen einer EJB und einer Spring-Bean
Definition eines EJB-Interceptors, der auf die Annotation reagiert,
mit Hilfe eines Bean Factory Locators den Application Context
erzeugt und die Spring Bean injiziert.
Quelle:
● http://twasink.net/blog/archives/2007/01/using_spring_wi.html
Spring 2.0 und EJB 3 – Vergleich und Integrationsmöglichkeiten
Seite 66
Integration: DI von Spring Beans in EJBs (3)
Quelle: http://twasink.net/blog/archives/2007/01/using_spring_wi.html
Spring 2.0 und EJB 3 – Vergleich und Integrationsmöglichkeiten
Seite 67
- Spring und EJB Integration Teil 3: Pitchfork
Spring 2.0 und EJB 3 – Vergleich und Integrationsmöglichkeiten
Seite 68
Projekt Pitchfork (1)
● Projekt Pitchfork
● Ergänzung zum Spring Framework
● Projektziel:
„An add-on for the Spring Framework performing JSR-250
dependency injection, annotation processing and EJB 3.0-style
interception, developed by Interface21 and BEA Systems.“
● Anlass: EJB-3-Support durch BEA WebLogic Server wird mit Hilfe
von Spring und Pitchfork implementiert.
● Einsatzszenarien:
EJB-3-Funktionen im Tomcat nutzen
Testen von EJB-3-Komponenten außerhalb des Containers
Quellen:
● http://www.interface21.com/pitchfork
● http://dev2dev.bea.com/pub/a/2005/09/spring_integration_weblogic_server.html
Spring 2.0 und EJB 3 – Vergleich und Integrationsmöglichkeiten
Seite 69
Projekt Pitchfork (2)
● Durch Pitchfork unterstützte Annotationen:
● JSR 250 injection annotations (javax.annotation):
@PostCostruct, @PreDestroy and @Resource
● EJB3 interception annotations (javax.interceptor):
@AroundInvoke, @ExcludeClassInterceptors,
@ExcludeDefaultInterceptors, @Interceptors,
@Invocation
● EJB3 transaction annotations (javax.ejb):
@Stateless, @ApplicationException and
@TransactionAttribute
● EJB3 injection annotation (javax.ejb):
@EJB (Seit Pitchfork Release 1.0-m2)
Spring 2.0 und EJB 3 – Vergleich und Integrationsmöglichkeiten
Seite 70
&
Fragen & Antworten
Spring 2.0 und EJB 3 – Vergleich und Integrationsmöglichkeiten
Seite 71
Quellen
● Spring Framework:
http://www.springframework.org/
● Rod Johnson, Introduction to the Spring Framework:
http://www.theserverside.com/tt/articles/article.tss?l=SpringFramework
● Enterprise JavaBeans Technology:
http://java.sun.com/products/ejb/
● EJB 3.0 Specification Final Release:
http://java.sun.com/products/ejb/docs.html
● Java Persistence API:
http://java.sun.com/javaee/technologies/entapps/persistence.jsp
●
Backschat, Rücker: Enterprise JavaBeans 3.0,
Kapitel 13: „Frameworks: Spring und Seam“
http://www.ejbbuch.de/
Spring 2.0 und EJB 3 – Vergleich und Integrationsmöglichkeiten
Seite 72
Kontakt:
Stefan Scheidt
OPITZ CONSULTING GmbH
[email protected]
Vielen Dank für Ihr
Interesse !
Spring 2.0 und EJB 3 – Vergleich und Integrationsmöglichkeiten
Seite 73
Herunterladen