`
barryzhong
  • 浏览: 20352 次
  • 性别: Icon_minigender_1
社区版块
存档分类

生命周期组件框架:生命周期描述语言——关系与读写锁执行过程示例

阅读更多

 

    @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);
    }

 

带有关系约束的状态机引擎执行过程中读写锁的使用日志



 

前文:生命周期组件框架:关系型状态机服务

  • 大小: 334.9 KB
分享到:
评论

相关推荐

    Java SE实践教程 源代码 下载

    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...

    Java SE实践教程 pdf格式电子书 下载(一) 更新

    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...

    Java SE实践教程 pdf格式电子书 下载(四) 更新

    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...

    Go程序设计语言

    并发的Web爬虫 1878.7 使用select多路复用 1908.8 示例:并发目录遍历 1928.9 取消 1958.10 示例:聊天服务器 198[0第0]9章 使用共享变量实现并发 2019.1 竞态 2019.2 互斥锁:sync.Mutex 2059.3 读写互斥锁...

    亮剑.NET深入体验与实战精要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 ...

    亮剑.NET深入体验与实战精要2

    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 ...

    JavaScript王者归来part.1 总数2

     11.1.2 Window对象的生命周期   11.1.3 Window对象的属性和方法   11.1.4 一个多窗口应用的例子   11.2 Document对象--浏览器窗口文档内容的代表   11.2.1 Document对象概览   11.2.2 动态生成的文档  ...

    NHibernate参考文档 2.0.0 chm

    9.9. 生命周期与对象图 9.10. 拦截器 9.11. 元数据API 10. 事务和并发 10.1. 配置,会话与工厂 10.2. 线程与连接 10.3. 关注对象标识(Considering object identity) 10.4. 乐观并发控制(Optimistic concurrency ...

    NHibernate中文帮组文档(2008.11月更新)

    9.9. 生命周期与对象图 9.10. 拦截器 9.11. 元数据API 10. 事务和并发 10.1. 配置,会话与工厂 10.2. 线程与连接 10.3. 关注对象标识(Considering object identity) 10.4. 乐观并发控制(Optimistic concurrency ...

    iOS单例的创建与销毁示例

    不要多个实例去读写.d单例是唯一实例,它不等同于一直伴随这app的生命周期.下面,我会从单例的创建与销毁去分析单例. 单例的创建 单例的创建分为arc与mrc,两种模式下的创建. ARC 下的创建 先定义一个静态的instance....

    ASP.NET3.5从入门到精通

    第 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 应用...

    疯狂Android讲义源码

     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...

    用C语言开发手机软件-Windows CE 6.0开发者参考

    目录 第一部分 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示例服务

    用C语言开发手机软件 -Windows+CE+6.0开发者参考

    目录 第一部分 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示例服务

    ASP.NET4高级程序设计第4版 带目录PDF 分卷压缩包 part1

    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 ...

    ASPNET35开发大全第一章

    第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应用程序的区别...

Global site tag (gtag.js) - Google Analytics