# Context and Dependency Injection (CDI) ohne Server



## pl4gu33 (11. Sep 2012)

Hey,...

ich hab folgendes Problem, ich habe eine Persistenzschicht und Services....nun möchte ich dort per CDI auf die APIs der Persistenzschicht von den Services aus zugreifen,... da ich bisher CDI nur mit einem Tomcat Server und JSF gemacht hab, hab ich erst nach einer Lösung gesucht, wie ich das nun ohne einen Tomcat Server regeln kann, da die Projekte keine "Dynamic Web" Projekte sind ... nun bin ich auf "Bootstrap – CDI" gestoßen.... das wäre ja theoretisch genau das Richtige für mich oder würdet ihr mir eine andere Lösung empfehlen, wie ich CDI zwischen Persistenz/Anwendung realisieren kann ?

CDI geht fremd! Dependency Injection für JavaSE

später soll dann zwar noch ein Server dazu kommen und eine JSF Oberfläche eingebaut werden, aber ich möchte halt schon vorher das Zusammenspiel zwischen Persistenz und Anwendung testen .... vll. habt ihr auch einen ganz anderen Tipp  bin für jede Hilfe dankbar ... aber CDI sollte auf jeden Fall enthalten sein, weil sonst kann ichs ja auch per "new"


----------



## nillehammer (11. Sep 2012)

Das Grundproblem ist wahrscheinlich, dass Du direkt Field-Injection machst. Versuche, deine Service-Klassen so umzuschreiben, dass Du die Dependencies entweder über Konstruktorparameter oder über Methodenparameter (bei Services wohl eher die Ausnahme) injizierst. Das hat folgende Vorteile:
- Anhand der Parameterliste ist direkt erkennbar, worauf Dein Service eine Dependency hat.
- Du kannst bei Fehlen eines DI-Containers (z.B. in Tests) die Dependencies notfalls durch entsprechenden Aufruf des Konstruktors/der Methode selbst injecten.


----------



## Sym (11. Sep 2012)

Kannst Du andere CDI-Beans injecten? Nutzt Du Weld? Hast Du org.jboss.weld.environment.servlet.Listener in Deiner web.xml hinzugefügt? Welche Tomcat-Version nutzt Du?

Sonst probiere es mit einem EE-Server.


----------



## Noctarius (12. Sep 2012)

Außerhalb von JEE Servern würde ich andere DI Systeme nutzen: SpringDI oder Guice bei Webapps, Guice bei normalen Apps und Blueprint bei OSGi


----------



## pl4gu33 (12. Sep 2012)

also wie gesagt, es ging mir darum, meine Services zu testen ohne einen "Server" laufen zu haben.... ich habe nun nochmal ein wenig rumprobiert und habe es geschafft mittels MAVEN + WELD von JBoss CDI ohne Server zu realisieren 

Ich habs auch mit "Apache DeltaSpike" versucht aber damit kam ich gar nicht klar, auch wegen Informationsmangel,... mit WELD läuft alles, wie ich es will und ich hab jeweils Einstiegspunkte für meine Services 

Bootstrapping CDI in several environments  Antonio's Blog

hier ein gutes Tutorial dafür,.... so kann ich, wenn ich dann später auf nen Server umstelle, auch alle CDI Annotations drin lassen und muss nicht alles umschreiben


----------



## Noctarius (12. Sep 2012)

DeltaSpike ist keine eigene CDI Implementierung, sondern nur zusätzliche Module für CDI (soweit ich das weiß).


----------



## pl4gu33 (13. Sep 2012)

Noctarius hat gesagt.:


> DeltaSpike ist keine eigene CDI Implementierung, sondern nur zusätzliche Module für CDI (soweit ich das weiß).



jup, ich hatte es mit "OpenWebBeans" als Grundlage versucht, da dies davon unterstützt wurde,... aber irgendwie war das alles merkwürdig, da hat mir direkt WELD schon besser gefallen


----------

