我想知道您的具体问题 - SO读者 - 使用工作流程引擎解决了您使用的库和框架,如果您没有使用自己的库.我还想知道什么时候工作流引擎不是最佳选择以及是否/如何选择更简单的东西,比如使用状态机的TaskList/WorkList/Task-Management类型应用程序.
问题:
我正在寻找第一手经验.
我检查过的一些资源:
business-process-management state-machine task-management workflow-engine
我在Android应用程序中使用了几个基于枚举的状态机.虽然这些工作非常好,但我正在寻找的是如何优雅地接收事件,通常是从已注册的回调或从事件总线消息接收到当前活动状态的建议.在有关基于枚举的FSM的许多博客和教程中,大多数都提供了使用数据的状态机(例如解析器)的示例,而不是展示如何从事件驱动这些FSM.
我正在使用的典型状态机具有以下形式:
private State mState;
public enum State {
SOME_STATE {
init() {
...
}
process() {
...
}
},
ANOTHER_STATE {
init() {
...
}
process() {
...
}
}
}
...
Run Code Online (Sandbox Code Playgroud)
在我的情况下,一些状态会触发一项特定对象的工作,注册一个监听器.该工作完成后,该对象将异步回调.换句话说,只是一个简单的回调接口.
同样,我有一个EventBus.希望再次通知事件的类实现回调接口以及listen()
EventBus上的那些事件类型.
因此,基本问题是状态机或其各个状态,或包含枚举FSM的类,或某些东西必须实现这些回调接口,以便它们可以表示当前状态的事件.
我使用的一种方法是整个enum
实现回调接口.枚举本身在底部具有回调方法的默认实现,然后各个状态可以覆盖他们感兴趣的事件的回调方法.为此,每个状态必须在进入和退出时注册和取消注册,否则在不是当前状态的状态下发生回调的风险.如果我找不到更好的东西,我可能会坚持这一点.
另一种方法是包含类来实现回调.然后,它必须通过调用将这些事件委托给状态机mState.process( event )
.这意味着我需要枚举事件类型.例如:
enum Events {
SOMETHING_HAPPENED,
...
}
...
onSometingHappened() {
mState.process( SOMETHING_HAPPENED );
}
Run Code Online (Sandbox Code Playgroud)
我不喜欢这样,因为(a)我需要对每个状态中switch
的事件类型进行丑陋,并且process(event)
(b)传递其他参数看起来很尴尬.
我想建议一个优雅的解决方案,而不需要使用库.
我糊涂了.我正在为我的公司开发基于grails的内部工具.此工具中的一个组件是一个简单的问题跟踪器(帮助台功能).我有域对象,如问题,问题和NewFeature.每个域类都有不同的工作流程.
我最初的想法是在域对象中滚动我自己的状态机功能.然后我用Google搜索状态机引擎和工作流引擎.而现在我迷路了.
我想评论其他开发人员如何解决这个问题.你用Drools,Jbpm,Activiti吗?还是一些更简单的状态机引擎?
我一直在阅读Drools,Jbpm的一些文档.他们看起来很漂亮.但似乎我只需要这些库提供的一小部分功能.
我正在使用Grails,但它当然也很容易使用Java库.
我正在寻找在我的基于Java的Web应用程序中使用的现成的工作流引擎.以下是我最初的要求 -
截至目前,我正在一起研究JBoss JBPM和Drools.如果您有这个或其他竞争者的经验,请告诉我,我应该考虑进行评估?