Java EE Servlet作为XMPP连接器的容器

3
我正在WebLogic 10.3.5上编写我的第一个Java EE 5应用程序,并需要一些架构建议。
当应用程序启动时,我需要打开到XMPP服务器的持久连接以发送即时消息。 消息将不断地从一个表中提取,该表将由应用程序的另一部分填充。
据我所见,我不能使用容器管理的对象(例如EJB)来实现这一点,因为我将无法控制对象和套接字连接的生命周期。
Servlet是否适合用于启动应用程序并保持持久套接字连接的进程?

可以使用servlet建立持久连接(有时称为保持活动连接)。这是我使用的一些资源:http://docs.oracle.com/javase/6/docs/technotes/guides/net/http-keepalive.html,希望对您有所帮助。 - berkay
为什么不使用带有@Singleton @Startup EJB的@PostConstruct来打开连接,然后使用@PreDestroy关闭它呢? - Tair
啊,抱歉,你正在使用JEE5——所以上面的话并不完全正确。 - Tair
那是我的理解,tair。有人知道在Java EE 5上是否可能有一个单例启动的应用程序吗? - retrodev
我说无状态会话Bean不适合建立持久的TCP连接,这样说对吗? - retrodev
2个回答

2

看起来你要使用马库斯·艾塞尔在他的博客文章中列出的选项之一。提到了一个Weblogic特定机制(虽然不是纯Java EE),用于应用程序生命周期监听器。


谢谢Tair。我刚刚发现了ServletContextListener,它似乎能够工作。 - retrodev

1
我通过创建一个ServletContextListener解决了这个问题,该监听器实例化了一个EJB 3.0无状态会话bean。
然后,该会话bean使用@PostConstruct方法实例化XMPP连接,并使用@PreDestroy方法关闭连接。
我让会话bean使用EJB 3.0计时器每隔几分钟轮询消息队列表。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接