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模块!");
            }
        }
    }
  • 相关阅读:
    无线网络的切换bat
    远程桌面远程服务器拷贝失灵 解决方法
    不能将 Null 值赋给类型为 (不可为 null 的值类型)的成员。解决方法
    应该改变面向对象的说法
    Windows 2012 装 Remote Desktop Organizer 无法连接到其他远程服务器
    JavaScript 运行时错误: 无法获取未定义或 null 一种解决方案
    ssd硬盘u盘装win7扩展文件时0x80070570错误
    swfit-小知识Demo
    ios-简单算法
    swfit-扩展语法
  • 原文地址:https://www.cnblogs.com/eastson/p/3624806.html
Copyright © 2011-2022 走看看