41
EJB 3 - Ein Blick über den Tellerrand Heiko W. Rupp <[email protected] >

EJB 3 - Ein Blick über den Tellerrand - bsd.debsd.de/e3fu/JUGS-EJB3-Talklet.pdf · EJB 3 - Ein Blick über den Tellerrand Heiko W. Rupp

  • Upload
    others

  • View
    1

  • Download
    0

Embed Size (px)

Citation preview

Page 1: EJB 3 - Ein Blick über den Tellerrand - bsd.debsd.de/e3fu/JUGS-EJB3-Talklet.pdf · EJB 3 - Ein Blick über den Tellerrand Heiko W. Rupp

EJB 3 - Ein Blick über den Tellerrand

Heiko W. Rupp<[email protected]>

Page 2: EJB 3 - Ein Blick über den Tellerrand - bsd.debsd.de/e3fu/JUGS-EJB3-Talklet.pdf · EJB 3 - Ein Blick über den Tellerrand Heiko W. Rupp

(c) 2007 Heiko W. Rupp

Agenda• Abriss des Standards

• Blick auf vorhandene Implementierungen

• Erfahrungen aus der Praxis

• Verlosung der 2 Bücher

Page 3: EJB 3 - Ein Blick über den Tellerrand - bsd.debsd.de/e3fu/JUGS-EJB3-Talklet.pdf · EJB 3 - Ein Blick über den Tellerrand Heiko W. Rupp

(c) 2007 Heiko W. Rupp

Agenda• Abriss des Standards

• Blick auf vorhandene Implementierungen

• Erfahrungen aus der Praxis

• Verlosung der 2 Bücher

Page 4: EJB 3 - Ein Blick über den Tellerrand - bsd.debsd.de/e3fu/JUGS-EJB3-Talklet.pdf · EJB 3 - Ein Blick über den Tellerrand Heiko W. Rupp

(c) 2007 Heiko W. Rupp

Abriss des Standards (1)• Zurück zum POJO

- Keine komplexen Interfaces

• Konvention statt Konfiguration

- Sinnvolle Voreinstellungen

• Metadaten am Code

Page 5: EJB 3 - Ein Blick über den Tellerrand - bsd.debsd.de/e3fu/JUGS-EJB3-Talklet.pdf · EJB 3 - Ein Blick über den Tellerrand Heiko W. Rupp

(c) 2007 Heiko W. Rupp

Abriss des Standards (2)• Session Beans

- @Stateful

- @Stateless

• Message-Driven Beans

- @MessageDriven

• Entity Beans

- Neu als JPA

Page 6: EJB 3 - Ein Blick über den Tellerrand - bsd.debsd.de/e3fu/JUGS-EJB3-Talklet.pdf · EJB 3 - Ein Blick über den Tellerrand Heiko W. Rupp

(c) 2007 Heiko W. Rupp

JPA• Java Persistence API

- Sehr ähnlich Hibernate / JDO

• Layer über Persistenz-Provider

• Ansprache über EntityManager

• Auch in Java SE nutzbar

Page 7: EJB 3 - Ein Blick über den Tellerrand - bsd.debsd.de/e3fu/JUGS-EJB3-Talklet.pdf · EJB 3 - Ein Blick über den Tellerrand Heiko W. Rupp

(c) 2007 Heiko W. Rupp

Konsequenzen• Schnellere Entwicklung

- Weniger Code

- Kein synchron-halten vieler Artefakte

• Schnelleres und besseres Testen

- Entity Beans in UnitTests!

Page 8: EJB 3 - Ein Blick über den Tellerrand - bsd.debsd.de/e3fu/JUGS-EJB3-Talklet.pdf · EJB 3 - Ein Blick über den Tellerrand Heiko W. Rupp

(c) 2007 Heiko W. Rupp

Konsequenzen• Schnellere Entwicklung

- Weniger Code

- Kein synchron-halten vieler Artefakte

• Schnelleres und besseres Testen

- Entity Beans in UnitTests!

- Session Beans in UnitTests !!

Page 9: EJB 3 - Ein Blick über den Tellerrand - bsd.debsd.de/e3fu/JUGS-EJB3-Talklet.pdf · EJB 3 - Ein Blick über den Tellerrand Heiko W. Rupp

(c) 2007 Heiko W. Rupp

Agenda• Abriss des Standards

• Blick auf vorhandene Implementierungen

• Erfahrungen aus der Praxis

• Verlosung der 2 Bücher

Page 10: EJB 3 - Ein Blick über den Tellerrand - bsd.debsd.de/e3fu/JUGS-EJB3-Talklet.pdf · EJB 3 - Ein Blick über den Tellerrand Heiko W. Rupp

(c) 2007 Heiko W. Rupp

Implementierungen• Zu Unterscheiden:

- EJB 3 vollständig

• Java EE zertifiziert

• (Noch) nicht zertifiziert

- Nur JPA

Page 11: EJB 3 - Ein Blick über den Tellerrand - bsd.debsd.de/e3fu/JUGS-EJB3-Talklet.pdf · EJB 3 - Ein Blick über den Tellerrand Heiko W. Rupp

(c) 2007 Heiko W. Rupp

Implementierungen• Java EE zertifiziert

- http://java.sun.com/javaee/overview/compatibility.jsp

• Bea Weblogic 10 Tech Preview

• Kingdee Apusic

• SAP Netweaver Java EE 5 Edition

• Sun Java Enterprise Server Platform Edition 9

• Tmax Soft JEUS 6

Page 12: EJB 3 - Ein Blick über den Tellerrand - bsd.debsd.de/e3fu/JUGS-EJB3-Talklet.pdf · EJB 3 - Ein Blick über den Tellerrand Heiko W. Rupp

(c) 2007 Heiko W. Rupp

Implementierungen (2)• Server, nicht zertifiziert

- Red Hat JBoss AS

• 4.0.5 + EJB 3

• 5.0.0 Alpha

• Embedded EJB 3

- ObjectWeb Easy Beans

- Sun Glassfish („Referenz“)

Page 13: EJB 3 - Ein Blick über den Tellerrand - bsd.debsd.de/e3fu/JUGS-EJB3-Talklet.pdf · EJB 3 - Ein Blick über den Tellerrand Heiko W. Rupp

(c) 2007 Heiko W. Rupp

Implementierungen (3)• Server ...

- Oracle AS

- Apache Open EJB

• Basis für Geronimo Server

- IBM Alpha Feature für WAS 6.1.0.3

Page 14: EJB 3 - Ein Blick über den Tellerrand - bsd.debsd.de/e3fu/JUGS-EJB3-Talklet.pdf · EJB 3 - Ein Blick über den Tellerrand Heiko W. Rupp

(c) 2007 Heiko W. Rupp

JPA-Implementierungen• JPA-Implementierungen

- Oracle Toplink Essentials („Referenz“)

- Hibernate + EntityManager + Annotations

- Bea Kodo (früher Solarmetric)

- Apache OpenJPA (OSS Kodo)

- Apache Cayenne

- Resin Amber

Page 15: EJB 3 - Ein Blick über den Tellerrand - bsd.debsd.de/e3fu/JUGS-EJB3-Talklet.pdf · EJB 3 - Ein Blick über den Tellerrand Heiko W. Rupp

(c) 2007 Heiko W. Rupp

Agenda• Abriss des Standards

• Blick auf vorhandene Implementierungen

• Erfahrungen aus der Praxis

• Verlosung der 2 Bücher

Page 16: EJB 3 - Ein Blick über den Tellerrand - bsd.debsd.de/e3fu/JUGS-EJB3-Talklet.pdf · EJB 3 - Ein Blick über den Tellerrand Heiko W. Rupp

(c) 2007 Heiko W. Rupp

Naming• Dependency Injection

- Setter-Injection / Field-Injection

• Namen im JNDI weiter herstellerspezifisch

- Teils anders für App. im JAR / EAR

@EJBSessionBeanLocal mySB;

SessionBeanLocal mySB;

@EJB public void setSessionBeanLocal (SessionBeanLocal local) {mySB = local;}

Page 17: EJB 3 - Ein Blick über den Tellerrand - bsd.debsd.de/e3fu/JUGS-EJB3-Talklet.pdf · EJB 3 - Ein Blick über den Tellerrand Heiko W. Rupp

