EJB3.0 Unit-Testing Reloaded



Ähnliche Dokumente
Der lokale und verteilte Fall

Session Beans & Servlet Integration. Ralf Gitzel ralf_gitzel@hotmail.de

WebService in Java SE und EE

Software Engineering Klassendiagramme Assoziationen

SE2-10-Entwurfsmuster-2 15

Java: Vererbung. Teil 3: super()

Step by Step Remotedesktopfreigabe unter Windows Server von Christian Bartl

Reporting Services und SharePoint 2010 Teil 1

Automatisiertes Testen von Java EE-Applikationen mit Arquillian

Softwaretests in Visual Studio 2010 Ultimate Vergleich mit Java-Testwerkzeugen. Alexander Schunk Marcel Teuber Henry Trobisch

SEP 114. Design by Contract

Objektorientierte Programmierung

Kapitalerhöhung - Verbuchung

Eclipse Equinox als Basis für Smart Client Anwendungen. Christian Campo, compeople AG, Java Forum Stuttgart 2007

Testen mit JUnit. Motivation

Programmieren in Java

Objektorientierte Programmierung

Informatik 2 Labor 2 Programmieren in MATLAB Georg Richter

EINE PLATTFORM

Konfigurationslanleitung für J2EE und Eclipse im KBS-Pool

Komponententest. Testen von Software Systemen. Übung 02 SS 2009 Version:

Print2CAD 2017, 8th Generation. Netzwerkversionen

Was meinen die Leute eigentlich mit: Grexit?

Fortgeschrittenes Programmieren mit Java. Test Driven Development

Diplomarbeit. Konzeption und Implementierung einer automatisierten Testumgebung. Thomas Wehrspann. 10. Dezember 2008

Programmierkurs Java

