Mehrere EJBS injizieren

Sanix

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

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.
 
J

JohannisderKaeufer

Gast
Das ist möglich:
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.
 
A

Andgalf

Gast
Sowas geht mit CDI also ab EJB3.1:

Java:
@Inject
	private Instance<TestInterface> interfaceInstances;

interfaceInstances ist dann ein Iterable mit den jeweiligen implementierungen.
 

Sanix

Top Contributor
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
 

Ähnliche Java Themen

Neue Themen


Oben