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模块!");
            }
        }
    }
  • 相关阅读:
    全国最全的省,市,县,电话号前缀,邮编数据
    数组的高级用法
    Maven Project configuration is not up-to-date with pom.xml错误解决方法
    HighCharts开发说明
    Java基础复习之二:运算符,键盘录入,流程控制语句,if语句,三元运算
    Java基础复习之一篇:关健字,标识符,注释,常量,进制转换,变量,数据类型,数据类型转换
    ehcache 缓存技术
    Write operations are not allowed in read-only mode
    浮点运算与boost.multiprecision
    关于OpenCASCADE数组序列的起始值
  • 原文地址:https://www.cnblogs.com/eastson/p/3624806.html
Copyright © 2011-2022 走看看