@ javax.inject.Singleton在tomcat7.0.47中不起作用

时间:2013-11-19 06:47:43

标签: tomcat websocket cdi

最近,我正在学习JEE7 websocket api,然后我在最新的Tomcat服务器上运行了一个演示,但我发现注释@javax.inject.Singleton不起作用,这里是{{1}中发布的演示代码3}}

它在glassfish4服务器上运行良好,但如果在Tomcat中运行,ChatServerEndPoint实例将不是单例,而是每个客户端(对等体)的实例,表示@Singleton根本不起作用。

如果我想获得与在glassfish上运行相同的结果,我必须将字段的修饰符:Set<Session> userSessions更改为:static Set<Session> userSessions

Jiji_Sasidharan's blog: demo code

的第6章第1节中

任何人都可以解释原因,请帮助,tks!

1 个答案:

答案 0 :(得分:2)

@javax.inject.SingletonCDI (Context and Dependency Injection)的一部分。

javax.websocketJSR-356努力的一部分。

有趣的是,虽然javax.websocket的规范(第7.1.1节)说明了

  

需要Web EEocket实现Java EE平台的一部分   使用。支持字段,方法和构造函数注入   javax.inject.Inject注释到所有websocket端点类中,如   以及对这些类使用拦截器。

同一规范未提及对其他CDI功能的支持,例如@javax.inject.Singleton

然而,规范确实(参见第3.1.7节),对于单例端点,您将使用覆盖javax.websocket.server.ServerEndpointConfig.Configurator.getEndpointInstance()并每次返回相同的端点实例。

javax.websocket的所有非tyrus实现都支持编写规范。 (见Jetty 9.1和Tomcat)