2017-07-24 157 views
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?

回答

0

根据你使用ejb-3.0的标签,它还没有提供@Startup。 如果您使用3.1,也许您可​​以创建两个@Startup Singletons并使用@DependsOn来定义bean的序列。 see

+0

您是否知道@DependsOn如何在两个EJB位于不同模块时应用? – user565

+0

该模块不应该是一个问题,应该是EJB名称。 @Singleton(name =“Something”) – aschoerk

+0

实际上,它创建了一个问题,我有一个单独的EJB(TestSingleton),它在WebSocketServerActivator EJB之前激活。我尝试在TestSingleton上使用@DependsOn(“WebSocketServerActivator”)并获得以下错误: java.lang.RuntimeException:EJB TestSingleton的DependsOn依赖关系'WebSocketServerActivator'无效。他们都在单独的模块。 – user565