首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件架构设计 >

JBPM4.4源代码导读2(JBPM配置文件装配全过程)

2012-08-28 
JBPM4.4源代码导读二(JBPM配置文件装配全过程)本文详细描述JBPM4.4配置文件解析器两个核心类:Parser(解析

JBPM4.4源代码导读二(JBPM配置文件装配全过程)
本文详细描述JBPM4.4配置文件解析器
两个核心类:
Parser(解析器),有ConfigurationParser,BingParser等子类实现
Parse (运行时解析器助手,为解析器在运行时提供资源)
由于JBPM的xml文件中套xml文件,所有需要递归解析,最终会把解析后的资源信息存放到Bindings类中;

典型代码:
ConfigurationParser.getInstance()
      .createParse()//转到运行时的Parse
      .contextStackPush(this)
      .setStreamSource(streamSource)
      .execute()
      .checkErrors("jbpm configuration " + streamSource);
这段代码中需要特别注意的是,createParse()方法中会new Parse(this);
在构造运行时Parse类的时候,传入的this是指当前调用方法的ConfigurationParser类;从而在调用运行时Parse类的execute方法时,执行的是ConfigurationParser类的parseDocument方法,并非是其父类Parse的parseDocument方法;同理,如果通过BingParser类调用方法的话,最终解析xml的具体操作就会在BingParser类中执行。

递归解析代码:
for (Element importElement : XmlUtil.elements(documentElement, "import")) {
        if (importElement.hasAttribute("resource")) {
          String resource = importElement.getAttribute("resource");//jbpm.default.cfg.xml
          //根据resource 再次解析
          Parse importParse = createParse()
            .setResource(resource)
            .contextStackPush(configuration)
            .propagateContexMap(parse)
            .execute();
         
          parse.addProblems(importParse.getProblems());
        }
      }

我们在自己的项目中,需要解析xml文件的时候,也推荐使用这种方式;
我们可以在自己的类中依赖Parser解析器,添加如下代码,就可以获取一个xml文件的document对象,
private static Parser parser = new Parser();
//最好声明为static状态,只有声明为static状态,才能保证线程安全
Document document = parser.createParse()
.setResource("*.xml")
.execute()
.getDocument();
//待续。。。。。。越来越有意思了。。。。。


1 楼 Technoboy 2011-06-03   引用//最好声明为static状态,只有声明为static状态,才能保证线程安全
这句话,没太懂啊! 2 楼 herowj 2011-06-03   造成线程间不安全因素就是因为数据共享,声明为private static的话,不用new 一个实例就可以调用,我认为这样就不满足造成线程安全问题的基本条件,所以才可以保证线程安全。
个人理解。

热点排行