欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

jBPM4的运行期环境

程序员文章站 2022-07-12 10:20:50
...



一、运行期环境就是一个餐馆
二、jBPM4的运行期环境
Environment environment = environmentFactory.openEnvironment();
try {
everything available in this block
} finally {
environment.close();
}

两个关键的类:EnvironmentFactory和Environment.
EnvironmentFactory是全局的,在整个应用程序中保持一个实例即可.
Environment则是每次方法调用则要new一个.
看看Environment的主要方法:
public abstract Object get(String name);
public abstract <T> T get(Class<T> type);

是的,environment为我们的代码提供所需要的服务类实例.
那么,如何获得environment?
那么,为什么Environment每次调用要new呢?
好吧,当你需要获取数据库Session的时候,是不是每次都要new呢.Environment提供的服务里包括了非线程安全的数据库操作服务.

三、 jBPM4运行期环境的实现

1、JbpmConfiguration
JbpmConfiguration是jBPM4里最重要的类,它是整个应用程序的入口.它实现了EnvironmentFactory接口.

JbpmConfiguration加载jBPM总的配置文件,还是大概扫一下这个配置文件:

<jbpm-configuration xmlns="http://jbpm.org/xsd/cfg">

<process-engine-context>
<repository-service />
<repository-cache />
<execution-service />
<history-service />
<management-service />
<identity-service />
<task-service />
<hibernate-configuration>
<cfg resource="jbpm.hibernate.cfg.xml" />
</hibernate-configuration>
<hibernate-session-factory />
</process-engine-context>

<transaction-context>
<repository-session />
<pvm-db-session />
<job-db-session />
<task-db-session />
<message-session />
<timer-session />
<history-session />
</transaction-context>

</jbpm-configuration>

配置文件被分为了两部分,分别是:process-engine-context和transaction-context.对应于两个IOC容器(WireContext)的配置文件.

作为EnvironmentFactory,JbpmConfiguration持有成品process-engine-context对应的IOC容器(全局的)实例,持有半成品transaction-context的WireDefinition.当调用openEnvironment方法时,JbpmConfiguration会new Environment,然后将process-engine-context IOC填充入environment,同时初始化transaction-context IOC,并将其也填充入environment.这样通过environment就可以获得所有所需要的服务,包括全局的和非线程安全的服务实例.也就是environment透过IOC容器提供了查找各种服务的能力.
file:///C:/Documents%20and%20Settings/Administrator/Local%20Settings/Temporary%20Internet%20Files/Content.IE5/AMBSBSK7/6f603207390ea3518502ce6fa53f60a0[1].png


2、与线程绑定的environment

environment初始化之后,避免参数传递得一塌糊涂的方式就是将environment与线程绑定.看Environment的代码:
是的,在openEnvironment时,有这么一行代码:
这样environment就与线程绑定了,可以通过Environment.getCurrent()任意调用了.

哪里有压迫,哪里就有放抗.

在environment.close()方法里:

Environment.popEnvironment();


OK,结束.





  • jBPM4的运行期环境
            
    
    博客分类: jbpm IOCJBPM 
  • 大小: 35.1 KB
相关标签: IOC JBPM