1042.book Seite 3 Dienstag, 8. Januar 2008 10:41 10 · Inhalt 9 3.6.3 Beschreibungen im...

73
Alfred Barzewski, Carsten Bönnen, Bertram Ganz, Wolf Hengevoss, Karl Kessler, Markus Küfer, Anne Lanfermann, Miroslav Petrov, Susanne Rothaug, Oliver Stiefbold, Volker Stiehl Java-Programmierung mit SAP NetWeaver ® Bonn Boston

Transcript of 1042.book Seite 3 Dienstag, 8. Januar 2008 10:41 10 · Inhalt 9 3.6.3 Beschreibungen im...

Page 1: 1042.book Seite 3 Dienstag, 8. Januar 2008 10:41 10 · Inhalt 9 3.6.3 Beschreibungen im Deployment-Deskriptor web.xml ..... 159 3.7 Java EE-Gesamtanwendung definieren und deployen

Alfred Barzewski, Carsten Bönnen, Bertram Ganz, Wolf Hengevoss, Karl Kessler, Markus Küfer, Anne Lanfermann, Miroslav Petrov, Susanne Rothaug, Oliver Stiefbold, Volker Stiehl

Java-Programmierung mit SAP NetWeaver®

Bonn � Boston

1042.book Seite 3 Dienstag, 8. Januar 2008 10:41 10

Page 2: 1042.book Seite 3 Dienstag, 8. Januar 2008 10:41 10 · Inhalt 9 3.6.3 Beschreibungen im Deployment-Deskriptor web.xml ..... 159 3.7 Java EE-Gesamtanwendung definieren und deployen

Auf einen Blick

1 SAP NetWeaver ...................................................... 25

2 SAP NetWeaver Developer Studio im Überblick .... 55

3 SAP NetWeaver Developer Studio: Schritt für Schritt zur Beispielanwendung ............. 119

4 Java-Persistenz ....................................................... 169

5 Webservices und Enterprise Services im SAP NetWeaver Composition Environment ........... 219

6 Mit Web Dynpro Geschäftsanwendungen entwickeln .............................................................. 253

7 Verwendung von Web-Dynpro-Anwendungen im SAP NetWeaver Portal ........................................... 343

8 SAP NetWeaver Visual Composer .......................... 357

9 Entwicklung von Composite Applications .............. 391

10 SAP NetWeaver Development Infrastructure und Komponentenmodell – Konzepte ........................... 469

11 SAP NetWeaver Development Infrastructure – Konfiguration und Administration ......................... 555

12 SAP NetWeaver Development Infrastructure: Schritt für Schritt zur Beispielanwendung ............. 629

13 SAP NetWeaver Application Server Java: Architektur .............................................................. 673

14 Support-Fähigkeit des SAP NetWeaver Composition Environments .................................... 685

1042.book Seite 5 Dienstag, 8. Januar 2008 10:41 10

Page 3: 1042.book Seite 3 Dienstag, 8. Januar 2008 10:41 10 · Inhalt 9 3.6.3 Beschreibungen im Deployment-Deskriptor web.xml ..... 159 3.7 Java EE-Gesamtanwendung definieren und deployen

7

Inhalt

Vorwort zur 2. Auflage ................................................................. 17Vorwort zur 1. Auflage ................................................................. 21

1 SAP NetWeaver ........................................................ 25

1.1 Plattform für die Enterprise Service-Oriented Architecture ............................................................... 261.1.1 Enterprise-SOA-Definition ............................. 261.1.2 Vorteile einer serviceorientierten

Architektur .................................................... 271.1.3 Enterprise SOA by Design .............................. 28

1.2 Plattform für SAP ERP und die SAP Business Suite ...... 291.2.1 Enhancement Packages .................................. 321.2.2 Switch und Enhancement Framework ............ 331.2.3 Web Dynpro ABAP ........................................ 35

1.3 Plattform für Integration und Komposition ................. 351.3.1 Integration innerhalb eines Systems ............... 361.3.2 Integration durch Standards ........................... 371.3.3 Integrationsszenario Rechnungsprüfung ......... 371.3.4 SAP NetWeaver Process Integration ............... 391.3.5 SAP NetWeaver Composition Environment .... 42

1.4 Technology Map ......................................................... 451.4.1 User Productivity ........................................... 461.4.2 Information Management .............................. 491.4.3 Lifecycle Management ................................... 521.4.4 Security und Identity Management ................ 52

1.5 Ausblick ..................................................................... 53

2 SAP NetWeaver Developer Studio im Überblick ..... 55

2.1 Benutzeroberfläche ..................................................... 562.2 Workspace, Projekte und Entwicklungsobjekte ........... 592.3 Open-Source-Initiative ............................................... 61

2.3.1 Eclipse Software Development Kit .................. 632.3.2 Integration der Web Tools Platform ............... 642.3.3 SAP-spezifische Erweiterungen (Tools und

Infrastruktur) .................................................. 662.3.4 Erweiterbarkeit durch Drittanbieter ................ 70

1042.book Seite 7 Dienstag, 8. Januar 2008 10:41 10

Page 4: 1042.book Seite 3 Dienstag, 8. Januar 2008 10:41 10 · Inhalt 9 3.6.3 Beschreibungen im Deployment-Deskriptor web.xml ..... 159 3.7 Java EE-Gesamtanwendung definieren und deployen

Inhalt

8

2.4 Integrationsplattform ................................................. 712.4.1 Integration der SAP NetWeaver Develop-

ment Infrastructure ....................................... 712.4.2 Integration des SAP NetWeaver Application

Servers Java ................................................... 772.5 Tools und Perspektiven .............................................. 85

2.5.1 Development-Infrastructure-Perspektive ....... 852.5.2 Dictionary-Perspektive .................................. 882.5.3 J2EE-Perspektive ........................................... 922.5.4 Perspektive für Composite Applications ......... 962.5.5 Web-Dynpro-Perspektive .............................. 1002.5.6 Administrationsperspektive ........................... 1032.5.7 DTR-Perspektive ........................................... 105

2.6 Installation und Update – Ausblick ............................. 1072.6.1 Installations- und Update-Framework ............ 1072.6.2 Feature-Installation und Update .................... 1122.6.3 Deinstallation inaktiver Feature- und Plug-

in-Versionen ................................................. 1132.6.4 Installationsszenarien .................................... 114

3 SAP NetWeaver Developer Studio: Schritt für Schritt zur Beispielanwendung ................................ 119

3.1 Employee-Beispielanwendung .................................... 1203.2 Erste Schritte ............................................................. 1233.3 Datenmodell definieren ............................................. 125

3.3.1 Dictionary-Projekt anlegen ............................ 1253.3.2 Employee-Tabelle definieren ......................... 127

3.4 Zugriffe auf Tabellendaten realisieren ......................... 1313.4.1 EJB-Modul-Projekt anlegen ........................... 1323.4.2 Employee-Entity definieren ........................... 1333.4.3 Anwendung für Datenbankzugriffe

konfigurieren ................................................. 1403.5 Business-Logik definieren ........................................... 144

3.5.1 Session Bean anlegen .................................... 1443.5.2 Session-Bean-Klasse implementieren ............. 1463.5.3 Business-Methoden zum Business Interface

hinzufügen .................................................... 1523.6 JSP-basierte Webanwendung erstellen ....................... 154

3.6.1 Web-Modul-Projekt anlegen ......................... 1543.6.2 Benutzeroberfläche mit JSP implementieren ... 155

1042.book Seite 8 Dienstag, 8. Januar 2008 10:41 10

Page 5: 1042.book Seite 3 Dienstag, 8. Januar 2008 10:41 10 · Inhalt 9 3.6.3 Beschreibungen im Deployment-Deskriptor web.xml ..... 159 3.7 Java EE-Gesamtanwendung definieren und deployen

Inhalt

9

3.6.3 Beschreibungen im Deployment-Deskriptor web.xml ......................................................... 159

3.7 Java EE-Gesamtanwendung definieren und deployen .. 1613.7.1 Enterprise-Application-Projekt erstellen ......... 1613.7.2 Data-Source-Alias anlegen ............................. 1623.7.3 Deployment der Employee-Anwendung ......... 1643.7.4 Employee-Anwendung starten ....................... 167

4 Java-Persistenz ......................................................... 169

4.1 Open JDBC für Java .................................................... 1694.2 Persistenzinfrastruktur des SAP NetWeaver

Composition Environments zur Laufzeit ...................... 1704.2.1 Vendor JDBC ................................................. 1714.2.2 Native JDBC ................................................... 1714.2.3 Statement Pooling ......................................... 1724.2.4 SQL-Monitor ................................................. 1734.2.5 Tabellenpufferung .......................................... 1744.2.6 Administration von Datenquellen ................... 174

4.3 Java Dictionary ........................................................... 1764.4 Entwicklung einer Beispielanwendung ........................ 178

4.4.1 Projektmanagement-Szenario ......................... 1794.4.2 Implementierung des Beispielszenarios in

EJB 3.0 und JPA ............................................. 1814.5 Programmierung mit Enterprise JavaBeans 3.0/

Java Persistence API ................................................... 1854.5.1 Grundlegende Konzepte ................................ 1854.5.2 Vorbereitung des EJB 3.0-Projektes ................ 1864.5.3 Implementierung der Entitys .......................... 1904.5.4 Programmierung der Anwendungslogik .......... 2014.5.5 Einfluss von Open SQL auf die JPA Query

Language ....................................................... 2134.5.6 Einfluss der Datenbank auf die JPA Query

Language ....................................................... 2154.6 Ausblick ..................................................................... 218

5 Webservices und Enterprise Services im SAP NetWeaver Composition Environment ............ 219

5.1 Enterprise-Services-Paradigma .................................... 2215.2 Services Registry ......................................................... 222

5.2.1 UDDI-Server und Klassifizierungsservice ......... 223

1042.book Seite 9 Dienstag, 8. Januar 2008 10:41 10

Page 6: 1042.book Seite 3 Dienstag, 8. Januar 2008 10:41 10 · Inhalt 9 3.6.3 Beschreibungen im Deployment-Deskriptor web.xml ..... 159 3.7 Java EE-Gesamtanwendung definieren und deployen

Inhalt

10

5.2.2 Strukturierung von Services ........................... 2255.2.3 Service-Definitionen suchen .......................... 2285.2.4 Services klassifizieren ..................................... 230

5.3 Konsumieren eines Service ......................................... 2315.3.1 Ist der gewünschte Service bereits

vorhanden? ................................................... 2325.3.2 Anlegen des Web-Dynpro-Projektes .............. 2345.3.3 Verbindung zur Services Registry ................... 2385.3.4 Definition des Datenflusses und Anlage des

Web-Dynpro-UI ............................................ 2405.3.5 Initialisierung des Webservice-Models ........... 2425.3.6 Entwicklung von Web-Dynpro-Oberflächen ... 2445.3.7 Pflege der Webservice-Destinationen im

SAP NetWeaver Administrator ...................... 2465.3.8 Test der Enterprise-Service-Consumer-

Applikation ................................................... 2485.4 Ausblick: Bereitstellung eines Service mit dem

Enterprise Services Repository .................................... 249

6 Mit Web Dynpro Geschäftsanwendungen entwickeln ................................................................ 253

6.1 Grundlagen und Konzepte ......................................... 2556.1.1 Wesentliche Merkmale der Web-Dynpro-

UI-Technologie .............................................. 2556.1.2 Anatomie von Web-Dynpro-Komponenten ... 2616.1.3 Schnittstellen einer Web-Dynpro-

Komponente ................................................. 2656.2 Web Dynpro ruft Webservice ..................................... 267

6.2.1 Vorbereitung ................................................. 2716.2.2 Ansicht der vorbereiteten lokalen Web-

Dynpro-Development-Components ............... 2746.2.3 Importieren des Adaptive Webservice

Models .......................................................... 2786.2.4 Definition der Context-zu-Model-Bindung

im Component Controller .............................. 2876.2.5 Definition des Context-Mappings .................. 2936.2.6 View-Layout und Datenbindung .................... 2966.2.7 Controller-Implementierung .......................... 3086.2.8 Bauen, Deployen und Starten der

Anwendung .................................................. 315

1042.book Seite 10 Dienstag, 8. Januar 2008 10:41 10

Page 7: 1042.book Seite 3 Dienstag, 8. Januar 2008 10:41 10 · Inhalt 9 3.6.3 Beschreibungen im Deployment-Deskriptor web.xml ..... 159 3.7 Java EE-Gesamtanwendung definieren und deployen

Inhalt

11

6.3 Web-Dynpro-Komponente zur Suche von Ticker-Symbolen einbinden ........................................ 3166.3.1 Verwendungsbeziehung zwischen Web-

Dynpro-Development-Components definieren ...................................................... 322

6.3.2 Symbol-Search-Komponente in Stock-Quotes-Komponente einbinden ..................... 327

6.3.3 Drucktaste zur Suche von Ticker-Symbolen hinzufügen ..................................................... 332

6.3.4 Interface Controller der Symbol-Search-Komponente im View Controller verwenden ..................................................... 334

6.3.5 Aufruf der Symbol-Search-Komponente im View Controller ......................................... 336

6.3.6 Bauen, Deployen und Starten der erweiter-ten Beispielanwendung .................................. 340

7 Verwendung von Web-Dynpro-Anwendungen im SAP NetWeaver Portal ............................................. 343

7.1 Web-Dynpro-iViews im SAP NetWeaver Portal anlegen ...................................................................... 345

7.2 Anlegen einer Web-Dynpro-Seite ............................... 3477.3 Web-Dynpro-iViews zur Portalseite hinzufügen .......... 350

7.3.1 Anlegen von Rollen und Worksets ................. 3517.3.2 Web-Dynpro-Anwendungen für das Portal

entwickeln ..................................................... 3517.3.3 Personalisierbare Eigenschaften anlegen ......... 3527.3.4 Mehrere iViews von einer Web-Dynpro-

Anwendung aus aktivieren ............................. 354

8 SAP NetWeaver Visual Composer ............................ 357

8.1 Modellbasierte Entwicklung ....................................... 3578.2 Visual Composer im SAP NetWeaver Composition

Environment ............................................................... 3608.2.1 Was ist neu? .................................................. 3608.2.2 Voraussetzungen ............................................ 3618.2.3 Architektur .................................................... 3628.2.4 Anwendungserstellung ................................... 365

8.3 Beispielszenario .......................................................... 3668.3.1 Erstellen der Startseite ................................... 366

1042.book Seite 11 Dienstag, 8. Januar 2008 10:41 10

Page 8: 1042.book Seite 3 Dienstag, 8. Januar 2008 10:41 10 · Inhalt 9 3.6.3 Beschreibungen im Deployment-Deskriptor web.xml ..... 159 3.7 Java EE-Gesamtanwendung definieren und deployen

Inhalt

12

8.3.2 Mitarbeiteradressen aktualisieren .................. 3718.3.3 Persönliche Daten des Mitarbeiters

aktualisieren .................................................. 3808.3.4 Telefone des Mitarbeiters pflegen ................. 3818.3.5 Familienmitglieder des Mitarbeiters pflegen ... 3828.3.6 Abschlussarbeiten ......................................... 3828.3.7 Mitarbeiter anlegen ....................................... 3838.3.8 Mitarbeiter löschen ....................................... 3868.3.9 Zusammenfassung ......................................... 387

9 Entwicklung von Composite Applications ............... 391

9.1 Philosophie und Nutzen ............................................. 3929.2 Grundlegende Annahmen .......................................... 3949.3 Grundlegende Architektur .......................................... 395

9.3.1 Geschäftsobjekt- und Service-Schicht ............ 3969.3.2 User-Interface-Schicht ................................... 3999.3.3 Prozessschicht ............................................... 400

9.4 Beispielszenario: Projektabwicklung ........................... 4039.4.1 Modellierung von Geschäftsobjekten mit

dem Composite Application Framework ........ 4059.4.2 Modellierung von Benutzeroberflächen mit

dem SAP NetWeaver Visual Composer .......... 4269.4.3 Modellierung von Prozessen mit Guided

Procedures .................................................... 4359.4.4 Test von Composite Applications ................... 457

9.5 Installation und Einrichtung der Referenzapplikation ... 463

10 SAP NetWeaver Development Infrastructure und Komponentenmodell – Konzepte ............................ 469

10.1 Besonderheiten großer Softwareprojekte ................... 46910.1.1 Beispiel: Probleme eines typischen

Entwicklungsprozesses ohne zentrale Infrastruktur .................................................. 471

10.1.2 Softwarelogistik in der Java-Entwicklung ....... 47310.2 Elemente der SAP NetWeaver Development

Infrastructure ............................................................. 47510.2.1 Komponentenmodell ..................................... 47610.2.2 Design Time Repository ................................. 49710.2.3 Component Build Service .............................. 512

1042.book Seite 12 Dienstag, 8. Januar 2008 10:41 10

Page 9: 1042.book Seite 3 Dienstag, 8. Januar 2008 10:41 10 · Inhalt 9 3.6.3 Beschreibungen im Deployment-Deskriptor web.xml ..... 159 3.7 Java EE-Gesamtanwendung definieren und deployen

Inhalt

13

10.2.4 Change Management Service ......................... 52110.2.5 Entwicklungsprozess im Überblick .................. 531

10.3 Neuerungen der SAP NetWeaver Development Infrastructure .............................................................. 53410.3.1 Konfiguration der Verwendungsart DI nach

der Installation ............................................... 53410.3.2 Neuerungen im Design Time Repository ........ 53510.3.3 Neuerungen im Component Build Service ...... 53610.3.4 Neuerungen im Change Management

Service ........................................................... 53710.3.5 Verbesserungen im Logging der

SAP NetWeaver Development Infrastructure ... 54010.3.6 Neuerungen der Oberflächen ......................... 541

10.4 SAP NetWeaver Development Infrastructure und Komponentenmodell im Composition Environment .... 54210.4.1 Szenarien für die komponentenbasierte

Softwareentwicklung im Composition-Environment-Umfeld ...................................... 542

10.4.2 Komponentenbasierte Entwicklung mit lokaler Development-Configuration und optionaler externer Infrastruktur .................... 545

11 SAP NetWeaver Development Infrastructure – Konfiguration und Administration ........................... 555

11.1 Konfiguration der SAP NetWeaver Development Infrastructure .............................................................. 55611.1.1 Java-Entwicklungslandschaft .......................... 55711.1.2 Einrichten der SAP NetWeaver Develop-

ment Infrastructure ........................................ 56111.2 Administration der SAP NetWeaver Development

Infrastructure .............................................................. 58711.2.1 Produktdefinition im System Landscape

Directory ....................................................... 58711.2.2 Namensraumpräfix ......................................... 58911.2.3 Vorbereitung eines Tracks .............................. 59211.2.4 Entwicklungsschritte am Beispiel .................... 59911.2.5 Konsolidierungsphase .................................... 61211.2.6 Montage der Software und Qualitäts-

sicherung ....................................................... 61311.2.7 Auslieferung an die Kunden ........................... 614

1042.book Seite 13 Dienstag, 8. Januar 2008 10:41 10

Page 10: 1042.book Seite 3 Dienstag, 8. Januar 2008 10:41 10 · Inhalt 9 3.6.3 Beschreibungen im Deployment-Deskriptor web.xml ..... 159 3.7 Java EE-Gesamtanwendung definieren und deployen

Inhalt

14

11.3 Software Change Management mit der SAP NetWeaver Development Infrastructure .............. 61511.3.1 Verwaltung von Softwareprojekten für

verschiedene Zielplattform-Releases .............. 61611.3.2 Track-Design und Weiterentwicklung von

Produkten ..................................................... 61711.3.3 Modifikationskonzept der SAP NetWeaver

Development Infrastructure ........................... 61811.3.4 Nicht-ABAP-Transporte in einer gemischten

Systemlandschaft ........................................... 62111.3.5 SAP NetWeaver Development Infrastructure

in einer globalen Systemlandschaft ................ 624

12 SAP NetWeaver Development Infrastructure: Schritt für Schritt zur Beispielanwendung .............. 629

12.1 Employee-Beispielanwendung .................................... 63112.2 Erste Schritte mit der SAP NetWeaver Development

Infrastructure ............................................................. 63212.3 Entwicklungszyklus am Beispiel der Employee-

Anwendung ............................................................... 63412.3.1 Voraussetzungen eines Tracks für das SAP

NetWeaver Composition Environment als Zielplattform ................................................. 634

12.3.2 Anlegen von Produkt und Software-Component im System Landscape Directory ... 636

12.3.3 Update des Change Management Service ...... 63912.3.4 Anlage, Konfiguration und Vorbereitung

des Beispiel-Tracks ........................................ 64012.3.5 Start der Entwicklungsphase .......................... 64512.3.6 Zugriff auf Tabellendaten und Business-

