Tôi có một lớp học mà trông như thế này:Một số trường hợp của một bean @Singleton OpenEJB hiện
@Singleton
public class MySingletonImpl implements MySingleton{
@Override
public void init(){
...
}
@Override
public void test(){
...
}
}
Nó được gọi là từ thử nghiệm ApplicationComposer
testng
mà trông như thế này:
@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();
}
}
Vấn đề Tôi quan sát khi chạy thử nghiệm, là object id
của trường hợp của MySingletonImpl
lớp mà phương pháp test()
được gọi là không giống như trường hợp mà phương thức init()
được gọi.
Hành vi có vẻ lạ.
Trước tiên, vấn đề của tôi có thể được khắc phục như thế nào? Tôi muốn init và sau đó gọi các phương thức trên cùng một đối tượng, không phải các cá thể khác nhau của cùng một lớp.
Thứ hai, tại sao tất cả các container sẽ khởi tạo nhiều @Singleton
s?
Tôi cho rằng ứng dụng của tôi không có tính năng thông tin liên lạc giữa các mô-đun, mặc dù tôi là một chút nhầm lẫn như những gì được coi là một "mô-đun". Khi thử nghiệm, ApplicationComposer được cho là tạo ra một mô-đun duy nhất, như được gợi ý bởi chú thích Module. Khi chạy, ứng dụng được triển khai như một cuộc chiến tranh duy nhất có một tệp web.xml, với một vài lọ, mỗi cái có bộ mô tả beans.xml của nó. Theo như tôi có thể nói, nó được coi là một "mô-đun". Tôi muốn tránh làm cho giao diện từ xa, để ngăn chặn hình phạt serialization-deserialization và biến chứng. Cảm ơn. – alex440