几种OSGi框架

Several independently implemented OSGi frameworks exist today, including four that are available as open source software.
  • Equinox  is the most widely deployed OSGi framework today owing to its use in the core runtime of Eclipse. It can also be found in many in-house custom applications as well as packaged products such as Lotus Notes and IBM WebSphere Application Server. Equinox implements Release 4.1 of the OSGi specifications and is licensed under the Eclipse Public License (EPL).
  • Knopflerfish  is a popular and mature implementation of both OSGi Release 3 and Release 4.1 specifications. It is developed and maintained by Makewave AB, a company based in Sweden, and is licensed under a BSD-style license. Makewave also offers Knopflerfish Pro, a commercially supported version of Knopflerfish.
  • Felix  is a community implementation of the OSGi Release 4.x under the Apache Group umbrella. It is designed particularly for compactness and  ease of embedding, and is the smallest (in terms of minimal JAR size) of the Release 4 implementations. It is licensed under the Apache License Version 2.0.
  • Concierge  is a very compact and highly optimized implementation of OSGi Release 3. This makes it particularly suited to resource-constrained plat-forms such as mobile phones. Concierge is licensed under a BSD-style license.
 

下载Equinox框架

下载解压后,设置环境变量EQUINOX_HOME。

设置Eclipse

设置User Libraries,将Equinox目录下的plugins/org.eclipse.-osgi_version.jar 文件加入到用户库中。
接下来创建一个Java项目,命名为 “OSGi Tutorial” ;选择依赖上述User Library。

运行Equinox

We’re now going to run Equinox using the Eclipse launcher. We could run Equinox from a shell or command prompt window, but if we run under Eclipse we can easily switch to debugging mode when things go wrong.
 

Run Configuration

From the main menu, select Run → Run Configurations (or Open Run Dia-log in older Eclipse versions). On the left hand side select “Java Application” and click the “New” button. Change the Name field at the top to “Equinox”. Ensure the Project field is set to the “OSGi Tutorial” project, and then click the Search button next to the Main class field. The only available “main” class should be the one called EclipseStarter, so choose that one.
 
Now flip to the Arguments tap of the Run Configurations dialog. In the Program Arguments field enter the following arguments exactly:

−console −configuration runtime

  • The first argument -console indicates that Equinox should create an interactive console for us to work with – if we forget this argument then it will start up and then immediately exit!
  • The second argument (consisting of two words, -configuration runtime) asks Equinox to create its “configuration area” in a local directory named runtime. The configuration area is where Equinox stores its temporary state information.

Run

Now click Run. Equinox will print the following:

osgi >
This is Equinox’s standard shell prompt and indicates it is waiting for input from us. We are now ready to run some commands. The most frequently used command is ss, which prints the list of currently installed bundles along with their state. Let’s try running ss now:

osgi > ss

Framework is launched .

id State Bundle


ACTIVE org . eclipse . osgi_3 .
.
. v20090311 −

The only bundle here is Equinox itself, listed under the name of the Equinox JAR file. It is also called the
“System Bundle”, and it always has the bundle ID of zero.

Run from command line

For reference, if we wanted to run Equinox from the command line then we could do so as follows, assuming we have a shell variable named EQUINOX_HOME set to the installation directory we created earlier:

java −jar $EQUINOX_HOME
/ plugins
/ org.eclipse.osgi_∗.jar −console −configuration runtime

Install bundle

For the moment, there is not much more we can do with Equinox until we install some more interesting bundles. However you may at this point wish to explore the commands available by typing help. When bored with this, don’t shutdown Equinox just yet; leave it running for now.
 
我们先创建一个bundle,名为helloworld.jar。BundleActivator如下:

package org.osgi.tutorial ;


import org.osgi.framework.BundleActivator ;


import org.osgi.framework.BundleContext ;


public
class HelloWorldActivator
implements BundleActivator {

   
public
void start ( BundleContext context )
throws Exception {

      System.out.println (
" Hello , World !" ) ;

  }

   
public
void stop ( BundleContext context )
throws Exception {

      System.out.println (
" Goodbye , World !" ) ;

  }

}

 
Now we can try installing this bundle into Equinox, which you should still have running from the previous section (if not, simply start it again). At the Equinox shell prompt, type the command:

install file
: helloworld . jar

Equinox will respond with the bundle ID that it has assigned to the bundle:

Bundle id is

 
Let’s take a quick look at the bundle list by typing ss. It should look like this:

Framework is launched .

id State Bundle


ACTIVE org . eclipse . osgi_3 .
.
. v20090311 −

INSTALLED helloworld_0 .
.

 

Start bundle

Now the moment of truth: start the new bundle by typing start 1. We should see:

osgi
> start

Hello , World
!

 
What does the bundle list look like now if we type ss? We’ll ignore the rest of the listing, as it hasn’t changed, and focus on our bundle:

ACTIVE helloworld_0 .
.

 

Stop bundle

The bundle is now in the “ACTIVE” state, which makes sense since we have explicitly started it. Now stop the bundle with stop 1:

osgi
> stop

Goodbye , World
!

 
This works as expected. What does the bundle list look like now?

