block customStyle //- HTML5 shim, for IE6-8 support of HTML5 elements. All other JS at the end of file. | -->

应用生命周期介绍

对于CEAMS系统上部署的应用,按照用户在系统网站上的操作,应用一般会有由:部署上线、版本更新、重启应用、撤回下线的这几个状态组成的一个完整的生命周期。在应用部署上线操作时,系统会调用应用的构造函数Device(),应用可以在这里执行创建数据库连接池等初始化操作。当应用版本更新、重新启动时系统会使用热更新机制替换掉整个应用模块在系统中的引用,并且调用旧的应用模块引用中的析构函数_destroyDevice(),用户可以在这里执行必要的析构操作,比如关闭数据库连接等。同时会加载新的模块,并执行新模块引用中的初始化函数Device()。在撤回下线时,系统会执行应用的_destroyDevice()函数,并且销毁应用所在的线程(如果在多线程模式下)。

另外,在WebIDE的调试模式下,用户每次保存文件修改都会使当前被调试应用模块重新加载。也就是说,已经被加载模块的_destroyDevice()方法,以及新模块的Device()构造函数会被调用到。如果用户为应用添加了自定义的初始化代码,例如在Device()函数中创建了数据库连接(或连接池),可以在_destroyDevice()方法中释放已打开的连接。另外,在WebIDE的调试模式下,用户每次保存文件修改都会使当前被调试应用模块重新加载。也就是说,已经被加载模块的_destroyDevice()方法,以及新模块的Device()构造函数会被调用到。如果用户为应用添加了自定义的初始化代码,例如在Device()函数中创建了数据库连接(或连接池),可以在_destroyDevice()方法中释放已打开的连接。

如果出现软件错误/系统错误时不会调用应用的析构函数。在单线程模式下,系统会捕获异常,比如应用里的throw并返回给API调用方。在多线程模式下,系统有可能会在收到来自系统线程的error事件时终止线程。

应用可以代码里try ... catch处理异常。但是对于callback中才发生的异常,系统已经做了统一处理,应用自己不需要使用domain一类的机制来处理。

以上指的是代码中发生的错误,对于系统错误,比如说系统收到了外部错误信号signal,系统会统一处理,应用也不需要自行处理此类错误。

回到顶部