EJB 3.1 professionell, 2nd Edition

Book description

  • Oliver Ihns ist einer der wenigen deutschen Java Champions und Mitglied der Expert Group zu Enterprise JavaBeans 3.1, dem Gremium, das EJB 3.1 definierte.+ Behandelt auch das wichtige Thema "Migration".

Table of contents

  1. Cover
  2. Titel
  3. Impressum
  4. Inhaltsverzeichnis
  5. Vorwort
    1. Was ist neu in der zweiten Auflage?
    2. Für wen ist dieses Buch?
    3. Von wem ist dieses Buch?
    4. Danksagungen
    5. Widmung
    6. Ihre Kommentare und Anmerkungen
  6. 1 Einleitung – Jetzt wird’s leicht!
    1. 1.1 Die Evolution der Enterprise JavaBeans
      1. 1.1.1 Der Fluch der Komplexität
      2. 1.1.2 Kritik an den früheren EJB-Versionen
      3. 1.1.3 Ein neues Denken schafft eine neue Architektur
      4. 1.1.4 Der konsequente nächste Schritt
    2. 1.2 Aufbau des Buches
      1. 1.2.1 Die Themenbereiche
      2. 1.2.2 Die Kapitel: Struktur und Inhalte
    3. 1.3 Konventionen
      1. 1.3.1 Notation
      2. 1.3.2 Literaturverweise bzw. Referenzen
      3. 1.3.3 Quellcode
      4. 1.3.4 Piktogramme
      5. 1.3.5 Verwendung von Anglizismen
      6. 1.3.6 Gleichberechtigung in der Sprache
    4. 1.4 Die Beispielapplikation »Ticket2Rock«
      1. 1.4.1 Kurzbeschreibung
      2. 1.4.2 Anwendungsfälle
      3. 1.4.3 Fachliche Entitäten
    5. 1.5 Verwendete Technologien und Produkte
    6. 1.6 Die Website zum Buch
  7. Teil I Grundlagen
    1. 2 Leichtgewichtige, POJO-basierte Enterprise-Applikationen
      1. 2.1 Kurz gefasst
      2. 2.2 Der Blick zurück
      3. 2.3 Einleitung
      4. 2.4 Hauptziele für EJB 3.x
        1. 2.4.1 Motive
        2. 2.4.2 »Einfach machen!«
        3. 2.4.3 Vereinfachung der Mikroarchitektur von EJB-Komponenten
        4. 2.4.4 Vereinfachung des Entwicklungsprozesses
        5. 2.4.5 Vereinfachung der Nutzung von EJB-Komponenten
        6. 2.4.6 Neuentwicklung einer leistungsfähigen Persistenzlösung
      5. 2.5 POJOs und POJIs
        1. 2.5.1 POJO
        2. 2.5.2 POJI
        3. 2.5.3 Unterschiede zwischen EJB 3.x und EJB 2.x
      6. 2.6 Inversion of Control und Dependency Injection
        1. 2.6.1 Ziele im Kontext von EJB 3.x
        2. 2.6.2 Auswirkungen auf die EJB-3.x-Architektur
        3. 2.6.3 »Hollywood, wir kommen!« – ein Beispiel
      7. 2.7 Annotationen und Deployment-Deskriptoren
        1. 2.7.1 Einführung
        2. 2.7.2 Deployment-Deskriptoren – so schlecht wie ihr Ruf?
        3. 2.7.3 Annotationen
        4. 2.7.4 Ein Plädoyer für Deployment-Deskriptoren
        5. 2.7.5 Der Deployment-Deskriptor hat das letzte Wort
      8. 2.8 Configuration by Exception
    2. 3 EJB-Komponentenarchitektur
      1. 3.1 Kurz gefasst
      2. 3.2 Grundlegende Konzepte
        1. 3.2.1 Komponentenarchitektur
        2. 3.2.2 Java EE
        3. 3.2.3 Java SE
        4. 3.2.4 Der Java-EE-Applikationsserver
        5. 3.2.5 Der EJB-Container
      3. 3.3 Übersicht der EJB-Typen
        1. 3.3.1 Session Bean
        2. 3.3.2 Message-Driven Bean
        3. 3.3.3 Persistent Entity
      4. 3.4 Aufrufmodelle
        1. 3.4.1 Aufrufmodell: »entfernt«
        2. 3.4.2 Aufrufmodell »lokal«
        3. 3.4.3 Aufrufmodell »nachrichtenbasiert«
        4. 3.4.4 Aufrufmodelle und EJB-Typen im Überblick
    3. 4 EJB Lite – das abgespeckte EJB
      1. 4.1 Kurz gefasst
      2. 4.2 Der Blick zurück
      3. 4.3 Leicht zu sein bedarf es wenig
      4. 4.4 Was mach ich nun mit dem EJB-Lite-Profil?
  8. Teil II Technologie
    1. 5 Session Beans
      1. 5.1 Kurz gefasst
      2. 5.2 Der Blick zurück
      3. 5.3 Einführung
      4. 5.4 Stateless Session Beans
        1. 5.4.1 Transaktionen
        2. 5.4.2 Instanz-Pooling
        3. 5.4.3 Webservices
      5. 5.5 Stateful Session Beans
        1. 5.5.1 Aktivierung und Passivierung
        2. 5.5.2 Transaktionen
      6. 5.6 Singleton Session Beans
        1. 5.6.1 Transaktionen
        2. 5.6.2 Nebenläufigkeit
      7. 5.7 Stateless, Stateful und Singleton Session Beans im Vergleich
      8. 5.8 Mikroarchitektur einer Session Bean
        1. 5.8.1 Namenskonventionen
        2. 5.8.2 Zusammenspiel der Elemente
        3. 5.8.3 Erzeugen von Session Beans
        4. 5.8.4 Löschen von Session Beans
      9. 5.9 Lebenszyklus von Stateless Session Beans
        1. 5.9.1 Zustand »does not exist«
        2. 5.9.2 Übergang von »does not exist« zu »method-ready pool«
        3. 5.9.3 Zustand »method-ready pool«
        4. 5.9.4 Übergang von »method-ready pool« zu »does not exist«
      10. 5.10 Lebenszyklus von Stateful Session Beans
        1. 5.10.1 Zustand »does not exist«
        2. 5.10.2 Übergang von »does not exist« zu »method-ready«
        3. 5.10.3 Zustände »method-ready« und »method-ready in TX«
        4. 5.10.4 Zustand »passive«
        5. 5.10.5 Übergang in den Zustand »does not exist«
      11. 5.11 Lebenszyklus von Singleton Session Beans
        1. 5.11.1 Zustand »does not exist«
        2. 5.11.2 Übergang von »does not exist« zu »method-ready«
        3. 5.11.3 Zustand »method-ready«
        4. 5.11.4 Übergang von »method-ready« zu »does not exist«
      12. 5.12 Business Interface
      13. 5.13 No-Interface Client View
      14. 5.14 Bean-Klasse
        1. 5.14.1 Deklarative Transaktionalität
        2. 5.14.2 Transaktionen in Handarbeit
        3. 5.14.3 Transaktionen im Ausnahmezustand
        4. 5.14.4 EJB-Kontext
        5. 5.14.5 Checkliste
      15. 5.15 Nebenläufigkeit bei Singleton Session Beans
        1. 5.15.1 Nebenläufigkeit – Container-Managed
        2. 5.15.2 Nebenläufigkeit – Bean-Managed
      16. 5.16 Asynchrone Methodenaufrufe
      17. 5.17 Timer Service
    2. 6 Session Beans als Webservice
      1. 6.1 Kurz gefasst
      2. 6.2 Der Blick zurück
      3. 6.3 Was ist ein WebService?
      4. 6.4 Stateless und Singleton Session Beans als Webservice
        1. 6.4.1 @WebService
        2. 6.4.2 @SOAPBinding
        3. 6.4.3 @WebMethod
        4. 6.4.4 @Oneway
        5. 6.4.5 @WebParam
        6. 6.4.6 @WebResult
        7. 6.4.7 @HandlerChain
      5. 6.5 Vorgehensweise bei der Erstellung von Webservices
      6. 6.6 Die Abbildung von Rückgabetypen und Parametern beeinflussen
      7. 6.7 Ein Webservice-Client
    3. 7 Message-Driven Beans
      1. 7.1 Kurz gefasst
      2. 7.2 Der Blick zurück
      3. 7.3 Nachrichtenbasierte Kommunikation
        1. 7.3.1 Charakteristika und Vorteile
        2. 7.3.2 Kommunikationsmodelle
      4. 7.4 Java Message Service (JMS)
        1. 7.4.1 Service Provider Interface
        2. 7.4.2 JMS API
      5. 7.5 Charakteristika von Message-Driven Beans
        1. 7.5.1 JMS Message-Driven Beans
        2. 7.5.2 Connector-based Message-Driven Beans
      6. 7.6 Lebenszyklus von Message-Driven Beans
      7. 7.7 Transaktionalität
      8. 7.8 Bean-Klasse
        1. 7.8.1 @MessageDriven
        2. 7.8.2 @ActivationConfigProperty
        3. 7.8.3 Message Listener Interface
        4. 7.8.4 Beantworten von Nachrichten
        5. 7.8.5 Checkliste
      9. 7.9 Deployment-Deskriptor
      10. 7.10 Timer Service
      11. 7.11 Ein JMS-Client
      12. 7.12 Message Linking
    4. 8 Entity Beans
      1. 8.1 Kurz gefasst
      2. 8.2 Der Blick zurück
      3. 8.3 Aus Entity Beans werden Persistent Entities
    5. 9 Persistenzabbildung
      1. 9.1 Kurz gefasst
      2. 9.2 Der Blick zurück
      3. 9.3 Persistenz? Abbildung?
      4. 9.4 Persistent Entities
        1. 9.4.1 Lightweight
        2. 9.4.2 Persistent
        3. 9.4.3 Domain Object
        4. 9.4.4 Lebenszyklus
      5. 9.5 Persist my POJO!
        1. 9.5.1 Annotation oder Deployment-Deskriptor?
        2. 9.5.2 Beispiel
      6. 9.6 Grundkonzepte
        1. 9.6.1 Persistence Provider
        2. 9.6.2 Entity-Manager
        3. 9.6.3 Persistenzeinheit
        4. 9.6.4 Persistenzkontext
      7. 9.7 Deployment-Deskriptoren
        1. 9.7.1 persistence.xml
        2. 9.7.2 orm.xml
      8. 9.8 Arbeiten mit dem Entity-Manager
        1. 9.8.1 Dauerhaftes Speichern in der Datenbank (persist)
        2. 9.8.2 Aktualisieren des persistenten Objektzustands (merge)
        3. 9.8.3 Löschen einer Persistent Entity (remove)
        4. 9.8.4 Finden einer Persistent Entity in der Datenbank (find, getReference)
        5. 9.8.5 Sofortiges Ausführen der Datenbankoperation (flush)
        6. 9.8.6 Blockieren einer Persistent Entity (lock)
        7. 9.8.7 Aktualisieren des Zustands der Objektinstanz (refresh)
        8. 9.8.8 Leben im Persistenzkontext (clear, contains)
        9. 9.8.9 Losgelöst (detach)
        10. 9.8.10 Abfragen (create...Query)
        11. 9.8.11 Transaktionen (joinTransaction)
        12. 9.8.12 Zugriff auf den Persistence Provider (getDelegate)
        13. 9.8.13 Beenden des Entity-Managers (close)
        14. 9.8.14 Suche nach Entitäten (getCriteriaBuilder)
        15. 9.8.15 Das Metamodell der Persistenz (getMetaModel)
      9. 9.9 Abbildung von Datentypen
        1. 9.9.1 Zugriff auf persistente Felder
        2. 9.9.2 Einfache Datentypen (@Basic)
        3. 9.9.3 Eingebettete Objekte (@Embeddable)
        4. 9.9.4 Große Objekte (@Lob)
        5. 9.9.5 Datum und Zeit (@Temporal)
        6. 9.9.6 Aufzählungen (@Enumerated)
      10. 9.10 Abbildung in Datenbanktabellen
        1. 9.10.1 @Table
        2. 9.10.2 @Column
      11. 9.11 Primärschlüssel
        1. 9.11.1 Einfache Primärschlüssel (@Id)
        2. 9.11.2 Zusammengesetzte Primärschlüssel (@IdClass, @EmbeddedId)
        3. 9.11.3 Generierung von Primärschlüsseln
      12. 9.12 Abbildung von Objektbeziehungen
        1. 9.12.1 Die glorreichen Sieben
        2. 9.12.2 Unidirektionale Eins-zu-Eins-Beziehung
        3. 9.12.3 Bidirektionale Eins-zu-Eins-Beziehung
        4. 9.12.4 Unidirektionale Eins-zu-Viele-Beziehung
        5. 9.12.5 Bidirektionale Eins-zu-Viele-Beziehung
        6. 9.12.6 Unidirektionale Viele-zu-Eins-Beziehung
        7. 9.12.7 Bidirektionale Viele-zu-Eins-Beziehung
        8. 9.12.8 Unidirektionale Viele-zu-Viele-Beziehung
        9. 9.12.9 Bidirektionale Viele-zu-Viele-Beziehung
        10. 9.12.10 Kaskadieren von Persistenzoperationen
      13. 9.13 Eingebettete Objekte
      14. 9.14 Abbildung auf mehrere Datenbanktabellen
        1. 9.14.1 »Single-Table-Mapping«
        2. 9.14.2 Multi-Table-Mapping
      15. 9.15 Vererbung und Polymorphie
        1. 9.15.1 Erben und Vererben
        2. 9.15.2 single table per class hierarchy strategy (SINGLE_TABLE)
        3. 9.15.3 single table per concrete entity class strategy (TABLE_PER_CLASS)
        4. 9.15.4 joined subclass strategy (JOINED)
      16. 9.16 Fetching-Strategien
        1. 9.16.1 Eager Load
        2. 9.16.2 Lazy Load
        3. 9.16.3 Deklaration der Fetching-Strategie
        4. 9.16.4 Lazy Load und Detached Objects
        5. 9.16.5 Caching von Entitäten
    6. 10 JPA-Abfragen
      1. 10.1 Kurz gefasst
      2. 10.2 Der Blick zurück
      3. 10.3 Abfragen mit der Query API
        1. 10.3.1 Queries
        2. 10.3.2 Named Queries
        3. 10.3.3 Native Queries
        4. 10.3.4 Criteria Queries
      4. 10.4 Java Persistence Query Language (JPQL)
        1. 10.4.1 SELECT
        2. 10.4.2 FROM
        3. 10.4.3 WHERE
        4. 10.4.4 ORDER BY
        5. 10.4.5 GROUP BY
        6. 10.4.6 HAVING
        7. 10.4.7 Schreibende Massenoperationen
      5. 10.5 Criteria API
        1. 10.5.1 Aufbau von Abfragen
        2. 10.5.2 CriteriaQuery
        3. 10.5.3 Operatoren, Funktionen und Ausdrücke
    7. 11 Der Lebensraum der Enterprise Beans
      1. 11.1 Kurz gefasst
      2. 11.2 Der Blick zurück
      3. 11.3 Der Enterprise Naming Context
      4. 11.4 Globale JNDI-Namen
        1. 11.4.1 Namensschema
        2. 11.4.2 Beispiel
      5. 11.5 Konfigurationsalternativen
        1. 11.5.1 Annotationen
        2. 11.5.2 Deployment-Deskriptoren
        3. 11.5.3 Kombination von Annotationen und Deployment-Deskriptoren
      6. 11.6 Arbeiten mit dem ENC
        1. 11.6.1 Bestückung mittels Deployment-Deskriptoren
        2. 11.6.2 Bestückung mittels Annotationen
        3. 11.6.3 Zugriff via JNDI-Lookup
        4. 11.6.4 Zugriff via EJBContext
        5. 11.6.5 Dependency Injection mit Deployment-Deskriptoren
        6. 11.6.6 Dependency Injection mit Annotationen
        7. 11.6.7 Sichtbarkeit von Einträgen im ENC
      7. 11.7 Auswirkungen auf den Softwaretest
      8. 11.8 Ressourcentypen
        1. 11.8.1 Enterprise Beans (@EJB)
        2. 11.8.2 Extern verwaltete Ressourcen (@Resource)
        3. 11.8.3 Resource Environment Entries (@Resource)
        4. 11.8.4 Umgebungsvariablen (@Resource)
        5. 11.8.5 Persistenzkontext (@PersistenceContext)
        6. 11.8.6 Persistenzeinheiten (@PersistenceUnit)
        7. 11.8.7 Message Destinations
        8. 11.8.8 Webservices (@WebServiceRef)
    8. 12 Callback-Mechanismen
      1. 12.1 Kurz gefasst
      2. 12.2 Der Blick zurück
      3. 12.3 Inversion of Control
      4. 12.4 Deklaration einer Callback-Methode
        1. 12.4.1 Callback-Annotationen
        2. 12.4.2 Deklaration im Deployment-Deskriptor
        3. 12.4.3 Für jede Bean die passenden Callbacks
        4. 12.4.4 Regeln für Callback-Methoden
      5. 12.5 Aufrufreihenfolge für Callback-Methoden
      6. 12.6 Callbacks für Stateless Session Beans
        1. 12.6.1 @PostConstruct
        2. 12.6.2 @PreDestroy
      7. 12.7 Callbacks für Stateful Session Beans
        1. 12.7.1 @PostConstruct und @PreDestroy
        2. 12.7.2 @PrePassivate
        3. 12.7.3 @PostActivate
      8. 12.8 Callbacks für Singleton Session Beans
        1. 12.8.1 @PostConstruct und @PreDestroy
        2. 12.8.2 @PostActivate und @PrePassivate werden ignoriert
      9. 12.9 Callbacks für Message-Driven Beans
        1. 12.9.1 @PostConstruct und @PreDestroy
        2. 12.9.2 @PostActivate und @PrePassivate werden ignoriert
      10. 12.10 Callbacks für Persistent Entities
        1. 12.10.1 Aufrufreihenfolge im Objektverbund
        2. 12.10.2 @PrePersist und @PostPersist
        3. 12.10.3 @PreUpdate und @PostUpdate
        4. 12.10.4 @PreRemove und @PostRemove
        5. 12.10.5 @PostLoad
    9. 13 Interzeptoren
      1. 13.1 Kurz gefasst
      2. 13.2 Der Blick zurück
      3. 13.3 Was ist aspektorientierte Programmierung?
      4. 13.4 Klassifikation
        1. 13.4.1 Interzeptoren für Geschäftsmethoden
        2. 13.4.2 Interzeptoren für Timeout-Methoden von Timer-Objekten
        3. 13.4.3 Interzeptoren für Lebenszyklusereignisse
        4. 13.4.4 Default-Interzeptoren
        5. 13.4.5 Entity Listener
        6. 13.4.6 Default Entity Listener
      5. 13.5 Interzeptoren für Geschäftsmethoden
        1. 13.5.1 Definition
        2. 13.5.2 Verwendung
        3. 13.5.3 InvocationContext
        4. 13.5.4 Aufrufreihenfolge
        5. 13.5.5 Ausnahmebehandlung
        6. 13.5.6 @AroundInvoke-Methode in der Bean-Klasse
      6. 13.6 Interzeptoren für Timeout-Methoden von Timer-Objekten
        1. 13.6.1 Definition
        2. 13.6.2 Verwendung
        3. 13.6.3 Aufrufreihenfolge
        4. 13.6.4 Ausnahmebehandlung
      7. 13.7 Interzeptoren für Lebenszyklusereignisse
        1. 13.7.1 Definition
        2. 13.7.2 Verwendung
        3. 13.7.3 Aufrufreihenfolge
        4. 13.7.4 Ausnahmebehandlung
      8. 13.8 Default-Interzeptoren
      9. 13.9 Entity Listener
        1. 13.9.1 Definition
        2. 13.9.2 Verwendung
        3. 13.9.3 Aufrufreihenfolge
      10. 13.10 Default Entity Listener
      11. 13.11 Sind Interzeptoren und Entity Listener aspektorientiert?
    10. 14 Timer Service
      1. 14.1 Kurz gefasst
      2. 14.2 Der Blick zurück
      3. 14.3 Programmgesteuerte Timer
        1. 14.3.1 Die Timeout-Methode
        2. 14.3.2 Das Interface javax.ejb.TimerService
      4. 14.4 Timer-Objekte
      5. 14.5 Automatische Timer
      6. 14.6 Ausdrucksmöglichkeiten für Zeitpläne
      7. 14.7 Timer und EJB-Typen
        1. 14.7.1 Stateless Session Bean Timer
        2. 14.7.2 Singleton Session Bean Timer
        3. 14.7.3 Message-Driven Bean Timer
        4. 14.7.4 Timer und Entitäten
      8. 14.8 Timer und Transaktionen
      9. 14.9 Timer und Interzeptoren
      10. 14.10 Checkliste
    11. 15 Sicherer Zugriff auf EJB-Komponenten
      1. 15.1 Kurz gefasst
      2. 15.2 Der Blick zurück
      3. 15.3 Überblick
      4. 15.4 Authentifizierung
      5. 15.5 Sicherheitsrollen
      6. 15.6 Verwendung von Rollen
        1. 15.6.1 @RolesAllowed
        2. 15.6.2 @PermitAll
        3. 15.6.3 @DenyAll
      7. 15.7 Ausführen in einem anderen Kontext (@RunAs)
      8. 15.8 Identität von Message-Driven Beans und Timer Services
      9. 15.9 Programmgesteuerter Zugriff auf den Security-Kontext
      10. 15.10 Regeln für Security-Annotationen
  9. Teil III Ergänzende Themen
    1. 16 CDI (Web Beans)
      1. 16.1 Kurz gefasst
      2. 16.2 Der Blick zurück
      3. 16.3 Einführung
        1. 16.3.1 Grundkonzepte
        2. 16.3.2 Let’s rock – ein praktisches Beispiel
      4. 16.4 Das Bean-Verständnis von CDI
        1. 16.4.1 Managed Beans
        2. 16.4.2 Session Beans
      5. 16.5 Die Werkzeugkiste
        1. 16.5.1 Bean-Typen
        2. 16.5.2 Qualifier
        3. 16.5.3 Alternativen
        4. 16.5.4 Scopes
        5. 16.5.5 Expression Language Name
        6. 16.5.6 Interzeptoren
        7. 16.5.7 Dekoratoren
    2. 17 Testen von EJB-Komponenten
      1. 17.1 Kurz gefasst
      2. 17.2 Dies ist kein Buch über Softwaretests!
      3. 17.3 Der Blick zurück
      4. 17.4 Warum testen?
      5. 17.5 Wann testen?
      6. 17.6 Wie und wo testen?
        1. 17.6.1 Akzeptanztests und fachliche Tests
        2. 17.6.2 Integrative Tests
        3. 17.6.3 Last- und Performanztests
      7. 17.7 Testen von Enterprise Beans
        1. 17.7.1 Testen von Stateless Session Beans
        2. 17.7.2 Testen von Stateful Session Beans
        3. 17.7.3 Testen von Message-Driven Beans
        4. 17.7.4 Testen von Persistent Entities
        5. 17.7.5 Testen von Transaktionen
        6. 17.7.6 Testen von Interzeptoren
        7. 17.7.7 Testen von Lebenszyklusmethoden
        8. 17.7.8 Testen von Timer Services
    3. 18 Migration von EJB 2.x nach 3.x
      1. 18.1 Kurz gefasst
      2. 18.2 Der Blick zurück
      3. 18.3 Sanfte Migration
        1. 18.3.1 Gleichzeitiger Betrieb von 2.x- und 3.x-Komponenten
        2. 18.3.2 Kommunikation zwischen 2.x- und 3.x-Komponenten
        3. 18.3.3 Migration von Session Beans
        4. 18.3.4 Migration von Message-Driven Beans
        5. 18.3.5 Migration von Entity Beans
        6. 18.3.6 Migration von Data Transfer Objects
        7. 18.3.7 Migration von Clients
      4. 18.4 Der Einfluss von EJB 3.x auf J2EE-Entwurfsmuster
        1. 18.4.1 Business Delegate
        2. 18.4.2 Session Facade
        3. 18.4.3 Message Facade/Service Activator
        4. 18.4.4 EJB Command
        5. 18.4.5 EJB Home Factory/Service Locator
        6. 18.4.6 Business Interface
        7. 18.4.7 Data Transfer Object (DTO)/Value Object
        8. 18.4.8 DTO Factory
        9. 18.4.9 Data Transfer Hash Map
        10. 18.4.10 Value List Handler
        11. 18.4.11 Generic Attribute Access
        12. 18.4.12 Data Transfer Row Set
        13. 18.4.13 Composite Entity
        14. 18.4.14 Dual Persistent Entity Bean
        15. 18.4.15 Data Access Command Bean/Data Access Object (DAO)
        16. 18.4.16 JDBC for Reading/Fast Lane Reader
        17. 18.4.17 Version Number
        18. 18.4.18 Muster zur Generierung von Primärschlüsseln
        19. 18.4.19 Fazit
  10. Anhang
    1. Literatur – offline und online
    2. Stichwortverzeichnis

Product information

  • Title: EJB 3.1 professionell, 2nd Edition
  • Author(s): Oliver Ihns, Stefan M. Heldt, Holger Koschek, Joachim Ehm
  • Release date: August 2011
  • Publisher(s): dpunkt
  • ISBN: 97833898646123