场景:
我使用Java SE已经有相当长的一段时间了,使用线程等,尽管我对Java EE几乎没有经验。
我有一个连接到远程服务器的第三方Java库(在第三方公司)。该库创建了几个线程,并使连接本身保持活动状态。我不允许一次又一次地打开新的连接(通过创建库的新实例)。我需要保持相同的库实例,它将一直保持连接。
这在Java应用程序中非常简单。
现在,我想创建一个在公司内部使用的web服务(可能使用GlassFish或类似的服务),以便能够通过它的连接使用这个库的功能。换句话说,我需要在请求实例之间保持一个自定义远程连接(它不是由我的代码创建或管理的)。
问:这有可能实现吗?如果是这样,我应该看一下哪种技术?
发布于 2011-01-12 21:14:49
你可以使用connection pool.when来做这件事只要需要连接到远程服务器,从这个池中获取连接而不是实例化每个time.This将帮助你维护更好的内存占用空间,并且efficiency.If连接不再使用,你可以将连接返回到池中。
发布于 2011-01-12 21:03:01
我最近实现了一个类似的系统,使用Tomcat作为Servlet容器,使用Metro 2.0作为JAX-WS实现。我的服务维护到后端组件(在C++中实现)的套接字连接,并使用专有网络协议与它们通信。
我使用了一个“组件管理器”线程来管理与组件的高级通信(连接建立、握手等)。以及管理与组件的实际通信的“网络选择器”线程。这个“网络选择器”使用异步非阻塞套接字,使用Java Socket Selector系列的类--使用单线程与套接字选择器类进行交互是一个重要的点,因为一些Java平台在使用多线程时会出现错误。
到目前为止,它工作得很好,所以我可以告诉你,这肯定是可能的。如果您需要任何澄清,请在这里张贴或给我发电子邮件(请参阅我的个人资料)。
发布于 2011-01-12 23:45:15
您需要有一个工厂来维护这些连接,然后通过JNDI提供它,就像提供JDBC连接池一样。
然后,您需要确保将连接返回到所述工厂,然后将其集成到应用程序服务器生命周期中,以便通过编程将其拉起和拉下。
请注意,如果您不小心,这里就潜藏着一个严重的类加载器问题。你必须有一个工厂和客户端的公共类,如果它不在标准运行时库中,你将需要找出一种方法来正确地共享它,除非你想使用反射来获取方法。
https://stackoverflow.com/questions/4668976
复制相似问题