|
使用XML Schema的Java配置广告 使用XML
Schema的Java配置
软件工程师,IBM — Tivoli 2001 年 11 月 本文演示了如何使用 Java XML 解析器和 Java 语言的内省特性来根据 XML
文件的内容创建任意的命名对象集合。由建议的初始化过程创建的对象位于层次性的全局名称空间中。可以通过简单的查询,在代码中任何地方获得对这些对象的引用。在本文中所讨论的配置文件
XML 模式是设计成用来将“参数对象”的创建指定成任意 Java
类的实例。 将参数与其它输入数据源区分开来有一些明显的好处:同一个参数集可以应用于许多次不同的运行中,或者工作参数的规范可能需要应用程序内部结构和算法的深入知识。举一个极端的例子,可能没有对参数编制文档,而代码与缺省的参数集一起分发。通过这种方法,作者可以通过分发不同参数集来启用应用程序的不同行为。 在复杂应用程序的代码中,应该有可能清晰地确定出与给定参数规范相关的作用域或环境。对于 Java 应用程序,一种自然的解决方案是将参数与其所使用的程序作用域相联系起来。然后,名称应该反映参数在层次结构中的位置,该层次结构包括: 应用程序(Application) 可以通过普通的 Java 命名规则构造那些应用于代码中特定环境(Package 或 Class)的参数。例如, solver.rk3.p1 和 solver.rk3.timestep.c1 可以是用于标识同一个包中与 solver.rk3 包相关的 p1 参数和与类 timestep 相关的 c1 参数的名称。 这种命名策略可以应用于任何类型的嵌套逻辑环境,而不只是程序单元环境。这对于维护一个避免名称冲突的有序名称空间,是很有帮助的。与代码环境不相关的逻辑环境被称作为 主题。主题可以包含任意数量的嵌套主题。在名称层次结构的较高层(应用程序),名称是没有限定符的。所以,在应用程序层次,程序作用域参数和主题参数是没有区别的。以主题为作用域的参数有一个带有主题名称(按包含内容的降序从左到右排列)的限定名,并用“|”字符分隔。例如: Literature|Classics|Odyssey|author 可以是用于标识 author 参数的名称,该参数是在图书馆名称环境,按最常用到最不常用的顺序,其主题是 Literature、Classics 和 Odyssey。 这些参数都有相关的类型。下面八种基本类型对应于 Java 内置类型,同样,这些类型在 XML Schema 标准中被定义成简单类型: Boolean 用于配置文件的 XML Schema 在所提议模式的根上,是 Application 元素,而映射到这八种类型(Boolean、String 和 Number 类型)的元素是在底层的。由 Parameter 复杂类型在程序作用域(Package 或 Class)或在 Topic 中定义了基本类型参数。如图 1 所示。 Parameter 类型 图 1. Parameter 类型
图 2. Object 类型
总之,ClassMethod 或 InstanceMethod 规范的语义暗示了方法应该在配置文件进行解析期间被调用。如果由该方法返回对象,则会在当前的命名环境( Package、Class 或 Topic)中引入新的名称-对象关系。 Property 类型 Application 元素 图 3. Application 元素
Topic 类型 嵌套的 Topic。
嵌套的 Package 或 Class。
图 6. Class 类型
可以从参考资料所提供的链接中下载 XMLConfigurator Java 样本代码、模式和样本配置文件。 XMLConfigurator 类扩展了 org.xml.sax.helpers.DefaultHandler,并且它实现了一些处理 SAX 解析事件的方法的定制版本。最重要的方法有 startDocument()、startElement() 和 endElement()。对于其它事件处理方法,由保留 DefaultHandler 提供缺省实现。 还提供静态方法以通过参数对象的名称来检索参数对象: public static Object getParameter (String key){} public static Object getClassParameter(Class obj, String pname){} public static Object getClassParameter(Object obj, String pname){} 第一个方法提供了最大程度的通用性,这需要输入字符串包含要返回的参数对象的全限定名。下面这段代码显示了如何检索与主题 TopicA 的子主题 subTopicB 有关的字符串参数 pp: String p = (String)getParameter("TopicA|subTopicB|pp"); 通过下面这段代码获得与 myapp.util.UtilClass 类有关的整数参数 xx: int x = ((Integer)getParameter("myapp.util.UtilClass.xx")).intValue(); 提供的第二种和第三种形式方便了对与特定类相关联的程序单元作用域参数的检索。在这两种形式中,第二个输入参数(文本字符串)包含不带限定的参数名。从输入 Class 对象(第二个签名)或从该类的实例对象(第三个签名)在内部计算前缀,这个前缀是获得全限定参数名所需的。以下是第三种形式的样本用法,即,通过类的实例方法检索类型 Double 的 yy 参数: double y = ((Double)getClassParameter(this, "yy")).doubleValue(); 实现了其它一些便利方法,通过其全限定名来检索 numeric 和 boolean 类型的对象实例。 public static boolean booleanValue(String key) public static byte byteValue(String key) {} public static double doubleValue(String key) {} public static float floatValue(String key) {} public static int intValue(String key) {} public static long longValue(String key) {} public static short shortValue(String key) {} 这样做的主要好处是,在方法内部完成捕获异常和执行对原始类型的转换。这个示例显示了对封装在 Double 类型参数中双精度型原始值的检索,其全限定名是 mycompany.myproduct.myguess: 用样本初始化文件运行代码 有一行代码使这个类只与 Apache XML 解析器一起工作。当然,这可以改变。然而,这个样本代码是用 Xerces 版本 1.4.3 开发的,可以从 xml.apache.org(请参阅参考资料)下载 Xerces 版本 1.4.3 。 一旦同时安装了 Log4j 和 Xerces,并且将下载的 zip 文件(请参阅参考资料)解开之后,就可以查看 Resources\Export 路径下的 run.bat 这个样本批处理文件。应该更改该文件以与 Log4j 和 Xerces 的安装路径一致。 样本代码也存在 VisualAge for Java 版本 4.0 资源库的形式。在 VisualAge 中使用该样本代码也需要在那个环境中有 Log4j 和 Xerces。可以通过为这两个包中的每个创建一个项目以及将 jar 文件导入各自的项目中来做到这一点。(告诫:不能同时在工作区中装入 IBM XML Parser for Java 和 Xerces 1.4.3)。 附录 B 中的样本 XML 配置文件指定一个 Locale 对象的创建,会在 ResourceBundle 对象的后续实例化中引用该对象:确实已经十分接近于面向对象脚本语言的强大功能! 请参加关于本文的论坛。 请下载 从 jakarta.apache.org 上的 Log4j 项目页面获取 Log4j。 从 xml.apache.org 上的 Xerces Java Parser 1.4.4 页面获取 Xerces。 请阅读使用 XML Schema 来定义元素的基础知识中有关使用 XML Schema 的概述。 WebSphere Studio Application Developer 支持使用一些用于开发的技术,其中包括 XML 和 Java。 XML 和 WebSphere Studio Application Developer,第一部分:开发 XML Schema 讲述了 XML Schema Editor,该工具是用于构建符合“XML Schema 建议书规范(XML Schema Recommendation Specification)”的 XML Schema。 IBM 已经将 Java 开发者工具箱移植到其最受欢迎的平台上。对于最新的 JDK,可以到由 IBM Centre for Java Technology
Development 主管的 JDK
页面。
如果您希望与本文章的作者或其所在机构,进一步交流,请联系:畅享网 姜小姐 jill.jiang@amteam.org | 021-51096826-112 | 在线联系 |
节能与优化IT 企业CIO过冬良策当前金融危机的影响还在继续漫延,很多企业都在苦寻过冬的良策,在这种情况下,节能与优化技术与产品无疑成为CIO们关注的首要对象,本次选题就是针对节能与优化IT来为CIO们提供过冬的良…… |
|
|