我想构建一个Java EE应用程序(EAR),它不仅提供Web服务(WAR)或直接JMS请求(EJB),而且我还想接受套接字请求(例如UDP数据包)。
我尝试用java.net.DatagramSocket编写一个监听器,让它作为单独的进程运行,并将请求重定向到我的EAR应用程序。
问题是...... 如何无缝地将这样的套接字侦听器构建到我的Java EE(EAR)应用程序中?
感谢。
答案 0 :(得分:11)
正确的方法是为此创建一个JCA适配器。 JCA适配器可用于出站或入站连接。您可以在JCA adpater中启动线程或安排工作。从JCA适配器到EJB的入站连接是使用自定义消息驱动的bean完成的。
您甚至可以从JCA连接器启动事务,以便交换消息/数据包到EJB的传递。 JCA是Java EE规范的一部分,并受所有应用程序服务器支持。
另一种方法(但不符合规范)是从ServletContextListener
启动侦听套接字的线程。该线程将在Web层中运行,您可以像往常一样调用EJB。依赖注入不起作用,但JNDI查找应该仍然可以。
答案 1 :(得分:4)
所有内容都应该由容器控制,因为这是使用Java EE构建扩展应用程序的唯一方法。
一些选择:
实现连接器(JCA)示例如下:http://www.theserverside.com/tt/articles/article.tss?l=J2EE1_4可能是现有客户端的最佳方式。
使用Java消息队列
此处讨论了这些技术之间的关系http://java.sun.com/products/jms/faq.html#relship_ejbs
编写将请求存储在数据库中的外部服务器。(无Tx支持)
如果您只有一台服务器而且开销太大,您可以忽略这些方面。但是如果您需要稍后的事务或其他节点,则必须重新设计此部分。
答案 2 :(得分:1)
据我所知,它不符合规范。