hadoop 0.23 状态机框架

UHP博客文章地址:http://yuntai.1kapp.com/?p=646

原创文章,转载请注明出处:http://blog.csdn.net/wind5shy/article/details/8332017

hadoop 0.23中使用了基于事件驱动机制的异步编程模型。每个对象都是一个有限状态机,有相应的事件处理器(EventHandler),处理器处理对应的事件类型。事件处理后,对象将从一个状态变化到另一个状态。

以Application对象为例,相关类分别为:

状态类:ApplicationState

处理器类:Application

事件类型类:ApplicationEventType

事件类:ApplicationEvent及子类

其状态机如下图:


 

 

状态机框架

框架中的泛型

OPERAND

表示状态机的操作对象,如Application对象。

STATE

表示对象的状态,如ApplicationState代表的相关状态。

EVENTTYPE

表示需要处理的事件类型,如ApplicationEventType代表的相关类型。

EVENT

表示具体事件对象,如ApplicationEvent对象。

StateMachine

StateMachine<STATE extends Enum<STATE>,EVENTTYPEextends Enum<EVENTTYPE>,EVENT>

 

主要方法:

·          public STATE getCurrentState();

获取当前状态

·          public STATE doTransition(EVENTTYPE eventType, EVENT event)

根据事件类型和事件对象进行状态迁移。

StateMachineFactory

StateMachineFactory <OPERAND,STATE extends Enum<STATE>, EVENTTYPEextends Enum<EVENTTYPE>, EVENT>

状态机框架的实现基本集中在这个类里面。

 

主要成员

·          private final TransitionsListNode transitionsListNode;

所有迁移列表。

 

·          private Map<STATE, Map<EVENTTYPE, Transition<OPERAND,STATE, EVENTTYPE, EVENT>>>stateMachineTable;

储存状态机中每个状态和该状态相应迁移的信息。注意,这个table中储存了多个状态机,因为每个状态机的状态都是不相同的。

 

·          private STATE defaultInitialState;

创建状态机时默认的初始化状态。

主要方法

·          public StateMachineFactory<OPERAND, STATE, EVENTTYPE,EVENT> addTransition(STATE preState, STATE postState, EVENTTYPE eventType,SingleArcTransition<OPERAND, EVENT>hook)

·          public StateMachineFactory<OPERAND, STATE, EVENTTYPE,EVENT> addTransition(STATE preState,Set<STATE> postStates, EVENTTYPE eventType,MultipleArcTransition<OPERAND, EVENT, STATE> hook)

将一个单箭头/多箭头迁移加入StateMachineFactory的迁移列表中。

 

·          public StateMachine<STATE, EVENTTYPE, EVENT> make(OPERAND operand, STATE initialState)

创建一个状态机。

相关类

Transition

Transition<OPERAND, STATE extends Enum<STATE>,EVENTTYPEextends Enum<EVENTTYPE>, EVENT>

代表了状态机状态的一次变化。

 

主要方法:

·          STATEdoTransition(OPERAND operand, STATE oldState,  EVENT event,EVENTTYPE eventType);

根据事件类型和事件将状态机操作对象从旧状态迁移到新状态(返回值)。

迁移的钩子函数接口

迁移的具体处理是由钩子函数完成的。

SingleArcTransition<OPERAND, EVENT>

Hookfor Transition. This lead to state machine to move to the post state asregistered in the state machine.

只有单箭头的迁移,即状态机图中当前状态的后继状态只有一个。

 

主要方法:

·          public voidtransition(OPERAND operand, EVENT event);

MultipleArcTransition

MultipleArcTransition <OPERAND, EVENT,STATE extends Enum<STATE>>

Hookfor Transition. Post state is decided by Transition hook. Post state must beone of the valid post states registered in StateMachine.

多箭头的迁移,状态机图中当前状态的后续状态有多个,由事件类型来决定迁移的后续状态。

 

主要方法:

·          public STATEtransition(OPERAND operand, EVENT event);

返回值为迁移相应事件的后续状态。

迁移的实现类
SingleInternalArc

单箭头的迁移,迁移的后续状态在创建时指定。

MultipleInternalArc

多箭头的迁移,迁移的可能后续状态在创建时指定,完成迁移后的后续状态由MultipleArcTransition. transition方法给出。

ApplicableTransition

实现类ApplicableSingleOrMultipleTransition,代表一个可以加入stateMachineTable的迁移,创建时需要迁移的前置状态、事件类型和迁移本身。

TransitionsListNode

保存一个ApplicableTransition和下一个TransitionsListNode的指针,可以通过这个类遍历StateMachineFactory中所有的迁移。

InternalStateMachine

实现StateMachine,只保存一个状态机的操作对象和状态机当前的状态。doTransition方法调用的是StateMachineFactory.doTransition方法,从stateMachineTable中找到相应迁移,再调用Transition的doTransition。

 

原创文章,转载请注明出处:http://blog.csdn.net/wind5shy/article/details/8332017


  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值