Logik realisieren ............................................ 65912.3.7 Schritte im CMS nach der Entwicklung .......... 670

13 SAP NetWeaver Application Server Java: Architektur ............................................................... 673

13.1 Cluster-Architektur des SAP NetWeaver Application Servers Java ............................................................... 67413.1.1 Java-Instanz ................................................... 67513.1.2 Internet Communication Manager ................. 675

1042.book Seite 14 Dienstag, 8. Januar 2008 10:41 10

Page 11: 1042.book Seite 3 Dienstag, 8. Januar 2008 10:41 10 · Inhalt 9 3.6.3 Beschreibungen im Deployment-Deskriptor web.xml ..... 159 3.7 Java EE-Gesamtanwendung definieren und deployen

Inhalt

15

13.1.3 Central-Services-Instanz ................................. 67713.1.4 SAP Java Virtual Machine ............................... 678

13.2 Laufzeitarchitektur des SAP NetWeaver Application Servers Java ................................................................ 67913.2.1 Cluster-Kommunikation ................................. 68013.2.2 Cache-Verwaltung ......................................... 68013.2.3 Sitzungsverwaltung ........................................ 68113.2.4 Thread-Verwaltung ........................................ 682

14 Support-Fähigkeit des SAP NetWeaver Composition Environments ...................................... 685

14.1 Monitoring ................................................................. 68614.1.1 JMX-Infrastruktur ........................................... 68614.1.2 Monitore ....................................................... 68814.1.3 Hinzufügen neuer Inhalte zum Monitoring-

Framework ..................................................... 69014.1.4 Java-System-Reports ...................................... 691

14.2 Administration ............................................................ 69214.2.1 SAP NetWeaver Administrator ....................... 69314.2.2 Weitere Administrationswerkzeuge ................ 694

14.3 Fehlerbehebung ......................................................... 69714.3.1 Protokollierung und Tracing ........................... 69714.3.2 Szenarien der Fehlerbehebung ....................... 700

Die Autoren ................................................................................. 703Index ............................................................................................ 707

1042.book Seite 15 Dienstag, 8. Januar 2008 10:41 10

Page 12: 1042.book Seite 3 Dienstag, 8. Januar 2008 10:41 10 · Inhalt 9 3.6.3 Beschreibungen im Deployment-Deskriptor web.xml ..... 159 3.7 Java EE-Gesamtanwendung definieren und deployen

119

Anhand eines konkreten Beispiels werden Sie in diesem Kapi-tel an die praktische Arbeit mit dem SAP NetWeaver Develo-per Studio herangeführt. Auf dieser geführten Tour werden Sie Schritt für Schritt eine einfache Employee-Anwendung mit Mitteln des Java EE 5-Standards aufbauen, um sie dann auf dem SAP NetWeaver Application Server zu deployen und aus-zuführen. Sie werden bei dieser Gelegenheit das enge Zusam-menspiel verschiedener Tools der Entwicklungsumgebung ken-nenlernen.

3 SAP NetWeaver Developer Studio: Schritt für Schritt zur Beispiel-anwendung

VoraussetzungenDen optimalen Nutzen aus diesem Kapitel werden Sie vor allem dannziehen, wenn Sie mit der Programmiersprache Java bestens vertrautsind und darüber hinaus bereits Erfahrungen mit dem Java EE 5-Pro-grammiermodell gesammelt haben. Um alle Schritte auch praktischnachvollziehen zu können, benötigen Sie das SAP NetWeaver Deve-loper Studio und einen Zugriff auf den SAP NetWeaver ApplicationServer Java. Hierfür bietet sich das SAP NetWeaver Composition En-vironment 7.1 an, das Sie mit der DVD des vorliegenden Buches er-halten. Installieren Sie am besten diese Version, bevor es mit den ers-ten Fingerübungen losgeht.

ZielsetzungDie Beispielanwendung, die Sie Schritt für Schritt entwickeln wer-den, orientiert sich eher an didaktischen Aspekten als an dem Bemü-hen, ein realistisches Anwendungsszenario umzusetzen. Sie müssenalso weder eine Bankanwendung noch ein komplexes Warenhaussze-nario realisieren. Vielmehr sollen anhand eines leicht überschauba-ren Beispiels die Möglichkeiten vorgestellt werden, die das Develo-per Studio als Entwicklungsumgebung für Enterprise-Anwendungenauf der Grundlage der gängigen Java-Standards bietet. Im Vorder-grund stehen daher das Zusammenspiel verschiedener Toolsets und

1042.book Seite 119 Dienstag, 8. Januar 2008 10:41 10

Page 13: 1042.book Seite 3 Dienstag, 8. Januar 2008 10:41 10 · Inhalt 9 3.6.3 Beschreibungen im Deployment-Deskriptor web.xml ..... 159 3.7 Java EE-Gesamtanwendung definieren und deployen

120

SAP NetWeaver Developer Studio: Schritt für Schritt zur Beispielanwendung3

die Anbindung an Services, die den Entwicklungsprozess effizient un-terstützen und die tägliche Arbeit des Entwicklers erleichtern.

Sie können dieses Kapitel als einen Einstieg in die Arbeit mit dem De-veloper Studio ansehen. Nach Durcharbeitung aller Schritte diesesKapitels werden Sie in der Lage sein, die grundlegenden Abläufe undEntwicklungsschritte (UI- und EJB-Entwicklung, Entwurf des Daten-modells etc.) im Rahmen der Java EE-Standardentwicklung mit geeig-neten Tools im Developer Studio zu organisieren und die Aufgabenauf die passenden Projektarten und die zugehörigen Entwicklungs-objekte abzubilden.

Lokaler Entwick-lungsprozess

Alle Schritte werden lediglich aus der Sicht eines lokalen Entwick-lungsprozesses beschrieben. Die Projektressourcen werden aus-schließlich auf der lokalen Festplatte abgelegt und verwaltet. DesWeiteren wird vom SAP-Komponentenmodell in der Beispielanwen-dung abgesehen. Anders als unter Verwendung der SAP NetWeaverDevelopment Infrastructure handelt es sich bei den Projekten nichtum Development-Components. Wie Sie jedoch genau diese Beispiel-anwendung im NWDI-Kontext ins SAP-Komponentenmodell migrie-ren und unter Einbeziehung der zugehörigen Services realisierenkönnen, lernen Sie ausführlich in Kapitel 9, »Entwicklung von Com-posite Applications«.

3.1 Employee-Beispielanwendung

Die Beispielanwendung setzt auf einem vereinfachten Employee-Da-tenmodell auf und soll dem Benutzer erlauben, neue Employee-Da-tensätze anzulegen sowie Daten zu existierenden Employees auszu-geben. In der Architektur der Anwendung wird zwischen klarabgegrenzten Schichten unterschieden, so etwa zwischen der Präsen-tationsschicht, der Business-Logik, der Datenbeschaffung und derPersistenz. Dies wäre eigentlich für einen solch einfachen Fall wieden vorliegenden nicht zwingend notwendig, dennoch sollen Siesich von Beginn an mit der typischen Architektur von Geschäftsan-wendungen vertraut machen. Insbesondere erhalten Sie einen erstenEindruck, wie sich diese Architektur im Entwicklungsprozess wider-spiegelt und wie der Entwickler bei der Organisation seiner Projektevom Developer Studio unterstützt wird.

1042.book Seite 120 Dienstag, 8. Januar 2008 10:41 10

Page 14: 1042.book Seite 3 Dienstag, 8. Januar 2008 10:41 10 · Inhalt 9 3.6.3 Beschreibungen im Deployment-Deskriptor web.xml ..... 159 3.7 Java EE-Gesamtanwendung definieren und deployen

121

Employee-Beispielanwendung 3.1

Architektur der Beispielanwendung

Bei der Entwicklung der Benutzeroberfläche greifen Sie auf die inStandard-Webanwendungen gängige UI-Technologie, JavaServerPages (JSP), zu. Sie werden an einem einfachen Beispiel sehen, wiesich der Aufbau einer einfachen Oberfläche sowie die Zugriffe auf diedarunterliegenden Serverkomponenten realisieren lassen.

Die Business-Logik basiert auf Enterprise JavaBeans 3.0 undbeschränkt sich auf eine einzige Stateless Session Bean. Formal lässtsich bei der Session Bean zwischen dem Business Interface und derSession-Bean-Implementierung unterscheiden. Alle Business-Metho-den der Session Bean werden an ein korrespondierendes Business In-terface exponiert, sodass JavaServer Pages mithilfe genau dieses Inter-face auf die Session Bean zugreifen können. Zur anderen Seite hin kap-selt die Session Bean die jeweiligen Zugriffe auf die Persistence API.

Die Business-Daten modellieren Sie mithilfe einer einzigen Entity,die sowohl in der Business-Logik als auch in der PräsentationsschichtVerwendung findet. Da es sich bei Entitys um reguläre Java-Objektehandelt, können sie zugleich auch für den Datentransport zur Präsen-tationsschicht benutzt werden. Entsprechende Data-Transfer-Ob-jekte sind also nicht erforderlich. In diesem Zusammenhang ist dieEntity losgelöst (detached) vom aktuellen Transaktionskontext. Diesist in Abbildung 3.1 durch die gestrichelte Umrandung verdeutlicht.

Abbildung 3.1 Typische Architektur einer Java EE 5-Business-Anwendung

Business Interface

Session Bean

SAP JPA 1.0

JPA

JavaServer Pages

Database

Entity

Persistence Layer

Presentation Layer

Business Logic andBusiness Data

Entity

1042.book Seite 121 Dienstag, 8. Januar 2008 10:41 10

Page 15: 1042.book Seite 3 Dienstag, 8. Januar 2008 10:41 10 · Inhalt 9 3.6.3 Beschreibungen im Deployment-Deskriptor web.xml ..... 159 3.7 Java EE-Gesamtanwendung definieren und deployen

122

SAP NetWeaver Developer Studio: Schritt für Schritt zur Beispielanwendung3

Business-Anwendungen kommen in aller Regel nicht ohne Persistie-rung von Daten in einer Datenbank aus. Mit Java EE 5 wurde einneues objektrelationales Persistenz-Framework, die Java PersistenceAPI (JPA), als Bestandteil des Java EE-Standards eingeführt. Ein sol-ches Framework hat im Wesentlichen die Aufgabe, für ein Mappingvon Java-Objekten auf die relationale Datenbank zu sorgen, diverseSuchabfragen sowie Manipulationen an Java-Objekten in die passen-den SQL-Anweisungen zu übersetzen und schließlich für die gesamteKommunikation mit der Datenbank aufzukommen.

Wie in Abbildung 3.1 wiedergegeben, beinhaltet der derzeitige SAPNetWeaver Application Server die konkrete JPA-Implementierungmit dem Namen SAP JPA 1.0. Die JPA liefert jedoch nicht die benö-tigten Datenbanktabellen oder Tabellendefinitionen mit, auf die diejeweiligen Entitys abgebildet werden, sondern geht bereits von vor-handenen Tabellen aus. Die erforderlichen Tabellen werden Sie mit-hilfe des Java Dictionarys bereitstellen. Mit Open JDBC lassen sichaus den Tabellendefinitionen die eigentlichen Datenbankobjekte imzugeordneten Datenbankschema anlegen.

Projektsicht auf die Beispielanwendung

Sie werden die Entwicklung der Beispielanwendung damit beginnen,dass Sie zuerst das zugrunde liegende Datenmodell erstellen. Dabeilegen Sie eine datenbankunabhängige Tabellendefinition mithilfe desJava Dictionarys an. Ausgehend von einem Dictionary-Projekt, er-stellen Sie ein SDA-Archiv (Software Delivery Archive) und deployenes auf den Applikationsserver. Nach diesem Schritt steht die Tabellephysisch auf der Datenbank zur Verfügung.

Für die Zugriffe auf Datensätze benutzen Sie JPA-Entitys. Die Imple-mentierung der Business-Logik der Anwendung (Anlegen neuer Em-ployees, Anzeige der Employee-Daten) wird von einer EJB 3.0 State-less Session Bean übernommen. Dabei dient das EJB-Modul-Projektim Developer Studio als Container für alle Enterprise JavaBeans, ein-schließlich der Entitys sowie für alle weiteren Ressourcen, wie etwafür die zugehörigen Konfigurationsdateien und Deployment-Des-kriptoren.

Für die Implementierung des Webclients ist eine einfache Oberflächemithilfe von JavaServer Pages vorgesehen. Diese soll auch die Daten

1042.book Seite 122 Dienstag, 8. Januar 2008 10:41 10

Page 16: 1042.book Seite 3 Dienstag, 8. Januar 2008 10:41 10 · Inhalt 9 3.6.3 Beschreibungen im Deployment-Deskriptor web.xml ..... 159 3.7 Java EE-Gesamtanwendung definieren und deployen

123

Erste Schritte 3.2

an die Session Bean übergeben können. Dabei werden alle Webres-sourcen in einem separaten Projekt, dem Web-Modul-Projekt ver-waltet, zusammen mit den zugehörigen Konfigurationsdateien.

In einem Enterprise-Application-Projekt führen Sie dann alle Res-sourcen zu einer Art Java EE 5-Gesamtanwendung zusammen. Dasresultierende Archiv (EAR) müssen Sie erst deployen, bevor Sie dieEmployee-Anwendung zum ersten Mal aufrufen können. Abbildung3.2 fasst die grundlegenden Abläufe zusammen und stellt die Orga-nisation der wesentlichen Entwicklungsobjekte in den jeweiligenProjektarten des Developer Studios dar.

3.2 Erste Schritte

StartparameterUm das Developer Studio zu starten, benötigt die aktivierte Platt-formlaufzeit neben dem Zugriff auf eine Java Virtual Machine (VM)auch eine Pfadangabe zur Ablage aller Metadaten für Projektinforma-tionen und benutzerspezifische Einstellungen. Eine Standard-Java-VM wird normalerweise bei der Installation des Developer Studioszugeordnet und ist als Startparameter eingetragen.

Abbildung 3.2 Organisation der Entwicklungsobjekte der Employee-Anwendung im Developer Studio

SAP NetWeaver Application Server Java

EJB Module Project

Web Module Project

Enterprise Application Project

DeploymentDescriptors

Dictionary Project

SDA

SAP NetWeaver Developer Studio

EAR

web.xml

persistence.xml

Dictionary Table

JavaServer Pages

Deploy

Deploy

SessionBean

Entity

1042.book Seite 123 Dienstag, 8. Januar 2008 10:41 10

Page 17: 1042.book Seite 3 Dienstag, 8. Januar 2008 10:41 10 · Inhalt 9 3.6.3 Beschreibungen im Deployment-Deskriptor web.xml ..... 159 3.7 Java EE-Gesamtanwendung definieren und deployen

124

SAP NetWeaver Developer Studio: Schritt für Schritt zur Beispielanwendung3

Wenn Sie das Developer Studio nach erfolgter Installation zum ers-ten Mal starten,1 müssen Sie im Normalfall den Default-Workspaceangeben. Der Startvorgang wird dann unterbrochen, und es er-scheint ein Dialogfenster für die Auswahl des Workspace-Verzeich-nisses. Sie werden dann entweder den Vorschlagswert übernehmenoder ein anderes Verzeichnis für den Default-Workspace auswählen,um den Startvorgang fortzusetzen. Wenn Sie das Developer Studiowiederholt starten, wird der zugeordnete Workspace herangezogen.Der Startvorgang wird dann ohne Unterbrechung ausgeführt.

Beim ersten Aufruf zeigt die Entwicklungsumgebung eine Begrü-ßungsseite, die etwa so aussehen dürfte wie in Abbildung 3.3. Siekönnen diese Seite auch als einen Startpunkt für Ihre Entwicklungs-aktivitäten betrachten, an dem Sie mit Tutorials, einigen Beispiel-und Referenzanwendungen sowie ausgewählten Absprüngen zur Do-kumentation und weiterem Informationsmaterial versorgt werden.

1 Im Allgemeinen starten Sie das Developer Studio über den Desktop-Shortcut oderaus dem Windows-Startmenü heraus. Eine alternative und sehr flexible Optionsteht Ihnen zur Verfügung, wenn Sie Batch-Dateien verwenden. Auch mehrereBatch-Dateien lassen sich als Konfigurationsdateien verwenden, um das Develo-per Studio, je nach Bedarf, mit unterschiedlichen Parametern zu starten.

Abbildung 3.3 SAP NetWeaver Developer Studio nach erstem Aufruf – Begrüßungs-seite

1042.book Seite 124 Dienstag, 8. Januar 2008 10:41 10

Page 18: 1042.book Seite 3 Dienstag, 8. Januar 2008 10:41 10 · Inhalt 9 3.6.3 Beschreibungen im Deployment-Deskriptor web.xml ..... 159 3.7 Java EE-Gesamtanwendung definieren und deployen

125

Datenmodell definieren 3.3

Einstellungen unter Windows-Preferences

An dieser Stelle empfiehlt es sich, sich ein wenig mit den Standard-einstellungen zum Developer Studio vertraut machen und sie ge-gebenenfalls um weitere Einträge zu ergänzen. Die Preferences-Seiteerreichen Sie über den Menüpfad Windows � Preferences. BeimDurcharbeiten der Schritte dieses Kapitels werden Sie insbesonderedie Verbindung zum Java-Applikationsserver benötigen. Daher sollteein entsprechender Eintrag unter SAP AS Java vorhanden sein. Aufweitere Einstellungen, die für die Nutzung der Java Development In-frastructure erforderlich sind, wird in Kapitel 11, »SAP NetWeaverDevelopment Infrastructure – Konfiguration und Administration«,eingegangen.

3.3 Datenmodell definieren

Bevor Sie mit der Entwicklung der Employee-Anwendung beginnen,müssen Sie zunächst ein geeignetes Datenmodell definieren, das die-ser Anwendung zugrunde liegen soll. Aus didaktischen Gründenwird jedoch kein großer Wert auf ein ausgefeiltes Datenmodell miteiner Vielzahl von komplexen Tabellen und Beziehungen zueinandergelegt. Stattdessen soll das Datenmodell recht einfach gehalten wer-den, sodass Sie mit einer einzigen Tabelle auskommen, die die Ver-waltung von persistenten Employee-Daten übernehmen soll.

In diesem ersten praktischen Schritt werden Sie eine neue Tabelle imJava Dictionary anlegen und im zugehörigen Editor die gewünschtenSpalten hinzufügen. Anschließend werden Sie zu dieser Tabellende-finition ein zugehöriges Archiv anlegen. Aus dem Developer Studioheraus sind Sie dann in der Lage, dieses Archiv auf dem Applikations-server zu deployen und erreichen damit, dass die zunächst nur lokalvorliegende Tabellendefinition auch in eine physische Repräsenta-tion auf der Datenbankinstanz umgesetzt wird.

3.3.1 Dictionary-Projekt anlegen

Um Tabellen anzulegen, benötigen Sie zunächst ein passendes Pro-jekt im Developer Studio. Genau dafür sind Dictionary-Projekte vor-gesehen, die zur Design Time als Container sowohl für Dictionary-Datentypen und -Strukturen als auch für Tabellen oder auch Views inTabellen dienen. Einen initialen Projektrahmen für das neue Dictio-nary-Projekt lassen Sie mithilfe eines Wizards erstellen.

1042.book Seite 125 Dienstag, 8. Januar 2008 10:41 10

Page 19: 1042.book Seite 3 Dienstag, 8. Januar 2008 10:41 10 · Inhalt 9 3.6.3 Beschreibungen im Deployment-Deskriptor web.xml ..... 159 3.7 Java EE-Gesamtanwendung definieren und deployen

126

SAP NetWeaver Developer Studio: Schritt für Schritt zur Beispielanwendung3

New ProjectWizard

1. Den Anlege-Wizard starten Sie über den Menüpfad File � New �

Project. Im angezeigten Wizard-Fenster wählen Sie die KategorieDictionary und anschließend den Eintrag Dictionary Project(siehe Abbildung 3.4) aus. Um zum nächsten Dialogschritt zugelangen, wählen Sie Next.

2. In dem nun angezeigten Wizard-Fenster werden Sie aufgefordert,einige allgemeine Projekteigenschaften zu vergeben. Dazu tragenSie im entsprechenden Eingabefeld den Namen »EmployeeDic«für das Dictionary-Projekt ein, lassen jedoch die Standardeinstel-lungen zu Project contents und Project language unverändert(siehe Abbildung 3.5).

3. Sie müssen jetzt nur noch Finish wählen und überlassen die wei-tere Arbeit dem Anlege-Wizard. Dieser generiert eine Standard-struktur für das neue Dictionary-Projekt und legt den Projektord-

Abbildung 3.4 Auswahl des Dictionary-Projektes im New Project Wizard

Abbildung 3.5 Allgemeine Angaben zum Dictionary-Projekt

1042.book Seite 126 Dienstag, 8. Januar 2008 10:41 10