RESOLVED helloworld_0 .
.

 
This is interesting. When we started the bundle it changed its state from Installed to Active, but when we stopped the bundle it didn’t go back to Installed: instead it went to a new state “RESOLVED”.
refer to: OSGi生命周期

 
 
 
 
 
 
 
 
 
 

基于Equinox构建OSGi项目的更多相关文章

  1. Jenkins:基于linux构建ivy项目

    Jenkins:基于linux构建ivy项目 (二) 基于以上<Jenkins:VMware虚拟机Linux系统的详细安装和使用教程(一)>的配置再进行对ivy项目构建: 启动tomcat ...

  2. 基于已构建S2SH项目配置全注解方式简化配置文件

    如果还不熟悉s2sh项目搭建的朋友可以先阅读 eclipse环境下基于tomcat-7.0.82构建struts2项目 eclipse环境下基于已构建struts2项目整合spring+hiberna ...

  3. 基于 Equinox 的 OSGi Console 的研究和探索

    自定制 OSGi Console 进行组建和服务生命周期管理模块化编程的好处已经很好地被理解了约 40 年,但在 OSGi 之前,开发人员不得不自己发明模块化设计和系统.随着软件应用体系结构的不断发展 ...

  4. eclipse环境下基于已构建struts2项目整合spring+hibernate

    本文是基于已构建的struts2项目基础上整合 spring+hibernate,若读者还不熟悉struts2项目,请先阅读 eclipse环境下基于tomcat-7.0.82构建struts2项目 ...

  5. 基于dubbo构建分布式项目与服务模块

      关于分布式服务架构的背景和需求可查阅http://dubbo.io/.不同于传统的单工程项目,本文主要学习如何通过maven和dubbo将构建分布项目以及服务模块,下面直接开始. 创建项目以及模块 ...

  6. 基于Maven构建Web项目

    1.下载Maven,并配置好环境变量 2.打开命令行窗口,输入以下命令构建Maven Web项目 mvn archetype:generate -DgroupId=com.hello -Dartifa ...

  7. 【转载】基于webpack构建react项目

    第一部分链接:下载所需内容并构建基础的页面 第二部分链接:添加webpack中的一些常用babel和loader 第三部分链接:开发环境与生产环境的配置

  8. 基于maven构建javaweb项目思路梳理及改进

    需要准备的东西: Jdk. myeclipse. maven包 预装jdk环境 1.maven安装及配置: a)      详见url https://www.cnblogs.com/eagle668 ...

  9. 基于Maven构建的Spring+Mybatis项目

    项目的目录结构: 1.基于Maven构建Web项目 参考:基于Maven构建Web项目 2.导入项目依赖 Spring 核心容器(Beans.Core.Context.Context support. ...

随机推荐

  1. IOS 开发 【os x 使用常识】

    开始看<learn Objective-C on the Mac>这本书,很基础,准备快速看完. 刚接触mac 的 os x 系统,很不适应,介绍一点我刚学的基本常识. 1.os x 显示 ...

  2. 9.7noip模拟试题

    题目名称 日历游戏 最大公约数 密码 英文代号 calendar gcd pasuwado 输入文件名 calendar.in gcd.in pasuwado.in 输出文件名 calendar.ou ...

  3. codevs1404字符串匹配

    /* 无奈我改了那么久还是看的题解 首先跑一边kmp 几下ans[p]表示总共匹配到长度p的次数 这些不一定都是恰好到p 所以在处理一下 ans[p]通过处理变成 所有的匹配到长度p的次数 最后答案就 ...

  4. CSS基本知识介绍

    CSS (Cascading Style Sheet)叠层样式表.用于控制网页样式并允许将样式信息与网页内容分离的一种标记性语言. 样式的几种控制方法: 1.行内样式         <div ...

  5. 很棒的jQuery代码片段分享

    jQuery实现的内链接平滑滚动 不需要使用太复杂的插件,只要使用下载这段代码即可实现基于内部链接的平滑滚动 $('a[href^="#"]').bind('click.smoot ...

  6. SVN global ignore pattern for c#

    *.resharperoptions Web_Data log */[Bb]in [Bb]in */obj obj  */TestResults TestResults *.svclog Debug ...

  7. wpf 控件复制 克隆

    方法1: string xaml = System.Windows.Markup.XamlWriter.Save(rtb1); RichTextBox rtb2 =System.Windows.Mar ...

  8. 重新开始学习javase_隐藏实施过程

    一.隐藏实施过程 对于隐藏实施过程,thinking in java中讲了很好,无非就是一个好的程序尽量做到,对外公开的程序,即使内部程序发生变动,也不会影响这些公开的服务的使用 类的导入java中的 ...

  9. 跟我学android- 创建运行环境(二)

    Android程序 需要在Android手机上运行,因此 Android开发时 必须准备相关运行,调试环境. Android真机(建议使用真机,速度快,效果好) Android虚拟设备(AVD) 使用 ...

  10. 对于HttpContext.Current的一点理解

    string[] userInfomationSplits = HttpContext.Current.User.Identity.Name.Split(new string[] { "\\ ...