首页 > 其他 > 详细

osgi实战学习之路:6. Service-1

时间:2014-08-19 01:02:03      阅读:414      评论:0      收藏:0      [点我收藏+]

什么是Service?


它是注册到osgi的一个java对象


Service注册:


通过BundleContext::registerService(java.lang.String[] clazzes, java.lang.Object service, java.util.Dictionary properties) 


Service查找及使用:


通过BundleContext::getServiceReference(java.lang.String clazz),返回ServiceReference
通过BundleContext::getService(ServiceReference reference) ,返回注册的服务对象


Service释放:


通过BundleContext::ungetService(ServiceReference reference) 



LADP:


 轻量级目录访问协议(Lightweight Directory Access Protocol)

bubuko.com,布布扣


1个Service对应一个实现类的注册与使用demo:


服务提供者:

student-manage/IStudentManage.java

package com.demo.service;

public interface IStudentManage {
	void add();
}


student-manage/Activator.java

package com.demo.service;

import java.util.Dictionary;
import java.util.HashMap;
import java.util.Hashtable;
import java.util.Map;

import org.osgi.framework.BundleActivator;
import org.osgi.framework.BundleContext;

import com.demo.service.impl.StudentManage;

public class Activator implements BundleActivator {

	public void start(BundleContext context) throws Exception {
		System.out.println("注册服务开始....");
		context.registerService(IStudentManage.class.getName(),
				new StudentManage(), null);
		System.out.println("注册服务结束....");
	}

	public void stop(BundleContext context) throws Exception {

	}

}

服务使用者:

student-action/Activator.java

package com.demo.action;

import org.osgi.framework.BundleActivator;
import org.osgi.framework.BundleContext;
import org.osgi.framework.ServiceReference;

import com.demo.service.IStudentManage;


public class Activator implements BundleActivator{
	public void start(BundleContext context) throws Exception {
		System.out.println("action  begin...");
		ServiceReference sf=null;
		try {
			//查找Service
			sf=context.getServiceReference(IStudentManage.class.getName());
			//调用服务
			IStudentManage studentManage = (IStudentManage)context.getService(sf);
			studentManage.add();
		} finally {
			context.ungetService(sf);
		}
		System.out.println("action  end...");
	}

	public void stop(BundleContext context) throws Exception {
	}

}

部署至karaf并查看结果:

bubuko.com,布布扣



一个Service对应多个实现(基于LDAP)demo2


服务提供者

student-manage/Activator.java

package com.demo.service;

import java.util.Dictionary;
import java.util.HashMap;
import java.util.Hashtable;
import java.util.Map;

import org.osgi.framework.BundleActivator;
import org.osgi.framework.BundleContext;

import com.demo.service.impl.StudentManageA;
import com.demo.service.impl.StudentManageB;

public class Activator implements BundleActivator {

	public void start(BundleContext context) throws Exception {
		System.out.println("注册服务开始....");
		//注册A
		Hashtable<String, String> dict=new Hashtable<String, String>();
		dict.put("name", "a");
		context.registerService(IStudentManage.class.getName(),
				new StudentManageA(), dict);
		//注册B
		dict=new Hashtable<String, String>();
		dict.put("name", "b");
		context.registerService(IStudentManage.class.getName(),
				new StudentManageB(), dict);
		System.out.println("注册服务结束....");
	}

	public void stop(BundleContext context) throws Exception {

	}

}

服务使用者

student-action/Activator.java

package com.demo.action;

import org.osgi.framework.BundleActivator;
import org.osgi.framework.BundleContext;
import org.osgi.framework.ServiceFactory;
import org.osgi.framework.ServiceReference;

import com.demo.service.IStudentManage;


public class Activator implements BundleActivator{
	public void start(BundleContext context) throws Exception {
		System.out.println("action  begin...");
		ServiceReference[] references=null;
		try {
			System.out.println("服务调用------------------");
			//查找Service
			String filter="(name=b)";
			references=context.getServiceReferences(IStudentManage.class.getName(), filter);
			//调用服务
			if(references.length==1){
				IStudentManage studentManage = (IStudentManage)context.getService(references[0]);
				studentManage.add();
			}else {
				throw new IllegalArgumentException("IStudentManage查找到多个实现类");
			}
			
		} finally {
			for(ServiceReference sf:references){
				context.ungetService(sf);
			}
			
		}
		System.out.println("action  end...");
	}

	public void stop(BundleContext context) throws Exception {
	}

}

部署到karaf及查看结果:

bubuko.com,布布扣



osgi实战学习之路:6. Service-1,布布扣,bubuko.com

osgi实战学习之路:6. Service-1

原文:http://blog.csdn.net/wobendiankun/article/details/38668607

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!