- 浏览: 186274 次
- 性别:
- 来自: 杭州
文章分类
最新评论
-
cloverprince:
记得小学学过,“按级读,数的中间有多少0都只读一个‘零’,每级 ...
脑残系列之二:汉字转换数字 -
skying007:
...
模糊查询使用对索引的影响(2008.4.11面试) -
j1a1v1a1:
好
谢谢
SQL:根据第二张表字段值更新第一张表字段值(2008.4.11笔试) -
wxq594808632:
String str = "abc";
S ...
字符串反转 -
zhuqx1130:
这个是经典面试题
字符串反转
一、创建Plug-in项目:osgiexample
MANIFEST.MF文件
二、创建Plug-in项目:osgiexampleclient
MANIFEST.MF文件
三、部署并运行Bundle应用
将开发的osgiexample和osgiexampleclient两个Bundle应用导出成Jar文件并启动OSGi服务平台。
Console Output:
附:OSGi Console Command
OSGi manifest.mf 文件选项:
package osgi.example.service; /* * 定义服务接口<br/> * 为了将服务接口和服务实现分离,方便其它Bundle引用该服务,我们通常需要将该服务接口单独放在一个包内。 */ public interface QueryService { public boolean queryUserName(String userName); }
package osgi.example.activator; import osgi.example.service.QueryService; /* * 服务接口实现 */ public class QueryServiceImp implements QueryService { private String[] userNames = { "Marry", "John", "David", "Rachel", "Ross" }; public boolean queryUserName(String userName) { for (String tempUserName : userNames) { if (tempUserName.equals(userName)) { return true; } } return false; } }
package osgi.example.activator; import java.util.Properties; import org.osgi.framework.BundleActivator; import org.osgi.framework.BundleContext; import osgi.example.service.QueryService; /* * 该类用来启动和停止Bundle应用。 */ public class Activator implements BundleActivator { /* * 利用BundleContext注册一个查询服务,并且为该服务设置相关属性。 */ public void start(BundleContext context) throws Exception { Properties props = new Properties(); props.put("ClassRoom", "ClassOne"); context.registerService(QueryService.class.getName(), new QueryServiceImp(), props); } public void stop(BundleContext context) throws Exception { } }
MANIFEST.MF文件
Manifest-Version: 1.0 Bundle-ManifestVersion: 2 Bundle-Name: OsgiExample Bundle Bundle-SymbolicName: osgiexample Bundle-Version: 1.0.0 Bundle-Activator: osgi.example.activator.Activator Import-Package: org.osgi.framework;version="1.3.0" Eclipse-LazyStart: true Bundle-Localization: plugin Export-Package: osgi.example.service
二、创建Plug-in项目:osgiexampleclient
package osgi.exampleclient.activator; import java.io.BufferedReader; import java.io.InputStreamReader; import org.osgi.framework.BundleActivator; import org.osgi.framework.BundleContext; import org.osgi.framework.ServiceReference; import osgi.example.service.QueryService; /* * 在OSGi平台上查找并引用OsgiExample Bundle应用已经注册的查询服务。 */ public class Activator implements BundleActivator { public void start(BundleContext context) throws Exception { ServiceReference[] serviceReferences = context.getServiceReferences( QueryService.class.getName(), "(ClassRoom=*)"); if (serviceReferences != null) { System.out.println("Enter a blank line to exit."); BufferedReader bufferedReader = new BufferedReader( new InputStreamReader(System.in)); String userName = ""; while (true) { System.out.print("Enter a Name: "); userName = bufferedReader.readLine(); if (userName.length() == 0) { break; } QueryService queryService = (QueryService) context .getService(serviceReferences[0]); if (queryService.queryUserName(userName)) { System.out.println("The Name is Correct."); } else { System.out.println("The Name is Incorrect."); } context.ungetService(serviceReferences[0]); } } else { System.out.println("Couldn't find any query service."); } } public void stop(BundleContext context) throws Exception { } }
MANIFEST.MF文件
Manifest-Version: 1.0 Bundle-ManifestVersion: 2 Bundle-Name: Osgiexampleclient Bundle Bundle-SymbolicName: osgiexampleclient Bundle-Version: 1.0.0 Bundle-Activator: osgi.exampleclient.activator.Activator Import-Package: osgi.example.service,org.osgi.framework;version="1.3.0" Eclipse-LazyStart: true Bundle-Localization: plugin
三、部署并运行Bundle应用
将开发的osgiexample和osgiexampleclient两个Bundle应用导出成Jar文件并启动OSGi服务平台。
Console Output:
osgi> ss Framework is launched. id State Bundle 0 ACTIVE org.eclipse.osgi_3.3.2.R33x_v20080105 443 ACTIVE osgiexample_1.0.0 osgi> install file:///C:\Documents%20and%20Settings\Administrator\桌面\新建文件夹\osgiexampleclient.jar Bundle id is 1204 osgi> ss Framework is launched. id State Bundle 0 ACTIVE org.eclipse.osgi_3.3.2.R33x_v20080105 443 ACTIVE osgiexample_1.0.0 1204 INSTALLED osgiexampleclient_1.0.0 osgi> start 1204 Enter a blank line to exit. Enter a Name: test The Name is Incorrect. Enter a Name: Ross The Name is Correct. Enter a Name: osgi> ss Framework is launched. id State Bundle 0 ACTIVE org.eclipse.osgi_3.3.2.R33x_v20080105 443 ACTIVE osgiexample_1.0.0 1204 ACTIVE osgiexampleclient_1.0.0 osgi> stop 1204 osgi> ss Framework is launched. id State Bundle 0 ACTIVE org.eclipse.osgi_3.3.2.R33x_v20080105 443 ACTIVE osgiexample_1.0.0 1204 RESOLVED osgiexampleclient_1.0.0
附:OSGi Console Command
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 bundle, 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 bundle(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
OSGi manifest.mf 文件选项:
Bundle-Activator 该类用于启动和停止绑定包。在上面的示例插件中,指定了 org.eclipse.pde.internal.ui.PDEPlugin 类。该类扩展 org.eclipse.core.runtime.Plugin,实现了 BundleActivator 接口。 Bundle-ClassPath 该属性指定要用于绑定包的 CLASSPATH。该属性可以包含对绑定包 jar 文件中目录或 jar 文件的引用。可以使用句点指明绑定包的根。在示例 Eclipse PDE 绑定包中,指定了绑定包 jar 文件中的 org.eclipse.pde.ui_3.1.0.jar。如果将插件的源版本导入工作区中,导入过程将更改绑定包 CLASSPATH 以显示为 Bundle-ClassPath:,这允许插件的开发版本挑选已编译的绑定包类。 Bundle-Version 该属性指定绑定包的版本号。包导入和必需的绑定包规范可以包括绑定包版本号。 Export-Package 该属性指定要公共暴露给其他插件的所有包。 Import-Package 该属性指定要从必需插件中显式导入的所有包。默认情况下,必须为要启动的绑定包解析所有包。还可以将包导入指定为可选项,以支持包不存在的情况。显式导入的类在 Require-Bundle 插件中的包之前解析。 Require-Bundle 该属性指定要在给定绑定包中导入使用的绑定包及其已导出的包。指定的绑定包在显式包导入之后解析。
- osgi_example.rar (14.6 KB)
- 下载次数: 68
发表评论
-
drools内存泄露问题排查分析
2009-12-13 14:12 5055一、现象 某系统使用了drools规则引擎对用 ... -
尝试给SOFA下的一个定义
2009-09-11 18:46 7361OSGI:服务与组件(Components & ... -
输出方法调用堆栈
2009-06-25 16:45 1838Throwable ex = new Th ... -
Tomcat 5 Startup Sequence
2008-11-09 23:56 1362Licensed to the Apache Soft ... -
Tomcat debug模式启动
2008-11-09 21:59 20554在%CATALINA_HOME%\bin\startup.ba ... -
计算java对象大小
2008-10-14 20:43 2951/** * * http://hi.baidu. ... -
jmock入门
2008-10-04 16:45 2511package jmock; import juni ... -
svn回滚版本库
2008-09-20 15:35 3924这种情况下,有多种办法可以进行撤销修改。一般我们推荐用s ... -
实例化BeanFactory三种方法
2008-08-04 22:56 1731package com.test.spring; imp ... -
Spring定时任务
2008-07-30 09:10 1084<bean id="Schedul ... -
去掉重复值IO操作
2008-07-30 09:03 1383import java.io.BufferedReader ... -
树形结构输出对象声明的所有属性键值
2008-07-13 21:01 1503/** * 获得Student对象声明的所有属性键 ... -
java日期处理
2008-04-20 15:32 2910一、获取系统时间两种方法 // 1、java.util ... -
JSR(转载)
2008-03-31 13:14 1170JSR是Java Specification Requests ... -
Java编译器对于String常量表达式的优化(转载)
2008-03-31 13:11 1070首先把问题摆出来,先看这个代码 String a = & ...
相关推荐
通过这个例子,学习者可以了解OSGi Bundle的结构,如何在EQUINOX上部署和管理它们,以及如何使用Eclipse作为开发工具来创建和调试OSGi应用。这涉及到理解Bundle的生命周期、MANIFEST.MF文件的编写、Eclipse插件的...
总结来说,基于Equinox的OSGi应用开发是一种强大的模块化开发方式,它提供了高度的灵活性和可扩展性。通过学习和实践,我们可以创建更加健壮、易于维护的Java应用程序。"helloworld"项目是一个很好的起点,它能帮助...
以下是基于Eclipse 3.3的Equinox OSGi开发的主要知识点: 1. **OSGi基础知识**:理解OSGi的核心概念,包括模块(Bundle)、服务、生命周期(启动、停止、更新、卸载)以及依赖管理。每个OSGi模块(Bundle)都是一个...
为了进行基于Equinox的OSGi Bundle开发,首先需要确保以下软件已安装在你的机器上:Eclipse SDK 3.2(或更高版本),可以从eclipse.org下载。此外,还需要从CVS获取教程项目,具体步骤包括设置CVS Repository ...
由于IBM的强力支持,Equinox不仅具有良好的文档和社区资源,也成为开发者进行OSGi应用开发的首选框架。 【OSGi应用开发】 开发OSGi应用程序通常包括以下几个步骤: 1. **环境准备**:确保拥有一个支持OSGi R4的...
**基于Eclipse开发OSGI的简单实例** OSGi(Open Services Gateway Initiative)是一种Java模块化系统,它允许在单个JVM上动态地部署、管理、发现和使用服务。Eclipse是一个广泛使用的开源集成开发环境(IDE),它...
为了开发基于OSGi的应用程序,需要使用实现了OSGi标准的框架。目前市场上有几种流行的OSGi框架: 1. **Equinox**:这是Eclipse项目中使用的OSGi框架,也是Eclipse强大插件体系的基础。由于得到了IBM的支持,Equinox...
例如,Eclipse IDE就是基于OSGi框架构建的,它允许开发者动态地添加、卸载插件而不需要重启整个开发环境。在企业应用中,OSGi可以用来构建服务网关或者中间件,以支持微服务架构。 由于OSGi提供了一个严格的模块化...
Equinox OSGi是IBM公司开发的一个开源OSGi实现,它是Eclipse项目的一部分,用于创建模块化、可扩展且轻量级的应用程序。OSGi(Open Service Gateway Initiative)是一种Java平台的标准,它允许开发者将应用程序分解...
1. **Equinox简介**:Equinox是一个高度模块化、动态的Java运行环境,基于OSGi框架规范构建。它体积小巧,性能卓越,且高度可定制。Equinox是所有Eclipse系统的基础,从嵌入式航空自助登机亭、滑雪场闸门到丰富的...
总的来说,配置一个基于Eclipse Equinox OSGi的Web应用程序涉及对OSGI基本概念的理解、Eclipse Equinox的使用、Web服务的封装以及OSGI环境下的服务注册和发现。通过这种方式,你可以构建一个高度模块化、可扩展且...
让OSGi支持JSP和JSF时必须用到的一个Bundle,有用到的可以下载,有耐心的童鞋也可到dev.eclipse.org的CVS开发空间去找找咯。
Spring框架则是一个流行的轻量级Java企业级应用开发框架,它提倡面向接口编程和依赖注入(DI)原则,有助于减少代码耦合度和提高组件的可测试性。Spring-DM(现在称为Spring OSGi)是Spring框架的一个扩展,旨在将...
"基于 OSGi 的 RCP 测试 1 Equinox" 指的是一个关于使用 OSGi(Open Services Gateway Initiative)框架构建 Rich Client Platform (RCP) 应用程序的测试项目,重点是 Equinox 实现。Equinox 是 Eclipse 基金会的一...
OSGi(Open Services Gateway Initiative)是一种开放标准...通过这本书和源代码的学习,开发者可以深入理解OSGi和Equinox的工作原理,掌握如何构建、管理和维护基于OSGi的复杂Java应用程序,提升软件设计和开发能力。
Equinox是IBM贡献给Eclipse基金会的一个OSGi实现,它是Eclipse IDE的基础,使得开发者可以构建、管理和运行基于OSGi的Java应用。 在"OSGi与Equinox 创建高度模块化的Java系统 第4章完整源码"中,我们可以学习到以下...
通过学习这个主题,开发者不仅可以提升对模块化编程的理解,还能掌握一种更高效、灵活的Java应用开发方式。无论是在桌面应用、服务器端应用还是嵌入式系统中,OSGi都能带来显著的优势。因此,深入研究OSGi和Equinox...
在IT行业中,Eclipse是一款广泛使用的Java开发集成环境,而Spring框架则是企业级应用开发的首选框架之一。OSGi(Open Services Gateway Initiative)则是一种模块化系统和Java应用程序执行环境,它提供了动态模块...