appfw

the appfw site
 
   

appfw-common Overview

与其它包的依赖关系

appfw-common包含一些被其它服务用到的基础工具类。appfw-common并不依赖于appfw的其他包, 相反,appfw的其它包有可能依赖于appfw-common。

net.sf.appfw.common.bean

其中包括了一些简单的Java Bean类,比如SingleValueBean, DoubleValueBean, KeyValueBean, GenericResult等等。

net.sf.appfw.common.util.XMLProperties

XMLProperties是java.util.Properties的子类,但是它不使用传统的.properties文件格式, 而是采用XML格式的文件。XMLProperties的定位是尽可能地替代java.util.Properties。

大家都知道,.properties文件中只能用ASCII字符,所以包含中文文字的.properties文件必须 经过native2ascii工具转换才能够使用,而转换的结果里面,中文文字已经变成了不可识别的 转义字符串了。.properties文件的这个问题,带来三方面的不便,一方面,在编译的时候,必须 对所有的.properties专门作一次native2ascii操作,而不能如同其它的资源文件一样直接拷贝; 另一方面,系统部署之后要想再改动.properties文件的内容就不方便了,不能直接改最终的文件, 而必须把原始的文件找出来,改好后重新native2ascii才能够用;另外,经过了native2ascii之后 的供部署用的文件,其中的中文字符,是无法被人阅读的。

XMLProperties通过采用XML格式来存储消息字符串,解决了传统.properties文件带来的问题。 只要直接在.xml文件中用比如gb2312编码方式写入中文字符就可以了。

这里有一个XML格式文件的例子:

<?xml version="1.0" encoding="gb2312" ?>
<properties>
  <key name="StateName.0"
    >已创建</key>
  <key name="StateName.1"
    >正在初始化</key>
  <key name="StateName.2"
    >已初始化</key>
  <key name="StateName.3"
    >正在启动</key>
  <key name="StateName.4"
    >运行中</key>
  <key name="StateName.5"
    >正在停止</key>
  <key name="StateName.6"
    >已停止</key>
</properties>
      

net.sf.appfw.common.hivemind.XmlMessagesImpl

这个类实现了org.apache.hivemind.Messages接口。Messages接口定义了获取消息字符串的功能, 类似于jakarta/struts中的MessageResources。由于XmlMessagesImpl采用XMLProperties作为 底层支撑,所以消息字符串并非写在.properties文件中,而是在XML格式的文件中。 XmlMessagesImpl的定位是尽可能替代掉HiveMind中Messages接口的缺省实现类。

典型的用法是这样的:

class Test{
   private static Messages messages 
     = new XmlMessagesImpl(Test.class); 
   public void test(String name){
     String s1 = messages.getMessage("Error1");
     String s2 = messages.format("Error2", name);
   }
}
      
Note
上面这个例子中,对应的消息文件是类的名字后加上“Msgs.xml”,也就是“TestMsgs.xml”。 XmlMessagesImpl也有其他的构造方法,可以直接指定对应的消息文件位置,而不必根据类的 名字来指定。但是为了尽量统一消息文件的命名规则,建议尽量采用例子中的这个方式。

net.sf.appfw.common.uic.XmlTranslate

这个类实现了uic.TranslationInterface接口。TranslationInterface接口定义了uic 中对字符串进行i18n的功能。由于XmlTranslate采用XMLProperties作为 底层支撑,所以界面消息字符串并非写在.properties文件中,而是在XML格式的文件中。 XmlTranslate的定位是尽可能替代掉UIC中TranslationInterface接口的缺省实现类。

典型用法是在UIC生成的类的子类中,覆盖掉父类的translate()方法:

	public TranslationInterface translate() {
		return new XmlTranslate(this.getClass());
	}
      
Note
对应的界面消息文件是类的名字后加上“UIMsgs.xml”。 XmlTranslate也有其他的构造方法,可以直接指定对应的界面消息文件位置,而不必根据类的 名字来指定。但是为了尽量统一界面消息文件的命名规则,建议尽量采用例子中的这个方式。

net.sf.appfw.common.util包中与状态机有关的一些类

SimpleStateMachine是一个状态机机制的工具类。

AbstractSimpleStateKeeper是一个抽象类,定义了在状态机机制下,对状态进行保管的机制。

SimpleStateKeeperTransitionListener定义了对状态变化进行监听的接口。

net.sf.appfw.common.util.HttpClientUtil

对jakarta的HttpClient类进行了进一步的封装,以简化功能调用。