我正在研究在域模式下在JBossEAP 6.4上运行的应用程序。我需要处理从服务器到不同硬件设备的多个(最多1000个)并行TCP连接。 必须在服务器端打开连接,并保持最多90秒。所有连接使用相同的端口和协议,但目标IP地址不同..
我想知道JCA适配器是否适合这种用例。我应该为每个设备创建特殊的激活规范,还是使用除JCA资源适配器以外的其他设备?
答案 0 :(得分:0)
这个问题有点陈旧,但JCA是一种不那么流行的技术,所以尽管你可能已经实现了所有这些事情,但是对它的一些了解会很有用。
首先,JCA是编写连接器的规范,它不是连接器实现本身。如果您需要应用程序使用外部TCP,则由您来实现连接器。
JCA是否适合您的特定需求完全取决于“不同硬件设备”的性质。资源适配器已设计为基于每个服务使用可能的连接池。即此特定适配器将触发的所有连接应该具有非常相似的性质并且可以互换。但是,JCA适配器在此范围之外也具有明显的优势,尤其是在EJB环境中。 EJB对您的代码施加了非常严格的限制:没有锁定,线程生成等。如果没有所有这些,实现TCP I / O可能会非常困难。这里有JCA和它的线程自由(尽管存在潜在的线程源,但MDB能够在其激活时提供EJB友好的范围)。
总之:如果您在EJB环境中工作(或者如果您将在可观察的未来中这样做),则应考虑将JCA用于TCP网络。如果您在Java EE堆栈上使用Spring支持的环境,那么可能需要省略这种复杂的技术并坚持使用纯粹的Netty网络。
如果您选择继续使用JCA,请考虑检查我目前正在维护的JCA SocketConnector。它建立在Netty堆栈上,对你来说可能是一个好的开始。您也可以将其用作构思如何构建自己的实现的想法来源。