无状态bean在部署到应用服务器时工作正常,
@Stateless(name = "UtilitiesPersonClient")
@Loggable
public class UtilitiesPersonClient {
正确显示日志节目的输出:
java:global/my-app/UtilitiesPersonClient
java:app/my-app/UtilitiesPersonClient
java:module/UtilitiesPersonClient
然而,在我的测试中,当我尝试将此bean重新绑定到模拟时,它只是没有反弹并且没有抛出错误:
ejbContainer = EJBContainer.createEJBContainer(p);
@Override
@Before
public void setUp() throws Exception {
super.setUp();
UtilitiesPersonClient mockService = mock(UtilitiesPersonClient.class);
when(mockService.getMyMap(anyCollection())).thenReturn(mockedMap());
ejbContainer
.getContext()
.rebind("java:module/UtilitiesPersonClient", mockService);
}
如何使用ejbcontainer重新绑定无状态bean?
答案 0 :(得分:0)
重新绑定实际上并没有改变现有实例。它只会改变尚未发生的绑定。
因此,为了克服这个问题,我只是简单地注入了调用类,并将调用类更改为setter。然后我使用setter直接改变实例。
@EJB
private MyService myService;
@Before
public void setUp() throws Exception {
super.setUp();
UtilitiesPersonClient mockService = mock(UtilitiesPersonClient.class);
when(mockService.getMyMap(anyCollection())).thenReturn(mockedMap());
myService.setUtilitiesPersonClient(mockService);
}