OSGi:Open Service GateWay Initiative。
熟悉Myeclipse的开发者肯定会喜欢它的插件机制的,在这种可扩展的机制后面,就是OSGi 的支持。Equinox就是一个OSGI规范的实现。我在MyEclipse下做了个小小的例子。通过这个例子,能对OSGI有个直观的感受。
1,建立插件工程:名称为:com.systemmanagement.services
选择目标平台的时候要注意选择OSGi Framework,Standard和Equinox都可以。
然后就是在这个工程下建立一个服务接口:
package com.systemmanagement.services.monitor;
public interface SysMonitor {
public String showCPUInfo();
}
为了让这个接口能作为服务被导出,需要在Manifest文件中做点修改:
加入这句:
Export-Package: com.systemmanagement.services.monitor
2,再新建一个插件工程,名称为,com.systemmanagement.cpumonitor.建立这个工程的过程中选中自动生成Activator。
这个工程中有一个CpuMonitor类实现了SysMonitor接口。这个类的代码如下:
package com.systemmanagement.cpumonitor;
import com.systemmanagement.services.monitor.SysMonitor;
public class CpuMonitor implements SysMonitor{
public String showCPUInfo()
{
return "CPU is in a good state ,don't worry";
}
}
同样的要对Manifest文件做修改:
加入:
Import-Package: com.systemmanagement.services.monitor,org.osgi.framework;version="1.3.0"
自动生成的Activator类的代码有start和stop方法要实现:
代码如下:
package com.systemmanagement.cpumonitor;
import org.osgi.framework.BundleActivator;
import org.osgi.framework.BundleContext;
import com.systemmanagement.services.monitor.SysMonitor;
import com.systemmanagement.cpumonitor.CpuMonitor;
import org.osgi.framework.ServiceRegistration;
import java.util.Properties;
public class Activator implements BundleActivator {
/*
* (non-Javadoc)
* @see org.osgi.framework.BundleActivator#start(org.osgi.framework.BundleContext)
*/
BundleContext context=null;
ServiceRegistration sr=null;
public void start(BundleContext context) throws Exception {
this.context=context;
CpuMonitor cpumonitor=new CpuMonitor();
Properties pro=new Properties();
pro.put("device", "cpu");
sr=this.context.registerService(SysMonitor.class.getName(), cpumonitor, pro);
}
/*
* (non-Javadoc)
* @see org.osgi.framework.BundleActivator#stop(org.osgi.framework.BundleContext)
*/
public void stop(BundleContext context) throws Exception {
sr.unregister();
context=null;
}
}
3,还要再建立第三个插件工程,命名为com.systemmanagement.console。
先修改Manifest:Import-Package: com.systemmanagement.services.monitor, org.osgi.util.tracker, org.osgi.framework;version="1.3.0"
这个工程中有一下几个Class:
package com.systemmanagement.console;
import java.util.HashSet;
import java.util.Iterator;
import com.systemmanagement.services.monitor.SysMonitor;
public class ConsoleThread extends Thread{
private HashSet<SysMonitor> monitor=new HashSet<SysMonitor>();
private boolean running= Boolean.TRUE;
public ConsoleThread()
{}
public void addService(SysMonitor service)
{
this.monitor.add(service);
}
public void removeService(SysMonitor service)
{
this.monitor.remove(service);
}
public void run()
{
while(running)
{
for (Iterator<SysMonitor> sysit=monitor.iterator();sysit.hasNext();)
{
SysMonitor sysmonitor=sysit.next();
System.out.println(sysmonitor.showCPUInfo());
}
try
{
Thread.sleep(5000);
}
catch(Exception e)
{
System.out.println("Thread Exception");
}
}
}
public void stopThread()
{
this.running=false;
try
{
this.join();
}
catch(Exception e)
{
System.out.println(e.getLocalizedMessage());
}
}
}
MonitorServiceTracker:
package com.systemmanagement.console;
import org.osgi.framework.ServiceReference;
import org.osgi.util.tracker.*;
import org.osgi.framework.*;
import com.systemmanagement.services.monitor.*;
public class MonitorServiceTracker implements ServiceTrackerCustomizer {
private BundleContext bctx;
private ConsoleThread thread;
public MonitorServiceTracker(BundleContext ctx,ConsoleThread th)
{
this.bctx=ctx;
this.thread=th;
}
public Object addingService(ServiceReference arg0) {
// TODO Auto-generated method stub
SysMonitor service=(SysMonitor)bctx.getService(arg0);
thread.addService(service);
return service;
}
public void modifiedService(ServiceReference arg0, Object arg1) {
// TODO Auto-generated method stub
SysMonitor service=(SysMonitor)bctx.getService(arg0);
thread.addService(service);
}
public void removedService(ServiceReference arg0, Object arg1) {
// TODO Auto-generated method stub
SysMonitor service=(SysMonitor)bctx.getService(arg0);
thread.removeService(service);
}
}
还有一个Activator:
package com.systemmanagement.console;
import org.osgi.framework.BundleActivator;
import org.osgi.framework.BundleContext;
import org.osgi.util.tracker.*;
import com.systemmanagement.services.monitor.*;
public class Activator implements BundleActivator {
/*
* (non-Javadoc)
* @see org.osgi.framework.BundleActivator#start(org.osgi.framework.BundleContext)
*/
private BundleContext context;
private ServiceTracker servicetrack;
private ConsoleThread thread=new ConsoleThread();
public void start(BundleContext context) throws Exception {
this.context=context;
servicetrack=new ServiceTracker(context,SysMonitor.class.getName(),new MonitorServiceTracker(context,thread));
servicetrack.open();
this.thread.start();
}
/*
* (non-Javadoc)
* @see org.osgi.framework.BundleActivator#stop(org.osgi.framework.BundleContext)
*/
public void stop(BundleContext context) throws Exception {
servicetrack.close();
this.thread.stopThread();
}
}
4,要用到的代码就这些了,下面来看看效果吧。
上面我们建立的三个插件工程其实就是SOGI概念中的Bundle,那么这些bundle需要在OSGI框架下运行和管理,如果你装了Eclipse那么Equinox就是一个现有的SOGi框架了,在你的硬盘上找出这个包:org.eclipse.osgi.jar 版本可以是其他的。
我把它copy到了一个简单的目录下:F:commonLib/osgi下面;
然后在命令下进入到上述目录,运行:java -jar org.eclipse.osgi.jar -console
出现了 osgi-> 然后就可以运行sogi的命令了:
运行help可以查看到可用的命令,列举如下:
osgi> help
Valid commands:
---Controlling the OSGi framework---
launch - start the OSGi Framework
shutdown - shutdown the OSGi Framework
close - shutdown and exit
exit - exit immediately (System.exit)
init - uninstall all bundles
setprop <key>=<value> - set the OSGi property
---Controlling Bundles---
install - install and optionally start bundle from the given URL
uninstall - uninstall the specified bundle(s)
start - start the specified bundle(s)
stop - stop the specified bundle(s)
refresh - refresh the packages of the specified bundles
update - update the specified bundle(s)
---Displaying Status---
status [-s [<comma separated list of bundle states>] [<segment of bsn>]
] - display installed bundles and registered services
ss [-s [<comma separated list of bundle states>] [<segment of bsn>]] -
display installed bundles (short status)
services {filter} - display registered service details
packages {<pkgname>|<id>|<location>} - display imported/exported package
details
bundles [-s [<comma separated list of bundle states>] [<segment of bsn>
]] - display details for all installed bundles
bundle (<id>|<location>) - display details for the specified bundle(s)
headers (<id>|<location>) - print bundle headers
log (<id>|<location>) - display log entries
---Extras---
exec <command> - execute a command in a separate process and wait
fork <command> - execute a command in a separate process
gc - perform a garbage collection
getprop { name } - displays the system properties with the given name,
or all of them.
---Controlling Start Level---
sl {(<id>|<location>)} - display the start level for the specified bundl
e, or for the framework if no bundle specified
setfwsl <start level> - set the framework start level
setbsl <start level> (<id>|<location>) - set the start level for the bun
dle(s)
setibsl <start level> - set the initial bundle start level
---Controlling the Profiling---
profilelog - Display & flush the profile log messages
---Eclipse Runtime commands.---
diag - Displays unsatisfied constraints for the specified bundle(s).
---Controlling the Console---
more - More prompt for console output
然后就install我们刚才写的那几个Bundles吧;
第一步是打包刚才写的bundle:在myeclipse里面通过export,然后仅选择我们自己写的三个和osgi framework这四个,然后选择一个路径,finish之后,就自动生成了jar包。
接下来就可以运行install命令了:install :file:///youpath/service.jar
依次装载三个jar 。
然后在用ss查看状态和序号,
分别运行:start 2 ; start 3; start4 ;
好了你看到想要的结果了。然后体验osgi吧。
分享到:
相关推荐
【标题】"myeclipse 源代码例子"是一个针对初学者的优秀学习资源,它提供了实际的项目源代码,让学习者能够深入理解MyEclipse集成开发环境(IDE)的使用以及Java编程语言的实际应用。MyEclipse是Eclipse的商业版本,...
在本教程中,我们将深入探讨如何使用MyEclipse这一强大的集成开发环境来开发Web Service。Web Service是一种基于标准的、跨平台的、可互操作的服务,它允许不同系统之间的数据交换。MyEclipse作为Java EE开发工具,...
在这个"MyEclipse开发Struts的小例子"中,我们可以学习如何在MyEclipse中配置和使用Struts框架。首先,我们需要了解MyEclipse对Struts的支持,包括创建Struts项目、配置Struts的lib库、设置Struts配置文件(struts-...
【标题】: "myeclipse的项目例子" 涵盖了使用MyEclipse集成开发环境进行Java项目开发的基础知识。MyEclipse是基于Eclipse的一款强大的Java EE集成开发工具,它提供了丰富的功能,包括代码编辑、调试、发布以及数据库...
本教程共分为十八章,每一章都深入浅出地阐述了MyEclipse的各项功能和使用技巧,旨在帮助开发者提升工作效率,更好地进行项目开发。 第一章至第十章主要介绍了MyEclipse的基础知识和基本操作,包括安装配置、工作...
在本教程中,我们将深入探讨如何使用Eclipse和MyEclipse这两个流行的Java集成开发环境(IDE)来开发Web服务。Eclipse和MyEclipse都是强大的工具,尤其在创建和调试Web服务方面表现突出。让我们逐步了解这个过程。 ...
通过这份详尽的中文教程,初学者不仅能够掌握MyEclipse的使用,还能深入了解Java开发的基础知识,为日后的进阶学习打下坚实基础。尽管MyEclipse 6是一个较早的版本,但其核心概念和操作流程在新版本中依然适用,因此...
MyEclipse开发和部署Web工程, 不通过MyEclipse开发和部署Web工程, 通过MyEclipse开发和部署Web工程。
MyEclipse开发Web工程 MyEclipse开发Web工程 MyEclipse开发Web工程
以下是使用MyEclipse开发Web服务的基本步骤: 1. **创建新Web服务项目** - 在MyEclipse中,选择“File” -> “New” -> “Other”,然后在弹出的窗口中选择"MyEclipse" -> "Web" -> "Web Service Project",点击...
《使用MyEclipse开发的简单火车票订票系统详解》 在现代信息技术的推动下,Web开发技术已经发展得相当成熟,为各种在线服务提供了强大的支撑。本文将深入探讨一个基于MyEclipse开发的简单火车票订票系统,旨在帮助...
### MyEclipse开发教程知识点概览 #### 一、MyEclipse概述与优势 - **定义**:MyEclipse是一款基于Eclipse平台的商业级Java EE集成开发环境(IDE)。它提供了丰富的功能和插件,使Java开发更加高效便捷。 - **优势**...
网上的EJB3.0开发都太如人意,要么是JBossIDE+Ant开发,要么是MyEclipse。对于前者,对Ant和java编译过程不是很了解的人来说很难很难!...在这里我用一个小例子说明如何使用MyEclipse6.5快速开发EJB
以下将详细介绍使用MyEclipse开发Java WebService的相关知识点。 1. **MyEclipse简介** MyEclipse是基于Eclipse的商业级Java开发工具,它集成了多种功能,如Java EE应用开发、Web开发、数据库管理等。对于Java ...
myeclipse 开发文档,使用myeclipse IDE学习的极好文档
MyEclipse是一款强大的Java集成开发环境,特别适合于进行企业级的Web应用开发。它作为Eclipse的扩展,集成了很多方便的特性,...在实际使用中,不断探索和熟悉MyEclipse的各项功能,将会显著提升开发效率和项目质量。
MyEclipse是一款强大的集成开发环境(IDE),专为Java开发者设计,尤其适合进行JAVA和JAVA Web项目的开发。这款工具以其全面的功能集、优秀的代码编辑器和内置的服务器支持而受到广泛赞誉。在MyEclipse中,开发人员...
在IT行业中,集成开发环境(IDE)是...通过熟练掌握Eclipse和MyEclipse的使用,开发者可以更加高效地进行Java应用的开发,无论是简单的桌面应用还是复杂的分布式系统。希望这个搭建教程能为你的编程之旅提供便利。
总之,"myeclipse的ssm框架例子"是一个实践性的教程,旨在帮助开发者理解如何在MyEclipse环境下搭建和使用SSM框架进行实际开发,提供了一个完整的项目结构和流程,有助于提高Java web开发能力。通过学习和实践这个...
本篇“MyEclipse开发实例”教程全面介绍了如何使用MyEclipse进行EJB项目的开发过程,从环境搭建到项目创建、配置,再到具体开发流程中的代码生成与部署等方面都做了详细的说明。通过本教程的学习,开发者可以更加...