@StateMachine static interface InformativeStateMachine { @StateSet static interface States { @Initial @Functions({ @Function(transition = Transitions.LogicalDelete.class, value = Recycled.class), @Function(transition = Transitions.Confirm.class, value = Confirmed.class) }) static interface Draft {} @Function(transition = Transitions.Finish.class, value = Finished.class) static interface Confirmed {} @End static interface Finished {} @Functions({ @Function(transition = Transitions.PutBack.class, value = Draft.class), @Function(transition = Transitions.PhysicalDelete.class, value = Vanished.class) }) static interface Recycled {} @End static interface Vanished {} } @TransitionSet static interface Transitions { static interface Confirm {} static interface LogicalDelete {} static interface PutBack {} static interface PhysicalDelete {} static interface File {} static interface Finish {} } } @StateMachine static interface CustomerStateMachine extends InformativeStateMachine { @StateSet static interface States extends InformativeStateMachine.States { @CompositeState @LifecycleOverride static interface Confirmed extends InformativeStateMachine.States.Confirmed { @StateSet static interface ConfirmedStates { @Initial @Functions({ @Function(transition = Transitions.Suspend.class, value = ServiceSuspended.class), @Function(transition = Transitions.TerminateService.class, value = ServiceExpired.class), @Function(transition = Transitions.Cancel.class, value = Canceled.class) }) static interface InService {} @Function(transition = Transitions.Resume.class, value = InService.class) static interface ServiceSuspended {} @Functions({ @Function(transition = Transitions.Renew.class, value = InService.class), @Function(transition = Transitions.Disconnect.class, value = Disconnected.class), @Function(transition = Transitions.Abandon.class, value = Abandoned.class) }) static interface ServiceExpired {} @Functions({ @Function(transition = Transitions.Abandon.class, value = Abandoned.class), @Function(transition = Transitions.Disconnect.class, value = Disconnected.class) }) static interface Canceled {} @End @ShortCut(InformativeStateMachine.States.Finished.class) static interface Disconnected {} @End @ShortCut(InformativeStateMachine.States.Recycled.class) static interface Abandoned {} } @TransitionSet static interface Transitions { static interface Abandon {} static interface Suspend {} static interface Resume {} static interface Renew {} static interface Cancel {} static interface TerminateService {} static interface Disconnect {} } } } } @StateMachine static interface ContractStateMachine extends InformativeStateMachine { @StateSet static interface States extends InformativeStateMachine.States { @CompositeState @LifecycleOverride static interface Confirmed extends InformativeStateMachine.States.Confirmed { @StateSet static interface ConfirmedStates { @Initial @Functions({ @Function(transition = Transitions.StartService.class, value = ServiceStarted.class), @Function(transition = Transitions.TerminateService.class, value = Terminated.class) }) @InboundWhile(on = { InformativeStateMachine.States.Draft.class, CustomerStateMachine.States.Confirmed.ConfirmedStates.InService.class }, relation = Relations.Customer.class) @ValidWhile(on = { CustomerStateMachine.States.Confirmed.ConfirmedStates.InService.class }, relation = Relations.Customer.class) static interface Effective {} @Function(transition = Transitions.AbortService.class, value = ServiceAborted.class) @ValidWhile(on = { CustomerStateMachine.States.Confirmed.ConfirmedStates.InService.class }, relation = Relations.Customer.class) @InboundWhile(on = { CustomerStateMachine.States.Confirmed.ConfirmedStates.InService.class }, relation = Relations.Customer.class) static interface ServiceStarted {} @Function(transition = Transitions.Invalidate.class, value = Uneffective.class) @InboundWhile(on = { CustomerStateMachine.States.Confirmed.ConfirmedStates.InService.class }, relation = Relations.Customer.class) static interface ServiceAborted {} @End @ShortCut(InformativeStateMachine.States.Finished.class) static interface Terminated {} @End @ShortCut(InformativeStateMachine.States.Draft.class) static interface Uneffective {} } @TransitionSet static interface Transitions { static interface Invalidate {} static interface StartService {} static interface AbortService {} static interface TerminateService {} } @RelationSet static interface Relations { @Parent @RelateTo(CustomerStateMachine.class) static interface Customer {} } } } } @StateMachine static interface OrderStateMachine extends InformativeStateMachine { @StateSet static interface States extends InformativeStateMachine.States { @CompositeState @LifecycleOverride static interface Confirmed extends InformativeStateMachine.States.Confirmed { @StateSet static interface ConfirmedStates { @Initial @InboundWhile(on = { ContractStateMachine.States.Confirmed.ConfirmedStates.ServiceStarted.class }, relation = Relations.Contract.class) @ValidWhile(on = { ContractStateMachine.States.Confirmed.ConfirmedStates.ServiceStarted.class }, relation = Relations.Contract.class) @Functions({ @Function(transition = Transitions.StartProduce.class, value = Manufactoring.class), @Function(transition = Transitions.Dequeue.class, value = Dequeued.class) }) static interface Queued {} @InboundWhiles({ @InboundWhile(on = { ContractStateMachine.States.Confirmed.ConfirmedStates.ServiceStarted.class }, relation = Relations.Contract.class), @InboundWhile(on = { ResourceStateMachine.States.OfficialRunning.RunningStates.Idle.class }, relation = Relations.Resource.class) }) @ValidWhiles({ @ValidWhile(on = { ContractStateMachine.States.Confirmed.ConfirmedStates.ServiceStarted.class }, relation = Relations.Contract.class) }) @Function(transition = Transitions.StartPackage.class, value = Packaging.class) static interface Manufactoring {} @InboundWhile(on = { ContractStateMachine.States.Confirmed.ConfirmedStates.ServiceStarted.class }, relation = Relations.Contract.class) @ValidWhile(on = { ContractStateMachine.States.Confirmed.ConfirmedStates.ServiceStarted.class }, relation = Relations.Contract.class) @Function(transition = Transitions.Deliver.class, value = { Delivering.class }) static interface Packaging {} @InboundWhile(on = { ContractStateMachine.States.Confirmed.ConfirmedStates.ServiceStarted.class }, relation = Relations.Contract.class) @ValidWhile(on = { ContractStateMachine.States.Confirmed.ConfirmedStates.ServiceStarted.class }, relation = Relations.Contract.class) @Function(transition = Transitions.Complete.class, value = Completed.class) static interface Delivering {} @End @ShortCut(InformativeStateMachine.States.Finished.class) static interface Completed {} @End @ShortCut(InformativeStateMachine.States.Draft.class) static interface Dequeued {} } @TransitionSet static interface Transitions { static interface Deliver {} static interface Dequeue {} static interface StartProduce {} static interface StartPackage {} static interface Complete {} } @RelationSet static interface Relations { @Parent @RelateTo(ContractStateMachine.class) static interface Contract {} @RelateTo(ResourceStateMachine.class) static interface Resource {} } } } } @StateMachine static interface ResourceStateMachine { @StateSet static interface States { @Initial @Function(transition = Transitions.Test.class, value = TestRunning.class) static interface New {} @Functions({ @Function(transition = Transitions.GoLive.class, value = OfficialRunning.class), @Function(transition = Transitions.ConfirmMalfunction.class, value = Malfunctioning.class) }) static interface TestRunning {} @Functions({ @Function(transition = Transitions.Repair.class, value = Repairing.class), @Function(transition = Transitions.Deprecate.class, value = Deprecated.class) }) static interface Malfunctioning {} @Function(transition = Transitions.ConfirmMalfunction.class, value = Malfunctioning.class) @CompositeState static interface OfficialRunning { @StateSet static interface RunningStates { @Initial @Function(transition = RunningTransitions.Acquire.class, value = Busy.class) static interface Idle {} @Functions({ @Function(transition = RunningTransitions.Fail.class, value = Failing.class), @Function(transition = RunningTransitions.Release.class, value = Idle.class) }) static interface Busy {} @End @ShortCut(Malfunctioning.class) static interface Failing {} } @TransitionSet static interface RunningTransitions { static interface Acquire {} static interface Release {} static interface Fail {} } } @Function(transition = Transitions.Test.class, value = TestRunning.class) static interface Repairing {} @End static interface Deprecated {} } @TransitionSet static interface Transitions { static interface Test {} static interface ConfirmMalfunction {} static interface Repair {} static interface GoLive {} static interface Deprecate {} } } @LifecycleMeta(InformativeStateMachine.class) @LifecycleLock(SimpleLock.class) static class InformativeObject extends ReactiveObject { public InformativeObject() { initialState(InformativeStateMachine.States.Draft.class.getSimpleName()); } @Transition public void confirm() {} @Transition public void logicalDelete() {} @Transition public void putBack() {} @Transition public void physicalDelete() {} @Transition public void file() {} @Transition public void finish() {} } @LifecycleMeta(CustomerStateMachine.class) @LifecycleLock(SimpleLock.class) static class CustomerObject extends InformativeObject { @Transition public void abandon() {} @Transition public void suspend() {} @Transition public void resume() {} @Transition public void renew() {} @Transition public void cancel() {} @Transition public void terminateService() {} @Transition public void disconnect() {} } @LifecycleMeta(ContractStateMachine.class) @LifecycleLock(SimpleLock.class) static class ContractObject extends InformativeObject { @Relation(ContractStateMachine.States.Confirmed.Relations.Customer.class) private CustomerObject customer; public ContractObject(final CustomerObject customer) { super(); this.customer = customer; } @Transition public void invalidate() {} @Transition public void startService() {} @Transition public void abortService() {} @Transition public void terminateService() {} } @LifecycleMeta(OrderStateMachine.class) @LifecycleLock(SimpleLock.class) static class OrderObject extends InformativeObject { @Relation private ContractObject contract; public OrderObject(ContractObject contract) { this.contract = contract; } @Transition public void deliver() {} @Transition public void dequeue() {} @Transition public void startProduce(@Relation(OrderStateMachine.States.Confirmed.Relations.Resource.class) ResourceObject resource) {} @Transition public void startPackage() {} @Transition public void complete() {} } @LifecycleMeta(ResourceStateMachine.class) @LifecycleLock(SimpleLock.class) static class ResourceObject extends ReactiveObject { public ResourceObject() { initialState(ResourceStateMachine.States.New.class.getName()); } @Transition public void test() {} @Transition public void confirmMalfunction() {} @Transition public void repair() {} @Transition public void goLive() {} @Transition public void deprecate() {} @Transition public void acquire() {} @Transition public void release() {} @Transition public void fail() {} }
@Test public void test_relational_locking() { final CustomerObject customer = new CustomerObject(); final ContractObject contract = new ContractObject(customer); final OrderObject order = new OrderObject(contract); final ResourceObject resource = new ResourceObject(); customer.confirm(); contract.confirm(); contract.startService(); order.confirm(); resource.test(); resource.goLive(); order.startProduce(resource); order.startPackage(); order.deliver(); order.complete(); assertState(OrderStateMachine.States.Finished.class, order); }
带有关系约束的状态机引擎执行过程中读写锁的使用日志
相关推荐
11.2.1 ServerSocket与Socket示例: 开发一个Server-Client模型的程序 291 11.2.2 多点传送示例 293 11.2.3 打造你自己的QQ 295 11.3 小结 315 第12章 找个好管家——JMX 317 12.1 讲解 318 12.1.1 什么是 JMX...
11.2.1 ServerSocket与Socket示例: 开发一个Server-Client模型的程序 291 11.2.2 多点传送示例 293 11.2.3 打造你自己的QQ 295 11.3 小结 315 第12章 找个好管家——JMX 317 12.1 讲解 318 12.1.1 什么是 JMX...
11.2.1 ServerSocket与Socket示例: 开发一个Server-Client模型的程序 291 11.2.2 多点传送示例 293 11.2.3 打造你自己的QQ 295 11.3 小结 315 第12章 找个好管家——JMX 317 12.1 讲解 318 12.1.1 什么是 JMX...
并发的Web爬虫 1878.7 使用select多路复用 1908.8 示例:并发目录遍历 1928.9 取消 1958.10 示例:聊天服务器 198[0第0]9章 使用共享变量实现并发 2019.1 竞态 2019.2 互斥锁:sync.Mutex 2059.3 读写互斥锁...
3.1.2 具有Master页的生命周期事件顺序 116 3.1.3 ASP.NET生命周期详解 118 3.2 页面状态管理 120 3.2.1 Cookie 121 3.2.2 HtmlInputHidden隐藏域 123 3.2.3 ViewState 123 3.2.4 查询字符串Request 124 3.2.5 ...
3.1.2 具有Master页的生命周期事件顺序 116 3.1.3 ASP.NET生命周期详解 118 3.2 页面状态管理 120 3.2.1 Cookie 121 3.2.2 HtmlInputHidden隐藏域 123 3.2.3 ViewState 123 3.2.4 查询字符串Request 124 3.2.5 ...
11.1.2 Window对象的生命周期 11.1.3 Window对象的属性和方法 11.1.4 一个多窗口应用的例子 11.2 Document对象--浏览器窗口文档内容的代表 11.2.1 Document对象概览 11.2.2 动态生成的文档 ...
9.9. 生命周期与对象图 9.10. 拦截器 9.11. 元数据API 10. 事务和并发 10.1. 配置,会话与工厂 10.2. 线程与连接 10.3. 关注对象标识(Considering object identity) 10.4. 乐观并发控制(Optimistic concurrency ...
9.9. 生命周期与对象图 9.10. 拦截器 9.11. 元数据API 10. 事务和并发 10.1. 配置,会话与工厂 10.2. 线程与连接 10.3. 关注对象标识(Considering object identity) 10.4. 乐观并发控制(Optimistic concurrency ...
不要多个实例去读写.d单例是唯一实例,它不等同于一直伴随这app的生命周期.下面,我会从单例的创建与销毁去分析单例. 单例的创建 单例的创建分为arc与mrc,两种模式下的创建. ARC 下的创建 先定义一个静态的instance....
第 4 章 ASP.NET 的网页代码模型及生命周期 4.1 ASP.NET 的网页代码模型 4.1.1 创建ASP.NET 网站 4.1.2 单文件页模型 4.1.3 代码隐藏页模型 4.1.4 创建ASP.NET Web Application 4.1.5 ASP.NET 网站和ASP.NET 应用...
4.3.1 Activity的生命周期演示 190 4.3.2 Activity与Servlet的相似性与 区别 194 4.4 本章小结 195 第5章 使用Intent和IntentFilter 第5章 进行通信 196 5.1 Intent对象详解 197 5.1.1 使用Intent...
目录 第一部分 Windows编程基础 ...17.4.2 服务的生命周期 17.4.3 应用程序对服务的控制 17.4.4 服务DLL的人口函数 17.4.5 服务的IOCTL命令 17.4.6 超级服务 17.4.7 Services.exe的命令行 17.4.8 TickSrv示例服务
目录 第一部分 Windows编程基础 ...17.4.2 服务的生命周期 17.4.3 应用程序对服务的控制 17.4.4 服务DLL的人口函数 17.4.5 服务的IOCTL命令 17.4.6 超级服务 17.4.7 Services.exe的命令行 17.4.8 TickSrv示例服务
5.1.2 应用程序生命周期 5.1.3 应用程序更新 5.1.4 应用程序目录结构 5.2 global.asax应用程序文件 5.2.1 应用程序事件 5.2.2 演示应用程序事件 5.3 ASP.NET配置 5.3.1 machine.config文件 5.3.2 ...
第4章 ASP.NET的网页代码模型及生命周期 4.1 ASP.NET的网页代码模型 4.1.1 创建ASP.NET网站 4.1.2 单文件页模型 4.1.3 代码隐藏页模型 4.1.4 创建ASP.NET Web Application 4.1.5 ASP.NET网站和ASP.NET应用程序的区别...