• 监听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模块!");
            }
        }
    }
  • 相关阅读:
    中断子系统5_电流层处理
    太极拳透劲的原理推测
    OpenSSL命令---pkcs7
    初步分析美国科研项目申报项目
    OpenSSL命令---pkcs8
    C#中Hashtable的用法
    android 中 ViewPager 的平常用法 ViewPager+ Views
    打卡汇报
    OpenSSL命令---pkcs12
    卡卡游戏引擎之快速入门
  • 原文地址:https://www.cnblogs.com/eastson/p/3624806.html
Copyright © 2020-2023  润新知