最近忙于产品的报警功能,采用的是esper的java事件处理框架来实现的这个功能,关于esper的介绍参照前面对esper介绍的博客。
那么如果利用OSGI的功能和epser框架集成呢?
其实在OSGI中有这样一个BundleLinstener类,就是用这个类来进行集成的,首先在OSGI其实是有两个BundleListener类的一个是同步的一个是异步的,其中BundleListener是异步的,而SynchronousBundleListener是异步的。
两个类都可以监听bundle的installed, resolved, starting, started, stopping, stopped, updated,unresolved, uninstalled时的事件。
这样就可以了,这时候可以自定一个listener接口,并且实现一个changeBundle方法,就可以监听到bundle的各个状态,通过getType方法来获得bundle的状态,如果是2就是bundle启动的状态。
具体代码为,
public class AlarmBundleListener implements BundleListener {
@Override
public void bundleChanged(BundleEvent event) {
System.out.println(event.getType());
System.out.println("-------------------------------"+event.getBundle().getSymbolicName());
}
}
这时候就可以在bundle开启的时候进行报警引擎的开启,也就是在之前epser博客中介绍的引擎开启的代码。并且将所有的报警的EPL语句进行监听,如果报警信息进入esper引擎并且符合EPL的语句我们就可以进行相应的报警的业务处理了。