PASX简化Java开发 (1)
[ 来源:互网络 | 更新日期:2007-09-28 03:08:00 | 浏览次数:9984]
简介:foo
如果你的回答是肯定的,那么,你和大多数其他Java程序员一样幸运,有一些工具能够帮助你解决这些问题。如果你的回答是否定的,关于属性文件局限的讨论也许能够让你信服??还有更好的方法可供使用。
属性文件是Java编程和运行环境的一个重要组成部分。然而,当一个程序员需要的功能远远超过Properties类提供的简单名字-值对时,他需要有更丰富的表现手法。通常,Java程序员扩展属性文件的方法是为属性本身的名字或值(或两者同时)增加额外的语义信息。很多时候,这种看来有效的方法会使问题越来越复杂。
为说明问题,请利用属性把一系列的值赋给单个名字。让我们假定你想要管理一组名称服务器,可能采用的属性文件内容如下:
hosts_1=ns.foo.com
hosts_2=ns.bar.com
hosts_3=ns.acme.com
代码很简单。改变名字-值对中名字的含义之后,你可以轻松地编写出把“hosts_”开头的名字当成“hosts”列表中一个元素的程序。
下面,我们来看看一个更复杂的例子。假设你有同一Bean类InternetHost的两个不同实例:实例A关联到一个Web服务器的列表;实例B关联到一个名称服务器的列表。要从同一个文件配置这两个实例,一种可能的方案如下:
name_hosts_1=ns.foo.com
name_hosts_2=ns.bar.com
name_hosts_3=ns.acme.com
web_hosts_1=www.foo.com
web_hosts_2=www.bar.com
web_hosts_3=www.acme.com
这种方法行得通,但总是给人以拼拼凑凑的感觉。如果你还不相信的话,稍微增加一点问题的复杂性:让这些列表中的某个元素自己也成为一个列表;或者,使得下划线字符(“_”)在名字-值对中合法。在这些情况下,简单的属性文件变得非常复杂。
作为一个细心的读者,你可能已经发现,InternetHost各个实例的命名方式逐渐模糊。为了把前三个属性赋值给实例A,把后三个属性赋值给实例B,你必须用某种与具体实例无关的方法告诉实例它们该用哪一组属性值。如果用直接编码的方式,让实例A寻找以“name_”开头的属性,让实例B寻找以“Web_”开头的属性,那么,这两个实例将不再属于同一对象类。
最后的例子还显示出另外一个问题。这就是,如何来调用实例A?简单地叫它“A”?到哪里去寻找它?它是本地实例还是远程接口?是否存在指向它的全局静态引用?如是,如何访问实例B(或者,那是否是“B”)?
解决这些问题的方案是使用一个组件配置和命名框架。有许多工具能够帮助你完成这个任务,其中之一就是PASX。PASX是一个源代码开放的Java工具,它通过XML进行配置,通过JNDI实现命名。PASX框架用XML配置用户定义的服务、JNDI名称空间、JDBC连接池、事件树、工作队列和系统日志。
PASX利用XML进行配置,因为XML比简单的属性列表具有更丰富的描述能力。为了理解为何XML更适合完成这类任务,请再次考虑第一个例子。如果用PASX定义的标记重新描述,则结果应该如下:
<List>
<String>ns.foo.com</String>
<String>ns.bar.com</String>
<String>ns.acme.com</String>
</List>
虽然代码更加冗长,但它的含义比原来要清楚得多。由于一些列表可能被排序,元素在XML文档中出现的次序决定了它们在最终数据结构中的次序。属性文件


您的位置:
