全手工快速开发osgi应用的方法

意义:直接使用编辑器编辑所需Osgi的服务,速度快、效率高。

OSGI容器:选择knopflerfish_osgi_5.1.0 (http://www.knopflerfish.org/),支持OSGI最新的R5标准。

方法:

1 在当前目录下编写Activator.java文件(不需要建立相应的包文件夹——省事),内容如下(这个参照Felix的tutorial)

package tutorial.example1;

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

/**
 * This class implements a simple bundle that utilizes the OSGi
 * framework's event mechanism to listen for service events. Upon
 * receiving a service event, it prints out the event's details.
**/
public class Activator implements BundleActivator, ServiceListener
{
    /**
     * Implements BundleActivator.start(). Prints
     * a message and adds itself to the bundle context as a service
     * listener.
     * @param context the framework context for the bundle.
    **/
    public void start(BundleContext context)
    {
        System.out.println("Starting to listen for service events.");
        context.addServiceListener(this);
    }

    /**
     * Implements BundleActivator.stop(). Prints
     * a message and removes itself from the bundle context as a
     * service listener.
     * @param context the framework context for the bundle.
    **/
    public void stop(BundleContext context)
    {
        context.removeServiceListener(this);
        System.out.println("Stopped listening for service events.");

        // Note: It is not required that we remove the listener here,
        // since the framework will do it automatically anyway.
    }

    /**
     * Implements ServiceListener.serviceChanged().
     * Prints the details of any service event from the framework.
     * @param event the fired service event.
    **/
    public void serviceChanged(ServiceEvent event)
    {
        String[] objectClass = (String[])
            event.getServiceReference().getProperty("objectClass");

        if (event.getType() == ServiceEvent.REGISTERED)
        {
            System.out.println(
                "Ex1: Service of type " + objectClass[0] + " registered.");
        }
        else if (event.getType() == ServiceEvent.UNREGISTERING)
        {
            System.out.println(
                "Ex1: Service of type " + objectClass[0] + " unregistered.");
        }
        else if (event.getType() == ServiceEvent.MODIFIED)
        {
            System.out.println(
                "Ex1: Service of type " + objectClass[0] + " modified.");
        }
    }
}

2 编写manifest.mf文件

Manifest-Version: 2.0
Bundle-Name: Service listener example——描述信息,用于查看该Bundle显示的标题)
Bundle-Description: A bundle that displays messages at startup and when service events occur——bundle的简短说明信息
Bundle-Vendor: Knopflerfish
Bundle-Version: 1.0.0
Bundle-Activator: tutorial.example1.Activator——完整类名,别写错了
Import-Package: org.osgi.framework

3 编写build.sh文件,内容为:

rm *.jar
mkdir classes
javac -d classes -cp ~/knopflerfish_osgi_5.1.0/osgi/framework.jar *.java
jar cfm Hello.jar manifest.mf -C ./classes tutorial/example1

(Windows下编写build.bat文件,内容相应修改)

说明:

在jar命令行中,Hello.jar文件基本名随意取; ./classes与tutorial/example1之间有空格,表示在classes目录下,将tutorial/example1包下的class文件压缩入包。

4 运行knopflerfish容器

cd ~/knopflerfish_osgi_5.1.0/osgi

java -jar ./framework.jar

然后,将上述3步骤中的Hello.jar拖入窗口bundle区域,ok。

所述方法的好处:完全命令行,不需要借助第三方工具,开发具有敏捷特性。

时间: 2024-08-27 19:11:27

全手工快速开发osgi应用的方法的相关文章

快速开发CUDA程序的方法

根据几年的CUDA开发经验,简单的介绍下CUDA程序的大概开发步骤,按照先修改CPU串行程序后移植到GPU平台的原理,把需要在GPU上做的工作尽量先在CPU平台上修改,降低了程序的开发难度,同时有利用bug的调试.通过实现一种快速.有效地CUDA并行程序开发的方法,提高CUDA并行程序开发效率,降低CUDA并行程序开发周期和难度. (1)    CPU串行程序分析 对于CPU串行程序,首先需要测试串行程序中的热点函数,以及分析热点函数的并行性: a)       热点测试 根据时间的测试结果确定

度量快速开发平台网格勾选行(标识行),多选行获取方法

度量快速开发平台网格部件中勾选行与多选行都可以使用,我们向导中目前列出了勾选行的获取使用方法,多选行目前职能向导中没有列出,这里介绍一下.  勾选行获取,可以直接智能向导 "获取标识行" dim rows=网格部件1.GetMarkedDataRows()for each dr in rows   msgbox(dr["ID"])next 多选行获取效果: dim rows=网格部件1.GridView.GetSelectedRows()dim maxcount=0

基于插件化(OSGI)的开源快速开发平台——JXADF

JXADF是一个基于OSGi的企业级快速开发平台(已开源),他适合做各种信息管理系统. 更多详情,参见:http://osgi.jxtech.net 也可直接加QQ群: 429895245

HFun.快速开发平台(三)=》通用系统用户选择

系统中用户的选择使用特别多,将该功能统一实现可提升系统效率. 用户的选择实现相对简单,系统中基本都会提供,HFun.快速开发平台中的实现特点主要有: 1.用户的选择分为单用户选择和多用户选择. 2.用户的选择可通过部门进行筛选. 3.可通过用户名进行筛选. 4.提供Url传递默认选中项处理 5.提供全选.反选.取消选择操作. 6.提供回调方法供引用程序自定义数据处理. 7.数据加载.查询筛选使用jquery框架实现. 系统界面如下: 1.单人选择: 2.多人选择:

四、利用EnterpriseFrameWork快速开发基于WCF为中间件的三层结构系统

回<[开源]EnterpriseFrameWork框架系列文章索引> 本章内容与上一张<利用EnterpriseFrameWork快速开发Winform系统(C/S)>关系紧密,WCF模式只是在Winform模式中的界面层和逻辑层之间加入了WCF中间件用来实现双方的通讯,说得更简单一点就是把Winform模式中的winController控制器给拆分为wcfController与wcfclientControlle两个控制器并用WCF实现两个控制器之间的通讯,双方数据传递与Web模

Android 快速开发系列 打造万能的ListView GridView 适配器

转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/38902805 ,本文出自[张鸿洋的博客] 1.概述 相信做Android开发的写得最多的就是ListView,GridView的适配器吧,记得以前开发一同事开发项目,一个项目下来基本就一直在写ListView的Adapter都快吐了~~~对于Adapter一般都继承BaseAdapter复写几个方法,getView里面使用ViewHolder模式,其实大部分的代码基本都是类似的

开发指南专题十:JEECG微云快速开发平台--表单校验组件ValidForm

10.4Validform对象[方法支持链式调用] 如示例 var demo=$(".formsub").Validform(),那么demo对象会有以下属性和方法可以调用: tipmsg[object] 如:demo.tipmsg.s="error! no messageinputed."; 通过该对象可以修改除 tit 以外的其他提示文字,这样可以实现同一个页面的不同表单使用不同的提示文字. 具体可修改的提示文字 $.Tipmsg={//默认提示文字; tit:

web程序快速开发

关于web程序快速开发个人见解以及经历 由于在之前公司业务的发展,需要在基于核心业务的基础上开发其他较为独立的业务系统,所以就有了这个基于Dapper,DDD概念的基础框架,由于个人基于这个框架已经经历过两个系统的开发,也因为其他项目团队需要基于这个框架进行其他系统的一些开发,所以需要对此框架有一些简单介绍和使用说明. 1.主要框架主体介绍 Dapper,DapperExtensions:Dapper框架集成. Topever.AutoMapper:对象映射扩展,这个项目其实可以集成到公共项目T

关于web程序快速开发个人见解以及经历

由于在之前公司业务的发展,需要在基于核心业务的基础上开发其他较为独立的业务系统,所以就有了这个基于Dapper,DDD概念的基础框架,由于个人基于这个框架已经经历过两个系统的开发,也因为其他项目团队需要基于这个框架进行其他系统的一些开发,所以需要对此框架有一些简单介绍和使用说明. 1.主要框架主体介绍 Dapper,DapperExtensions:Dapper框架集成. Topever.AutoMapper:对象映射扩展,这个项目其实可以集成到公共项目Topevery.Infrastructu