zoukankan      html  css  js  c++  java
  • 监听OSGi服务

    方法一:实现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模块!");
            }
        }
    }
  • 相关阅读:
    windows 程序设计自学:窗口正中显示Hello,World
    为网站图片增加延迟加载功能,提升用户体验
    线性表顺序存储
    sys.stdout sys.stderr的用法
    python 跳出嵌套循环方法
    * 与 ** 在调用函数时的作用
    twisted 学习笔记二:创建一个简单TCP客户端
    给命令行上色
    __new__ 的简单应用
    网友对twisted deferr的理解
  • 原文地址:https://www.cnblogs.com/eastson/p/3624806.html
Copyright © 2011-2022 走看看