3
我的应用程序中有两个模块,其中第一个模块具有一个单例启动bean,我将本地服务绑定为JNDI资源。在第二个模块中,我有一个Producer,我想查找这个资源,但是在整个生命周期中遇到问题,因为Produces在启动Bean之前会被调用,并且结果无法加载资源。这里是我的代码:启动bean调用后加载生产
@Slf4j
@Singleton
@Startup
public class WebSocketServerActivator {
private static final Logger LOG = LoggerFactory.getLogger(WebSocketServerActivator.class);
private void startServer() {
try {
WebSocketServer webSocketServer = WebSocketServer.getInstance();
webSocketServer.setHost("localhost");
webSocketServer.setPort(9900);
webSocketServer.initialize();
InitialContext ic = new InitialContext();
ic.rebind(WebSocketSQLService.WEBSOCKET_SQL_JNDI, SQLRequestManager.getInstance());
} catch (Exception e) {
LOG.error("Error while starting webSocket in start activator ", e);
}
}
@PostConstruct
public void postConstruct() {
startServer();
}
}
这里是其它模块制作类:
public class WebSocketServiceLocator {
@Produces
public WebSocketSQLService getWebSocketService(
@JndiStringResource(value = "visma.websocket.server", defaultValue = WebSocketSQLService.WEBSOCKET_SQL_JNDI)
Supplier<String> websocketServerName
) {
return (WebSocketSQLService) lookupService(websocketServerName.get());
}
private Object lookupService(String lookupName) {
try {
InitialContext ic = new InitialContext();
return ic.lookup(lookupName);
} catch (NamingException e) {
throw new RuntimeException("Cannot find " + lookupName, e);
}
}
}
谁能告诉我,为什么后@Startup豆装入一个WebSocketServiceLocator?
您是否知道@DependsOn如何在两个EJB位于不同模块时应用? – user565
该模块不应该是一个问题,应该是EJB名称。 @Singleton(name =“Something”) – aschoerk
实际上,它创建了一个问题,我有一个单独的EJB(TestSingleton),它在WebSocketServerActivator EJB之前激活。我尝试在TestSingleton上使用@DependsOn(“WebSocketServerActivator”)并获得以下错误: java.lang.RuntimeException:EJB TestSingleton的DependsOn依赖关系'WebSocketServerActivator'无效。他们都在单独的模块。 – user565