方法一:实现ServiceListener接口:
package org.riawork.demo.web; import org.osgi.framework.BundleActivator; import org.osgi.framework.BundleContext; import org.osgi.framework.ServiceEvent; import org.osgi.framework.ServiceListener; import org.osgi.framework.ServiceReference; import org.osgi.service.http.HttpService; import org.osgi.service.http.NamespaceException; public class Activator implements BundleActivator, ServiceListener { private BundleContext ctx; private ServiceReference ref; public void start(BundleContext context) throws Exception { System.out.println("Hello World-Web!!"); this.ctx = context; context.addServiceListener(this, "(&(objectClass=" + HttpService.class.getName() + "))"); } public void stop(BundleContext context) throws Exception { System.out.println("Goodbye World-Web!!"); } @Override public void serviceChanged(ServiceEvent event) { ref = ctx.getServiceReference(HttpService.class.getName()); HttpService http = (HttpService) ctx.getService(ref); switch (event.getType()) { case ServiceEvent.REGISTERED: try { http.registerResources("/demo/page", "page", null); System.out.println("请通过/demo/page/login.htm访问"); } catch (NamespaceException e) { e.printStackTrace(); } break; case ServiceEvent.UNREGISTERING: http.unregister("/demo/page"); System.out.println("已卸载web模块!"); break; } } }
方式二:继承ServiceTracker基类:
package org.riawork.demo.web; import org.osgi.framework.BundleActivator; import org.osgi.framework.BundleContext; import org.osgi.framework.ServiceEvent; import org.osgi.framework.ServiceReference; import org.osgi.service.http.HttpService; import org.osgi.service.http.NamespaceException; import org.osgi.util.tracker.ServiceTracker; import org.osgi.util.tracker.ServiceTrackerCustomizer; public class Activator implements BundleActivator, ServiceListener { private BundleContext ctx; private ServiceReference ref; private LocalTracker tracker; public void start(BundleContext context) throws Exception { System.out.println("Hello World-Web!!"); this.ctx = context; this.tracker = new LocalTracker(context); this.tracker.open(); context.addServiceListener(this, "(&(objectClass=" + HttpService.class.getName() + "))"); } public void stop(BundleContext context) throws Exception { this.tracker.close(); this.tracker = null; System.out.println("Goodbye World-Web!!"); } private class LocalTracker extends ServiceTracker { public LocalTracker(BundleContext context) { super(context, HttpService.class.getName(), null); } public Object addingService(ServiceReference ref) { HttpService http = (HttpService) context.getService(ref); try { http.registerResources("/demo/page", "page", null); System.out.println("请通过/demo/page/login.htm访问"); } catch (NamespaceException e) { e.printStackTrace(); } return http; } public void removedService(ServiceReference ref, Object service) { HttpService http = (HttpService) service; http.unregister("/demo/page"); super.removedService(ref, service); System.out.println("已卸载web模块!"); } } }