Mehrere EJBS injizieren

Dieses Thema Mehrere EJBS injizieren im Forum "Application Tier" wurde erstellt von Sanix, 25. Apr. 2012.

Thema: Mehrere EJBS injizieren Ist es in EJB irgendwie möglich, alle konkreten Instanzen eines Interfaces zu bekommen? @Local public...

  1. Ist es in EJB irgendwie möglich, alle konkreten Instanzen eines Interfaces zu bekommen?

    Code (Java):

    @Local
    public interface TestInterface {}

    @Stateless
    public class Test1 implements TestInterface{}

    @Stateless
    public class Test2 implements TestInterface{}

    @Stateless
    public class Service{
    @EJB
    private TestInterface[] tests;
    }

     
    Der obige Code funktioniert so nicht.
     
  2. Vielleicht hilft dir das Grundlagen Training weiter --> *Klick*
  3. Das ist möglich:
    Code (Java):
    @EJB(name=ejb/Test1)
    TestInterface a;

    @EJB(name=ejb/Test2)
    TestInterface b;
    Allerdings kann es dann immer noch sein das der EJB-Container 20 Instanzen von Test1 generiert hat und du nur eine von diesen erhältst.
     
  4. Sowas geht mit CDI also ab EJB3.1:

    Code (Java):

    @Inject
        private Instance<TestInterface> interfaceInstances;
     
    interfaceInstances ist dann ein Iterable mit den jeweiligen implementierungen.
     
  5. Danke, das ist genau das was ich gesucht habe.

    Für andere, welche das auch verwenden wollen. Hier ein paar Stolpersteine:
    • JEDES Modul muss ein beans.xml enthalten, welches leer sein kann
    • Das Ding hat noch einige Bugs z.B. bei Glassfish: Die Klasse muss vom Interface direkt erben, sonst wird das Proxy auf den falschen Typ kreiert. Der Bug wurde gemeldet, jedoch verweise sie auf eine andere Library, auf welche sie keinen Einfluss haben.
    • Es verträgt Generics problemlos, wo ich teilweise Probleme mit der EJB-Annotation hatte
     
  6. Kostenloses Java-Grundlagen Training im Wert von 39 €
    Schau dir jetzt hier das Tutorial an und starte richtig durch!