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

时间:2009-09-28 10:56:53

标签: java-ee tcp sockets listen

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

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

我是否需要一个外部中介程序将客户端TCP转换为rmi调用?或者Java EE是否支持侦听套接字并对它们执行直接I / O?

4 个答案:

答案 0 :(得分:3)

JCA 1.5是此类任务的标准解决方案,但它不是Java EE中最简单的部分,您将找不到大量示例来帮助您入门。 如果您不介意使用Glassfish特定的解决方案,您可以查看生命周期模块,JAFS,可以嵌入到'鱼中的ftp服务器可能包含很多灵感来帮助您入门。

答案 1 :(得分:0)

你也可以考虑使用BPEL - openesb解决方案有bpel模块可以通过套接字进行监听。

答案 2 :(得分:0)

根据我的需要,我使用了一些类似的解决方案。可能这可以帮助周围的人。

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

@Scheduled(fixedDelay = 1000 * 60 * 60 * 24 * 365)
public void startListenerPort() {
ServerSocket socket = new ServerSocket(9999);
// do some stuff here
}

确保您已在允许分配给套接字的端口(防火墙设置)上允许TCP流量。

通过这种方式,您可以在端口9999上拥有TCP流量,因为您的应用服务器将继续在不同的端口上正常运行。

答案 3 :(得分:-1)

JavaEE没有明确支持原始套接字通信,但原则上没有什么可以阻止您直接使用java.net.Socket。如果安全管理器配置为限制套接字访问,Glassfish可能会阻止此操作,但除非已经以这种方式显式配置,否则不应该这样。