I_CmsPublishEventListener是发布监听器的接口,定义自己的发布监听器需要实现这个接口。
public class EventListener implements I_CmsPublishEventListener {
@Override
public void onFinish(CmsPublishJobRunning publishJob) {
//发布的资源
List<CmsResource> list = publishJob.getPublishList().getFileList();
}
……
}
在EventListener 类中重写接口中的方法,实现自己想要的功能。
I_CmsModuleAction是模块的Action接口,添加类ModuleAction
public class ModuleAction implements I_CmsModuleAction {
@Override
public void initialize(CmsObject adminCms,
CmsConfigurationManager configurationManager, CmsModule module) {
// 注册监听器
OpenCms.getPublishManager().addPublishListener(new EventListener());
}
……
}
当opencms系统启动是模块会调用initialize方法,完成监听器的注册。但在这之前需要在模块中配置,在编辑模块中,
配置操作java类这一项(ModuleAction类的包括包名的路径)。
附:
如果你想在监听器类中使用到CmsObject的对象,有一种修改opencms源码的方法。如下:
监听器类中 onEnqueue 方法是把发布资源放到发布队列中的方法
@Override
public void onEnqueue(CmsPublishJobBase publishJob) {
CmsObject = publishJob.getCmsObject();
}
但是在CmsPublishJobBase 中并不包含getCmsObject();方法。可以修改CmsPublishJobBase类源码,在 CmsPublishJobBase 类中添加一个getCmsObject();方法。
public CmsObject getCmsObject(){
return m_publishJob.getCmsObject();
}
将编译好后的CmsPublishJobBase.class文件,导入到Opencms模块中,在tomcat中WEB-INF\classes\下的.class文件会优先于jar包中的类。所以opencms会执行修改后的CmsPublishJobBase类