Ich habe eine Klasse, die wie folgt aussieht:Mehrere Instanzen einer @Singleton OpenEJB Bohne vorhanden
@Singleton
public class MySingletonImpl implements MySingleton{
@Override
public void init(){
...
}
@Override
public void test(){
...
}
}
Aus dem ApplicationComposer
testng
Test genannt wird, die wie folgt aussieht:
@Listeners(ApplicationComposerListener.class)
public class MyTest{
@EJB
MySingleton mySingleton;
@Module
@Classes(cdi=true, value={MySingletonImpl.class})
public EjbModule ejbModule() throws Exception{
return new EjbModule(new EjbJar());
}
@BeforeClass
public void setup(){
mySingleton.init();
}
@Test
public void test(){
mySigleton.test();
}
}
Das Problem Ich beobachte, wenn der Test läuft, ist das object id
der Instanz der MySingletonImpl
Klasse, die die test()
Methode aufgerufen ist nicht die gleiche wie die Instanz, auf der die init()
Methode aufgerufen wird.
Das Verhalten scheint seltsam.
Erstens, wie kann mein Problem behoben werden? Ich möchte Methoden für dasselbe Objekt initiieren und dann aufrufen, nicht verschiedene Instanzen derselben Klasse.
Zweitens, warum überhaupt würde der Container mehrere @Singleton
s instanziieren?
Ich nehme meine Anwendung Zwischenmodulkommunikation nicht verfügen, obwohl ich ein wenig verwirrt, bin, was ein „Modul“ betrachtet. Beim Testen sollte ApplicationComposer ein einzelnes Modul erstellen, wie es in der Modul-Annotation vorgeschlagen wird. Wenn sie ausgeführt wird, wird die Anwendung als einzelner Krieg mit einer web.xml mit mehreren JARs bereitgestellt, jede mit ihrem beans.xml-Deskriptor. Soweit ich das beurteilen kann, wird es als ein "Modul" betrachtet. Ich möchte vermeiden, die Schnittstelle Remote zu machen, Serialisierungs-Deserialisierung Strafe und Komplikationen zu verhindern. Vielen Dank. – alex440