我需要实现一个由外部系统返回的Sessions池, 这样我就可以在需要时尽快重复使用它们(创建一个会话需要一段时间)。 我使用数据源来创建一个数据库连接池(来自Apache的DBCP),它就是 已实施的解决方案。
我们在一般情况下使用什么来汇集任意对象,是否实现了解决方案,即对象,而不是接口,以便痛苦地处理任务?
第二个问题是,我们如何测试Session是否还活着?是否有一个特定的方法,我们在对象池中覆盖,查询Session自己的方法?
第三个非常重要的问题是,对象池对象是否应该是静态的?我从系统中提取的一组对象必须在不同的Web应用程序之间共享。所以,比方说,我们提取5个会话。 App A查询POOL并获取第一个可用的Session。现在剩下4场比赛了。另一个应用程序B启动并查询相同的池。等池共享。在同一个Web应用程序的不同实例中,在同一台计算机上运行。
答案 0 :(得分:1)
dual
进行查询)很慢。
你可以看一下c3p0,
内置了该功能。一般来说,我是Hibernate
的忠实粉丝......您是否考虑过将它用于您的应用程序?您仍然可以通过它进行纯SQL查询,并为您处理池化和缓存。
答案 1 :(得分:1)
如果您使用的是J2EE应用程序服务器,请考虑构建实现Java Connector Architecture(JCA)的组件。组件的每个实例都访问一个会话,您将容器配置为最多创建五个(来自您的示例)实例。容器管理池和组件的生命周期。此外,部署在该应用程序服务器上的所有应用程序共享组件的池。
如果我没记错(它已经有一段时间了),还有一种方法可以向容器发出一个实例死亡的信号。在这种情况下,容器会删除死实例并实例化一个新实例。
某些非J2EE应用程序服务器支持JCA组件,因此即使您没有使用传统的J2EE容器也要检查它。