J2EE系统架构的常见问题

来源:互联网 发布:mac改iphone铃声 编辑:程序博客网 时间:2024/04/28 12:50

池的管理

许多资源都有一个共性:供应有限。一般情况下,供应有限的原因不是资源缺乏,而是难于获得。例如,我们可以为每个查询打开一个数据库连接,但这是个耗时的操作。

 

假设应用的不同地方都需要这些资源(如数据库连接、线程、EJB实例等),它们将根据某些应用逻辑进行“竞争”。每个单独的资源可能被无限次地使用。

 

WebLogic中,这个基础架构可描述为:

Ÿ            包含一组待管理的资源

Ÿ            按照需要提供所需资源

Ÿ            当资源不可获得时拒绝提供

Ÿ            对资源可用性实行某些政策,包括排队、等待等

 

WebLogic的线程模型使之能很好地实现对资源进行共享访问。虽然开发人员可以直接建立和管理共享池,但我们并不建议这样做,因为容器已经能够执行许多类似功能。不仅如此,开发人员还必须负责许多实施细节(如细致的同步),以便为生产级重担提供资源池。

 

资源池经常用于数据库连接。为便于讨论,假设数据库连接是在JDBC连接池中建立的

JDBC连接。建立与数据库的连接是一项昂贵的操作,尤其是在运行期,因为每个连接都会占用一秒的建立时间。因此,客户端处理数据库连接的传统方式是在当客户端应用启动时在客户段和数据库之间建立连接,并将连接一直保持到客户端结束。这种体系结构非常昂贵,因为需要建立与活动客户端数量相同的连接,更坏的是,由于与数据库的交互是间歇的,连接的使用效率不高,连接在多数情况下是空载的。

 

在本文中,我们假设资源由多个并发线程而非操作系统的进程共享。

 

另一种更有效的方法是使用连接池,即建立预定数量的数据库连接,然后在客户端需要时向其提供。由于连接已经建立,因而可在客户端请求时迅速提供。当客户端使用完毕

后,连接并非取消,而是返回池中,以备其它客户端使用。

 

原创粉丝点击