Page 20: 1042.book Seite 3 Dienstag, 8. Januar 2008 10:41 10 · Inhalt 9 3.6.3 Beschreibungen im Deployment-Deskriptor web.xml ..... 159 3.7 Java EE-Gesamtanwendung definieren und deployen

127

Datenmodell definieren 3.3

ner namens EmployeeDic im zugeordneten Workspace-Verzeichnisan. Wenn Sie nun die Dictionary-Perspektive öffnen, ist ein gleich-namiger Projektknoten im Dictionary Explorer zu sehen.

Analog lassen sich im Developer Studio auch andere Projektarten,wie beispielsweise Web-Dynpro-Projekte oder die verschiedenenJava EE-Projektarten, mittels eines passenden Wizards erstellen.

3.3.2 Employee-Tabelle definieren

Im nächsten Arbeitsschritt erstellen Sie eine Tabelle für die Emplo-yee-Daten als Bestandteil des soeben angelegten Projektes und fügendanach die benötigten Tabellenfelder als Spalten hinzu.

1. Um eine Tabelle anzulegen, lassen Sie das Projekt EmployeeDicam besten im Dictionary Explorer anzeigen. Dort expandieren Siedie Projektstruktur und öffnen das Kontextmenü für den KnotenDatabase Tables.

2. Um den Anlege-Wizard zu starten, wählen Sie einfach den Menü-punkt Create Table aus dem Kontextmenü (siehe Abbildung 3.6)aus. Im angezeigten Dialogfenster werden Sie aufgefordert, einenNamen für die Tabelle zu vergeben.

Namenskonven-tionen für Daten-bankobjekte

Beachten Sie dabei, dass in der Regel ein Standardpräfix für denTabellennamen bereits im Eingabefeld vorgegeben ist. Wie Siesich mühelos überzeugen können, leitet sich dieses Präfix aus derVoreinstellung ab, die für die Dictionary-Objekte unter Windows� Preferences � Dictionary � Nameserver Prefix eingetragen ist. Die-ses Namenspräfix geht auf die Namenskonvention für Datenbank-tabellen zurück und ermöglicht eine eindeutige Trennung von Ent-

Abbildung 3.6 Anlegen einer Tabelle im Dictionary-Projekt

1042.book Seite 127 Dienstag, 8. Januar 2008 10:41 10

Page 21: 1042.book Seite 3 Dienstag, 8. Januar 2008 10:41 10 · Inhalt 9 3.6.3 Beschreibungen im Deployment-Deskriptor web.xml ..... 159 3.7 Java EE-Gesamtanwendung definieren und deployen

128

SAP NetWeaver Developer Studio: Schritt für Schritt zur Beispielanwendung3

wicklungsobjekten, die bei Kunden, Partnern und bei SAP mitdem Ziel erstellt werden, Namenskonflikte zu vermeiden.2

Eine Sonderstellung haben die beiden Namensräume TMP_* undTEST_*. Diese können generell für Testobjekte und Prototypen ge-nutzt werden.

3. Für das vorliegende Beispiel genügt es demnach, wenn Sie das Na-menspräfix »TMP« verwenden. Für das Suffix tragen Sie denNamen »EMPLOYEES« ein und wählen schließlich Finish.

4. Als Resultat findet sich ein entsprechender Eintrag für die neue Ta-belle in der Projektstruktur unter dem Knoten Database Tables.Mit einem Doppelklick auf den Tabellennamen öffnen Sie den Ta-belleneditor und können jetzt auch die einzelnen Tabellenfelderhinzufügen.

Tabellenfelder 5. Das erste Feld soll den Namen »ID« erhalten, tragen Sie ihn unterColumn Name in der ersten Zeile der Tabellenmatrix ein. Da essich bei diesem Tabellenfeld um den Primärschlüssel der Tabellehandeln soll, kreuzen Sie auch das Feld Key an. Unter Build-InType wählen Sie den Datentyp long aus und geben die Kurz-beschreibung »Employees ID« unter Description ein. Standard-mäßig ist die Eigenschaft Not Null für jedes neue Feld gesetzt, undSie nutzen die Möglichkeit, initiale Werte für jedes Feld der Da-tenbanktabelle vorzugeben.

6. Das zweite Tabellenfeld erhält den Namen »LAST_NAME«. Fernerwerden diesem Feld ein String der Länge 30 als Datentyp3 und derKurztext »Employees last name« zugeordnet.

7. Als weitere Tabellenfelder kommen FIRST_NAME und DEPARTMENTund VERSION hinzu und werden, wie in Abbildung 3.7 dargestellt,definiert. Abschließend sichern Sie den jetzigen Stand der Tabel-lendefinition über die entsprechende Ikone aus der Toolbar.

Damit sind die grundlegenden Eigenschaften der Employee-Tabellefestgelegt. Sie sollen aber noch zwei weitere Schritte ausführen undauf etwas Allgemeines hingewiesen werden: Sie lernen, wie Sie einenIndex für eine Tabellenspalte einrichten und wie Sie darüber hinausnoch die Tabellenpufferung im Tabelleneditor aktivieren können.

2 Unter http://service.sap.com/namespaces besteht für Kunden und Partner von SAPdie Möglichkeit, ein Namenspräfix für Datenbankobjekte zu reservieren.

3 Aus den Angaben zu Build-in Type und Length resultiert die Zuordnung zumJDBC Type und wird vom Wizard automatisch umgesetzt.

1042.book Seite 128 Dienstag, 8. Januar 2008 10:41 10

Page 22: 1042.book Seite 3 Dienstag, 8. Januar 2008 10:41 10 · Inhalt 9 3.6.3 Beschreibungen im Deployment-Deskriptor web.xml ..... 159 3.7 Java EE-Gesamtanwendung definieren und deployen

129

Datenmodell definieren 3.3

Denn damit folgen Sie dem Grundsatz: So viele Entscheidungen wiemöglich bereits zur Design Time treffen!

SekundärindexGenerell ist zwischen Primär- und Sekundärindex bei Tabellen zu un-terscheiden – und Sie werden einen Sekundärindex verwenden. DerPrimärindex wird durch die Schlüsselfelder der Tabelle definiert undautomatisch zusammen mit der physischen Tabelle auf der Daten-bank angelegt. Normalerweise werden Datensätze nach dem Wert imPrimärschlüssel sortiert. Ist jedoch zu erwarten, dass in der Anwen-dung häufig nach einem anderen Feld auf Datensätze zugegriffenwird, so empfiehlt es sich, einen Sekundärindex für dieses Feld ein-zurichten.

1. Um beispielsweise einen Index zum Feld LASTNAME anzulegen,klicken Sie einfach auf die Registerkarte Indexes im Tabellenedi-tor, und wählen Sie dann die Pluszeichen-Ikone links in der Tool-bar.

2. Im angezeigten Wizard tragen Sie »EMPLOYEES_I1« als Suffix zumIndexnamen4 ein und beenden diesen Schritt mit Finish. Anschlie-ßend expandieren Sie die soeben generierte Baumstruktur zumneuen Index und wählen die Option Add/Edit Index Fields ausdem Kontextmenü des Fields-Knotens.

Abbildung 3.7 Definition von Spalten zur Tabelle TMP_EMPLOYEES im Tabelleneditor

4 Analog zu den Tabellennamen geht das Standardpräfix in den Indexnamen ein.Genau wie bei Tabellennamen sind auch die Indexnamen auf 18 Zeichen begrenzt.

1042.book Seite 129 Dienstag, 8. Januar 2008 10:41 10

Page 23: 1042.book Seite 3 Dienstag, 8. Januar 2008 10:41 10 · Inhalt 9 3.6.3 Beschreibungen im Deployment-Deskriptor web.xml ..... 159 3.7 Java EE-Gesamtanwendung definieren und deployen

130

SAP NetWeaver Developer Studio: Schritt für Schritt zur Beispielanwendung3

3. Sie erhalten nun eine Liste der Tabellenfelder, aus der Sie dasgewünschte Feld auswählen (siehe Abbildung 3.8).

TechnischeEinstellungen

4. Auch für die Aktivierung eines Tabellenpuffers benötigen Sie nichtmehr als einige wenige Mausklicks. Dazu wählen Sie im Tabellen-editor die Registerkarte Technical Settings, markieren dort das zu-gehörige Ankreuzfeld und ordnen die Granularität5 der Pufferungwie in Abbildung 3.9 zu.

5. Im Verlauf der vorausgegangenen Prozedur wurden in diesemProjekt einige Tabellendefinitionsdaten generiert. Das gesamte Er-gebnis der bisherigen Bemühungen sichern Sie, indem Sie die ent-sprechende Ikone aus der Toolbar wählen.

Abbildung 3.8 Definition eines Indexes im Tabelleneditor

5 Mit der Granularität lässt sich bestimmen, ob die Tabelle mit allen Datensätzen(Fully Buffered) oder aber nur partiell in den Puffer geladen wird, sobald auf denersten Datensatz zugegriffen wird.

Abbildung 3.9 Aktivieren des Tabellenpuffers im Tabelleneditor

1042.book Seite 130 Dienstag, 8. Januar 2008 10:41 10

Page 24: 1042.book Seite 3 Dienstag, 8. Januar 2008 10:41 10 · Inhalt 9 3.6.3 Beschreibungen im Deployment-Deskriptor web.xml ..... 159 3.7 Java EE-Gesamtanwendung definieren und deployen

131

Zugriffe auf Tabellendaten realisieren 3.4

Damit ist die Tabelle vollständig definiert und liegt bislang als lokaleProjektressource in Form einer XML-Datei vor. Als ein wesentlichesResultat ist festzuhalten, dass die Tabelle als Bestandteil des Java Dic-tionarys über eine datenbankunabhängige Definition verfügt.

3.4 Zugriffe auf Tabellendaten realisieren

Java Persistence API

An dieser Stelle angelangt, müssen Sie sich entscheiden, wie Sie ineiner Java-Anwendung Zugriffe auf Tabellendatensätze durchführenwollen. Generell gibt es im Rahmen der Java-Entwicklung gleichmehrere Möglichkeiten für Datenpersistenz, und alle haben ihre Be-sonderheiten und Stärken. Da der SAP NetWeaver Application Ser-ver Java bereits den neueren Java EE 5-Standard unterstützt, werdenSie sich in der vorliegenden Beispielanwendung die Java PersistenceAPI (JPA) zunutze machen. Die Diskussion der verschiedenen Persis-tenzansätze im Kontext des AS Java finden Sie in Kapitel 4, »Java-Per-sistenz«, das sich ausdrücklich mit der Persistenz beschäftigt.

Die JPA ist die neue objektrelationale Persistence API für Java EE 5und als integraler Bestandteil des Java EE-Standards implementiert.Mit dieser für den Programmierer äußerst komfortablen technischenLösung werden die »leichtgewichtigen« Java-Objekte, die sogenann-ten Entitys, auf relationale Datenbanktabellen abgebildet. Entitys ba-sieren auf regulären Java-Objekten, häufig als POJOs (Plain Old JavaObject) bezeichnet, und müssen weder besondere Interfaces imple-mentieren noch spezielle Klassen erweitern. Zusätzlich zu der typi-schen Klassenimplementierung werden Sie sich jedoch um das Map-ping auf die passende Datenbanktabelle sowie der persistentenAttribute auf die jeweiligen Tabellenfelder kümmern müssen.6 Füreine Spezifizierung dieser Art von Metadaten bietet die JPA die kom-fortable Verwendung von Annotationen, die entweder manuell odermittels OR-Mapping-Tools zum Sourcecode der Entity-Klasse hinzu-gefügt werden.

6 Im Rahmen der anstehenden Auslieferung des SAP NetWeaver Composition Envi-ronments ist hier von deutlich komfortableren Lösungen auszugehen, die aufeiner engeren Integration der einzelnen Tools und Frameworks beruhen. Dem-nach sollte es möglich sein, ausgehend von Tabellendefinitionen aus dem Dictio-nary-Projekt, die korrespondierenden Entitys für das EJB-Modul zu generierenund umgekehrt.

1042.book Seite 131 Dienstag, 8. Januar 2008 10:41 10

Page 25: 1042.book Seite 3 Dienstag, 8. Januar 2008 10:41 10 · Inhalt 9 3.6.3 Beschreibungen im Deployment-Deskriptor web.xml ..... 159 3.7 Java EE-Gesamtanwendung definieren und deployen

132

SAP NetWeaver Developer Studio: Schritt für Schritt zur Beispielanwendung3

3.4.1 EJB-Modul-Projekt anlegen

Um Entitys anzulegen, benötigen Sie zunächst einmal ein neues EJB-Modul-Projekt.

1. Dazu starten Sie erneut den New Project Wizard über den Menü-punkt File � New � Project. Entsprechend Abbildung 3.10 wählenSie im angezeigten Wizard-Fenster die Kategorie EJB � EJB 3.0 undanschließend EJB Project 3.0 aus.

2. Mit Next gelangen Sie zum nächsten Wizard-Fenster und tragendort »EmployeeEjb« als Namen für das neue Projekt ein. Im Übri-gen übernehmen Sie die vorgegebenen Einstellungen und be-schließen diese Prozedur mit Finish.

3. Der Anlege-Wizard generiert einen initialen Projektrahmen fürdas neue EJB-Projekt und legt einen Projektordner im Workspace-Verzeichnis an.

4. Nun starten Sie die J2EE-Perspektive, sofern dies noch nichtgeschehen ist, und lassen sich die Projektstruktur im Project Ex-plorer anzeigen. Diese Ansicht wird Ihnen von nun an als zentra-ler Ausgangspunkt für die weiteren Aktivitäten rund um die EJB3.0-Entwicklung dienen.

Im nächsten Schritt fügen Sie zu diesem Projekt eine Entity namensEmployee hinzu.

Abbildung 3.10 Auswahl des EJB-Modul-Projektes im New Project Wizard

1042.book Seite 132 Dienstag, 8. Januar 2008 10:41 10

Page 26: 1042.book Seite 3 Dienstag, 8. Januar 2008 10:41 10 · Inhalt 9 3.6.3 Beschreibungen im Deployment-Deskriptor web.xml ..... 159 3.7 Java EE-Gesamtanwendung definieren und deployen

133

Zugriffe auf Tabellendaten realisieren 3.4

3.4.2 Employee-Entity definieren

Wie bereits angesprochen, soll das Datenmodell in diesem einfüh-renden Beispiel so einfach wie möglich gehalten werden, daher sol-len Sie nur eine einzige Entity names Employee, in Übereinstimmungmit der bereits vorhandenen Tabelle TMP_EMPLOYEES, definieren.

Allgemeine Eigenschaften der Entity-Klasse

Zu diesem Zweck werden Sie im nächsten Schritt eine neue, seria-lisierbare Java-Klasse erstellen, die im Wesentlichen die passendenAttribute deklariert und die zugehörigen Setter- und Getter-Metho-den bereitstellt.

New Class Wizard1. Um eine solche Klasse zum EJB-Modul-Projekt hinzuzufügen, öff-nen Sie das Kontextmenü zu dem Projektknoten und wählen dieOption New � Class.

2. Als Namen für die neue Klasse tragen Sie »Employee« ein und ord-nen das Package com.sap.demo.entity zu. Darüber hinaus aktivie-ren Sie die Option Constructors from Superclass und fügen dasInterface Serializable zur Auswahl hinzu.

3. Sie übernehmen dann die üblichen Standardeinstellungen undlegen die Klasse mit Finish an.

4. Nach Abschluss der Anlegeprozedur öffnen Sie den Java Editorund fügen noch einige Felddefinitionen zum Klassenkörperhinzu7:

private long employeeId;private String lastName;private String firstName;private String department;private int version;

7 In Übereinstimmung mit der Spezifikation ist es empfehlenswert, ein Versionsfeld(version) zur Entity hinzuzufügen. Dieses Feld wird zur Laufzeit vom JPA-Con-tainer benutzt, um eine optimistische Verifikation durchzuführen und somitsicherzustellen, dass keine konkurrierenden Zugriffe auf ein und dieselbe Daten-quelle erfolgen. Sobald der Container Zugriffe dieser Art registriert, wird eineException an die Transaktion geworfen. Der letzte Datenzustand wird dann fest-gehalten und ein Rollback für die aktuelle Transaktion gesetzt. Mit diesem einfa-chen Mittel tragen Sie zur Datenkonsistenz bei.

1042.book Seite 133 Dienstag, 8. Januar 2008 10:41 10

Page 27: 1042.book Seite 3 Dienstag, 8. Januar 2008 10:41 10 · Inhalt 9 3.6.3 Beschreibungen im Deployment-Deskriptor web.xml ..... 159 3.7 Java EE-Gesamtanwendung definieren und deployen

134

SAP NetWeaver Developer Studio: Schritt für Schritt zur Beispielanwendung3

Auf diese Weise statten Sie die Entity-Klasse genau mit den Fel-dern aus, die Sie in der korrespondierenden Employee-Tabelle alsTabellenfelder angelegt haben.

5. Dann markieren Sie im Editor alle Zeilen mit den soeben hinzu-gefügten Feldern und wählen Source � Generate Getters and Set-ters… aus dem Kontextmenü aus. Im angezeigten Auswahlfensterdrücken Sie auf die Taste Select All. Damit werden zu allen Felderndie zugehörigen Getter- und Setter-Methoden entsprechend Lis-ting 3.1 generiert.

public class Employee implements Serializable {private static final long serialVersionUID = 111L;private long employeeId;private String lastName;private String firstName;private String department;private int version;// non-arg constructorpublic Employee() {}public String getDepartment() {return department;}public void setDepartment(String department) {this.department = department;}public long getEmployeeId() {return employeeId;}public void setEmployeeId(long employeeId) {this.employeeId = employeeId;}[...]

}

Listing 3.1 Implementierung einer regulären Java-Klasse namens Employee

6. Zum Schluss sichern Sie den aktuellen Editorinhalt über die jewei-lige Ikone in der Toolbar.

Die Implementierung der Klasse Employee weist bislang keine Beson-derheiten auf. Sie definiert vier Felder employeeId, lastName,firstName, department sowie version und stellt die Getter- und Set-ter-Methoden entsprechend der Namenskonvention für JavaBeans

1042.book Seite 134 Dienstag, 8. Januar 2008 10:41 10

Page 28: 1042.book Seite 3 Dienstag, 8. Januar 2008 10:41 10 · Inhalt 9 3.6.3 Beschreibungen im Deployment-Deskriptor web.xml ..... 159 3.7 Java EE-Gesamtanwendung definieren und deployen

135

Zugriffe auf Tabellendaten realisieren 3.4

bereit. Bleibt einzig zu erwähnen, dass die JPA einen parameterlosenKonstruktor für eine Entity verlangt. Weitere Konstruktoren könnenjedoch hinzugefügt werden.

Da es sich hier nicht um eine abstrakte Klasse handelt, die zudemüber einen public-Konstruktor verfügt, haben Sie es bislang einzigmit einem POJO zu tun, das bereits instanziert werden kann. Dane-ben implementiert die Klasse das Interface java.io.Serializable,damit Entity-Objekte über remote Aufrufe bzw. in Webservice-Auf-rufen serialisiert werden können.

In diesem Zusammenhang folgen Sie der allgemeinen Empfehlung,und deklarieren explizit für die serialisierbare Klasse eine Ver-sionsnummer8 namens serialVersionUID. Aus diesem Grund wurdeein gleichnamiges Feld, das static, final und vom Typ long ist, imDeklarationsteil nachträglich hinzugefügt.

Objektrelationales Mapping

Streng genommen, liegt hier noch keine Entity vor, sondern nur eineinfaches JavaBean-Objekt. Was noch fehlt, ist eine Art Meta-Infor-mation9, die ein Mapping des Java-Objektes auf die relationale Da-tenbank beschreibt. Mittels der JPA lässt sich das recht einfach errei-chen, nämlich durch Hinzufügen der Annotationen zum Quelltextder Java-Klasse.

Mit dem einfachen Zusatz @Entity zur Klassendefinition identifizie-ren Sie die Klasse Employee als eine EJB 3.0 Entity. Mit diesem Schrittfordern Sie auch ein, dass die Entity auf eine Datenbanktabelle pas-send abgebildet wird. Zusätzlich benötigt das Persistenz-Frameworknoch die Informationen, wie die Entity auf die relationale Daten-banktabelle abgebildet wird.

8 Die Versionsnummer serialVersionUID wird von der Serialisierungslaufzeit fürjede serialisierbare Klasse für die Verifikation benötigt. Falls eine serialisierbareKlasse nicht explizit eine serialVersionUID deklariert, wird von der Laufzeit einDefault-Wert für diese Versionsnummer berechnet. Dieser Default-Wert kannjedoch von der Compiler-Implementierung abhängen. Um eine konsistente Ver-sionsnummer über alle Compiler hinweg zu garantieren, wird daher empfohlen,explizit eine serialVersionUID für die Klasse zu deklarieren.

9 Mit der JPA können Meta-Informationen zur Entity-Klasse nach wie vor mittelsDeployment-Deskriptoren in Form einer separaten XML-Datei abgelegt werden.Die Verwendung von Annotationen ist jedoch aus vielen Gründen vorzuziehen,unter anderem auch, weil sie im Standard Java SE 5.0 üblich ist.

1042.book Seite 135 Dienstag, 8. Januar 2008 10:41 10

Page 29: 1042.book Seite 3 Dienstag, 8. Januar 2008 10:41 10 · Inhalt 9 3.6.3 Beschreibungen im Deployment-Deskriptor web.xml ..... 159 3.7 Java EE-Gesamtanwendung definieren und deployen

136

SAP NetWeaver Developer Studio: Schritt für Schritt zur Beispielanwendung3

Zu beachten bleibt, dass die JPA dem Anwendungsentwickler einensehr komfortablen Weg bietet, um, basierend auf einem Satz vonplausiblen Default-Regeln, ein solches objektrelationales Mapping zurealisieren. Falls keine expliziten Angaben, etwa zum Namen der Ta-belle oder der einzelnen Tabellenfelder, gemacht werden, geht dieJPA von bestimmten plausiblen Annahmen aus.

So würde in diesem Beispiel eine Entity mit dem Namen Employee ge-mäß diesen Regeln auf eine Datenbanktabelle namens EMPLOYEE abge-bildet werden. Da sich die Namen im vorliegenden Fall jedoch unter-scheiden sollen, haben Sie die Möglichkeit, mittels der Annotation@Table diese zu überschreiben. Analog verfahren Sie beim Mappingder persistenten Felder der Entity auf die korrespondierenden Tabel-lenfelder. Weicht ein persistentes Feld vom Namen des Tabellenfel-des ab, auf das es abgebildet werden soll, so wird schlicht die Anno-tation @Column unter Angabe des korrespondierenden Tabellenfeld-namens hinzugefügt. Dies trifft in diesem Fall zum Beispiel beim FeldEmployeeId zu, das auf das Tabellenfeld namens ID abgebildet wird.Anders verhält es sich dagegen beim persistenten Feld department,das auf ein gleichnamiges10 Tabellenfeld abgebildet wird, ohne dassSie hierfür eine explizite Angabe machen müssen. Um das Versions-feld als solches zu kennzeichnen, ist es erforderlich, die entspre-chende Annotation @Version zum Feld version hinzuzufügen.

1. Fügen Sie nun die benötigten Annotationen zum Java-Quellcodeder Klasse Employee wie in Listing 3.2 hinzu.

@Entity@Table(name="TMP_EMPLOYEES")public class Employee implements Serializable {

@Column(name="ID")private long employeeId;@Column(name="LAST_NAME")private String lastName;@Column(name="FIRST_NAME")

10 Die JPA-Spezifikation macht keine Angaben zur Beachtung von Groß- und Klein-schreibung bei Tabellen- und Feldnamen. In der Implementierung von SAP JPA1.0 gilt daher die folgende Regel: Ist der Name der Tabelle oder des Tabellenfel-des explizit mittels der Annotation aufgeführt, dann wird die Groß- und Klein-schreibung berücksichtigt. Wenn dagegen der Tabellenname oder das Tabellen-feld gemäß der Default-Regel generiert wird, wird die Großschreibungangewendet.

1042.book Seite 136 Dienstag, 8. Januar 2008 10:41 10

Page 30: 1042.book Seite 3 Dienstag, 8. Januar 2008 10:41 10 · Inhalt 9 3.6.3 Beschreibungen im Deployment-Deskriptor web.xml ..... 159 3.7 Java EE-Gesamtanwendung definieren und deployen

137

Zugriffe auf Tabellendaten realisieren 3.4

private String firstName;private String department;@Versionprivate int version;[...]

}

Listing 3.2 Annotationen im Quellcode der Employee-Klasse

2. Sofern dies noch nicht geschehen ist, fügen Sie schließlich nochdie fehlenden Imports zur Employee-Klasse hinzu. Dazu klickenSie auf eine beliebige Position im Java Editor und wählen Source �Organize Imports aus dem Kontextmenü aus.

3. Die fehlenden Importzeilen werden dann, wie in Listing 3.3 wie-dergeben, hinzugefügt, und es dürften jetzt keine Fehler mehr imQuellcode der Bean-Klasse angezeigt werden.

import javax.persistence.Column;import javax.persistence.Entity;import javax.persistence.Table;import javax.persistence.Version;

Listing 3.3 Ergänzung einiger Importzeilen zur Klasse Employee

Primärschlüssel generieren

Damit jede Instanz einer Entity eindeutig identifiziert werden kann,muss die Entity-Klasse über einen Identifikator verfügen, der zugleichin der zugeordneten Tabelle als Primärschlüssel dienen kann. Aus die-sem Grund ist bereits ein Feld namens EmployeeId angelegt, und Siewerden es als Identifikator für die Employee-Entity einsetzen. DieSpezifizierung des Identifikator-Feldes erfolgt schlicht mit der Anno-tation @Id, die dem Feld vorangestellt wird. In diesem Fall wird durchdas Mapping auf das Tabellenfeld ID dieses Feld mit dem Primär-schlüssel der korrespondierenden Datenbanktabelle identifiziert.

Als Nächstes stellt sich die Frage, welche Generierungsmethode zurErzeugung des Primärschlüssels heranzuziehen ist. Zugegeben,hierzu gibt es viele Lösungen und Strategien, doch diese alle zu erläu-tern, würde den Rahmen dieser Ausführungen überschreiten. Nur soviel: Generell können Schlüsselfelder mithilfe der Datenbank odermit Mitteln des Server-Containers oder auch durch die Anwendungselbst bereitgestellt werden. Die JPA-Spezifikation kommt dem Ent-wickler wieder entgegen und bietet verschiedene Strategien für eine

1042.book Seite 137 Dienstag, 8. Januar 2008 10:41 10

Page 31: 1042.book Seite 3 Dienstag, 8. Januar 2008 10:41 10 · Inhalt 9 3.6.3 Beschreibungen im Deployment-Deskriptor web.xml ..... 159 3.7 Java EE-Gesamtanwendung definieren und deployen

138

SAP NetWeaver Developer Studio: Schritt für Schritt zur Beispielanwendung3

automatische ID-Generierung an. Der Entwickler selbst muss keineID-Generierungslogik implementieren, sondern kann mittels der An-notation @GeneratedValue eine automatische Primärschlüsselgene-rierung veranlassen und sich dabei die verschiedenen Strategien derGenerierung zunutze machen.

Tabelle fürID-Generierung

Sie werden im Folgenden sehen, wie die Tabellenstrategie eingesetztwird, bei der eine spezielle Tabelle für die Generierung der ID-Werteherangezogen wird. Zunächst muss allerdings eine entsprechendeTabelle erzeugt werden, da sie nicht von vornherein als eine Art Sys-temtabelle vom Framework bereitgestellt wird. Ein solcher Arbeits-schritt bereitet jedoch keine Mühe.

1. Öffnen Sie erneut die Dictionary-Perspektive, und fügen Sie eineweitere Tabellendefinition namens TMP_ID_GEN zu dem bereitsbestehenden Projekt EmployeeDic hinzu.

2. Die neue Tabelle soll genauso wie in Abbildung 3.11 definiert wer-den und die beiden Felder GEN_KEY und GEN_VALUE enthalten.11

Das Feld GEN_KEY definiert den Tabellenschlüssel und wird zurLaufzeit den voll qualifizierten Klassennamen enthalten. Das FeldGEN_VALUE ist für die Speicherung des zuletzt generierten ID-Wer-tes vorgesehen.

11 Die beiden Tabellenspalten GEN_KEY und GEN_VALUE bezeichnen die Standard-namen der SAP-JPA-Implementierung für Tabellen zur ID-Generierung. Abwei-chend davon können Sie für die ID-Tabelle auch andere Spaltennamen definie-ren, müssen in diesem Fall aber für ein entsprechendes Mapping in derAnnotation für den Tabellengenerator (@TableGenerator) sorgen.

Abbildung 3.11 Anlegen einer weiteren Tabellendefinition für die ID-Generie-rung im Dictionary-Projekt EmpoyeeDic

1042.book Seite 138 Dienstag, 8. Januar 2008 10:41 10

Page 32: 1042.book Seite 3 Dienstag, 8. Januar 2008 10:41 10 · Inhalt 9 3.6.3 Beschreibungen im Deployment-Deskriptor web.xml ..... 159 3.7 Java EE-Gesamtanwendung definieren und deployen

139

Zugriffe auf Tabellendaten realisieren 3.4

Annotation für den ID-Generator

3. Wie in Listing 3.4 wiedergegeben, lässt sich mithilfe dieser neuenTabelle ein passender ID-Generator definieren. Im Sourcecode derEmployee-Klasse fügen Sie daher noch die entsprechende Annota-tion @TableGenerator hinzu, indem Sie sie dem Klassennamen vo-ranstellen. Das Element table referenziert hier die soeben an-gelegte Tabelle für die ID-Generierung, während das Element namezur Identifikation des Generators verwendet wird. Der Name desGenerators wiederum wird über das Element generator mittelsder Annotation @GeneratedValue spezifiziert. Wie in Listing 3.4fügen Sie diese Annotation noch zum Klassenattribut employeeIdhinzu. Über das weitere Element strategy weisen Sie den Contai-ner an, zur Laufzeit die Generierungsmethode mit der Strategievom Typ TABLE zu verwenden.

