Freitag, 21. Januar 2011

OCM Certification, Java EE 5 Enterprise Architect

Das Java EE 5 Enterprise Architect Zertifikat von Oracle ist die Fortführung der Sun Certified Enterprise Architect for Java EE 5 (SCEA 5) Zertifizierung. Der Zertifizierungspfad setzt sich aus drei Blöcken zusammen.

Der erste Block besteht aus einem Wissenstest (Multiple-Choice und Drag-and-Drop Fragen), der 64 Fragen beinhaltet und der in einem Prometric Testcenter absolviert wird.

Der zweite Testblock ist ein Assignment, eine praktische Aufgabe, bei der eine Java EE Applikation zu entwerfen ist. Die zu entwerfende Java EE Applikation ist mit UML-Diagrammen zu beschreiben. Die Basis für die praktische Aufgabe sind ein verbal beschriebenes virtuelles Geschäftsszenario, ein graphisches Domainmodell und ein Anwendungsfalldiagramm (Use-Case). Neben der Beschreibung des entworfenen Systems mit einem Klassendiagramm, Komponentendiagramm, Deploymentdiagramm und Sequenzdiagrammen sind zusätzliche Kommentare über die Anforderungen, Risiken und Risikomilderung zu verfassen. Der zweite Testblock darf erst nach dem Absolvieren des Wissenstests bearbeitet werden.

Der dritte Testblock beinhaltet ein Essay mit acht Fragen zu dem zuvor entworfenen System, das wie der Wissenstest in einem Prometric Testcenter zu absolvieren ist. Entwurfsentscheidungen, Alternativen zu dem gewählten Entwurf und die Abdeckung von nichtfunktionalen Anforderungen sind mögliche Fragestellungen. Es gilt, den Entwurf des Assignments bestmöglich zu verteidigen.

Der Wissenstest ist sehr weitläufig, sodass es von Vorteil ist, entsprechende Projekterfahrung zu haben. Bei der Vorbereitung für den Wissenstest war ich regelmäßig über die breite Streuung der Fragen überrascht. Besonders die Erfahrungen der Projekte aus der Vergangenheit haben geholfen,  die Fragestellungen fernab von Java EE 5 verstehen zu können. Beispiele: JSPs mit Delegierung zu Geschäftsobjekten (Business Objects), Servlets die Diagramme erzeugen, die JDBC-ODBC-Bridge, proprietäre MVC-Frameworks, EJB Persistenztechniken auf Basis von JDBC und ResultSets, CORBA Programmierung mit der Java IDL und Applet-Sicherheit (Sandbox-Restriktionen).

