繁体   English   中英

Java EE / GlassFish-线程和连接

[英]Java EE / GlassFish - Threads and connections

场景:

尽管我对Java EE的经验很少,但我一直在使用Java SE,使用过线程等技术。

我有一个第三方Java库,该库可连接到远程服务器(在第三方公司处)。 该库创建了多个线程,并独自保持连接活动。 我不允许一遍又一遍地打开新的连接(通过创建库的新实例)。 我需要保留该库的相同实例,以便始终保持连接状态。

在Java SE应用程序中,这非常容易。

现在,我想创建一个Web服务(也许使用GlassFish或类似工具)以供公司内部使用,以便能够通过其连接使用该库的功能。 换句话说,我需要一个自定义的远程连接(不是由我的代码创建也不由我的代码管理的)才能在请求实例之间保持活动状态。

问题:这有可能实现吗? 如果是这样,我应该看哪种技术?

您可以使用连接池来做到这一点。每当与远程服务器建立连接时,都应从该池获取连接,而不必每次都实例化。这将帮助您保持更好的内存占用和效率。如果不再使用连接,您可以将连接返回到池中。

我最近实现了一个类似的系统,使用Tomcat作为Servlet容器,并使用Metro 2.0作为JAX-WS的实现。 我的服务维护与后端组件(在C ++中实现)的套接字连接,并使用专有网络协议与它们进行通信。

我使用“组件管理器”线程来管理与组件的高层通信(连接建立,握手等),并使用“网络选择器”线程来管理与组件的实际通信。 该“网络选择器”使用Java套接字选择器类家族使用异步非阻塞套接字-使用单个线程与套接字选择器类进行交互是重要的一点,因为某些Java平台在使用多个线程时会出现错误。

到目前为止,它的运行情况非常好,所以我可以告诉您,这肯定是可能的。 如果您需要任何说明,请在此处发布或给我发送电子邮件(请参阅我的个人资料)。

您需要有一个工厂来维护连接,然后以提供JDBC连接池的相同方式通过JNDI提供连接。

然后,您需要确保将连接返回到所述工厂,然后将其集成到应用程序服务器的生命周期中,以便以编程方式将其拉高和拉低。

请注意,如果您不小心,这里会隐藏一个令人讨厌的类加载器问题。 您将必须具有工厂和客户端的通用类,如果标准运行时库中没有通用的类,则需要找出一种正确共享它的方法,除非您想使用反射来获取方法。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM