[英]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.