(c) 2007 Heiko W. Rupp

PersistenceContext/-Unit• PersistenceUnit

- Sammlung von Entity Beans

• PersistenceContext

- Wie Hibernate-Session

- Von EntityManager verwaltet

• Einzig notwendiger Deployment-Deskriptor: persistence.xml

@PersitenceContextEntityManager em;

Page 18: EJB 3 - Ein Blick über den Tellerrand - bsd.debsd.de/e3fu/JUGS-EJB3-Talklet.pdf · EJB 3 - Ein Blick über den Tellerrand Heiko W. Rupp

(c) 2007 Heiko W. Rupp

PersistenceContext• Szenario:

- Entity Beans in einem Archiv

- Nutzende Session Beans in anderem Archiv

• @PeristenceContext braucht Namen aus persistence.xml

@PersistenceContext(unitName = „myPU“)EntityManager em;

Page 19: EJB 3 - Ein Blick über den Tellerrand - bsd.debsd.de/e3fu/JUGS-EJB3-Talklet.pdf · EJB 3 - Ein Blick über den Tellerrand Heiko W. Rupp

(c) 2007 Heiko W. Rupp

Finder• In EJB 2 am Home-Interface

- „statische Methode“

- Namenscheck zur Compile-Zeit

• In EJB 3

- Methode in Session Bean notwendig

- Deklaration am Entity Bean möglich

• „Named Query“

Page 20: EJB 3 - Ein Blick über den Tellerrand - bsd.debsd.de/e3fu/JUGS-EJB3-Talklet.pdf · EJB 3 - Ein Blick über den Tellerrand Heiko W. Rupp

(c) 2007 Heiko W. Rupp

Named Querys (1)• Großer Vorteil:

- Syntaxüberprüfung zur Deploy-Zeit

- Bzw. bei Unit-Tests

- Container kann sie vorkompilieren

Page 21: EJB 3 - Ein Blick über den Tellerrand - bsd.debsd.de/e3fu/JUGS-EJB3-Talklet.pdf · EJB 3 - Ein Blick über den Tellerrand Heiko W. Rupp

(c) 2007 Heiko W. Rupp

Named Querys (2)• Name muss innerhalb der PU eindeutig sein

- Voranstellen AbstractSchema

- Nutzung:

@NamedQuery( name=“Kunde.findByX“, query=“...“)

Query q = em.createNamedQuery(„Kunde.findByX“);

Page 22: EJB 3 - Ein Blick über den Tellerrand - bsd.debsd.de/e3fu/JUGS-EJB3-Talklet.pdf · EJB 3 - Ein Blick über den Tellerrand Heiko W. Rupp

(c) 2007 Heiko W. Rupp

Named Querys (3)• Besser als Konstante

- Weniger Fehler zur Laufzeit

- Leichteres Auffinden der Query im Code

