Java EE / GlassFish - 线程和连接

时间:2011-01-12 12:49:17

标签: java java-ee glassfish

情景:

我已经使用Java SE很长一段时间了,使用线程等,虽然我对Java EE没什么经验。

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

在Java SE应用程序中这很容易。

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

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

3 个答案:

答案 0 :(得分:2)

你可以使用连接池来做到这一点。当远程服务器需要连接时,从这个池获取连接而不是每次实例化。这将帮助你维护更好的内存占用和效率。如果不再连接在使用中,您可以将连接返回到池。

答案 1 :(得分:1)

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

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

到目前为止它工作得非常好,所以我可以告诉你,这当然是可能的。如果您需要任何澄清,请在此发布或发送电子邮件给我(见我的个人资料)。

答案 2 :(得分:0)

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

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

请注意,如果您不小心,那么潜伏在这里会遇到令人讨厌的类加载器问题。您必须拥有工厂和客户端的公共类,如果它不是标准运行时库中的一个,您将需要找到一种方法来正确共享它,除非您想使用反射来获取方法。