1 什么是插件

  插件是ZDeveloper中的核心概念,各个功能包括ZCMS本身都是以插件的方式进行组织和部署的。ZDeveloper中的插件非常类似于Eclipse中的插件,它是由一个.plugin文件所描述的旨在扩展其他插件的功能、并可向其他插件提供扩展点和扩展服务的一组遵循规范的业务逻辑及其页面,能够独立部署、启用和停用。一个插件由以下内容组成:

1

  其中菜单、扩展服务、扩展点、扩展项、扩展行为由插件的.plugin配置文件描述,JAVA代码、JSP页面、国际化文件则是实际存在的磁盘文件,由.plugin文件记录其存放位置。

  下图展示一个.plugin文件的编辑界面:

2

2  插件的依赖关系

  ZCMS中插件如果需要引用其他插件中扩展服务、扩展点和JAVA类,则需要添加对此插件的依赖关系,否则ZDeveloper会提示错误。一个插件依赖的插件如果不存在或者被停用,则此插件也会自动被停用。ZCMS中的插件依赖关系类似于Windows操作系统中的服务之间的依赖关系。

  下图是一个插件对其他插件的依赖列表:

3

3  菜单

  在ZCMS中,所有的功能菜单都由插件提供,系统启动时Framework会读取所有的.plugin文件,将其中的菜单注册到菜单管理器。如果部署并启用了某个插件,则此插件相关的菜单显示,否则菜单消失。

  一个插件可以注册成其他菜单的子菜单,即便此菜单由其他插件提供的。一个菜单对应着一个URL,且此URL只能指向本插件管理的JSP页面。

  下图显示一个菜单的配置界面:

4

4  扩展服务和扩展项

  某一插件实现的功能需要依赖于本插件定义的某一接口的子类的集合时,需要定义扩展服务。扩展服务是一个插件配置项,用于声明本插件的一个扩展项注册入口;扩展项也是一个插件配置项,用于声明向哪个扩展服务注册扩展项。扩展项指定的类必须实现扩展服务指定的接口。

  例如:内容核心插件需要管理所有的模板标签,但内容核心插件不知道其他插件都实现了什么标签,所以需要提供一个模板标签扩展服务。其他插件则可以将自己实现的模板标签扩展项注册到此服务,从而通知内容核心在模板编译、执行、标签展示等环节使用此标签。

  扩展服务的配置界面:

5

  扩展项的配置界面:

6

 

5  扩展服务的初始化

  1)在服务启动的时候,在Filter里面根据plugin文件的配置进行服务的初始化。

  2)通过plugin 的配置将每个配置项注册到它所制定的配置服务中。

  3)每个扩展项在初始化的时候都实例化一个变量注册到扩展服务中。

 

6  扩展服务的使用

  1)每个扩展服务都需要实现AbstractExtendService。

  2)每个注册的服务项都需要是 IExtendItem 的子类。

  3)注册的服务项都需要有唯一的ID。

  4)在使用的时候可以通过扩展项注册ID得到扩展项的实例。

 

7  扩展服务使用注意事项

  1)扩展服务都需要实现AbstractExtendService。

  2) 服务项都需要是 IExtendItem 的子类。

  3)不建议在服务项中定义全局变量和静态变量.服务项为单列模式。

  4)服务项主要用于在执行过程中能够明确的定义需要使用那个扩展项的情况。

  

  常用的扩展服务列表请参见附录一。

 

8  扩展点和扩展行为

  为了让一个插件的JAVA类或JSP页面运行到指定行数时,可以执行其他插件中的指定的程序逻辑(通常是额外的数据校验和处理逻辑),需要定义扩展点。

  扩展点是一个插件配置项,用于声明本插件的一个扩展行为注册入口。程序执行到扩展点所在的行时会查找所有注册到该扩展点的扩展行为,并执行所有的扩展行为指定的类。扩展项也是一个插件配置项,用于声明向哪个扩展点注册扩展行为,并指定该扩展点被调用时执行的类。

  扩展点类型于SWING中的事件(Event),扩展行为则类似于监听器(Listener)。

  例如:文章编辑插件在文章保存的JAVA方法中增加了一个扩展点,其他插件可以通过注册扩展方法到这个扩展点,实现文章信息保存之前的预先检查是否有不文明词汇等。

  扩展点配置界面:

7

  扩展行为配置界面:

8

  常用的扩展点列表请参见附录二。