Liste (ohne den Anspruch der Vollständigkeit) für den Wissenstest:

  • OO-Prinzipien (Kapselung, Vererbung, Komposition, Kopplung, Separation of Concerns)

  • Architekturen (Client-Server-Systeme, Mehrschichtsysteme, SOA, Thin-/Thick-Clients, nichtfunktionale Anforderungen, EJB- und Web-zentierte Architekturen, Cluster, Load Balancing, Replikation) 

  • Integration und Messaging (Java EE WebServices (SOAP und REST), JCA, JMS (Queue und Topic)

  • Geschäftsschicht Technologien (Session Beans, MDBs, Entity Beans, ORM, Unterschiede der vorherigen EJB-Standards zu EJB 3.0, Programmier- und Deploymentmodelle)

  • Webschicht Technologien (JSP, Servlets, Servletfilter, JSTL, EL, JSF, AJAX)

  • Design Patterns (GoF und J2EE Patterns, Patternszenarios in unterschiedlichen Layern einer Architektur, Anwendungsfälle und Merkmale einzelner Patterns)

  • Sicherheit (Applet- und JNLP-Restriktionen der JRE Sandbox, Byte Code Verification, Web-, EJB- und WebServices Sicherheit, SSO, potentielle Sicherheitsrisiken (Attacken wie XSS, SQL-Injection, Denial of Service, Spoofing, Tampering, Phising, Man in the Middle und deren Vermeidung (Verschlüsselung, Filter, Sicherheitszertifikate, Signaturen)

  • APIs und deren Verwendung (JAX-WS, JAXB, JAXP, JAXR, SAAJ, JAX-RPC, WS-Security, JAAS, JCE, JSSE, Java IDL, JMS, JCA, JNDI, JDBC)

  • Protokolle (RMI, IIOP, JRMN, SOAP, XML over HTTP, SSL)

Die Fragestellungen des Wissenstests kombinieren Architekturansätze, nichtfunktionale Anforderungen, Programmiermodelle, Design Patterns und APIs miteinander, sodass auf Basis eines gestellten Szenarios jeweils die richtige Antwort aus Sicht des Architekten zu finden ist.

Exemplarische Fragestellungen in vereinfachter Form:

(1) Welche nichtfunktionalen Anforderungen einer Java EE Applikation werden erhöht, wenn statt eines Applikationsservers ein Cluster von Applikationsservern mit "Load Balancing" Funktionen eingesetzt wird? Lösung: Die Skalierbarkeit, Ausfallsicherheit und Verlässlichkeit der Anwendung werden erhöht.

(2) Eine Web-Applikation in der die komplette Geschäftslogik als JSP-Scriptlets programmiert wurde, hat eine schlechte Performanz. Warum ist die Performanz schlecht und wie könnte man die Performanz verbessern? Lösung: Die aus den JSP-Seiten generierten Servlets werden zur Laufzeit bei jedem Request "gelockt". Die Geschäftslogik sollte deshalb von JSP-Scriptlets zu Business Objects refactored werden.

(3) Wie kann die Gefahr einer "SQL-Injection" minimiert werden? Lösung: Durch einen Filter und Prepared Statements.

(4) Wie verwaltet man den Konversationsstatus eines Clients? Lösung: Mit einer HTTP Session oder einem Stateful Session Bean.

(5) Welches Pattern ist nützlich, um die Konstruktions- und Implementierungsdetails eines Objektes zu verbergen? Lösung: Abstract Factory.

(6) Welche Nachteile entstehen durch enge Bindung? Lösung: Die Wiederverwendung von Klassen ist schwierig und Änderungen in einer Klasse haben Änderungen in abhängigen Klassen zur Folge.

(7) Welches Design Pattern nutzen ORM-Frameworks? Lösung: Domain Store.

(8) Nenne zwei Design Patterns, die konform zu Separation of Concerns sind? Lösung: Service To Worker (trennt die Geschäftslogik von der Anzeigelogik) und Data Access Object (trennt die Geschäftslogik von der Speicherlogik).

(9) Welches Entwurfsprinzip besteht zwischen Session und Entity Beans? Lösung: Separation of Concerns.

(10) Welche Java EE Komponente hilft bei der Migration zu einer SOA? Lösung: Stateless Session Bean (kann als Web Service publiziert werden: @WebService).

(11) Welche Techniken kennzeichnen Polymorphie? Lösung: Erweitern einer Klasse und Überschreiben einer existierenden Methode. Implementieren einer Schnittstelle mit unterschiedlichen Klassen.

(12) Nenne zwei Aktionen, die ein nicht signiertes Applet ausführen kann? Lösung: Neue Threads in der JVM erzeugen und überdurchschnittlich viel Prozessorleistung nutzen.

Literatur, Mock-Tests und Online-Quellen für die Vorbereitung

  • Sun Certified Architect for Java EE Study Guide (Second Edition) von Mark Cade und Humphrey Sheil (das Buch ist einfach Klasse!)

  • Java EE 5 Tutorial

  • Mock-Tests bei Whizlabs (SCEA Exam Simulator CX 310-52)

  • ePractice bei Oracle (Java Enterprise Edition 5 Enterprise Architect Certified Master Exam)

  • SCEA Forum der JavaRanch mit Referenzen zu weiteren Informationsquellen

Die Aufzählung der Informationsquellen ist nur ein Richtungsweiser für die Vorbereitung auf die Zertifizierung. Je nach Erfahrung sind weitere Quellen zu Java EE Technologien heranzuziehen.

Ein interessanter Aspekt der Zertifizierung ist, zu einem gegebenen Geschäftsmodell die richtige Architekturentscheidung zu treffen. Nicht immer ist der EJB-zentrierte Ansatz mit EJB 3.0, JPA und JSF die richtige Lösung. Der Web-zentrierte Ansatz hat bei leichtgewichtigen Architekturen, die wenige bis keine Transaktionen und keine anderen EJB Containerdienste nutzen wollen, durchaus Vorteile.

Interessant sind die vielfältigen Integrationsszenarien, sodass Java Web Services im heterogenen Umfeld ein gutes Mittel für die Integration von Komponenten und Applikationen sind. In reinen Java-Umgebungen aber auch JMS die Nase vorne haben kann. JCA als klassische EAI-Technik ist im Legacy Umfeld mit JMS (MDBs) für Notifizierungen kombinierbar und nutzt dabei die Dienste des EJB Containers, wodurch weitere Integrationsmöglichkeiten entstehen.

Die Vielfältigkeit der Fragestellungen schafft Raum für neue Blickwinkel, Eindrücke und Ideen. In der Summe ein schöner Lohn für den Arbeitsaufwand auf dem Zertifizierungspfad zum Java EE 5 Architekten.