@NamedQuery(name=Kunde.FIND_BY_X, ...)@Entitypublic class Kunde {public static final String FIND_BY_X=“Kunde.FIND_BY_NAME“;

Page 23: EJB 3 - Ein Blick über den Tellerrand - bsd.debsd.de/e3fu/JUGS-EJB3-Talklet.pdf · EJB 3 - Ein Blick über den Tellerrand Heiko W. Rupp

(c) 2007 Heiko W. Rupp

Zusammengesetzer PK• Möglichkeit für zusammengesetzte PK

- IdClass

- EmbeddedID

• Beide benötigen extra Klasse für PK

• IdClass ist einfacher für existierende Finder

- Query-Konversion via Perl-Skript möglich

Page 24: EJB 3 - Ein Blick über den Tellerrand - bsd.debsd.de/e3fu/JUGS-EJB3-Talklet.pdf · EJB 3 - Ein Blick über den Tellerrand Heiko W. Rupp

(c) 2007 Heiko W. Rupp

Relationen (1)• CMP und CMR machen alles automatisch

• JPA Entity Beans sind POJOs

- Relation durch zwei Felder gekennzeichnet

Name

Vorname

Adresse a

Person

Strasse

Ort

Person p

Adressea

pa1

Page 25: EJB 3 - Ein Blick über den Tellerrand - bsd.debsd.de/e3fu/JUGS-EJB3-Talklet.pdf · EJB 3 - Ein Blick über den Tellerrand Heiko W. Rupp

(c) 2007 Heiko W. Rupp

Relationen (2)• Umhängen der Relation (neue Adresse)

Name

Vorname

Adresse a

Person

Strasse

Ort

Person p

Adresse

Strasse

Ort

Person p

Adresse

a

p

a'

?

a1

a2

Person.addAdresse(Adresse a) { this.a = a; a.setPerson(this);}

Page 26: EJB 3 - Ein Blick über den Tellerrand - bsd.debsd.de/e3fu/JUGS-EJB3-Talklet.pdf · EJB 3 - Ein Blick über den Tellerrand Heiko W. Rupp

(c) 2007 Heiko W. Rupp

Relationen (3)• @OneToMany, @ManyToMany

- Lazy-Loading

• @OneToOne, @ManyToOne

- Eager-Loading

• Achtung: equals() und hashCode()

Page 27: EJB 3 - Ein Blick über den Tellerrand - bsd.debsd.de/e3fu/JUGS-EJB3-Talklet.pdf · EJB 3 - Ein Blick über den Tellerrand Heiko W. Rupp

(c) 2007 Heiko W. Rupp

PersistenceContext Teil 2• 1st-Level-Cache

• Identitätsgarantie

• Tracking von Änderungen

• Update in Batches

• Management des Lebenszyklus

- Detached Objects

Page 28: EJB 3 - Ein Blick über den Tellerrand - bsd.debsd.de/e3fu/JUGS-EJB3-Talklet.pdf · EJB 3 - Ein Blick über den Tellerrand Heiko W. Rupp

(c) 2007 Heiko W. Rupp

Detached Objects• Entity Beans können zu Clients gesendet werden

- VO / DTO müssen nicht mehr sein

- Re-attach im Entity Manager

Page 29: EJB 3 - Ein Blick über den Tellerrand - bsd.debsd.de/e3fu/JUGS-EJB3-Talklet.pdf · EJB 3 - Ein Blick über den Tellerrand Heiko W. Rupp

(c) 2007 Heiko W. Rupp

PC als Cache• Cachen der Beans bis insert / update

- viele Beans: Flush nötig

• Querys schreiben den Cache raus

- Antipattern:

for (int i=0; i< 100000; i++) { XY = new XY(i); em.perist(i); Query q = ...; Object o = q.getSingleResult(); XY.setZ(o);}

Page 30: EJB 3 - Ein Blick über den Tellerrand - bsd.debsd.de/e3fu/JUGS-EJB3-Talklet.pdf · EJB 3 - Ein Blick über den Tellerrand Heiko W. Rupp

(c) 2007 Heiko W. Rupp

PC und Batch-Updates• Endlich Batch-Update und -Delete

• Laufen am PC vorbei

• Reihenfolge der Operationen ist wichtig

public void foo() {Query q = ... // Lese KundenList<Kunde> kunden = q.getResultList();q = ... // Delete K from Kunde where k.Umsatz = 0q.executeUpdate();for (Kunde k: kunden) { // machwas mit dem Kunde}

Page 31: EJB 3 - Ein Blick über den Tellerrand - bsd.debsd.de/e3fu/JUGS-EJB3-Talklet.pdf · EJB 3 - Ein Blick über den Tellerrand Heiko W. Rupp

(c) 2007 Heiko W. Rupp

Delegate• EntityManager.getDelegate()

- Unterliegender Peristenz-Provider

- Implementierungsspezifisch

• Nutzung für Features, die JPA nicht bietet

- findByExample / findByCriteria

- Ermittlung der unterliegeden Hibernate-Query

Page 32: EJB 3 - Ein Blick über den Tellerrand - bsd.debsd.de/e3fu/JUGS-EJB3-Talklet.pdf · EJB 3 - Ein Blick über den Tellerrand Heiko W. Rupp

(c) 2007 Heiko W. Rupp

Locking von Entity Beans• EJB 2 CMP

- Pesimistic Locking

• EJB 3

- Optimistic Locking

- Versionsspalte mit @Version

- OptimisticLockException

Page 33: EJB 3 - Ein Blick über den Tellerrand - bsd.debsd.de/e3fu/JUGS-EJB3-Talklet.pdf · EJB 3 - Ein Blick über den Tellerrand Heiko W. Rupp

(c) 2007 Heiko W. Rupp

Annotationen für EB• Ort von @Id bestimmt Zugriff durch EM

- Feld / Getter

- Muss für die Hierarchie gleich sein

• Tools erwarten eher @Id am Feld

• „Reine Lehre“

- @Id an Getter/Setter für Tests

Page 34: EJB 3 - Ein Blick über den Tellerrand - bsd.debsd.de/e3fu/JUGS-EJB3-Talklet.pdf · EJB 3 - Ein Blick über den Tellerrand Heiko W. Rupp

(c) 2007 Heiko W. Rupp

Geschäftslogik• Session Beans

• Message-Driven Beans

• Dependency Injection möglich

- @EJB, @Resource, @PeristenceContext

• EJB Context hat lookup() Methode

Page 35: EJB 3 - Ein Blick über den Tellerrand - bsd.debsd.de/e3fu/JUGS-EJB3-Talklet.pdf · EJB 3 - Ein Blick über den Tellerrand Heiko W. Rupp

(c) 2007 Heiko W. Rupp

Session Bean• @Local als Default

• Kann nicht @Local und @Remote sein

• Muss von Local- und Remote-Interface erben

Page 36: EJB 3 - Ein Blick über den Tellerrand - bsd.debsd.de/e3fu/JUGS-EJB3-Talklet.pdf · EJB 3 - Ein Blick über den Tellerrand Heiko W. Rupp

(c) 2007 Heiko W. Rupp

Session Bean• @Local als Default

• Kann nicht @Local und @Remote sein

• Muss von Local- und Remote-Interface erben

+hello():String

+log():void

<<interface>>

Business

<<interface>>

IRemote

<<interface>>

ILocal

+hello():String

+log():void

BusImpl

Page 37: EJB 3 - Ein Blick über den Tellerrand - bsd.debsd.de/e3fu/JUGS-EJB3-Talklet.pdf · EJB 3 - Ein Blick über den Tellerrand Heiko W. Rupp

(c) 2007 Heiko W. Rupp

Session Bean Vererbung• Session Beans können von anderen Session Beans

erben

- Nicht offiziell in der Spezifikation

- Security / Tx / lnterceptoren

• Haben entsprechende Kommentare

• Beispiel:

- Session Bean „international“

- Kind: Session Bean pro Land

Page 38: EJB 3 - Ein Blick über den Tellerrand - bsd.debsd.de/e3fu/JUGS-EJB3-Talklet.pdf · EJB 3 - Ein Blick über den Tellerrand Heiko W. Rupp

(c) 2007 Heiko W. Rupp

Ende ...• Folien

- http://bsd.de/e3fu/

• Beispiel-Implementierung

- Weblog System

• Liste der Implementierungen

- http://bsd.de/e3fu/referenzen.html

Page 39: EJB 3 - Ein Blick über den Tellerrand - bsd.debsd.de/e3fu/JUGS-EJB3-Talklet.pdf · EJB 3 - Ein Blick über den Tellerrand Heiko W. Rupp

(c) 2007 Heiko W. Rupp

Page 40: EJB 3 - Ein Blick über den Tellerrand - bsd.debsd.de/e3fu/JUGS-EJB3-Talklet.pdf · EJB 3 - Ein Blick über den Tellerrand Heiko W. Rupp

(c) 2007 Heiko W. Rupp

Entity Bean Lebenszyklusnew

managed

detached

removed

new()

remove()

clear()

close()

serializecommitrollback

merge()

refresh()

flush() flush()

commit

persist()

Queries

find()

persist()

merge()

Page 41: EJB 3 - Ein Blick über den Tellerrand - bsd.debsd.de/e3fu/JUGS-EJB3-Talklet.pdf · EJB 3 - Ein Blick über den Tellerrand Heiko W. Rupp

(c) 2007 Heiko W. Rupp

equals() & hashCode()• Entity Beans müssen diese Methoden

implementieren

• Gute Kandidaten?

- pk?

- Relationen?

- Business Keys?