Mehrere EJBS injizieren

Diskutiere Mehrere EJBS injizieren im Application Tier Bereich.
S

Sanix

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

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

Sowas geht mit CDI also ab EJB3.1:

Java:
@Inject
	private Instance<TestInterface> interfaceInstances;
interfaceInstances ist dann ein Iterable mit den jeweiligen implementierungen.
 
S

Sanix

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
 
Thema: 

Mehrere EJBS injizieren

Passende Stellenanzeigen aus deiner Region:
Anzeige

Neue Themen

Anzeige

Anzeige
Oben