Java 开发:JNDI
在 J2EE 中的角色
掌握 J2EE 是件令人生畏的事,因为它包含的技术和缩略语在不断地增长。Java 命名和
目录接口(Java Naming and Directory Interface,JNDI)
从一开始就一直是 Java 2 平
台企业版(JEE)
的核心,但是 J2EE
开发新手经常用不好它。本文将消除 JNDI
在 J2EE 应
用程序中所扮演角色的神秘性,并展示它如何帮助应用程序从部署细节中解脱出来。
虽然 J2EE 平台提高了普通企业开发人员的生活水平,但是这种提高是以不得不学
习许多规范和技术为代价的,这些规范和技术则是 J2EE 为了成为无所不包的分布式计
算平台而整合进来的。Dolly Developer 是众多开发人员中的一员,她已经发现了一个特
性,该特性有助于缓解随企业级应用程序部署而带来的负担,这个特性就是 JNDI,即
Java 命名与目录接口(Java Naming and Directory Interface)
。让我们来看看 Dolly 在
没有 JNDI
的时候是怎么做的,以及她是如何正确地应用 JNDI 来改善其状况的。
所有人都非常熟悉的旅程
Dolly Developer
正在编写使用 JDBC
数据源的 Web 应用程序。她知道自己正在使
用 MySQL
,所以她将一个对 MySQL JDBC 驱动程序类的引用进行了编码,并通过使用
适当的 JDBC URL
连接到其 Web 应用程序中的数据库。她认识到数据库连接池的重要性,
所以她包含了一个连接池包,并把它配置成最多使用 64 个连接;她知道数据库服务器已
经被设置成最多允许 128 台客户机进行连接。
Dolly 在走向灾难
在开发阶段,每件事都进行得很顺利。但是,在部署的时候,开始失控。Dolly 的网
络 管 理 员 告 诉 她 , 她 不 能 从 她 的 桌 面 机 访 问 生 产 服 务 器
或 登 台 服 务 器 (staging
server),所以她不得不为每个部署阶段开发不同的代码版本。因为这种情况,她需要一
个新的 JDBC URL,所以还要为测试、阶段和生产进行独立的部署。(一听到要在每个环境
中建立单独部署,熟悉配置管理的人会战战兢兢的,但是既然这是种非常普遍的情 况,
所以他们也只好硬着头皮上了。)
就在 Dolly
认为通过不同的 URL 建立彼此独立的部署已经解决了自己的配置问题
时,她发现她的数据库管理员不想在生产环境中运行 MySQL 实例。他说,MySQL 用作
开发还可以,但是对于任务关键型数据而言,业务标准是 DB2®。现在她的构建不仅在
数据库 URL 方面有所不同,而且还需要不同的驱动程序。
事情越变越糟。她的应用程序非常有用,并且变得非常关键,以致于它从应用服务
器那里得到了故障恢复的能力,并被复制到 4 个服务器集群。但是数据库管理员提出了
抗议,因为她的应用程序的每个实例都要使用 64 个连接,而数据库服务器总共只有
200
——
个可用连接
全部都被 Dolly 的应用程序占用了。更麻烦的是,DBA 已经确定
Dolly
的应用程序只需要 32 个连接,而且每天只有一个小时在使用。随着她的应用程序
规模扩大,应用程序遇到了数据库级的争用问题,而她的惟一选择就是改变集群的连接
数量,而且还要做 好准备,在集群数量增长或者应用程序复制到另一个集群时再重复一
次这样的操作。看来她已经决定了如何配置应用程序,应用程序的配置最好是留给系统管
理员和 数据库管理员来做。
J2EE 的角色