Jakarta ee 如何在JavaEE中创建一个在TCP/IP套接字上侦听传入请求的应用程序?

Jakarta ee 如何在JavaEE中创建一个在TCP/IP套接字上侦听传入请求的应用程序?,jakarta-ee,tcp,sockets,listen,Jakarta Ee,Tcp,Sockets,Listen,我需要在GlassFish 2.1 Appserver中运行一个业务逻辑,它侦听入站TCP连接并为它们提供服务。我觉得这种任务在appserver中并不合适——也许我应该发布web服务接口,等等,但我不能,至少不能直接为客户端发布 客户端将通过TCP连接到我的应用程序,并将交换纯文本命令和响应 我是否需要一个将客户端TCP转换为rmi调用的外部中介程序?或者JavaEE对监听套接字并对其执行直接I/O有本机支持吗?JavaEE对原始套接字通信没有明确的支持,但原则上没有什么可以阻止您直接使用Ja

我需要在GlassFish 2.1 Appserver中运行一个业务逻辑,它侦听入站TCP连接并为它们提供服务。我觉得这种任务在appserver中并不合适——也许我应该发布web服务接口,等等,但我不能,至少不能直接为客户端发布

客户端将通过TCP连接到我的应用程序,并将交换纯文本命令和响应


我是否需要一个将客户端TCP转换为rmi调用的外部中介程序?或者JavaEE对监听套接字并对其执行直接I/O有本机支持吗?

JavaEE对原始套接字通信没有明确的支持,但原则上没有什么可以阻止您直接使用
Java.net.socket
。如果将安全管理器配置为限制套接字访问,Glassfish可能会阻止这一点,但除非以这种方式显式配置,否则情况不应该如此。

JCA 1.5是此类任务的标准解决方案,但它不是Java EE中最简单的部分,而且您不会找到大量的示例来开始。
如果您不介意Glassfish特定的解决方案,您可以看看生命周期模块,一个可以嵌入在FISH中的FTP服务器可能包含很多灵感来启动。

你也可以考虑使用BPEL。OpenESB解决方案有一个BPEL模块,用于通过Socket进行侦听。

< P>我根据我的需要使用了一些类似的解决方案。也许这可以帮助周围的人

您需要在服务器启动或应用程序加载时启动新的套接字端口。我使用了@scheduler注释,而您也可以使用基于侦听器的解决方案

@Scheduled(fixedDelay = 1000 * 60 * 60 * 24 * 365)
public void startListenerPort() {
ServerSocket socket = new ServerSocket(9999);
// do some stuff here
}
只需确保在分配给套接字的端口上允许TCP通信(防火墙设置)


通过这种方式,您可以在端口9999上使用TCP通信,因为您的应用程序服务器将一如既往地在不同的端口上运行。

谢谢您,lifecycle模块目前看起来还不错,可能稍后会尝试JCA。-1。直接从EJB3.0规范(第21.1.2节):
企业bean不得尝试侦听套接字、接受套接字上的连接或使用套接字进行多播。
-1因为规范肯定会阻止您。直接从EJB3.0规范(第21.1.2节):
企业bean不得尝试侦听套接字、接受套接字上的连接或使用套接字进行多播。