# CDI als Wrapper nutzen?



## chrisbad (24. Apr 2012)

Hallo zusammen,

ich habe eine grundsätzliche Frage zu einer von mir angedachten Vorgehensweise:

Ich nutze Glassfish + JSF 2 + JPA + CDI.
Natürlich stehe ich nun vor dem Problem die Tests zu schreiben. Zusätzlich würde ich den ganzen Code gerne auch für Java SE Anwendungen nutzen können.

Mein Plan ist nun folgender:

Ich schreibe die Klassen ganz ohne CDI JTA und dem ganzen Containerspezifischen Zeugs.
Dadurch kann ich leicht ohne MockUps testen und die Klassen überall verwenden.

Für die Nutzung im Glassfish würde ich Beans schreiben, mir die Resource per CDI holen (EntityManager, Transactions usw.) und dem entsprechenden Objekt in der Bean übergeben.
JTA geht dann natürlich nicht mehr, aber gibt es sonst noch einen Haken an der Vorgehensweise?

Falls ja, kann mir jemand ein Tutorial zu Embedded Glassfish verlinken das einer geschrieben hat der damit auch schon echte Projekte gemacht und nicht nur rumgespielt hat? Die Tutorials zu dem Thema sind sehr sehr unterschiedlich und wenig vertrauenserweckend...

Liebe Grüße,

deChris


----------



## Nogothrim (26. Apr 2012)

hast du dir schon Arquillian angeschaut? Damit kannst du Tests in CDI-Containern laufen lassen, wobei der Glassfish embedded wohl ziemlich verbuggt sein soll, man kann aber auch einen Tomcat oder Jetty laufen lassen.


----------



## chrisbad (27. Apr 2012)

Ist das kompatibel zu JUnit?


----------



## anti-nerd (27. Apr 2012)

Soweit ich weiß, liefert arquillian nur den integrationskram. Die Testfälle selbst werden nicht beeinflusst, du musst die Testklasse mit ein paar Annotationen versehen, damit Arquillian den richtigen Kontext aufbauen kann.

Hier wird u.a. eine Junit-Testklasse erweitert:
Erste Schritte · Arquillian Guides


----------



## maki (27. Apr 2012)

(C)DI ist eigentlich dafür bekannt, das schreiben von isolierten UnittTests zu vereinfachen wenn man es richtig einsetzt.

Problematisch ist es, wenn man Felder direkt injiziert, denn das hilft einem nicht bei isolierten UnittTests sondern hat das Gegenteil zur Folge...

Wenn du allerdings Integrationstests durchführen möchtest, wäre Arquillian oder früher (?) Apache Cactus richtig.


----------



## chrisbad (30. Apr 2012)

Ok, also Arqulilian läuft soweit. 

Allerdings bringe ich es nicht fertig den @PersistenceContext in die @RequestScoped-Bean zu injizieren. Das funktioniert normalerweise super, aber im TestCase will er einfach nicht. 

In der Testklasse selbst funktioniert's, aber in der zu testenden Klasse nicht?
Gibt's da nen Tip? Google hilft mir leider auch nicht weiter...


----------

