2.7注册系统应用
相关类的具体说明见javadoc,如何查看请参考“2.5”。
2.7.1配置
配置文件为emap.properties,具体位置及说明见《EMAP运行环境的配置说明》。
定义哪些为系统应用的配置项为:app.sys.list,如:
app.sys.list=app1,app2,app3
多个应用名称间用逗号分隔,配置的应用顺序将影响初始化及监控对象的调用顺序。如app1和app3都注册了对控制器的监控,则会先调用app1的再调用app3的。
此配置项中,如果配置了不存在的应用名称,系统会将其忽略,不会影响运行环境及其他应用的启动。
2.7.2系统应用的要求
一个应用必须在其spring中注册一个且只能有一个,实现了ISysAppLoader接口的对象。这样的应用才能作为系统应用,否则只能作为普通的应用。
实现ISysAppLoader接口的init方法,可通过参数中的SysAppConfig对象,注册应用状态变化的监听器、控制器的监控器。
2.7.3控制器的监控器
接口IControllerSuperviser中的before方法是在控制器执行之前调用的方法,在其实现方法中,如果需要中断控制器的执行有两种方式:
1.抛出异常,这样会转向出错页面或返回一个JSON结构的出错信息
2.返回一个与对应控制器返回类型相同的对象,这样会跳转到返回对象所指定的页面
注:如果需要继续直接控制器的方法,请返回null。
2.7.4控制器监控器的调用顺序
如果有多个系统应用都注册了控制器监控器,则会根据配置列表(见“2.7.1”)中的顺序对before方法进行调用。控制器的方法执行完后,会逆向调用after方法。
如app1和app2都注册了控制器监控器(app1在app2之前),那执行顺序为:app1的before,app2的before,控制器的方法,app2的after,app1的after。
另外,需要注意,如果执行了before方法,那么无论控制器的方法是否被执行,其对应的after方法一定会被执行。如:
app2的before方法调用过程中出现了异常,则会先调app2的after方法,再调用app1的after方法,最后抛出异常。