Verhindert, dass eine Methode überschrieben wird. public final int holekontostand() {...} public final class Girokonto extends Konto {...

Verarbeitung der Eingangsmeldungen in einem Callcenter

Operationalisierbare Qualitätskriterien für die Programmierung mit Erfahrungen aus PRÜ1 und PRÜ2

Netzwerkversion PVG.view

Prinzipien Objektorientierter Programmierung

infach Geld FBV Ihr Weg zum finanzellen Erfolg Florian Mock

ecaros-update 8.2 Update 8.2 procar informatik AG 1 Stand: DP 02/2014 Eschenweg Weiterstadt

Speicher in der Cloud

Remote Method Invocation

Themen. Web Service - Clients. Kommunikation zw. Web Services

EJB Beispiel. JEE Vorlesung 10. Ralf Gitzel

Java Entwicklung für Embedded Devices Best & Worst Practices!

Design Patterns 2. Model-View-Controller in der Praxis

estos UCServer Multiline TAPI Driver

Java Enterprise Architekturen Willkommen in der Realität

Einführung in die Programmierung

Visual Basic Express erstes Projekt anlegen

4D Server v12 64-bit Version BETA VERSION

Tangentengleichung. Wie lautet die Geradengleichung für die Tangente, y T =? Antwort:

Computer- und Medienservice Öffentliche Computerarbeitsplätze (ÖCAP) Willi Petrov

Informationsblatt Induktionsbeweis

Fernzugriff auf Kundensysteme. Bedienungsanleitung für Kunden

Einführung in die objektorientierte Programmierung mit Java. Klausur am 19. Oktober 2005

Übungen zu Softwaretechnik

Primzahlen und RSA-Verschlüsselung

OUTLOOK (EXPRESS) KONFIGURATION POP3

Pakete dienen dazu, die Software eines Projektes in größere inhaltlich zusammengehörige Bereiche mit eigenem Namen einzuteilen (siehe Java API).

Beweisbar sichere Verschlüsselung

Haben Sie schon einmal aus einem ScreenCobol Requestor ein Java Programm aufgerufen?

Ist Fernsehen schädlich für die eigene Meinung oder fördert es unabhängig zu denken?

WLAN Konfiguration. Michael Bukreus Seite 1

FORGE2015 HDC Session 4. Nachhaltige Infrastruktur als technologische Herausforderung. Tibor Kálmán Tim Hasler Sven Bingert

Lizenzierung von Windows Server 2012

teamsync Kurzanleitung

Lineargleichungssysteme: Additions-/ Subtraktionsverfahren

Erstellen von x-y-diagrammen in OpenOffice.calc

Wie oft soll ich essen?

1 topologisches Sortieren

Anleitung zum Einrichten eines -Accounts im Outlook Express 6

Novell Client. Anleitung. zur Verfügung gestellt durch: ZID Dezentrale Systeme. Februar ZID Dezentrale Systeme

Bedienungsanleitung für den Dokumentenserver

Kurzanleitung SEPPmail

Ein Sozialprojekt der Rotary Clubs Paderbon Kaiserpfalz

Inhalt. 1 Einleitung AUTOMATISCHE DATENSICHERUNG AUF EINEN CLOUDSPEICHER

Tipps und Tricks zur Installation von Java-basierten Programmen auf Handys

Innere Klassen in Java

Installation der SAS Foundation Software auf Windows

Tutorium 5 - Programmieren

Installation OMNIKEY 3121 USB

Ihr Benutzerhandbuch AVIRA ANTIVIR EXCHANGE

Objektorientierte Programmierung. Kapitel 12: Interfaces

Anleitungen zum KMG- -Konto

Internes Web-Portal der AK-Leiter

geben. Die Wahrscheinlichkeit von 100% ist hier demnach nur der Gehen wir einmal davon aus, dass die von uns angenommenen

BIF/SWE 1 - Übungsbeispiel

WinVetpro im Betriebsmodus Laptop

Über die Internetseite Hier werden unter Download/aktuelle Versionen die verschiedenen Module als zip-dateien bereitgestellt.

Algorithmen und Datenstrukturen

Anforderungen an die HIS

Klassenentwurf. Wie schreiben wir Klassen, die leicht zu verstehen, wartbar und wiederverwendbar sind? Objektorientierte Programmierung mit Java

OUTLOOK-DATEN SICHERN

SCHULVERSUCH INFORMATIK IN BADEN-WÜRTTEMBERG. Gerhard Liebrich Peter-Petersen-Gymnasium Mannheim

Whitebox-Tests: Allgemeines

Beamte und Beihilfe eine beratungsbegleitende Präsentation

efa elektronisches Fahrtenbuch im Berliner Ruder-Club

Einrichtung einer eduroam Verbindung unter dem Betriebssystem Android

ERPaaS TM. In nur drei Minuten zur individuellen Lösung und maximaler Flexibilität.

Anlegen eines SendAs/RecieveAs Benutzer unter Exchange 2003, 2007 und 2010

ANYWHERE Zugriff von externen Arbeitsplätzen

Transkript:

EJB3.0 Unit-Testing Reloaded Werner Eberling werner.eberling@mathema.de www.mathema.de Werner Eberling, MATHEMA Software GmbH - EJB3.0 - Unit-Testing Reloaded (G4 - Folie 1) Java Forum Stuttgart 2007

Automatisiertes Testen EJBs sind Backend-Komponenten ohne Oberfläche D.h. ideale Kandidaten für automatisiertes Testen Eine gängige Technik ist das "Unit-Testen" Einzelne "Einheiten" werden isoliert für sich getestet Der Test soll jederzeit ad-hoc und schnell ausführbar sein Referenzierte Einheiten werden nach Bedarf durch Dummies ersetzt verbesserte Performance sauberer Separation vereinfachte Herstellung spezieller Testkonstellationen Werner Eberling, MATHEMA Software GmbH - EJB3.0 - Unit-Testing Reloaded (G4 - Folie 2) Java Forum Stuttgart 2007

Automatisiertes Testen von EJBs Testen ohne Application-Server Keine Notwendigkeit von Deployments Bringt die geforderte Adhoc-Ausführbarkeit Erlaubt einfaches, lokales Debugging Ersetzen von EJB-Implementierungen durch Mocks Erfüllen dasselbe Interface wie die originale Implementierung Erlauben isolierte Betrachtung der zu testenden EJBs Z.B. Entkopplung von kritischen externen Systemen Im einfachsten Fall: Ableitung mit kurzgeschlossenen Funktionen Werner Eberling, MATHEMA Software GmbH - EJB3.0 - Unit-Testing Reloaded (G4 - Folie 3) Java Forum Stuttgart 2007

Stolpersteine beim Testen mit EJB 2.x EJB-Klassen implementieren EJB-Interfaces nicht new() ist nicht ohne Weiteres möglich Instanziierung erfordert generierte Proxyklasse Eigentlich nur für einen Container korrekt durchführbar Lifecycle-Callbacks müssen aufgerufen werden Referenzauflösung über JNDI-Kontexte Isolierte Instanziierung ist schwierig Enge Kopplung der Persistenz an Komponentenmodell Leistungsschwach und außerhalb JEE nicht anwendbar Dadurch kein Markt für Lösungen ohne Application-Server Werner Eberling, MATHEMA Software GmbH - EJB3.0 - Unit-Testing Reloaded (G4 - Folie 4) Java Forum Stuttgart 2007

Stolpersteine beim Testen mit EJB 2.x - Beispiel public class KundenVerwaltungImpl implements SessionBean { SessionContext sc; KundenDAO dao; void setsessioncontext(sessioncontext sc) { this.sc = sc; KundenDAOHome home = (KundenDAOHome) new InitialContext().lookup("ejb/dao"); dao = home.create(); } //... activate(), passivate(),... } void aktualisierekunde(string kundennr, String name) { if (!sc.getcallerprincipal().getname().equals(kundennr)) throw new SecurityException("Unerlaubter Datenzugriff"); Kunde kunde = dao.findekunde(kundennr); kunde.setname(name); dao.auditeintrag(kundennr, "Name geändert: " + name); } Werner Eberling, MATHEMA Software GmbH - EJB3.0 - Unit-Testing Reloaded (G4 - Folie 5) Java Forum Stuttgart 2007

EJB 3.0 - Die Lösung? EJB-Klassen implementieren ihre Interfaces new() ist möglich Referenzauflösung über Dependency-Injection Injection kann zu Testzwecken selbst implementiert werden Vollständig neues Persistenz-Management JPA Per Spezifikation auch ohne Application-Server anwendbar Also: dem Unit-Testing steht nichts mehr im Wege Oder doch??? Werner Eberling, MATHEMA Software GmbH - EJB3.0 - Unit-Testing Reloaded (G4 - Folie 6) Java Forum Stuttgart 2007

EJB 3.0 - Die Lösung? - Beispiel public class KundenVerwaltungImpl implements KundenVerwaltung { @Resource SessionContext sc; @EJB KundenDAO dao; //... @PostConstruct, @PreDestroy,... } void aktualisierekunde(string kundennr, String name) { if (!sc.getcallerprincipal().getname().equals(kundennr)) throw new SecurityException("Unerlaubter Datenzugriff"); Kunde kunde = dao.findekunde(kundennr); kunde.setname(name); dao.auditeintrag(kundennr, "Name geändert: " + name); } Werner Eberling, MATHEMA Software GmbH - EJB3.0 - Unit-Testing Reloaded (G4 - Folie 7) Java Forum Stuttgart 2007

Die Sache mit new() Der vom Container bereitgestellte Proxy entfällt Es fehlen Sicherheits-Checks Transaktionen Methodeninterceptoren & Lifecycle-Callbacks Evtl. Verlust der Call-By-Value-Semantik Nur eine Lösung für stark isolierte Tests Fokus auf die Fachlichkeit Kein Test von Kollaboration oder technischen Aspekten Werner Eberling, MATHEMA Software GmbH - EJB3.0 - Unit-Testing Reloaded (G4 - Folie 8) Java Forum Stuttgart 2007

Das Beispiel noch einmal genauer betrachtet public class KundenVerwaltungImpl implements KundenVerwaltung { @Resource SessionContext sc; @EJB KundenDAO dao; //... @PostConstruct, @PreDestroy,... } void aktualisierekunde(string kundennr, String name) { if (!sc.getcallerprincipal().getname().equals(kundennr)) throw new SecurityException("Unerlaubter Datenzugriff"); Kunde kunde = dao.findekunde(kundennr); kunde.setname(name); dao.auditeintrag(kundennr, "Name geändert: " + name); } Werner Eberling, MATHEMA Software GmbH - EJB3.0 - Unit-Testing Reloaded (G4 - Folie 9) Java Forum Stuttgart 2007

Die Sache mit der Dependency Injection Alternative A: Vornehmlich Injektion von Mocks Mindestens eine Mock-Implementierung pro EJB Sehr aufwendig Nur eine Lösung für stark isolierte Tests Alternative B: Vornehmlich Injektion echter EJBs Kaskadierung der Injektionen ist zu implementieren Nachbildung der Containerarbeit Fehleranfällig und ebenfalls relativ aufwendig Besonders unangenehm: @Resource z.b. SessionContext JEE-Klassen müssen nachimplementiert werden Werner Eberling, MATHEMA Software GmbH - EJB3.0 - Unit-Testing Reloaded (G4 - Folie 10) Java Forum Stuttgart 2007

Die Sache mit der Persistenz JPA grundsätzlich ohne Container möglich ABER: Verlust der Containerdienste Injection Tx-Management Nachbildung dieser Dienste erforderlich Aufwändig Verfälscht den Testfall Werner Eberling, MATHEMA Software GmbH - EJB3.0 - Unit-Testing Reloaded (G4 - Folie 11) Java Forum Stuttgart 2007

Ohne Container geht's leider immer noch nicht Auch für Tests ist ein Container notwendig Innerhalb des selben Prozesses Ohne Overhead eines App'Servers Lösung EJB-Client (z.b. JUnit-Test) Sog. Embedded-Container Dafür gibt es verschiedene Ansätze JBoss Embedded Container OpenEJB Pitchfork Proxy EJB Embedded EJB-Container Proxy EJB JVM CUBA Werner Eberling, MATHEMA Software GmbH - EJB3.0 - Unit-Testing Reloaded (G4 - Folie 12) Java Forum Stuttgart 2007

JBoss Embedded Container EJB-Container von JBoss ist ohne Server verwendbar Vorteil: Nachteil: hohe Vergleichbarkeit zum Serverbetrieb In Entwicklung Kein Support Zeitaufwendiger Bootstrap public class Client { public static void main(string[] args) throws Exception{ EJB3StandaloneBootstrap.boot(null); EJB3StandaloneBootstrap.scanClasspath(); Hashtable props = new Hashtable(); props.put("java.naming.factory.initial", "org.jnp.interfaces.localonlycontextfactory"); props.put("java.naming.factory.url.pkgs", "org.jboss.naming:org.jnp.interfaces"); Context ctx = new InitialContext(props); } } // EJB-Aufrufe EJB3StandaloneBootstrap.shutdown(); http://docs.jboss.org/ejb3/embedded/embedded.html Werner Eberling, MATHEMA Software GmbH - EJB3.0 - Unit-Testing Reloaded (G4 - Folie 13) Java Forum Stuttgart 2007

OpenEJB OpenSource EJB-Container Integrierbar in verschiedene Middleware-Server Z.B. Apache Geronimo Ist auch allein remote und embedded nutzbar Vorteil: 100'ige Vergleichbarkeit in allen Umgebungen Nachteil: Noch kein Support für EJB 3 Produktionstauglichkeit? http://incubator.apache.org/openejb/ Werner Eberling, MATHEMA Software GmbH - EJB3.0 - Unit-Testing Reloaded (G4 - Folie 14) Java Forum Stuttgart 2007

Pitchfork Verbindet EJB3 und Spring EJB3-Beans im Spring-Container betreibbar Embedded-Container des Bea-Weblogic Vorteil Nachteil Leichtgewichtiger Ansatz Fragliche Vergleichbarkeit mit Produktionsumgebung Bootstrapping-Aufwand? http://interface21.com/pitchfork/ Werner Eberling, MATHEMA Software GmbH - EJB3.0 - Unit-Testing Reloaded (G4 - Folie 15) Java Forum Stuttgart 2007

CUBA Eigenes Modell, equivalent zu EJB 3 SessionBeans Adapter- und Deskriptorgenerator ermöglicht Betrieb Vorteil: als EJB in beliebigem EJB2 oder EJB3-Container als AXIS-Webservice im eigenem Embedded-Container Sehr klein - im EJB-Modus nur schmaler Kompatibilitätslayer Nachteil: Kein echtes EJB 3 http://cuba.sourceforge.net/ Werner Eberling, MATHEMA Software GmbH - EJB3.0 - Unit-Testing Reloaded (G4 - Folie 16) Java Forum Stuttgart 2007

Fazit (1/2) EJB 3 ist keine Voraussetzung für Testen ohne Application-Server siehe OpenEJB und CUBA Ein echter Vorteil wäre die Forderung gewesen: Jeder EJB-Container muss ohne Application-Server nutzbar sein Ohne diese Forderung muss Test und Produktion u.u. in verschiedenen Containern erfolgen Das ist unproblematisch für SessionBeans Evtl. ein Problem bei JPA (spez. bei der Verwendung von Vendor-Extensions) Werner Eberling, MATHEMA Software GmbH - EJB3.0 - Unit-Testing Reloaded (G4 - Folie 17) Java Forum Stuttgart 2007

Fazit (2/2) EJB 3 bringt viele attraktive Vereinfachungen und Erweiterungen mit Relevanz für automatisiertes Testen ist sehr gering Für HelloWorld-Bean sieht es gut aus, sonst nicht Größtenteils die gleichen Maßnahmen notwendig wie für EJB 2 Embedded-Container ist notwendig Persistence-Management sollte separat gelöst werden Neu ist das breite Bewusstsein, dass automatisiertes testen von EJBs sinnvoll ist und funktioniert Werner Eberling, MATHEMA Software GmbH - EJB3.0 - Unit-Testing Reloaded (G4 - Folie 18) Java Forum Stuttgart 2007

Vielen Dank! - Noch Fragen? Dann am entweder hier und jetzt oder gleich am Stand der MATHEMA oder später zum Nachlesen Mit Extra-Kapitel zum Thema Testen Ab sofort im Handel ISBN 3-446-41085-6 Werner Eberling, MATHEMA Software GmbH - EJB3.0 - Unit-Testing Reloaded (G4 - Folie 19) Java Forum Stuttgart 2007