`
hustlong
  • 浏览: 123679 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

用MyEclipse开发OSGi的例子

    博客分类:
  • OSGI
阅读更多
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 源代码例子"是一个针对初学者的优秀学习资源,它提供了实际的项目源代码,让学习者能够深入理解MyEclipse集成开发环境(IDE)的使用以及Java编程语言的实际应用。MyEclipse是Eclipse的商业版本,...

    MyEclipse开发WebService教程

    在本教程中,我们将深入探讨如何使用MyEclipse这一强大的集成开发环境来开发Web Service。Web Service是一种基于标准的、跨平台的、可互操作的服务,它允许不同系统之间的数据交换。MyEclipse作为Java EE开发工具,...

    MyEclipse开发Struts的小例子

    在这个"MyEclipse开发Struts的小例子"中,我们可以学习如何在MyEclipse中配置和使用Struts框架。首先,我们需要了解MyEclipse对Struts的支持,包括创建Struts项目、配置Struts的lib库、设置Struts配置文件(struts-...

    myeclipse的项目例子

    【标题】: "myeclipse的项目例子" 涵盖了使用MyEclipse集成开发环境进行Java项目开发的基础知识。MyEclipse是基于Eclipse的一款强大的Java EE集成开发工具,它提供了丰富的功能,包括代码编辑、调试、发布以及数据库...

    MyEclipse开发中文教程

    本教程共分为十八章,每一章都深入浅出地阐述了MyEclipse的各项功能和使用技巧,旨在帮助开发者提升工作效率,更好地进行项目开发。 第一章至第十章主要介绍了MyEclipse的基础知识和基本操作,包括安装配置、工作...

    使用Eclipse MyEclipse开发Web Service的示例!(录像教程)

    在本教程中,我们将深入探讨如何使用Eclipse和MyEclipse这两个流行的Java集成开发环境(IDE)来开发Web服务。Eclipse和MyEclipse都是强大的工具,尤其在创建和调试Web服务方面表现突出。让我们逐步了解这个过程。 ...

    myeclipse开发中文教程

    通过这份详尽的中文教程,初学者不仅能够掌握MyEclipse的使用,还能深入了解Java开发的基础知识,为日后的进阶学习打下坚实基础。尽管MyEclipse 6是一个较早的版本,但其核心概念和操作流程在新版本中依然适用,因此...

    怎么用MyEclipse开发Web工程

    MyEclipse开发和部署Web工程, 不通过MyEclipse开发和部署Web工程, 通过MyEclipse开发和部署Web工程。

    MyEclipse开发Web工程

    MyEclipse开发Web工程 MyEclipse开发Web工程 MyEclipse开发Web工程

    myeclipse 开发webservice 方法

    以下是使用MyEclipse开发Web服务的基本步骤: 1. **创建新Web服务项目** - 在MyEclipse中,选择“File” -&gt; “New” -&gt; “Other”,然后在弹出的窗口中选择"MyEclipse" -&gt; "Web" -&gt; "Web Service Project",点击...

    使用myeclipse开发的简单火车票订票系统

    《使用MyEclipse开发的简单火车票订票系统详解》 在现代信息技术的推动下,Web开发技术已经发展得相当成熟,为各种在线服务提供了强大的支撑。本文将深入探讨一个基于MyEclipse开发的简单火车票订票系统,旨在帮助...

    MyEclipse开发教程 完整版 pdf

    ### MyEclipse开发教程知识点概览 #### 一、MyEclipse概述与优势 - **定义**:MyEclipse是一款基于Eclipse平台的商业级Java EE集成开发环境(IDE)。它提供了丰富的功能和插件,使Java开发更加高效便捷。 - **优势**...

    使用MyEclipse开发EJB

    网上的EJB3.0开发都太如人意,要么是JBossIDE+Ant开发,要么是MyEclipse。对于前者,对Ant和java编译过程不是很了解的人来说很难很难!...在这里我用一个小例子说明如何使用MyEclipse6.5快速开发EJB

    myeclipse开发Java WebService.zip

    以下将详细介绍使用MyEclipse开发Java WebService的相关知识点。 1. **MyEclipse简介** MyEclipse是基于Eclipse的商业级Java开发工具,它集成了多种功能,如Java EE应用开发、Web开发、数据库管理等。对于Java ...

    myeclipse 开发文档

    myeclipse 开发文档,使用myeclipse IDE学习的极好文档

    MyEclipse开发工具使用教程.rar

    MyEclipse是一款强大的Java集成开发环境,特别适合于进行企业级的Web应用开发。它作为Eclipse的扩展,集成了很多方便的特性,...在实际使用中,不断探索和熟悉MyEclipse的各项功能,将会显著提升开发效率和项目质量。

    MyEclipse开发环境工具

    MyEclipse是一款强大的集成开发环境(IDE),专为Java开发者设计,尤其适合进行JAVA和JAVA Web项目的开发。这款工具以其全面的功能集、优秀的代码编辑器和内置的服务器支持而受到广泛赞誉。在MyEclipse中,开发人员...

    搭建Eclipse+MyEclipse开发环境,搭建Eclipse

    在IT行业中,集成开发环境(IDE)是...通过熟练掌握Eclipse和MyEclipse的使用,开发者可以更加高效地进行Java应用的开发,无论是简单的桌面应用还是复杂的分布式系统。希望这个搭建教程能为你的编程之旅提供便利。

    myeclipse的ssm框架例子

    总之,"myeclipse的ssm框架例子"是一个实践性的教程,旨在帮助开发者理解如何在MyEclipse环境下搭建和使用SSM框架进行实际开发,提供了一个完整的项目结构和流程,有助于提高Java web开发能力。通过学习和实践这个...

    MyEclipse开发实例

    本篇“MyEclipse开发实例”教程全面介绍了如何使用MyEclipse进行EJB项目的开发过程,从环境搭建到项目创建、配置,再到具体开发流程中的代码生成与部署等方面都做了详细的说明。通过本教程的学习,开发者可以更加...

Global site tag (gtag.js) - Google Analytics