j'ai une classe qui ressemble à ceci:Plusieurs cas d'un haricot @Singleton OpenEJB présente
@Singleton
public class MySingletonImpl implements MySingleton{
@Override
public void init(){
...
}
@Override
public void test(){
...
}
}
Il est appelé à partir du ApplicationComposer
testng
test qui ressemble à ceci:
@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();
}
}
Le problème J'observe quand le test s'exécute, est que le object id
de l'instance de la classe MySingletonImpl
que la méthode test()
a appelée n'est pas la même que l'instance sur laquelle la méthode init()
est appelée.
Le comportement semble étrange.
D'abord, comment mon problème peut-il être résolu? Je veux init et ensuite appeler des méthodes sur le même objet, pas différentes instances de la même classe. Deuxièmement, pourquoi le conteneur instancié plusieurs @Singleton
s?
Je suppose que ma demande ne dispose pas de communication inter-module, bien que je suis un peu confus quant à ce considéré comme un "module". Lors du test, ApplicationComposer est supposé créer un seul module, comme le suggère l'annotation du module. Lors de l'exécution, l'application est déployée comme une guerre unique ayant un fichier web.xml, avec plusieurs fichiers jar, chacun avec son descripteur beans.xml. Pour autant que je sache, il est considéré comme un "module". Je voudrais éviter de faire l'interface à distance, pour éviter les pénalités de sérialisation-désérialisation et les complications. Merci. – alex440