@TableGenerator(name="idGenerator", table="TMP_ID_GEN",pkColumnName="GEN_KEY", valueColumnName="GEN_VALUE")public class Employee implements Serializable {@Id@GeneratedValue (strategy=GenerationType.TABLE,

generator="idGenerator")@Column(name="ID")private long employeeId;[...]

Listing 3.4 Definition eines Primärschlüssels für die Employee-Entity

Query-Abfrage mittels EJB-QL-Anweisung formulieren

Suchabfragen in Findermethoden

Bei der Realisierung von Zugriffen auf Datenbankdaten wird häufigvon Suchabfragen, den sogenannten Querys, Gebrauch gemacht. DieSpezifikation für EJB 3.0 hat vielfältige Möglichkeiten vorgesehen,wie Querys eingesetzt werden können. Ein wichtiger Bestandteilhierbei sind die benannten Parameter, die sowohl in statischen alsauch in dynamischen Querys Verwendung finden.

Möglicherweise erinnern Sie sich noch daran, wie für die früherenEJB-Versionen statische Querys im EJB Deployment Descriptor zudefinieren und dann in einem weiteren Schritt das Verhalten der Fin-dermethoden mittels der EJB-QL-Anweisungen zu spezifizieren wa-ren. EJB 3.0 führt diesen Ansatz fort und bietet hierzu eine verein-fachte Realisierung an. Es erlaubt dem Programmierer, statischeQuerys mittels der Annotation @NamedQuery innerhalb des Java-Sour-cecodes hinzuzufügen. Hierbei handelt es sich um eine vordefinierte

1042.book Seite 139 Dienstag, 8. Januar 2008 10:41 10

Page 33: 1042.book Seite 3 Dienstag, 8. Januar 2008 10:41 10 · Inhalt 9 3.6.3 Beschreibungen im Deployment-Deskriptor web.xml ..... 159 3.7 Java EE-Gesamtanwendung definieren und deployen

140

SAP NetWeaver Developer Studio: Schritt für Schritt zur Beispielanwendung3

Query, die durch ihren Namen identifiziert wird. Wie bei Finderme-thoden üblich, wird das Verhalten der Methode nicht mittels Java-Sourcecode spezifiziert, sondern durch EJB-QL-Anweisungen,12 mitdenen sich geeignete Suchabfragen formulieren lassen.

Genau dies werden Sie an dieser Stelle nachholen und die benötigteEJB-QL-Anweisung für eine Query namens Employee.findAll for-mulieren.

1. Fügen Sie die Annotation @NamedQuery im Java Editor hinzu, undzwar vor der Definition der Klasse Employee.

2. Das Element name dient der Identifikation der Query mittels einesString-Wertes. Das Element query nimmt die EJB-QL-AnweisungSELECT e FROM Employee e auf (siehe Listing 3.5).

@NamedQuery(name="Employee.findAll",query="SELECT e FROM Employee e")

@Entity@Table(name="TMP_EMPLOYEES")public class Employee implements Serializable {

[...]

Listing 3.5 Definition einer Query-Abfrage für die Ausgabe aller Employee-Objekte

3.4.3 Anwendung für Datenbankzugriffe konfigurieren

Damit der EJB-Container die Datenbankzugriffe überhaupt behan-deln kann, muss er einige globale Einstellungen zur Persistenz, wieetwa den Namen der Data-Source, kennen, die für die Verbindung zurDatenbank erforderlich ist. In der Regel werden Konfigurationsaufga-ben vom Server übernommen, es gibt allerdings einige Ausnahmen.Daher ist im Folgenden beschrieben, wie diese wenigen Konfigurati-onsaufgaben einmalig für das EJB-Projekt vom Entwickler auszufüh-ren sind. Diese manuelle Konfiguration der Java-Persistenz erfolgt ineinem speziellen Persistenz-Deskriptor namens persistence.xml.

12 Bei EJB-QL handelt es sich um eine standardisierte Query-Sprache, mit der dasVerhalten von Findermethoden unabhängig von der eingesetzten Datenbankdeklarativ beschrieben wird. EJB-QL-Anweisungen haben eine gewisse Ähnlich-keit mit SQL-Anweisungen. Unter anderem finden Sie hier die SELECT-Anwei-sung wieder. Mit EJB 3.0 ist der Funktionsumfang der Query Language nocherweitert worden. Sie können praktisch alle Suchabfragen formulieren, wie diesauch mit Native SQL möglich ist.

1042.book Seite 140 Dienstag, 8. Januar 2008 10:41 10

Page 34: 1042.book Seite 3 Dienstag, 8. Januar 2008 10:41 10 · Inhalt 9 3.6.3 Beschreibungen im Deployment-Deskriptor web.xml ..... 159 3.7 Java EE-Gesamtanwendung definieren und deployen

141

Zugriffe auf Tabellendaten realisieren 3.4

Persistenz-Unit definieren

In einer typischen EJB-Anwendung besteht das Datenmodell meistaus mehreren, einander referenzierenden Entitys, die gemeinsam aufein und dasselbe Datenbankschema abzubilden sind. Sie haben nundafür Sorge zu tragen, dass alle zusammengehörigen Entity-Klassenauch für den EJB-Container zur Laufzeit eine logische Einheit bilden,vom Entity-Manager als solche verwaltet werden und auf ein unddieselbe Data-Source zurückgreifen. Eine solche logische Einheitwird als Persistenz-Unit bezeichnet.

Persistenz-Unit fasst Entitys zusammen

Sie umfasst also diejenige Menge von Entitys einer Applikation, diezur Laufzeit über den Entity-Manager adressiert werden. BeachtenSie dabei, dass eine Persistenz-Unit auch dann explizit gesetzt wer-den muss, wenn wie hier nur eine einzige Entity in Betracht kommt.

Alle zusammengehörigen Entitys, die eine Persistenz-Unit bilden,können in der Konfigurationsdatei explizit aufgelistet werden. Diesist jedoch nicht zwingend erforderlich, da das Persistenz-Frameworkanderenfalls die Anwendung nach Entitys durchsucht und diese au-tomatisch aufspürt. In dieser Beispielanwendung soll lediglich derName und eine Kurzbeschreibung für die Persistenz-Unit angegebenwerden, gemäß dem Motto: Konfiguration nur im Ausnahmefall.Darüber hinaus sind noch zwei weitere Angaben zu machen, einmalzur JTA Data Source sowie zum Versionsgenerator.

Konfiguration in persistence.xml

Da eine solche Konfigurationsdatei noch nicht im vorliegenden EJB-Projekt enthalten ist, erstellen Sie die Datei persistence.xml, und zwarausgehend vom passenden XML-Schema.

1. Wählen Sie dazu im Project Explorer das EJB-Projekt aus, undnavigieren Sie zum Ordner META-INF.

2. Aus dem Kontextmenü zu diesem Ordner wählen Sie denMenüpfad New � Other � XML � XML und navigieren mit Next zumfolgenden Schritt.

3. Auf der angezeigten Wizard-Seite selektieren Sie die Option Cre-ate XML file from an XML schema file und drücken erneut auf dieTaste Next.

4. Auf der folgenden Wizard-Seite geben Sie »persistence.xml« alsDateinamen ein und wählen wieder Next.

1042.book Seite 141 Dienstag, 8. Januar 2008 10:41 10

Page 35: 1042.book Seite 3 Dienstag, 8. Januar 2008 10:41 10 · Inhalt 9 3.6.3 Beschreibungen im Deployment-Deskriptor web.xml ..... 159 3.7 Java EE-Gesamtanwendung definieren und deployen

142

SAP NetWeaver Developer Studio: Schritt für Schritt zur Beispielanwendung3

5. Wie in Abbildung 3.12 wiedergegeben, entscheiden Sie sich fürdie Option Select XML Catalog entry und dann für persistence_1_0.xsd aus dem angezeigten XML-Katalog.

6. Auf der darauffolgenden Wizard-Seite bestätigen Sie die Auswahlmit Finish.

7. Um den Inhalt des Persistenz-Deskriptors zu vervollständigen,bedienen Sie sich der Design-Ansicht (siehe Abbildung 3.13) undfügen über das Kontextmenü zum letzten Eintrag einige zusätz-liche Tags hinzu. Die benötigten Konfigurationsangaben finden Siein Tabelle 3.1.

8. Der Name der Persistenz-Unit ist generell frei wählbar und wirdzur XML-Source innerhalb des Elements <persistence-unit>hinzugefügt. Auf die Persistenz-Unit ist erneut zurückzukom-men, wenn in der Session Bean auf die Instanz der Entity mittelsdes Entity-Managers zugegriffen werden soll.

9. Innerhalb des Elements <persistence-unit> nutzen Sie den Tag<jta-data-source>, um den Data-Source-Alias einzutragen.Auch darauf wird zu einem späteren Zeitpunkt noch genauer ein-gegangen werden.

Abbildung 3.12 Auswahl des XML-Schemas beim Hinzufügen von persistence.xml zum EJB-Projekt

Abbildung 3.13 Hinzufügen weiterer Tags in der Design-Ansicht von persistence.xml

1042.book Seite 142 Dienstag, 8. Januar 2008 10:41 10

Page 36: 1042.book Seite 3 Dienstag, 8. Januar 2008 10:41 10 · Inhalt 9 3.6.3 Beschreibungen im Deployment-Deskriptor web.xml ..... 159 3.7 Java EE-Gesamtanwendung definieren und deployen

143

Zugriffe auf Tabellendaten realisieren 3.4

10. Schließlich fügen Sie noch eine <property> hinzu, um eine Ver-sionierung der Data-Source zu ermöglichen. Diese Angabe ist ausdem folgenden Grund erforderlich:

Um eine Versionierung der Data-Source überhaupt nutzbar zumachen, verlangt die JPA-Spezifikation, dass die Data-Source denIsolation-Level READ_COMMITTED verwendet. Um jedoch die Diffe-renz zwischen dieser Anforderung und dem tatsächlichen Isola-tion-Level READ_UNCOMMITTED aufzulösen, wird ein passenderVersionsgenerator benötigt. Einen solchen Generator adressiertman in persistence.xml über eine bestimmte Eigenschaft der Per-sistenz-Unit. Diese Eigenschaft spezifizieren Sie über das Na-menselement aus Tabelle 3.1.

Darüber hinaus benötigt ein Versionsgenerator eine geeigneteDatenbanktabelle. Hierfür eignet sich eine beliebige Generatorta-belle, die über die Feldnamen GEN_KEY und GEN_VALUE verfügt.Ohne Weiteres eignet sich die vorhin angelegte Tabelle TMP_ID_GEN auch zu diesem Zweck, deshalb ordnen Sie sie als Property-Wert zu.

11. Die generierte XML-Source entspricht dann den Zeilen in Listing3.6:

<?xml version="1.0" encoding="UTF-8"?><persistence xmlns="http://java.sun.com/xml/ns/persistence" [...]><persistence-unit name="EmployeePU">

<description>Sample Application Persistence Unit

</description>

XML-Tag Zugeordneter Wert

persistence-unit | name EmployeePU

persistence: descriptrion Sample Application Persistence Unit

persistence: jta-data-source TMP_EMPLOYEES_DATA

persistence: properties

property | name com.sap.engine.services.orpersis-tence.generator.versiontablename

property | value TMP_ID_GEN

Tabelle 3.1 Angaben zur Persistenz-Unit in persistence.xml

1042.book Seite 143 Dienstag, 8. Januar 2008 10:41 10

Page 37: 1042.book Seite 3 Dienstag, 8. Januar 2008 10:41 10 · Inhalt 9 3.6.3 Beschreibungen im Deployment-Deskriptor web.xml ..... 159 3.7 Java EE-Gesamtanwendung definieren und deployen

144

SAP NetWeaver Developer Studio: Schritt für Schritt zur Beispielanwendung3

<jta-data-source>TMP_EMPLOYEES_DATA</jta-data-source><properties><property name = "com.sap.engine.services.

orpersistence.generator.versiontablename"value= "TMP_ID_GEN">

</property></properties>

</persistence-unit></persistence>

Listing 3.6 Resultierende XML-Source von persistence.xml

3.5 Business-Logik definieren

Nachdem Sie in Abschnitt 3.4, »Zugriffe auf Tabellendaten realisie-ren«, die Datenzugriffe mittels einer JPA-Entity realisiert haben,wenden Sie sich nun der Business-Logik zu. Da EJBs benutzt werden,sind Session Beans13 normalerweise der beste Weg, die Business-Logik zu kapseln.

StatelessSession Bean

Sie werden zu diesem Zweck eine Stateless Session Bean namensEmployeeServices anlegen, die erforderlichen Business-Methodenhinzufügen und implementieren. Mittels der Business-Methodensollten beliebige Clients in der Lage sein, die vom Benutzer einge-gebenen Employee-Registrierungsdaten aufzunehmen und sieschließlich zum Speichern an die Entity Employee weiterzugeben.Darüber hinaus sollten alle bestehenden Datensätze zu allen vorhan-denen Employees an Clients für die reine Anzeige weitergereichtwerden können.

3.5.1 Session Bean anlegen

Um eine Session Bean namens Employee Services anzulegen, startenSie den passenden Anlege-Wizard.

13 In verteilten Anwendungen implementieren Session Beans die anwendungsrele-vanten Prozesse und Aufgaben, realisieren das Transaktionsmanagement undvermitteln Zugriffe auf Low-Level-Komponenten, wie etwa auf Entitys oder aufandere Datenzugriffskomponenten sowie auf Hilfsklassen. Ein derartiger Einsatzvon Session Beans entspricht dem Session-Façade-Design-Pattern und dienteiner klaren Separation der verschiedenen Schichten (Datenzugriffe und Busi-ness-Logik) mit dem Ziel einer Performanceerhöhung zur Laufzeit.

1042.book Seite 144 Dienstag, 8. Januar 2008 10:41 10

Page 38: 1042.book Seite 3 Dienstag, 8. Januar 2008 10:41 10 · Inhalt 9 3.6.3 Beschreibungen im Deployment-Deskriptor web.xml ..... 159 3.7 Java EE-Gesamtanwendung definieren und deployen

145

Business-Logik definieren 3.5

1. Öffnen Sie das Kontextmenü auf dem Projektknoten EmployeeEjbim Project Explorer, und wählen Sie den Menüpunkt New � EJB �EJB 3.0 � EJB Session Bean 3.0.

2. Im angezeigten Dialogfenster ordnen Sie entsprechend zur Auf-stellung in Tabelle 3.2 einige elementare Eigenschaften zu.

3. Da keine weiteren Optionen für die anzulegende Session Bean er-forderlich sind, wählen Sie Finish und stoßen somit die Generie-rungsprozedur an.

4. Wie in Abbildung 3.14 wiedergegeben, legt der Wizard eine Bean-Klasse EmployeeServicesBean sowie das zugehörige Business In-terface mit dem Namen EmployeeServicesLocal an.

Da Sie beim Anlegen der Session Bean den Typ Stateless zugeordnethaben, wird diese Meta-Information in der generierten Bean-Klassedurch Voranstellen der entsprechenden Annotation @Stateless vordem Klassennamen abgelegt. Im Gegensatz zu stateful Session Beans

Feldbezeichnung Zugeordneter Wert

EJB Class Name EmployeeServices

EJB Project EmployeeEjb

Default EJB Package com.sap.demo.session

Session Type Stateless

Transaction Type Container

Create Business Interface Ankreuzfeld Local aktiviert

Tabelle 3.2 Allgemeine Eigenschaften beim Anlegen der Session Bean EmployeeServices

Abbildung 3.14 Session Bean EmployeeServices im Project Explorer

1042.book Seite 145 Dienstag, 8. Januar 2008 10:41 10

Page 39: 1042.book Seite 3 Dienstag, 8. Januar 2008 10:41 10 · Inhalt 9 3.6.3 Beschreibungen im Deployment-Deskriptor web.xml ..... 159 3.7 Java EE-Gesamtanwendung definieren und deployen

146

SAP NetWeaver Developer Studio: Schritt für Schritt zur Beispielanwendung3

soll diese Session Bean nicht in der Lage sein, ihren Zustand in ihrerInstanzvariablen zu speichern. Die Anwendung sieht keine Speiche-rung von benutzerspezifischen Informationen vor; die Methoden derSession Bean werden sich demzufolge zustandslos verhalten.

Die Deklaration des Business Interface als lokales Interface bedingtwiederum, dass die Annotation @Local zu dem Interface-Namengeneriert wird. Wie bereits erwähnt, werden Business-Methoden derSession Bean an dieses Business Interface exponiert, sodass ein Clientmithilfe genau dieses Interface auf die Session Bean zugreifen kann.Bei einem lokalen Interface ist davon auszugehen, dass sich die EJBund der Client auf ein und demselben Server befinden.

3.5.2 Session-Bean-Klasse implementieren

Business-Methoden

Nach der bisher weitgehend deklarativen Vorgehensweise folgt nundie Implementierung der spezifischen Service-Funktionalität der Bei-spielanwendung. Mithilfe der sogenannten Business-Methoden wer-den Sie genau die Funktionen realisieren, die auch der Client-Anwen-dung zur Verfügung gestellt werden. Bei den Business-Methodenhandelt es sich um spezielle Methoden der Session Bean, die ihre spe-zifische, von außen verfügbare Service-Funktionalität implementie-ren.

Generell werden Business-Methoden als reguläre Java-Methoden inlokalen, in remote oder gegebenenfalls in beiden Business Interfacesdeklariert und in der zugehörigen Session-Bean-Klasse implemen-tiert. In Abhängigkeit vom Business Interface, das die entsprechendeBusiness-Methode zur Verfügung stellt, ist diese Methode entwederfür lokale oder Remote-Clients oder für beide verfügbar.

In den nachfolgenden Ausführungen werden Sie sehen, dass Sie le-diglich lokale Clients zu versorgen und einige Business-Methoden zuimplementieren haben, die bereits exemplarisch zeigen, wie einigeder Grundoperationen an persistenten Objekten zu realisieren sind:So werden Sie mithilfe der Methode createEmployee() lernen, wieein neuer Datensatz angelegt und dauerhaft in der Datenbank gespei-chert wird und wie mithilfe der Methode getEmployeeById()

die Suche nach einem Datensatz anhand des Primärschlüssels reali-siert werden kann. Ein weiterer lesender Zugriff steht in Verbindungmit einer Query-Ausführung und definiert die dritte Business-Me-thode getAllEmployees() für die Beispielanwendung.

1042.book Seite 146 Dienstag, 8. Januar 2008 10:41 10

Page 40: 1042.book Seite 3 Dienstag, 8. Januar 2008 10:41 10 · Inhalt 9 3.6.3 Beschreibungen im Deployment-Deskriptor web.xml ..... 159 3.7 Java EE-Gesamtanwendung definieren und deployen

147

Business-Logik definieren 3.5

Instanz des Entity-Managers erhalten

Entity-Manager als Schnittstelle zur Datenbank

Da die Business-Methoden in der Lage sein sollen, neue Datensätzeanzulegen, bestehende zu manipulieren und anschließend die Ände-rungen mit der Datenbank zu synchronisieren, benötigen Sie eineArt lokale Schnittstelle für die Interaktion mit der Datenbank. DieJPA stellt dem Anwendungsentwickler mit dem Entity-Manager einesolche Schnittstelle zur Verfügung. Denn die Aufgabe des Entity-Ma-nagers besteht genau darin, den Lebenszyklus von Entity-Objektenzu steuern und deren Zustand zu verändern. Mithilfe des Entity-Ma-nagers können Sie alle Datenbankoperationen an Entitys durchfüh-ren und so Objekte auf der Datenbank anlegen, verändern, lesen, su-chen oder löschen. Wie Sie, ausgehend von der Session Bean, auf diePersistenz-Unit zugreifen und den Entity-Manager für diese Persis-tenz-Unit definieren, ist in Listing 3.7 wiedergegeben.

@Statelesspublic class EmployeeServicesBean implementsEmployeeServicesLocal {

@PersistenceContext (unitName = "EmployeePU")private EntityManager eManager;

[...]}

Listing 3.7 Zugriff auf den Entity-Manager innerhalb der Session Bean

Wie Sie Listing 3.7 entnehmen können, deklariert die Session Beaneine Variable vom Typ EntityManager, ohne dass ihr ein bestimmterWert zugeordnet wird. Zwei Aspekte sind daran von Interesse sein:Zunächst einmal ist der Sourcecode ein Teil der Session Bean undwird auf dem Applikationsserver ausgeführt. Zum anderen ist die Va-riable mit der Annotation @PersistenceContext versehen. Zusätzlichenthält diese Annotation das Element unitName. Über diesen Parame-ter geben Sie den Namen der Persistenz-Unit an, auf der der Entity-Manager operiert. Sie erinnern sich sicher, dass der eingetrageneWert genau dem Namen entspricht, den Sie in der Konfigurationsda-tei persistence.xml bereits eingetragen haben.

Dies ist interessant, da die Session Bean hier eine Technik namensResource Injection verwendet. Mittels der Annotation wird es demServer überlassen, die Variable (hier: eManager) mit einerEntityManager-Instanz zu belegen. Somit wird gewährleistet, dass

1042.book Seite 147 Dienstag, 8. Januar 2008 10:41 10

Page 41: 1042.book Seite 3 Dienstag, 8. Januar 2008 10:41 10 · Inhalt 9 3.6.3 Beschreibungen im Deployment-Deskriptor web.xml ..... 159 3.7 Java EE-Gesamtanwendung definieren und deployen

148

SAP NetWeaver Developer Studio: Schritt für Schritt zur Beispielanwendung3

diese Variable stets richtig initialisiert ist, wenn eine Business-Me-thode zum ersten Mal aufgerufen wird.

Neuen Employee-Datensatz auf der Datenbank anlegen

Nachdem Sie gesehen haben, wie Sie in der Bean-Klasse auf den En-tity-Manager zugreifen können, werden Sie im nächsten Schritt an-hand der Business-Methode createEmployee() sehen, wie einfachein neuer Datensatz auf der Datenbank angelegt werden kann. Zu-nächst einmal wird eine Instanz der Entity Employee über einen Kon-struktor angelegt. Die zur Spezifizierung eines Employees benötigtenDaten werden als Methodenparameter übergeben. Die Zugriffe aufdie persistenten Felder werden mithilfe der Setter-Methoden reali-siert. Das nun vollständig spezifizierte Objekt employee wird schließ-lich über die Methode persist() an den Entity-Manager übergeben,der ein dauerhaftes Speichern auf der Datenbank veranlasst. AlsResultat liefert die Business-Methode eine ID vom Typ long zurück.

Die vollständige Implementierung dieser Methode können Sie Lis-ting 3.8 entnehmen.

public long createEmployee(String lastName, StringfirstName, String department) {

long result = 0;Employee employee = new Employee();employee.setFirstName(firstName);employee.setLastName(lastName);employee.setDepartment(department);eManager.persist(employee);result = employee.getEmployeeId();return result;

}

Listing 3.8 Quellcode zur Business-Methode createEmployee()

Datensatz anhand einer ID suchen

Häufig muss eine Anwendung in der Lage sein, erst einmal einenbestimmten Datensatz auf der Datenbank zu identifizieren, bevor sieeine Operation auf diesen Daten ausführen kann. Eine Suche nacheinem bestimmten Employee-Datensatz anhand der ID (also des Pri-märschlüssels) ist in Listing 3.9 exemplarisch dargestellt.

1042.book Seite 148 Dienstag, 8. Januar 2008 10:41 10

Page 42: 1042.book Seite 3 Dienstag, 8. Januar 2008 10:41 10 · Inhalt 9 3.6.3 Beschreibungen im Deployment-Deskriptor web.xml ..... 159 3.7 Java EE-Gesamtanwendung definieren und deployen

149

Business-Logik definieren 3.5

public Employee getEmployeeById(long empId) {Employee employee =eManager.find(Employee.class, Long.valueOf(empId));return employee;

}

Listing 3.9 Quellcode zur Business-Methode getEmployeeById()

Der Aufruf erfolgt hier mittels der find()-Methode des Entity-Mana-gers. Diese Methode enthält zwei Argumente: Beim ersten Argumenthandelt es sich um die Entity-Klasse des zu suchenden Objektesselbst, während das zweite Argument die Objektrepräsentation desEntity-Identifizierers, also des Schlüsselfeldes, ist. Die find()-Me-thode liefert die gefundene Entity-Instanz oder aber null zurück,falls keine solche Entity in der Datenbank gefunden wurde. Da diefind()-Methode generisch implementiert wurde, ist ein Casting desResultatwertes in diesem Fall nicht erforderlich. Mit anderen Wor-ten, die find()-Methode ist so parametrisiert, dass der Typ des zu-rückgelieferten Resultats mit dem des ersten Arguments des Metho-denaufrufs übereinstimmt. Es wird also in jedem Fall eine Instanzvom Typ Employee zurückgegeben.

Query-Anfrage ausführen

Eine weitere Business-Methode getAllEmployees() soll nunmehr le-diglich der Demonstration dienen, wie Sie eine Query-Anfrage zumAuslesen einer Ergebnismenge verwenden können. Sicher erinnernSie sich, wie Sie in Abschnitt 3.4.2, »Employee-Entity definieren«,eine benannte Query (»Named Query«) mittels einer Select-Klauselformuliert haben. Dabei wurde eine Suchanfrage mit dem symbo-lischen Namen Employee.findAll im Sourcecode der Employee-En-tity hinterlegt. Diese Query sollen Sie nun zum Auslesen der Daten-bankdatensätze verwenden. So soll eine Liste zu allen existierendenEmployees an einen Client14 zurückgeliefert werden können.

14 Bei den Clients kann es sich um Java Server Faces, JSPs, Servlets, Java-Klassen,eine andere EJB oder aber um einen Webservice-Client handeln. Dabei kommtClients – insbesondere in großen Anwendungen – der Vorteil zugute, dass siekeine Suchanfragen selbst definieren müssen. Auch Änderungen und Anpassun-gen der Query-Form können zentral, ohne Einfluss auf den Client, vorgenom-men werden.

1042.book Seite 149 Dienstag, 8. Januar 2008 10:41 10

Page 43: 1042.book Seite 3 Dienstag, 8. Januar 2008 10:41 10 · Inhalt 9 3.6.3 Beschreibungen im Deployment-Deskriptor web.xml ..... 159 3.7 Java EE-Gesamtanwendung definieren und deployen

150

SAP NetWeaver Developer Studio: Schritt für Schritt zur Beispielanwendung3

Wie Sie der Implementierung dieser Findermethode in Listing 3.10entnehmen können, lassen sich Query-Objekte über den Entity-Ma-nager erzeugen. Dies erfolgt schlicht mit dem Aufruf der MethodecreateNamedQuery(). Als Parameter wird ein Platzhalter übergeben,der lediglich den Namen der definierenden Query enthält. Das Aus-führen der Anfrage an die Datenbank und das Auslesen der Ergebnis-menge erfolgt mittels der Query-Methode getResultList().

@SuppressWarnings("unchecked")public List<Employee> getAllEmployees() {

Query query =eManager.createNamedQuery("Employee.findAll");

List<Employee> result =(List<Employee>) query.getResultList();return result;

}

Listing 3.10 Quellcode der Business-Methode getAllEmployees()

Um die Anzahl der Warnungen zum Compiler-Zeitpunkt zu minimie-ren, fügen Sie zusätzlich zum Sourcecode eine entsprechende Anno-tation hinzu. @SuppressWarnings dient lediglich zur Unterdrückungbestimmter Compiler-Warnungen im Zusammenhang mit dieserMethode.

Transaktionsverhalten der Business-Methoden festlegen

Bisher haben Sie an keiner Stelle irgendwelche spezifischen Angabenzum Transaktionsverhalten der Business-Methoden gemacht. Ledig-lich beim Anlegen der Session Bean haben Sie mit dem Attribut Con-tainer den Transaktionstyp bestimmt. Dies bedeutet, dass in einemsolchen Fall der EJB-Container die Steuerung der Transaktionenübernimmt. Sie haben bereits im Zusammenhang mit dem Entity-Manager gesehen, dass der EJB-Container dem Programmierer wich-tige Standardaufgaben abnimmt.

Bei diesem Transaktionstyp ist es demnach nicht erforderlich, dassdie Commit- oder Rollback-Methoden gesetzt werden, diese Aufgabeüberlassen Sie vollständig dem EJB-Container. Zwar gibt es bei EJBsgrundsätzlich die Möglichkeit, die Transaktionslogik programm-gesteuert in der Bean-Klasse selbst zu implementieren, aber die Ent-scheidung über das Transaktionsverhalten zugunsten des container-

1042.book Seite 150 Dienstag, 8. Januar 2008 10:41 10

Page 44: 1042.book Seite 3 Dienstag, 8. Januar 2008 10:41 10 · Inhalt 9 3.6.3 Beschreibungen im Deployment-Deskriptor web.xml ..... 159 3.7 Java EE-Gesamtanwendung definieren und deployen

151

Business-Logik definieren 3.5

gestützten Ansatzes beim Anlegen der Session Bean ist bereitsgefallen.

Transaktions-attribute

Das gewünschte Transaktionsverhalten zu den einzelnen Business-Methoden der Applikation bestimmen Sie mithilfe von Transaktions-attributen und tragen dabei der Tatsache Rechnung, dass alle Opera-tionen, die über die lesenden Zugriffe auf Datensätze hinausgehen,innerhalb einer Transaktion stattfinden müssen. Da es sich bei Trans-aktionsattributen um Metadaten handelt, benutzen wir, wiegewohnt, vordefinierte Annotationen. Die notwendigen Ergänzun-gen im Sourcecode finden Sie in Listing 3.11.

@Stateless@TransactionManagement(value=TransactionManagementType.CONTAINER)

public class EmployeeServicesBeanimplements EmployeeServicesLocal {

[...]public long createEmployee(String lastName, StringfirstName, String department) {[...]}@TransactionAttribute(TransactionAttributeType.SUPPORTS)public Employee getEmployeeById(long empId) {[...]}@TransactionAttribute(TransactionAttributeType.SUPPORTS)public List<Employee> getAllEmployees() {[...]}

[...]}

Listing 3.11 Transaktionsattribute der Business-Methoden der Session Bean EmployeeServices

Zunächst einmal legt die Annotation @TransactionManagement fest,dass die Transaktionskontrolle für die gesamte Session Bean an denContainer delegiert wird. Eine weitere Annotation @TransactionAttribute erlaubt es, den Transaktionskontext individuell an jedeeinzelne Methode anzupassen. Beachten Sie, dass zur MethodecreateEmployee() keine Annotation hinzugefügt wurde. Dies hateinzig und allein damit zu tun, dass für die zugrunde liegende Ope-ration das Default-Verhalten wirksam werden soll. Das zugehörige

1042.book Seite 151 Dienstag, 8. Januar 2008 10:41 10

Page 45: 1042.book Seite 3 Dienstag, 8. Januar 2008 10:41 10 · Inhalt 9 3.6.3 Beschreibungen im Deployment-Deskriptor web.xml ..... 159 3.7 Java EE-Gesamtanwendung definieren und deployen

152

SAP NetWeaver Developer Studio: Schritt für Schritt zur Beispielanwendung3

Transaktionsattribut heißt REQUIRED und bedingt, dass eine neueTransaktion immer dann gestartet wird, wenn es erforderlich ist. Istetwa zum Zeitpunkt des Methodenaufrufs keine Transaktion aktiv, sostartet der Applikationsserver automatisch eine neue Transaktion,führt die Business-Methode aus und setzt einen Transaktions-Com-mit unmittelbar danach. Ist anderenfalls eine Transaktion bereits ver-fügbar, wird sie herangezogen. Daran erkennen Sie, dass das Anlegeneines neuen Employee-Datensatzes auf jeden Fall eine Transaktionerfordert, wenn auch nicht unbedingt eine exklusive. Hierfür ist dasTransaktionsattribut REQUIRED genau passend.

Anders verhält es sich bei den Methoden getEmployeeById() undgetAllEmployees(). Beide Methoden implementieren nur lesendeZugriffe. Da keine Änderungen an den Datensätzen resultieren, isteine Transaktion eigentlich nicht erforderlich. Falls jedoch eineTransaktion zum Zeitpunkt des Methodenaufrufs aktiv ist, wird sieauch verwendet. Eine neue Transaktion wird dagegen nicht gestartet.Aufgrund dieser Toleranz gegenüber den Transaktionen wird das De-fault-Verhalten mit dem Transaktionsattribut SUPPORTS überschrie-ben. Damit ist der Sourcecode der Bean-Klasse vollständig. Sofernnoch nicht geschehen, fügen Sie noch die fehlenden Importe zurBean-Klasse hinzu. Dazu klicken Sie auf eine beliebige Position imJava Editor und wählen Source � Organize Imports aus dem Kontext-menü aus. Die fehlenden Importzeilen werden dann hinzugefügt, esdürften nun keine Fehler mehr im Quellcode der Bean-Klasse ange-zeigt werden. Zum Schluss passen Sie nur noch die Formatierung derneuen Zeilen an, indem Sie aus dem Kontextmenü des EditorsSource � Format wählen und den Editorinhalt über die entspre-chende Ikone aus der Toolbar speichern.

3.5.3 Business-Methoden zum Business Interface hinzufügen

Da die in der Bean-Klasse bereits definierten Business-Methodennicht automatisch auch zum zugehörigen Business Interface hinzu-gefügt werden, müssen Sie diesen Schritt noch manuell nachtragen.

1. Um einzelne Business-Methoden aus der Bean-Klasse an dasBusiness Interface zu propagieren, wählen Sie die Bean-Klasse imProject Explorer mit einem Doppelkick aus. Falls keine Outline-

1042.book Seite 152 Dienstag, 8. Januar 2008 10:41 10

Page 46: 1042.book Seite 3 Dienstag, 8. Januar 2008 10:41 10 · Inhalt 9 3.6.3 Beschreibungen im Deployment-Deskriptor web.xml ..... 159 3.7 Java EE-Gesamtanwendung definieren und deployen

153

Business-Logik definieren 3.5

Ansicht in der aktuellen Perspektive angezeigt wird, öffnen Siediese zuerst.

2. Wie in Abbildung 3.15 gezeigt, markieren Sie alle Business-Me-thoden innerhalb der Outline-Ansicht, öffnen Sie das Kontext-menü, und wählen Sie dann die Option EJB methods � Add toLocal Interfaces.

3. Listing 3.12 gibt den resultierenden Sourcecode des Business In-terface wieder.

import javax.ejb.Local;import java.util.List;import com.sap.demo.entity.Employee;

@Localpublic interface EmployeeServicesLocal {

public List<Employee> getAllEmployees ();public Employee getEmployeeById (long empId);public long createEmployee (String lastName, String

firstName, String department);}

Listing 3.12 Business-Methoden im Business Interface EmployeeServicesLocal

Abbildung 3.15 Propagieren der Business-Methoden an das Business Interface, ausgehend von der Outline-Ansicht

1042.book Seite 153 Dienstag, 8. Januar 2008 10:41 10

Page 47: 1042.book Seite 3 Dienstag, 8. Januar 2008 10:41 10 · Inhalt 9 3.6.3 Beschreibungen im Deployment-Deskriptor web.xml ..... 159 3.7 Java EE-Gesamtanwendung definieren und deployen

154

SAP NetWeaver Developer Studio: Schritt für Schritt zur Beispielanwendung3

3.6 JSP-basierte Webanwendung erstellen

Das Developer Studio sieht für die Verwaltung von Webressourcen,wie JavaServer Pages, JavaServer Faces, Servlets, statischen HTML-Seiten, Custom-Tag-Librarys sowie Bild- und Grafikdateien, eine spe-zielle Projektstruktur vor. Um den initialen Projektrahmen bereitzu-stellen, werden Sie zu Beginn ein entsprechendes Projekt, das heißt,ein Web-Modul-Projekt, anlegen.

Um auch die Webanwendung so einfach wie möglich zu halten,fügen Sie als einzige Ressource eine JSP zum Projekt hinzu und imp-lementieren mit ihr die Benutzeroberfläche des Webclients. Dabeisollen neben der reinen Präsentationsaufbereitung auch die Zugriffeauf die Business-Methoden der Session Bean EmployeeServices imp-lementiert werden. Exemplarisch nehmen Sie einige Informationenzur Konfiguration der Webanwendung im zugehörigen Deployment-Deskriptor auf.

3.6.1 Web-Modul-Projekt anlegen

Container fürWebressourcen

Um ein Web-Modul-Projekt anzulegen, führen Sie die folgendenSchritte durch:

1. Starten Sie erneut den New Project Wizard über den MenüpunktFile � New Project.

2. Im angezeigten Wizard-Fenster wählen Sie die Kategorie Web �

Web 2.5 und anschließend Dynamic Web Project 2.5 aus.

3. Mit Next gelangen Sie zum nächsten Wizard-Fenster und tragendort »EmployeeWeb« als Projektnamen ein. Ansonsten überneh-men Sie die vorgegebenen Einstellungen und beschließen dieseProzedur mit Finish.

4. Das Projektgerüst können Sie sich am besten im Project Exploreranschauen. Da Sie in einer JSP auch auf die Ressourcen aus demEJB-Modul-Projekt zugreifen wollen, müssen Sie diese Projekt-abhängigkeit zusätzlich berücksichtigen. Dazu klicken Sie auf denProjektnamen EmployeeWeb und wählen den Menüpunkt Pro-perties aus dem Kontextmenü aus.

5. Entsprechend den Angaben in Abbildung 3.16 selektieren Sie dieEigenschaft Java Build Path, klicken das Register Projects an undordnen das gewünschte Projekt zu.

1042.book Seite 154 Dienstag, 8. Januar 2008 10:41 10

Page 48: 1042.book Seite 3 Dienstag, 8. Januar 2008 10:41 10 · Inhalt 9 3.6.3 Beschreibungen im Deployment-Deskriptor web.xml ..... 159 3.7 Java EE-Gesamtanwendung definieren und deployen

155

JSP-basierte Webanwendung erstellen 3.6

3.6.2 Benutzeroberfläche mit JSP implementieren

Nun können Sie mit der Implementierung der Benutzeroberfläche imJSP Editor beginnen.

1. Um dem neuen Projekt eine JSP hinzuzufügen, klicken Sie denEintrag WebContent im Project Explorer an und wählen denMenüpunkt New � JSP....

2. Ein Wizard, in dem Sie den Namen »index.jsp« eintragen, er-scheint.

3. Weitere Angaben werden nicht verlangt, und Sie schließen denVorgang mit Finish ab.

Generell lassen sich im Quellcode der JSP zwei Anteile unterschei-den:

� ein HTML-Grundgerüst, das im Wesentlichen ein statisches Einga-beformular der Webanwendung definiert

� ein dynamischer, Java-basierter Anteil, mit dem die Zugriffe aufdie Business-Logik realisiert werden

HTML-Grundgerüst

Das Formular für die Registrierung neuer Employees könnte kaumeinfacher sein. Es enthält neben den beiden Eingabefeldern für die

Abbildung 3.16 Java Build Path zum Projekt EmployeeWeb zuordnen

1042.book Seite 155 Dienstag, 8. Januar 2008 10:41 10

Page 49: 1042.book Seite 3 Dienstag, 8. Januar 2008 10:41 10 · Inhalt 9 3.6.3 Beschreibungen im Deployment-Deskriptor web.xml ..... 159 3.7 Java EE-Gesamtanwendung definieren und deployen

156

SAP NetWeaver Developer Studio: Schritt für Schritt zur Beispielanwendung3

Namen eine Auswahlliste mit den zugehörigen Abteilungen und eineDrucktaste, mit der der Benutzer eine Registrierungsaktion auslösenkann. All diese Oberflächenelemente sind innerhalb einer HTML-Tabelle angeordnet. Das vollständige Grundgerüst können Sie Listing3.13 entnehmen.

<%@ page language="java" [...] %><!DOCTYPE html PUBLIC [...] ><html>[...]<!-- Import statements -->

<!-- Reference to Session Bean --><body style= "font-family:Arial;" bgcolor="D2D8E1"><h2>Register New Employee</h2><form method="GET"><table border=0 align=center><tr><td width="150" >First name: <td><input type="text" name="firstname" value = "" size="20"><tr><td width="150" >Last name: <td><input type="text" name="lastname" value = "" size="20"><tr><td width="150" >Department: <td>

<select name="department" ><option value="DEVELOPMENT">Development</option><option value="TRAINING"> Training</option><option value="MANAGEMENT"> Management</option><option value="ARCHITECTURE"> Architecture</option>

</select><tr><td><td><br><input type="submit" value="Create" name="create"></table><br></form><!— Invoke business method --></body></html>

Listing 3.13 HTML-Grundgerüst für die JSP

1042.book Seite 156 Dienstag, 8. Januar 2008 10:41 10

Page 50: 1042.book Seite 3 Dienstag, 8. Januar 2008 10:41 10 · Inhalt 9 3.6.3 Beschreibungen im Deployment-Deskriptor web.xml ..... 159 3.7 Java EE-Gesamtanwendung definieren und deployen

157

JSP-basierte Webanwendung erstellen 3.6

Zugriffe auf die Session Bean

Entsprechend Listing 3.14 ergänzen Sie erst einmal den JSP-Quell-code mit einigen Page-Direktiven, deren Importattribute das benö-tigte Package für JNDI Lookup sowie das Business Interface enthalten.

Um die Referenz auf die Session Bean zu erhalten, wird ein JNDILookup auf der Kontextvariablen context ausgeführt. Beachten Siedabei, dass Sie mit EmployeeRegister in Listing 3.14 einen symbo-lischen Namen für die Session Bean verwenden. Dieser Name mussals Referenzname im Deployment-Deskriptor der Webanwendungnoch spezifiziert werden. Das Resultat des Lookups wird nach erfolg-tem Casting auf das Business Interface dem lokalen Employee-ObjektemployeeService zugewiesen.

<%<!-- Import statements --><%@ page import="javax.naming.*" %><%@ page import=

"com.sap.demo.session.EmployeeServicesLocal" %>

<!-- Reference to Session Bean --><%!private EmployeeServicesLocal employeeService;private void lookup() {

try {InitialContext context = new InitialContext();employeeService = (EmployeeServicesLocal)context.lookup("java:comp/env/EmployeeRegister");

} catch (Exception ex) {System.out.println("Couldn't find bean"+

ex.getMessage());}

}

public void jspDestroy() {employeeService = null;

}%>

Listing 3.14 Dynamischer Anteil der JSP – Zugriff auf die Session Bean

Aufruf der Business-Methode

Im Folgenden sollen nicht alle Business-Methoden innerhalb diesereinfachen Webanwendung aufgerufen, sondern es soll nur exempla-

1042.book Seite 157 Dienstag, 8. Januar 2008 10:41 10

Page 51: 1042.book Seite 3 Dienstag, 8. Januar 2008 10:41 10 · Inhalt 9 3.6.3 Beschreibungen im Deployment-Deskriptor web.xml ..... 159 3.7 Java EE-Gesamtanwendung definieren und deployen

158

SAP NetWeaver Developer Studio: Schritt für Schritt zur Beispielanwendung3

risch gezeigt werden, wie, ausgehend von einer JSP, die Business-Methode createEmployee() aufgerufen werden kann, um einenneuen Datensatz auf der Datenbank anzulegen. Auch dies ist einebewusste Vereinfachung, denn normalerweise besteht eine JSP-ba-sierte Webanwendung aus einer Kombination von JSPs und Servletsund eventuell weiteren JavaBeans als Hilfsklassen, um eine klareTrennung zwischen der reinen Präsentations- und der Controller-Schicht zu erreichen. Während JSPs für die Präsentationsaufberei-tung und somit als View-Komponente vorgezogen werden, agierenServlets oder JavaBeans meist als Controller und bilden die Anwen-dungslogik ab.

Um sich allerdings ein wenig Tipparbeit zu sparen, ist der Aufruf derMethode createEmployee() direkt in die JSP-Source eingebettet,ließe sich jedoch mühelos auf ein Servlet oder eine JavaBean in derRolle eines Controllers übertragen. Wie Sie Listing 3.15 entnehmenkönnen, geht dem eigentlichen Aufruf der Session-Bean-Methode einJNDI Lookup voraus, der zuvor in einer separaten Methode lookup()gekapselt wurde. Daher ruft das lokale Session-Bean-ObjektemployeeService die Business-Methode createEmployee() auf. AlsParameter werden dabei die lokalen Variablen lName, fName undeDepartment übergeben. Sie wurden in den ersten Zeilen des Quell-code-Auszugs definiert und nehmen die aktuell vom Benutzer ein-gegebenen Werte auf. Immer dann, wenn die Business-Methode er-folgreich im EJB-Container ausgeführt wird, liefert sie eine gültigeEmployeeID zurück. Anderenfalls wird eine Exception geworfen,und ein entsprechender Text wird auf der Benutzeroberfläche aus-gegeben.

<%lookup();if(this.employeeService == null) {throw new IllegalStateException("Bean not available!");

}

String fName = request.getParameter("firstname");String lName = request.getParameter("lastname");

String eDepartment = request.getParameter("department");if(lName == null || fName == null|| lName.length() == 0 || fName.length() == 0) return;

long empID = employeeService.createEmployee(lName, fName,

1042.book Seite 158 Dienstag, 8. Januar 2008 10:41 10

Page 52: 1042.book Seite 3 Dienstag, 8. Januar 2008 10:41 10 · Inhalt 9 3.6.3 Beschreibungen im Deployment-Deskriptor web.xml ..... 159 3.7 Java EE-Gesamtanwendung definieren und deployen

159

JSP-basierte Webanwendung erstellen 3.6

eDepartment);if(empID == 0)

out.println("<H3> Failed! </H3>");elseout.println("<H3> Success! </H3>");

%>

Listing 3.15 Dynamischer Anteil der JSP – Aufruf der Business-Methode

3.6.3 Beschreibungen im Deployment-Deskriptor web.xml

Die Informationen zur Konfiguration der Webanwendung nehmenSie im Deployment-Deskriptor web.xml auf. Die dort enthaltenenEinträge werden zum Deployment-Zeitpunkt vom Webcontainerausgewertet. Zum einen erhält der Webcontainer auf diesem Wegalle Informationen darüber, wie die einzelnen Ressourcen des Pro-jektes zueinander passen. Zum anderen ist die Zuordnung von Secu-rity-Rollen, über die sich die Zugriffsberechtigung für die Weban-wendung als Ganzes zur Laufzeit steuern lässt, in web.xml enthalten.

Hier werden jedoch nur einige Mapping-Informationen im Deskrip-tor hinterlegt. Im folgenden Schritt werden Sie exemplarisch eine Re-ferenz auf die benötigte Session Bean mittels eines symbolischen Na-mens definieren, aber auf weitere Angaben zur Konfiguration derWebanwendung verzichten.

Symbolischer Name für die Session Bean

Referenz auf die Session Bean

Für den Zugriff auf die Session Bean wurde im JSP-Quellcode (sieheListing 3.14) nicht der echte Bean-Name, sondern ein symbolischerName verwendet. Damit der Webcontainer einen solchen Namenauch zur Laufzeit korrekt zuordnen kann, muss eine entsprechendeAbbildungsvorschrift im Deployment-Deskriptor hinterlegt werden.

1. Um einen symbolischen Namen für eine Referenz auf die SessionBean zu definieren, öffnen Sie den Deployment-Deskriptor web.xml. Dort klicken Sie auf das Register Design und fügen einen wei-teren Tag für die EJB-Referenz hinzu.

2. Analog zu den Angaben in Abbildung 3.17 setzen Sie den EJB-Namen »EmployeeRegister«, sodass er mit dem Eintrag im JNDILookup im JSP-Quellcode aus Listing 3.14 übereinstimmt.

1042.book Seite 159 Dienstag, 8. Januar 2008 10:41 10

Page 53: 1042.book Seite 3 Dienstag, 8. Januar 2008 10:41 10 · Inhalt 9 3.6.3 Beschreibungen im Deployment-Deskriptor web.xml ..... 159 3.7 Java EE-Gesamtanwendung definieren und deployen

160

SAP NetWeaver Developer Studio: Schritt für Schritt zur Beispielanwendung3

3. Die neuen Einträge werden automatisch zur XML-Source an pas-sender Stelle hinzugefügt. Sie können sich davon überzeugen,indem Sie auf das Register Source klicken und dann in der an-gezeigten XML-Source zum Element <ejb-local-ref> navigieren(siehe Listing 3.16).

<?xml version="1.0" encoding="UTF-8"?><web-app id="WebApp_ID" version="2.5" [...]"><display-name> EmployeeWeb</display-name><welcome-file-list>

[...]</welcome-file-list><ejb-local-ref><ejb-ref-name>EmployeeRegister</ejb-ref-name><ejb-ref-type>Session</ejb-ref-type><local>com.sap.demo.session.EmployeeServicesLocal

</local></ejb-local-ref>

</web-app>

Listing 3.16 Generierte XML-Source für die Referenz auf die Session Bean

4. Mit diesem Eintrag haben Sie nun eine Abbildung zwischen einemfrei wählbaren Referenznamen (symbolischen Namen) und demechten Bean-Namen definiert. Damit kann der einmal im Quelltextder JSP vergebene Referenzname für die Session Bean verwendetwerden und bleibt dort unverändert, selbst wenn sich der Bean-Name ändern sollte.

Abbildung 3.17 Setzen der EJB-Referenz auf die Session Bean in web.xml

1042.book Seite 160 Dienstag, 8. Januar 2008 10:41 10

Page 54: 1042.book Seite 3 Dienstag, 8. Januar 2008 10:41 10 · Inhalt 9 3.6.3 Beschreibungen im Deployment-Deskriptor web.xml ..... 159 3.7 Java EE-Gesamtanwendung definieren und deployen

161

Java EE-Gesamtanwendung definieren und deployen 3.7

3.7 Java EE-Gesamtanwendung definieren und deployen

Während mit dem EJB-Modul die Business-Funktionalität bereit-gestellt wird, sind mit dem Web-Modul auch die passenden Web-komponenten hinzugekommen. An dieser Stelle müssen nur alleKomponenten zu einer Java EE-Gesamtanwendung zusammengestelltwerden. Das Developer Studio bietet dazu eine spezielle Projektart,nämlich ein Enterprise-Application-Projekt, an.

Um die Employee-Gesamtanwendung zu erstellen, legen Sie zu-nächst ein Enterprise-Application-Projekt namens »EmployeeEar«an. Hier richten Sie noch eine Konfigurationsdatei für den Data-Source-Alias ein, bevor Sie das entsprechende EAR für die Gesamtan-wendung generieren und dieses schließlich auf den Application Ser-ver Java deployen.

3.7.1 Enterprise-Application-Projekt erstellen

Um das Projekt anzulegen, gehen Sie folgendermaßen vor:

1. Starten Sie erneut den New Project Wizard über den MenüpunktFile � New Project.

2. Im angezeigten Wizard-Fenster wählen Sie die Kategorie J2EE �

Java EE und anschließend Enterprise Application Project 5 aus.

3. Mit Next gelangen Sie zum anschließenden Wizard-Fenster undtragen dort »EmployeeEar« als Projektnamen ein. Im Übrigenübernehmen Sie die vorgegebenen Einstellungen und wechselnmit Next zum folgenden Wizard-Fenster.

4. Entsprechend den Angaben in Abbildung 3.18 ordnen Sie das EJB-Modul EmployeeEjb.jar und das Web-Modul EmployeeWeb.wardem EAR-Projekt zu, bevor Sie diese Prozedur mit Finish beenden.

Abbildung 3.18 Hinzufügen der Module Ejb und Web zum EAR-Projekt

1042.book Seite 161 Dienstag, 8. Januar 2008 10:41 10

Page 55: 1042.book Seite 3 Dienstag, 8. Januar 2008 10:41 10 · Inhalt 9 3.6.3 Beschreibungen im Deployment-Deskriptor web.xml ..... 159 3.7 Java EE-Gesamtanwendung definieren und deployen

162

SAP NetWeaver Developer Studio: Schritt für Schritt zur Beispielanwendung3

3.7.2 Data-Source-Alias anlegen

Wie Sie sich sicherlich erinnern, haben Sie im Deployment-Deskrip-tor persistence.xml einen Namen für den Data-Source-Alias eingetra-gen. Ein solcher Data-Source-Alias wurde allerdings bisher an keinerStelle angelegt. Dies holen Sie jetzt nach. Bevor Sie jedoch weitereSchritte unternehmen, soll in einem kurzen Exkurs die Bedeutungdes Data-Source-Alias verdeutlicht werden.

Data-Source-Aliasals Bindeglied zwi-schen Anwendung

und Datenbank

Da eine entsprechende Konfigurationsdatei für den Data-Source-Alias noch nicht im vorliegenden Projekt enthalten ist, erstellen Siediese, vom passenden XML-Schema ausgehend, zuerst.

1. Wählen Sie im Project Explorer das Projekt aus, und navigierenSie zum Folder META-INF.

2. Aus dem Kontextmenü dieses Folders selektieren Sie denMenüpfad New � Other � XML � XML und drücken dann auf die

Exkurs: Datenbankzugriffe und Data-Source-Alias

Der Data-Source-Alias wird benötigt, um die Kommunikation zur Daten-bank für Tabellenzugriffe aus der Anwendung heraus zu ermöglichen. Beieinen Data-Source-Alias handelt es sich um einen logischen Namen für dieserverseitige Adressierung einer Datenbankressource (in diesem Fall derTabelle). Der Connection-Pool auf dem Applikationsserver verfügt überdie Kenntnis des Pfades zur Datenbanktabelle, das heißt, die eigentlicheData-Source, die auf dem Server bereits vorhanden sein muss.

Eine besondere Rolle spielt dabei die Default-Data-Source (auch System-Data-Source bezeichnet), die automatisch bei der Installation des AS Javaangelegt und nicht mit einer spezifischen Anwendung assoziiert wird. DieDefault-Data-Source ist als Default-Connection-Pool für die Verwendungdurch mehrere Anwendungen vorgesehen.

Wenn Sie nun im Enterprise-Application-Projekt den Data-Source-Aliasanlegen, dann werden Sie ihn mit der Default-Data-Source assoziieren.Die Verwendung eines Alias hat hier gleich mehrere Vorteile:

� Der Entwickler muss nicht den physischen Pfadnamen für die Daten-bankressource angeben. Nur das Datenbanksystem benötigt die Infor-mationen zur Verwaltung der eigenen Ressourcen.

� Darüber hinaus wird der Alias im Developer Studio vergeben undeinem spezifischen Projekt zugeordnet. Damit entfällt für den Entwick-ler die sonst erforderliche administrative Aufgabe, die er in einemseparaten Administrationstool vornehmen müsste.

� Nicht zuletzt ermöglicht die Verwendung eines Data-Source-Alias, diegesamte Anwendung portabel zu halten.

1042.book Seite 162 Dienstag, 8. Januar 2008 10:41 10

Page 56: 1042.book Seite 3 Dienstag, 8. Januar 2008 10:41 10 · Inhalt 9 3.6.3 Beschreibungen im Deployment-Deskriptor web.xml ..... 159 3.7 Java EE-Gesamtanwendung definieren und deployen

163

Java EE-Gesamtanwendung definieren und deployen 3.7

Taste Next. Auf der angezeigten Wizard-Seite wählen Sie die Op-tion Create XML file from an XML schema file und drücken dannwieder die Taste Next.

3. Auf der folgenden Wizard-Seite geben Sie data-source-aliases.xmlals Dateinamen ein und wählen erneut Next.

4. Wie in Abbildung 3.19 wiedergegeben, entscheiden Sie sich fürdie Option Select XML Catalog entry und suchen dann data-source-aliases.xsd aus dem angezeigten XML-Katalog aus.

5. Auf der darauffolgenden Wizard-Seite treffen Sie die Auswahldata-source-aliases für das Root element und bestätigen dies mitFinish. Mit diesem Schritt wird die XML-Datei namens data-source-aliases.xml angelegt, die nun auch in der Projektstruktursichtbar ist.

6. Öffnen Sie nun den XML-Editor, und tragen Sie die System-Data-Source »${com.sap.datasource.default}« und den Namen »TMP_EMPLOYEES_DATA« für den Alias ein.

Der Aliasname wird beim Deployment der System-Data-Source zu-geordnet. Das können Sie leicht nachvollziehen, indem Sie sich diegenerierte XML-Source anschauen. Sie entspricht den Zeilen in Lis-ting 3.17.

<?xml version="1.0" encoding="UTF-8"?><data-source-aliases [...]><aliases><data-source-name>${com.sap.datasource.default}

</data-source-name>

Abbildung 3.19 Hinzufügen eines Data-Source-Alias zum EAR-Projekt

1042.book Seite 163 Dienstag, 8. Januar 2008 10:41 10

Page 57: 1042.book Seite 3 Dienstag, 8. Januar 2008 10:41 10 · Inhalt 9 3.6.3 Beschreibungen im Deployment-Deskriptor web.xml ..... 159 3.7 Java EE-Gesamtanwendung definieren und deployen

164

SAP NetWeaver Developer Studio: Schritt für Schritt zur Beispielanwendung3

<alias>TMP_EMPLOYEES_DATA</alias></aliases>

</data-source-aliases>

Listing 3.17 com.sap.datasource.default als Repräsentant für die System-Data-Source auf dem AS Java

3.7.3 Deployment der Employee-Anwendung

Vorbereitungen fürdas Deployment

Vor dem Beginn des Deployments der Anwendung, sollten Sie sichvergewissern, dass der Serverprozess gestartet wurde und die Daten-bank online ist. Voraussetzung hierfür ist jedoch, dass der AS Java imDeveloper Studio registriert wurde.

Wie in Abbildung 3.20 zu sehen ist, werden auf der Preferences-Seitezwei verschiedene Optionen angeboten.

Je nachdem, ob der zugeordnete AS Java auf dem lokalen Host oderunter einer beliebigen Adresse im LAN installiert wurde, ist zwischender Option für die remote Installation und für die lokale Installationzu unterscheiden. Die benötigten Einträge entnehmen Sie der System-information, die Sie auf der Server-Welcome-Seite finden.

Dictionary-Tabellendefinitionen deployen

Um die Tabellendefinitionen aus dem aktuellen Dictionary-Projektauch auf eine Datenbankinstanz übertragen zu können, ist eine

Abbildung 3.20 Registrieren des Applikationsservers Java unter Preferences

1042.book Seite 164 Dienstag, 8. Januar 2008 10:41 10

Page 58: 1042.book Seite 3 Dienstag, 8. Januar 2008 10:41 10 · Inhalt 9 3.6.3 Beschreibungen im Deployment-Deskriptor web.xml ..... 159 3.7 Java EE-Gesamtanwendung definieren und deployen

165

Java EE-Gesamtanwendung definieren und deployen 3.7

Archivdatei erforderlich. Ein solches Dictionary-Archiv stellt einetransportfähige Einheit des Dictionary-Projektes dar und fasst alleDictionary-Definitionen des Projektes aus den generierten Metada-ten zusammen. Erst wenn das erstellte Archiv auf den Applikations-server deployt ist, wird auf der zugeordneten Datenbank mit CREATETABLE auch die physische Repräsentation der entsprechenden Tabel-len auf der Datenbankinstanz generiert.

1. Um das Archiv anzulegen, wählen Sie im Dictionary Explorer denProjektknoten, öffnen das Kontextmenü und suchen die OptionCreate Archive aus.

2. Anschließend wählen Sie Deploy aus dem Kontextmenü des Pro-jektknotens (siehe Abbildung 3.21).

3. Über die Deploy View Console (siehe Abbildung 3.22) erhalten Sieunmittelbar eine Rückmeldung darüber, ob der Deploy-Vorgangerfolgreich verlaufen ist oder nicht. Aus dieser Ansicht herauskann auch die zugehörige Log-Datei direkt eingesehen werden.

Abbildung 3.21 Deployen der Tabelle aus dem Dictionary-Projekt

Abbildung 3.22 Ausgabe im Deploy Output View nach erfolgreichem Deployment

1042.book Seite 165 Dienstag, 8. Januar 2008 10:41 10

Page 59: 1042.book Seite 3 Dienstag, 8. Januar 2008 10:41 10 · Inhalt 9 3.6.3 Beschreibungen im Deployment-Deskriptor web.xml ..... 159 3.7 Java EE-Gesamtanwendung definieren und deployen

166

SAP NetWeaver Developer Studio: Schritt für Schritt zur Beispielanwendung3

SQL Studio 4. Falls Sie die MaxDB als Datenbanksystem einsetzen und das SQLStudio installiert haben, können Sie sich nun leicht davon über-zeugen, dass die beiden Tabellen auf der Datenbankinstanz kor-rekt angelegt wurden. Dazu brauchen Sie sich nur über das SQLStudio am Datenbankserver anzumelden und in der Liste aller aufdem aktuellen Server deployten Tabellen nach TMP_EMPLOYEES undTMP_ID_GEN zu suchen. Vorausgesetzt, Sie verfügen über SQL-Kenntnisse, können Sie auch einige Datensätze für die neue Emp-loyee-Tabelle im SQL Studio anlegen.

Enterprise Application Archive erstellen und deployen

Das Enterprise Application Archive (EAR) fasst die Archive JAR undWAR mit den Informationen aus den zugehörigen Deployment-Des-kriptoren zu einem Archiv zusammen. Das EAR enthält also nebenden Business-Logik-Komponenten auch die Präsentationskomponen-ten und kann aus dem Developer Studio heraus einfach mithilfe desServers Views in einem Schritt erstellt und deployt werden.

1. Öffnen Sie dazu den Servers View. Hier sollte bereits der EintragSAP Server angezeigt werden.

2. Aus dem Kontextmenü wählen Sie die Option Add and RemoveProjects. Entsprechend Abbildung 3.23 selektieren Sie dann dasEAR-Projekt und bestätigen dies mit Finish. Damit werden ineinem einzigen Schritt die deploybaren Projekte zum Servers Viewhinzugefügt, die entsprechenden Archive WAR, JAR und EARgeneriert (und zur Projektansicht im Project Explorer hinzugefügt)und unmittelbar auch das Deployment angestoßen.

Abbildung 3.23 EAR-Deployment mithilfe des Servers Views

1042.book Seite 166 Dienstag, 8. Januar 2008 10:41 10

Page 60: 1042.book Seite 3 Dienstag, 8. Januar 2008 10:41 10 · Inhalt 9 3.6.3 Beschreibungen im Deployment-Deskriptor web.xml ..... 159 3.7 Java EE-Gesamtanwendung definieren und deployen

167

Java EE-Gesamtanwendung definieren und deployen 3.7

3. Ein erfolgreich abgeschlossener Deploy-Vorgang wird mit derNachricht »Deploy finished successfully« übermittelt.

3.7.4 Employee-Anwendung starten

Unter der Voraussetzung, dass der Server mit localhost bezeichnetwird und unter dem Port 50100 zu erreichen ist, können Sie die Em-ployee-Anwendung mit der URL http://localhost:50100/EmployeeWeb/index.jsp starten (siehe Abbildung 3.24).

Abbildung 3.24 Starten der Employee-Anwendung im Browser

1042.book Seite 167 Dienstag, 8. Januar 2008 10:41 10

Page 61: 1042.book Seite 3 Dienstag, 8. Januar 2008 10:41 10 · Inhalt 9 3.6.3 Beschreibungen im Deployment-Deskriptor web.xml ..... 159 3.7 Java EE-Gesamtanwendung definieren und deployen

707

Index

@Column 136@Entity 135@GeneratedValue 138, 194@Id 192@JoinColumn 198@JoinTable 198@ManyToMany 199@NamedQuery 140, 205@OneToMany 198@OneToOne 201@PersistenceContext 203@Table 136@TableGenerator 139, 194@Temporal 192@Version 136, 1951:1-Beziehung 2001:n-Beziehung 197

A

ABAP 30ABAP Dictionary 31Access Control Entity (ACE) 510Access Control List (ACL) 487, 510, 566

Klassendiagramm 510Action Editor 375Action-Bindung 254Activation View 87Activity 503

anlegen 653Eigenschaft 654offene und geschlossene 503

Adaptive RFC Model 102, 236Adaptive Webservice Model 236, 268

Import 278Klasse 283logische Destination 281Objekt 283

Administration 692Administrationsperspektive 103Administrationswerkzeug 694Administrator-Plug-in

DTR 581Aggregation 209Alias 175, 212

ÄnderungsspeicherungActivity 652

Annotation 136, 140Anwendung

Aufruf in Browser 666Deployment 665

Application Context 591Application Service 97Assembly 613Auslieferung 614

B

B2B 37Integration 37

Backward Mapping 181Barrierefreiheit 256Bean-Klasse

implementieren 146Beispielanwendung

Struktur 632Beispiel-Entwicklungslandschaft 561Benutzerverwaltung 632Berechtigung 567

Administrator 568CMS User 568Projektleiter 567

BerechtigungsvererbungDTR 510

BSP 30Build

ANT-basierter Prozess 491CBS-Prozess 516Prozess 76, 494, 515Skript 515Variante 519

Build-AuslösungActivation 667

Buildspace 514, 598Build-Time-Dependency

Verwendungsbeziehung 486Business Information Warehouse 50Business Interface 121, 146Business Process Engine 42Business Process Management 40

1042.book Seite 707 Dienstag, 8. Januar 2008 10:41 10

Page 62: 1042.book Seite 3 Dienstag, 8. Januar 2008 10:41 10 · Inhalt 9 3.6.3 Beschreibungen im Deployment-Deskriptor web.xml ..... 159 3.7 Java EE-Gesamtanwendung definieren und deployen

708

Index

Business Server Pages � BSPBusiness to Business � B2BBusiness-Logik 121, 144, 158

Realisierung 659Business-Methode 146, 152

aufrufen 158Business-Objekt 96, 227

C

CacheVerwaltung 680

CAF 405Build-Vorgang 420Deployment 421Dictionary-Projekt 407EJB-Projekt 407Entwicklungsprojekt 407Erstellung deploybarer Archive 420Generierung einer Composite Application

420Geschäftsobjekt anlegen 407Kompilierung 420Metadaten-Projekt 407Permissions-Projekt 407Projekt anlegen 406SAP NetWeaver Developer Studio 405Service Browser 423vordefinierter Datentyp 411

CBS 72, 473, 512, 556, 557, 558, 667Architektur 513Build-Prozess 515JEE-Version 5.0 635Parameter 585Server 558, 583

Central-Services-Instanz 674, 677Change and Transport System

Software Change Management 621Change Management Service � CMSCheck-in

Änderung 667Check-in-/Check-out-Mechanismus 500Check-in-Konflikt 507Client

Abstraktion 255, 257Unabhängigkeit 253

ClusterKonfiguration 80

Cluster-Architektur 674

Cluster-Kommunikation 680CMS 72, 521, 556, 557, 558, 639

Architektur 521Build-Option Composition Environment

643Check-in SCA-Version 644Content-Update 639Domain 585, 587Entwicklungsschritt 670User 568

Collaboration 48com.sap.jdk.home_path_key 644Common Model Interface 260Compartment

Buildspace 514Component

Browser 86, 649Modeler 101, 254, 267Property 87

Component Build Service � CBSComponent Controller Context 243Component Usage Lifecycle

createOnDemand 330manual 331

Component-Interface-View 265Composite Application 27, 361

Anforderung 392Anpassbarkeit 393Architektur 395Beispielszenario 403, 404Definition 394Eigenschaft 394Entwicklung 391Geschäftsobjekt 397Geschäftsobjektschicht 396Lebenszyklus 395modellgetriebene Entwicklung 395Philosophie und Nutzen 392Prozessmodellierungsschritt 401Prozessschicht 400Schichtenmodell 396Service-Schicht 396Test 457User-Interface-Schicht 399

Composite Application Explorer 407Composite Application Framework

Design Time 66, 96Composite View 367

1042.book Seite 708 Dienstag, 8. Januar 2008 10:41 10

Page 63: 1042.book Seite 3 Dienstag, 8. Januar 2008 10:41 10 · Inhalt 9 3.6.3 Beschreibungen im Deployment-Deskriptor web.xml ..... 159 3.7 Java EE-Gesamtanwendung definieren und deployen

709

Index

Config-Tool 683Aufruf 585

Configuration Wizardautomatische Konfiguration 556NWDI-Installation 534

Connector Framework 365Container 60Content Administrator 353Context Editor 101Context-Mapping 254Context-zu-Model-Bindung 254Controller 254

D

Dali 181Data Modeler 57, 101, 254Data polled by the Monitor 690Data pushed by the Resource 690Data Transfer Objects � DTODatabase Explorer 187Data-Source 143

Alias 162Daten

aktiv bereitstellen 690passiv bereitstellen 690

DatenbankobjektNamenskonvention 127

DatenbanktabelleDefinition 177relationale 135

Datenbindung 254Datenmodell 649

definieren 125Datenredundanz

Vermeidung 570DC-Projekt 489, 605Debugging 79

Ablauf 83Tool-Unterstützung 81

Debug-Knoten 80Debug-Modus 79Dependency

Software-Component 588, 638Typ 663Wizard 663

Deploy Controller 537Deploy Output View 165Deploy View Console 165

Deployment 164Ablauf 84Vorbereitung 659

Deployment Unit 227Deployment-Deskriptor 140

web.xml 159Deploy-Time-Dependency

Verwendungsbeziehung 486Design Board 368Design Time

Datenbankverbindung 187Design Time Repository � DTRdetached Entity 210Detailed Navigation Panel 344Developer Studio � SAP NetWeaver

Developer StudioDevelopment-Component 367, 479

anlegen 649Parameter 651Property 654Schachtelung 483Schnittstelle 484technische Grundlage 492Typ 488Verwendungsbeziehung 485

Development-Configuration 531, 634Export 550Import 603, 647lokale 546, 550

Development-Configuration-Perspektive 85

Development-Infrastructure-Perspektive 87

Development-Server 364Search & Browse 364VC Builder 364VC Server 364

Dictionary 176Archiv 658DC-Projekt 649lokales 102

Dictionary Explorer 89Dictionary-Archiv 165Dictionary-Perspektive 88, 91, 177Dictionary-Projekt 89, 125, 126, 649

allgemeine Angaben 126Domäne 522DTO 179

1042.book Seite 709 Dienstag, 8. Januar 2008 10:41 10

Page 64: 1042.book Seite 3 Dienstag, 8. Januar 2008 10:41 10 · Inhalt 9 3.6.3 Beschreibungen im Deployment-Deskriptor web.xml ..... 159 3.7 Java EE-Gesamtanwendung definieren und deployen

710

Index

DTR 71, 359, 473, 497, 508, 556, 557, 558Administrator-Plug-in 508, 579Architektur 498Aufgabe 497Berechtigungskonzept 510, 511Client 71, 509, 580DTR-Client 580DTR-Server 575Initialzugriffsrecht 578Kommandozeilen-Client 509Permissions-View 581Perspektive 105, 107, 496, 579Principal 582Quelldateienverwaltung und Versionie-

rung 558User Interface 508Vorrangregel 577Workspace 501Zugriffsrecht 582

Dynamic Expression Editor 368, 369

E

EAR 93, 123deployen 166

Eclipse 55Entwicklungsobjekt 59Plattform 63, 111Produkt 107SDK 62Workspace 59WTP 65

Editor 57Einstiegsnavigation 344EJB

DC-Projekt 659EJB 3.0 121Modul-DC anlegen 659Modul-Projekt 122, 132, 142, 155Projekt 92

EJB-QL 139Employee-Anwendung 119, 166, 167,

631Employee-Entity

definieren 133Eigenschaft 133

Employee-Tabelledefinieren 655

Enqueue Service 674, 678Enterprise Application

Projekt 92Enterprise Application Archive � EAREnterprise JavaBeans � EJBEnterprise Service 219, 361

konsumieren 231Enterprise Service Protocol 365Enterprise Services Repository 249Enterprise Services Workplace 231Enterprise SOA 26, 219Enterprise-Application-Projekt 161Enterprise-Services-Paradigma 221Entity 121, 133, 185

detached 210Manager 141, 147, 185, 202

Entwicklunglokale 74modellbasierte 357

Entwicklungsgeschwindigkeit 359Entwicklungsinfrastruktur

Anforderung 470, 471, 472Entwicklungsobjekt 60

Java 482zentral verfügbar machen 666

Entwicklungsobjekttyp 591Entwicklungsprozess 75

Beispiel 471Entwicklersicht 531JDI 532Rolle 633Team 74

Entwicklungsumgebung 124Existenzbedingung 213Extension-Point 64

F

Fast Channel Architecture 675Feature 108

Installation 112Version 111

Fehlerbehebung 697Szenario 700

Feinnavigation 344Feld

persistentes 136Findermethode 139, 140Folgeauftrag 608

1042.book Seite 710 Dienstag, 8. Januar 2008 10:41 10

Page 65: 1042.book Seite 3 Dienstag, 8. Januar 2008 10:41 10 · Inhalt 9 3.6.3 Beschreibungen im Deployment-Deskriptor web.xml ..... 159 3.7 Java EE-Gesamtanwendung definieren und deployen

711

Index

Forward Mapping 181Fremdschlüsselbeziehung 197, 200Fremdschlüsselspalte 200Fusion

Versionierung 535

G

Generic Modeling Language Document Object Model � GML+ DOM

Generic Modeling Language � GMLGeneric Portal Application Layer 345Geschäftsobjekt 397

Attribut 410CRUD-Methode 413Datentyp zuweisen 410Findermethode 413Implementierung 418Kardinalität von Attributen 410Lebenszyklus-Methode 408, 413Methodenbereitstellung von Webser-

vices 419Persistenz 416Persistenzattribut 416Relation zwischen Geschäftsobjekten

412remote Persistenz 416, 417Suchmethode 413, 414Test 421Zugriffsrecht 415

Global Version History 508GML 364GML+ 364GML+ DOM 364Guided Procedures

Administrator 455Aktion 436Block 439Blocktyp 440Callable Object 436, 442Callable-Object-Typ 443Context 400Contextual Navigation Panel 436Design Time 435Einbinden des Visual Composers 441Einbinden eines Webservice 446Entwicklungsobjekt 436Gallery 435Instanzierung 457, 458

Guided Procedures (Forts.)Laufzeitumgebung 459Modellierung von Prozessen 435Overseer 455Owner 455Parameterkonsolidierung 402, 448,

449, 453Parameterkonsolidierungsplan 451Parameter-Mapping 449Prozesseditor 436Prozessflussmodellierung 401, 439, 441Prozessrolle 401Rolle 401Rollenkonsolidierung 455Rollenzuordnung 454Runtime Work Center 458Screenflow 461Sequential Block 439Starten des Frameworks 435Übergabemöglichkeit von Parametern

457Umbenennung von Rollen 454WD4VC 443, 445WD4VC Application 443WD4VC-Callable-Object 444Webservice 446Webservice-Callable-Object 447Werkzeugleiste des Prozesseditors 437Workitem 458

H

Heap SizeJVM 563

Hypertext Markup Language (HTML) 363

I

ICM 674, 675IDE 56

Architektur 63ID-Generierung 138, 193idleStart

CBS-Zustand 562Ignored Resource 646Import

SCA-Datei 645Index 183

1042.book Seite 711 Dienstag, 8. Januar 2008 10:41 10

Page 66: 1042.book Seite 3 Dienstag, 8. Januar 2008 10:41 10 · Inhalt 9 3.6.3 Beschreibungen im Deployment-Deskriptor web.xml ..... 159 3.7 Java EE-Gesamtanwendung definieren und deployen

712

Index

InfoCube 51Information Integration 46initiale ACL 577Installation

Offline 115Online 115

Integrated Development Environment � IDE

IntegrationDTR-Workspace 506

Integration Directory 42Integrationskonflikt 106, 507Integrationsszenario 37Internet Communication Manager �

ICMIsolations-Level

Read Committed 195, 210Read Uncommitted 210

ISO-StandardSQL-92 169

iView 47, 345, 355anlegen 345Portal-iView 361

IWDComponentUsage-API 331

J

J2EE 56, 65, 94Engine-View 82, 85Gesamtanwendung 664Perspektive 92, 94, 132

JAR 92Java

Instanz 78Standardentwicklung 63

Java Archive � JARJava Database Connectivity � JDBCJava Development Infrastructure

konfigurieren 74Tool 71

Java Dictionary 89, 122, 176Java EE 56, 65, 94

Gesamtanwendung definieren 161Java Management Extension � JMXJava Persistence API � JPAJava Persistence Query Language � JPQLJava Virtual Machine � JVMJavaBean Model 236Java-Entwicklungsobjekt 497

Java-Entwicklungsprozess 474Java-Instanz 674, 675Java-Package-Explorer-View 496Java-Persistence-Perspektive 187JavaServer Pages � JSPJava-System-Report 691, 692JDBC 169, 563

Connection Pool Size 563Datentyp 176Native 171Treiber 174Vendor 171

JDK 1.5.0_xxCBS 635

JDK_1.5.0_Home-Parameter 644JMX 686

Agent 686Organisationsmodell 687

JNDI Lookup 157Join Operation 207Join Table 197JPA 122, 131, 169

Annotation 186Entity 185Spezifikation JSR 220 185

JPQL 204JSP 154, 155JSR 220 185JVM 562

K

Kategorisierung 225Klasse

serialisierbare 135Klassifizierungsservice 223Knowledge Management 48Kommandozeilenwerkzeug

komponentenbasierte Entwicklung 552komponentenbasierte Softwareentwick-

lungSzenario 624

Komponentenhierarchie 476Komponenteninstanz 328Komponenten-Interface 260

Definition 266externes 265lokales 265

1042.book Seite 712 Dienstag, 8. Januar 2008 10:41 10

Page 67: 1042.book Seite 3 Dienstag, 8. Januar 2008 10:41 10 · Inhalt 9 3.6.3 Beschreibungen im Deployment-Deskriptor web.xml ..... 159 3.7 Java EE-Gesamtanwendung definieren und deployen

713

Index

Komponentenmodell 67, 256, 476, 481, 512, 631

KomponentisierungArchitektur 260lose Kopplung 260

KonfigurationsassistentLaufzeitsystem 537

Konfigurationsdatenbank 177Konflikt

Versionskontrolle im DTR 506Konnektor 687Konsolidierungsphase 612Kopplung

lose 260

L

LANSzenario 79

Landscape Configurator 523, 524, 639Landscape Directory 646Layout Board 368Lebenszyklusstatus 227Lifecycle Management 359Local Area Network � LANLocking 218Log Viewer 699Log Viewer Work Center 699logische Destination

anlegen 466logisches System 522

M

m:n-Beziehung 199Mapped Superclass 192Mapping 40

Backward 181Forward 181objektrelational 195

Massenänderung 213Master Component Repository Data 572MaxDB 166MBean 686MBean-Server 686Merge 507

Versionszusammenführung 536Message Service 674, 678Messaging 39

Metadatenvon Tabellen 178

Model-Abstraktion 256Model-Import 278Model-Klasse

ausführbare 284Relation 284

Modellgemeinsame Sprache 358

modellbasierte Entwicklung 357Model-Objektgraf 287Model-View-Controller � MVCModifikation

ausgelieferte Software 618MOLAP 51Monitor 688, 689Monitor-Browser-Report 692Monitoring 686

Framework 688, 690Infrastruktur 689, 691Monitoring-Baum 688, 689Report 692

MontageSoftware 613

Multidimensional Online Analytical Processing � MOLAP

MVC 253, 255, 256, 261

N

Name Server 559, 574Named Query 149, 204Namensraumkonzept 559Namensraumpräfix

Name-Server-Eintrag 590Reservierung 589

Namensreservierungskonzept 575Native JDBC 171Navigation Modeler 101Navigator View 60Netzwerkantwortzeit

globale Entwicklungslandschaft 624New Class Wizard 133New Project Wizard 126, 161Nicht-ABAP-Transport

gemischte Systemlandschaft 621Nightly Build 76, 471NWDI 322, 359, 361, 469, 473, 555

Administration 587

1042.book Seite 713 Dienstag, 8. Januar 2008 10:41 10

Page 68: 1042.book Seite 3 Dienstag, 8. Januar 2008 10:41 10 · Inhalt 9 3.6.3 Beschreibungen im Deployment-Deskriptor web.xml ..... 159 3.7 Java EE-Gesamtanwendung definieren und deployen

714

Index

NWDI (Forts.)Einrichtung 556, 561Element 475Entwicklung 602NWDI.Administrators 633NWDI.Developers 633NWDI_CMSADM 586Perspektive 647

NWDI-InstallationVerwendungsart DI 556

O

OASIS 222Object Server 571objektrelationales Mapping 135, 195Offline Configuration Tool 696OLAP-Anwendung 50Online Transaction Processing (OLTP)

System 50Open Activity 87Open JDBC 169Open Source 61Open SQL 169

Datenquelle 210Organization for the Advancement of

Structured Information Standards � OASIS

P

Page Builder 351People Integration 46Persistence Context 202Persistence Unit 186persistence.xml 141, 187Persistenz

Deskriptor 140Persistenzinfrastruktur 170Persistenz-Unit 141, 142Personalisierung 345, 351Perspektive 56, 495

Development Configuration 648DTR 496komponentenbasierte Entwicklung 494SAP NetWeaver Developer Studio 85Web Dynpro 496

Plain Old Java Object � POJOPlug-in-Technologie 64

POJO 131Port 267Portal Content Catalog 350Portal Content Directory 345, 351Portal Content Studio 346Portal-iView 361Portalrolle 48Portalseite 344, 348, 350

anlegen 347Eigenschaft 346Layout 349

Präsentationsschicht 122Prerequisite Software Component 638Primärschlüssel 129, 137Problem Management 701Problembereich 697Produkt 477Programmiermodell 253, 256Project

Explorer 93Project Explorer 132Projektion 208Propagation-List 506Protokolladapter 687Protokollierung 697

Aufzeichnung 699Infrastruktur 697Konfiguration 698Meldung 699

Prozessintegration 39Prozesskomponente 227Public Part 323, 485, 656

Definition 323Development-Component hinzufügen

657Entity 658Entity hinzufügen 657Parameter 657

Q

Qualitätssicherung 613Quelldatei

Aktivierung 517Aktivierung, CBS und DTR 517

Query 150, 204Query-Abfrage 139

1042.book Seite 714 Dienstag, 8. Januar 2008 10:41 10

Page 69: 1042.book Seite 3 Dienstag, 8. Januar 2008 10:41 10 · Inhalt 9 3.6.3 Beschreibungen im Deployment-Deskriptor web.xml ..... 159 3.7 Java EE-Gesamtanwendung definieren und deployen

715

Index

R

Referenzapplikation 427Aufruf 463Import ins NWDS 464Installation und Einrichtung 463Installationsbeschreibung 465

Relational Online Analytical Processing � ROLAP

Remote Function Call � RFCRepository Browser 105, 106Resource Injection 147Ressourcen-MBean 690RFC 99Robustheit 679ROLAP 51Rolle 351Routing 40Run-Modus 79Runtime-Dependency

Verwendungsbeziehung 486Runtime-System 559, 594

S

SAP Developer Network � SDNSAP Java Virtual Machine 673, 678SAP Logging API 69SAP Management Console 82, 103, 677,

695Funktion 695

SAP Master Component Repository 571SAP NetWeaver 25

Komponentensicht 46SAP NetWeaver Administrator 246, 693

Configuration Wizard 556Schicht 693Work Center 694

SAP NetWeaver Application ServerCluster-Architektur 77Java 68

SAP NetWeaver Business Client 362SAP NetWeaver Business Intelligence 49SAP NetWeaver Composition Environ-

ment 114Monitoring-Framework 688

SAP NetWeaver Developer Studio 55, 119, 532Architektur 62, 63

SAP NetWeaver Developer Studio (Forts.)Benutzeroberfläche 56Entwicklungsprozess 630Installationsszenario 114Konfiguration 646Oberfläche 56Perspektive 56, 85Plattform 109Serverintegration 77, 81Start 646starten 123Tool und Perspektive 85Überwachung zentraler Builds 667Update 110, 116View 58Windows-Preferences 125

SAP NetWeaver Development Infrastruc-ture � NWDI

SAP NetWeaver Master Data Manage-ment 51

SAP NetWeaver Portal 343, 345, 350, 362Einstiegsnavigation 344Feinnavigation 344Portalseite 344Rolle 343Rolle anlegen 351

SAP NetWeaver Portal Client 362SAP NetWeaver Process Integration 41SAP NetWeaver Scheduler for Java 68SAP NetWeaver Visual Composer 426

Abhängigkeit 359Aktion 370Anlegen eines Endpunktes 430Architektur 362Basic Control 368Bildschirm-Layout 429Button 373Compiler 364Composite View 426Connector 367Custom Action 370Data Store Connector 375Datendefinition für einen Endpunkt 431Deployment 432Endpunkt 430, 434Ereignis 431, 434Form View 367, 429

1042.book Seite 715 Dienstag, 8. Januar 2008 10:41 10

Page 70: 1042.book Seite 3 Dienstag, 8. Januar 2008 10:41 10 · Inhalt 9 3.6.3 Beschreibungen im Deployment-Deskriptor web.xml ..... 159 3.7 Java EE-Gesamtanwendung definieren und deployen

716

Index

SAP NetWeaver Visual Composer (Forts.)Freestyle Kit 363, 364Hinzufügen von User-Interface-Elemen-

ten 428Hyperlink 370Input Field 371Integration mit Guided Procedures 430Kompatibilität 359Konsumierung von Webservices 427Layout Freestyle Kit 363Layout-Board 429Mapping 432Modellierung des Datenflusses 430Navigate Connector 370Paketierung 359Plain Text 368Popup Connector 387SAP NetWeaver 7.0 360Sichtbarkeitsbedingung 376Start 426Start Point Connector 385Startpunkt 432, 433Storyboard 363System Action 379Table View 373, 428Tabstrip Container 372Toolbar 373Transition 379UserData Connector 367Versionierung 359View 367Voraussetzung 361

SAP Service Marketplace 589SCA-Download 633

SAP-BasisArchitektur 30Werkzeug 31

SAP-Komponentenmodell 73SAP-Security 68SCA 613SCA-Datei

Import 600Scalable Vector Graphics � SVGSDN 109Second Level Navigation 343Secure Socket Layer

HTTP 560Sekundärindex

Tabelle 129

Server Development Infrastructure Client 365

Serverprozess 78Knoten 83

Servers View 85, 94, 166Service

externer 97NWDI 629

Service Browser 423, 424Service-Consumer 222Service-Definition

suchen 228Service-Interface 227Service-Operation 227Service-Provider 222Services Registry 222

Strukturierung von Services 225Session Bean 121, 144

anlegen 144Business-Methode 148stateless 144symbolischer Name 159

Sicherheit 68Single-Server-Konfiguration 79Sitzungsverwaltung 681SLD 41, 556, 557, 558, 559, 570

Data Supplier 573Initialdatenimport 571Produktdefinition 587Serverparameter 571Software Catalog 588

SLD-Update 635SOAP 221Software Catalog

SLD 636Software Change Management 555Software Component Archive � SCASoftware Landscape Directory 73Software-Component 476, 637

benötigte 638finaler Test 671Freigabe 671

Softwareentwicklungkomponentenbasierte 542Szenario 542

Software-Komponentenversion 228Softwarelogistik 473, 523Software-Unit 637SQL Query 217

1042.book Seite 716 Dienstag, 8. Januar 2008 10:41 10

Page 71: 1042.book Seite 3 Dienstag, 8. Januar 2008 10:41 10 · Inhalt 9 3.6.3 Beschreibungen im Deployment-Deskriptor web.xml ..... 159 3.7 Java EE-Gesamtanwendung definieren und deployen

717

Index

SQL Studio 166SQL Trace 173, 701SQL-Monitor 173Subquery 213Summary 688Support-Fähigkeit 685SVG 363Sync 500System Landscape Directory � SLDSystem-Data-Source 163Systemdatenbank 175Systemdatenquelle 175, 210Systemnachricht 540

T

Tabelledefinieren 127, 655Metadaten 178

Tabelleneditor 90, 128Tabellenfeld 128Tabellenpuffer 130, 174, 178Technologieunabhängigkeit 358Thread-Verwaltung 682Tool Integration Framework 69Top Level Navigation 343TopLevelDC 479Trace-Meldung 698, 699Tracing 697Track 522, 524, 561, 593, 634

Konsolidierungsphase 612Projektphase 593releasespezifischer 634Softwarekomponente importieren 598

Track DataCMS 640

Track-ParameterCMS 640

Transaktion 202Transaktionsattribut 150Transaktions-Commit 152Transaktionsverhalten 150Transport 595Transport Studio 523, 528

CMS 644Transportfreigabe 610Transportroute 593, 595

Typ 595Transportverzeichnis 586

U

UDDI 221Server 223

UME 560, 565, 632Universal Description Discovery Integra-

tion � UDDIUpdate

Framework 107Manager 113Policy 111Prozess 107SAP NetWeaver Developer Studio 107

Update CMS 640Update-Site 108

URL 108Use-Dependency 485, 662

Development-Component hinzufügen 662

User Interface 29JSP-basiertes 661

User Management Engine � UMEUser-Interface-Paradigma 56

V

ValidierungDC-Projekt 664

Value Set 226Vendor 636Vendor JDBC 171Vererbung 190Version Graph

Design Time Repository 508Versioned Resources 498Versionierung 195, 210, 218Versionsfeld

bei Entities 133Verwendungsbeziehung 632Verwendungszweck

Assembly 485Compilation 485

View 58Java-Package-Explorer 496

View Controller Context 243View Designer 101View-Layout 263

User Interface entwickeln 244Visual Administrator 569

1042.book Seite 717 Dienstag, 8. Januar 2008 10:41 10

Page 72: 1042.book Seite 3 Dienstag, 8. Januar 2008 10:41 10 · Inhalt 9 3.6.3 Beschreibungen im Deployment-Deskriptor web.xml ..... 159 3.7 Java EE-Gesamtanwendung definieren und deployen

718

Index

W

WANSzenario 81

Web Archive (WAR) 92Web Dynpro 234, 248, 253, 361

Action 301, 313Anwendung 346, 354Applikation 275Beispielanwendung 253, 267, 316Benutzeroberfläche 270Binding Chain 306Client-Unabhängigkeit 258Codegenerierung 257Component Controller 262Component Lifecycle 330Component Modeler 254, 275Component Usage 254, 327, 328Content Administrator 343, 356Context 268Context-Mapping 257, 269, 293Context-zu-Model-Bindung 259, 268,

287, 289Controller 261, 263Controller-Implementierung 270, 308Controller-Schnittstelle 264, 314Controller-Verwendung 314Custom Controller 263Data Link 293Data Modeler 240, 254, 276, 278, 279Datenbindung 296Datentransport 305Development Component 271, 322, 323dynamische Programmierung 256Explorer 58, 61, 100Flex 361, 364Formular-Template 297Generierungs-Framework 262, 283,

308generischer UI-Service 259HTML 361, 364inverse Suche 331iView 355Komponente 260Komponente einbetten 321Komponentenarchitektur 261Komponenten-Interface 254, 265Komponentisierung 318Model 235, 266

Web Dynpro (Forts.)Model-Abstraktion 259Model-Bindung 257, 269, 309Model-Instanz 308Navigation 277Navigation Modeler 277Oberflächenelement 255, 259Organize Imports 311Parameter-Mapping 302Perspektive 100, 496Portalseite 346Projekt 235serverseitiges Eventing 338Service-Controller 291Table-Wizard 303View Designer 277, 304View-Layout 270, 303Web Dynpro Explorer 274Werkzeug 254, 257Window-Plug 277Zielsetzung 255

Web Dynpro ABAP 30Web Service Inspection Language 247Web Services Description Language �

WSDLWeb Tools Platform � WTPWebanwendung

JSP-basierte 154Web-Dynpro-Komponente 254, 316

Anatomie 261Component Controller 262Component Usage 328Component-Interface-Controller 265,

329Component-Interface-View 265, 275,

329Custom Controller 263externes Context-Mapping 338Komponenteninstanz 330Komponenten-Interface 318lose Kopplung 319Message-Pool 262programmatische Entität 262Schnittstelle 265, 318visuelle Entität 261Wiederverwendbarkeit 260, 318Window Controller 262

Web-Dynpro-KomponentendiagrammComponent-Interface-Controller 267

1042.book Seite 718 Dienstag, 8. Januar 2008 10:41 10

Page 73: 1042.book Seite 3 Dienstag, 8. Januar 2008 10:41 10 · Inhalt 9 3.6.3 Beschreibungen im Deployment-Deskriptor web.xml ..... 159 3.7 Java EE-Gesamtanwendung definieren und deployen

719

Index

Web-Dynpro-Komponentendiagramm (Forts.)Component-Interface-View 267

Web-Dynpro-ModelEntwurfszeit 286Laufzeit 286Model-Objektgraf 287

Web-Modul-DC-Projekt 661Web-Modul-Projekt 154Webservice 99, 219, 268

Destination 246logische Destination 237Test 424

Webservice-Model 242Webservice-Navigator 424, 425, 446Wide Area Network � WANWiederverwendbarkeit 359Window 56Window Controller 263Window-Preferences 646Wizard 94Workset 48, 344, 351

Workspace 59, 124, 598Änderung übernehmen 505Design Time Repository 501Eclipse 503Folder 502

WSDL 221WTP 62

X

Xgraph Language (XGL) 364

Z

zentrale Benutzerverwaltung 560, 564Zielplattform 634Ziel-Release 558Zugriffskontrollliste 510Zuordnungstabelle 197zyklische Abhängigkeit

Verbot 488

1042.book Seite 719 Dienstag, 8. Januar 2008 10:41 10