`
sswh
  • 浏览: 163728 次
  • 性别: Icon_minigender_1
社区版块
存档分类
最新评论

Felix的一段涂鸦的代码

    博客分类:
  • OSGi
阅读更多

一段涂鸦代码:简易的Felix启动:

 

public static void main(String[] args) throws Exception {
	Map<String, String> properties = new HashMap<String, String>();
	// 仅仅调试用,为了在调试模块访问felix.framework包
	properties.put(Constants.FRAMEWORK_SYSTEMPACKAGES_EXTRA,//
		"org.apache.felix.framework"// 
				+ ", org.apache.felix.framework.capabilityset"//
	);

	FrameworkFactory factory = new org.apache.felix.framework.FrameworkFactory();
	Framework framework = factory.newFramework(properties);
	// start之后,bundle-cache将会被还原,
	// 并按照bundle是否自动启动、bundle的startlevel以及框架的startlevel进行启动
	// 缓存的bundle不会触发install事件,但会触发start事件
	framework.start();

	// bundles目录下的是永远安装/启动的模块,即:不管模块是否上次在bundle-cache中已经卸载,重启后依然存在
	File[] files = new File("bundles").listFiles();
	List<File> installingFiles = Arrays.asList(files);
	// 排序的目的是保证在不同的环境下具有相同的执行效果;
	// 实践证明,同样的Windows XP系统,listFiles()的返回顺序不同
	// bundle的安装顺序,决定了bundle的id大小,
	// 而bundle.id大小对于package依赖的选取影响重大[当不同bundle导出了相同的package时] 
	Collections.sort(installingFiles);
	List<Bundle> installedBundles = new ArrayList<Bundle>(installingFiles.size());
	for (File file : installingFiles) {
		Bundle bundle = framework.getBundleContext().installBundle(file.toURI().toURL().toString());
		installedBundles.add(bundle);
	}

	for (Bundle bundle : installedBundles) {
		// 不仅启动模块,同时设置为autostart/autostop状态(即:由框架活动startlevel决定)
		bundle.start();
	}

	// 更改后续安装的bundle的缺省startlevel为核心模块缺省startlevel + 100
}

 

观察系统中已注册的所有服务:

@Validate
void start() throws Exception {
	Bundle bundle = FrameworkUtil.getBundle(getClass());
	BundleContext context = bundle.getBundleContext();

	Felix felix = (Felix) context.getBundle(Constants.SYSTEM_BUNDLE_LOCATION);
	Field field = Felix.class.getDeclaredField("m_registry");
	field.setAccessible(true);
	ServiceRegistry registry = (ServiceRegistry) field.get(felix);
	List<ServiceReference> refs = registry.getServiceReferences(null, null);
	Collections.sort(refs);
	Collections.reverse(refs);

	for (ServiceReference ref : refs) {
		System.out.println(ref + " in " + ref.getBundle());
		for (String key : ref.getPropertyKeys()) {
			Object value = ref.getProperty(key);
			if (value != null && value.getClass().isArray()) {
				value = Arrays.toString((Object[]) value);
			}
			System.out.println(key + " : " + value);
		}
		System.out.println();
	}
}

 

分享到:
评论
5 楼 sswh 2014-08-18  
ipojo运行时注册的服务2:

[org.apache.felix.ipojo.extender.ExtensionDeclaration] in org.apache.felix.ipojo [4]
ipojo.extension.name : component
objectClass : [org.apache.felix.ipojo.extender.ExtensionDeclaration]
service.id : 19

[org.apache.felix.ipojo.extender.ExtensionDeclaration] in org.apache.felix.ipojo [4]
ipojo.extension.name : handler
objectClass : [org.apache.felix.ipojo.extender.ExtensionDeclaration]
service.id : 20

若干个TypeDeclaration:
[org.apache.felix.ipojo.extender.TypeDeclaration] in org.apache.felix.ipojo [4]
objectClass : [org.apache.felix.ipojo.extender.TypeDeclaration]
service.id : 21

若干个HandlerFactory:
[org.apache.felix.ipojo.HandlerFactory] in org.apache.felix.ipojo [4]
component.description : factory name="controller" bundle="4" state="valid"
	requiredhandlers list="[]"
	missinghandlers list="[]"
component.properties : []
component.providedServiceSpecifications : []
factory.name : controller
factory.state : 1
handler.name : controller
handler.namespace : org.apache.felix.ipojo
handler.type : primitive
objectClass : [org.apache.felix.ipojo.HandlerFactory]
service.id : 32
service.pid : controller

4 楼 sswh 2014-08-18  
ipojo运行时注册的服务:

[org.osgi.service.cm.ConfigurationListener] in org.apache.felix.ipojo [4]
objectClass : [org.osgi.service.cm.ConfigurationListener]
service.description : iPOJO Configuration Admin Listener
service.id : 15
service.vendor : The Apache Software Foundation

[org.apache.felix.ipojo.extender.queue.QueueService] in org.apache.felix.ipojo [4]
ipojo.queue.mode : sync
objectClass : [org.apache.felix.ipojo.extender.queue.QueueService]
service.id : 16

[org.apache.felix.ipojo.extender.queue.QueueService, org.osgi.service.cm.ManagedService] in org.apache.felix.ipojo [4]
ipojo.queue.mode : async
objectClass : [org.apache.felix.ipojo.extender.queue.QueueService, org.osgi.service.cm.ManagedService]
org.apache.felix.ipojo.extender.ThreadPoolSize : 1
service.id : 17
service.pid : org.apache.felix.ipojo.extender.ExecutorQueueService

[org.apache.felix.ipojo.extender.DeclarationBuilderService] in org.apache.felix.ipojo [4]
objectClass : [org.apache.felix.ipojo.extender.DeclarationBuilderService]
service.id : 18
3 楼 sswh 2014-08-18  
gogo runtime注册的服务:

gogo shell注册的服务:

略。
2 楼 sswh 2014-08-18  
gogo command注册的服务:
[org.apache.felix.gogo.command.Basic] in org.apache.felix.gogo.command [1]
objectClass : [org.apache.felix.gogo.command.Basic]
osgi.command.function : [bundlelevel, frameworklevel, headers, help, install, lb, log, refresh, resolve, start, stop, uninstall, update, which]
osgi.command.scope : felix
service.id : 3

[org.apache.felix.gogo.command.Inspect] in org.apache.felix.gogo.command [1]
objectClass : [org.apache.felix.gogo.command.Inspect]
osgi.command.function : [inspect]
osgi.command.scope : felix
service.id : 4

[org.apache.felix.gogo.command.Files] in org.apache.felix.gogo.command [1]
objectClass : [org.apache.felix.gogo.command.Files]
osgi.command.function : [cd, ls]
osgi.command.scope : felix
service.id : 5

[org.apache.felix.gogo.command.OBR] in org.apache.felix.gogo.command [1]
objectClass : [org.apache.felix.gogo.command.OBR]
osgi.command.function : [deploy, info, javadoc, list, repos, source]
osgi.command.scope : obr
service.id : 6
1 楼 sswh 2014-08-18  
Felix框架注册的服务:

[org.osgi.service.packageadmin.PackageAdmin] in org.apache.felix.framework [0]
objectClass : [org.osgi.service.packageadmin.PackageAdmin]
service.id : 1

[org.osgi.service.startlevel.StartLevel] in org.apache.felix.framework [0]
objectClass : [org.osgi.service.startlevel.StartLevel]
service.id : 2

相关推荐

    OSGi and Apache Felix 3.0 Beginner's Guide 代码和书

    《OSGi和Apache Felix 3.0初学者指南》是一本深入浅出介绍OSGi技术和Apache Felix实现的书籍。OSGi(Open Service Gateway Initiative)是一个Java模块化系统和标准,它为开发人员提供了构建可升级、可管理和可重用...

    Felix华为Felix开发和运行包。

    【标题】:“Felix华为Felix开发和运行包”揭示了这个压缩包是针对华为公司的一款名为Felix的开发和运行环境。Felix是Apache软件基金会下的一个项目,它是一个基于OSGi(Open Service Gateway Initiative)规范的...

    apache-felix-demo

    Apache Felix 是一个基于 Java 的开源框架,它是 OSGi(Open Service Gateway Initiative)规范的实现。OSGi 是一套用于管理 Java 应用程序模块化、动态部署和版本控制的框架。Apache Felix 演示(apache-felix-demo...

    felix软件包

    felix软件包是Apache Felix项目的一部分,它是一个开源的实现,完全符合OSGi(开放服务网关倡议)规范的框架。OSGI是一种模块化系统,主要用于Java应用程序,它提供了动态模块发现、加载和管理的能力,使得开发人员...

    《OSGi and Apache Felix 3.0 Beginner's Guide》源代码

    《OSGi and Apache Felix 3.0 Beginner's Guide》是一本专为初学者设计的书籍,深入浅出地介绍了OSGi(Open Service Gateway Initiative)框架和Apache Felix这一实现OSGi规范的开源项目。源代码包包含了书中各个...

    Felix 2.0.4

    Apache Felix是Apache软件基金会开发的一款开源OSGi实现,它遵循OSGi规范并提供了一种灵活、模块化的Java应用程序开发方式。OSGi(Open Services Gateway Initiative)是一种服务导向架构,它的核心特性是将Java应用...

    felix-framework-5.6.8

    1. **模块化**:通过OSGi服务,Felix允许开发者将代码分解为独立的模块,每个模块有自己的生命周期和依赖关系。 2. **动态性**:在运行时可以添加、删除和更新模块,无需重启应用程序,这大大提高了系统的灵活性和可...

    felix 可以用jar包

    1. **模块化**:Felix将Java应用程序分解为独立的模块,每个模块都有自己的类路径,这使得代码更易于管理和维护。模块之间通过明确的接口进行通信,减少了耦合。 2. **动态性**:在Felix中,jar包可以被动态地安装...

    Felix 小例子

    1. "felix-1.4.0.zip":这应该是Felix框架的源代码或者二进制包,包含了运行OSGi应用所需的库和工具。用户可以通过解压此文件获取Felix运行时环境,然后部署和运行示例应用。 2. "osgi_orderapp_for_felix.zip":这...

    felix 文档

    #### 一、Apache Felix简介 Apache Felix 是一个遵循 OSGi(Open Service Gateway Initiative)R4 规范的开源实现。OSGi 是一个面向服务的架构,旨在为 Java 应用程序提供模块化支持,使应用程序能够在运行时动态...

    osgi felix plug in

    Felix是OSGi联盟实现OSGi核心规范的一个开源实现,它是Apache软件基金会的一部分。Felix Plugin则是在Felix OSGi环境中使用的插件,用于扩展和增强Felix的功能。 这篇名为“osgi felix plug in”的博文虽然链接不...

    Felix 和 Struts2 开发 Web 应用

    Felix是Apache软件基金会提供的一个开源实现,它是基于OSGi(Open Service Gateway Initiative)规范的Java框架,主要用于管理和运行模块化的Java应用程序。而Struts2则是一个流行的MVC(Model-View-Controller)...

    org.apache.felix-4.5.0 source

    org.apache.felix-4.5.0 源代码 JAR,方便学习、调试felix。

    Eclipse中搭建Felix运行环境

    Felix是OSGI规范的一种实现,它是Apache基金会的一个开源项目,提供了一个轻量级、高效的OSGI运行时环境。本篇文章将详细介绍如何在Eclipse中搭建Felix运行环境,以便进行OSGI企业应用的开发。 首先,我们需要安装...

    felix-framework-6.0.1.rar

    每个bundle都是一个独立的、可热部署的代码单元,包含了类、资源和元数据,可以提供或使用服务。Felix框架通过解析bundle的MANIFEST.MF文件来识别其依赖和提供的服务。 **conf**: 这个目录存放配置文件,用于设置...

    OSGi and Apache Felix 3.0 Beginner's Guide电子书和源代码

    包含电子书和第04、05、06、07、08、09、10、11、13章的代码, 是学习OSGi和Apache Felix的一个很好的入门资料, 虽然版本有一点点老了, 但是基本的东西没有变, 值得下下来一看!

    Felix-2.0.2-src

    Felix 2.0.2是该框架的一个特定版本,其源代码的发布对开发者而言具有重要的学习和研究价值。 源代码包“Felix-2.0.2-src”包含了完整的Felix框架2.0.2版本的源码,这对于深入理解其内部工作原理、自定义功能或调试...

    Felix_OSGi实作

    Felix是一个遵循OSGi规范的轻量级、模块化的Service Oriented Runtime,由Apache软件基金会支持,它允许在运行时动态地安装和卸载OSGi模块。Felix是OSGi容器的一个实现,是Java开发者在进行模块化开发时的常用工具。...

    org.apache.felix.main-6.0.3.rar

    描述中的链接指向了MyOSChina博客上的一篇帖子,其中包含了Felix.main的源代码。这表明我们可以期待深入理解Felix框架如何启动和管理OSGi容器的核心部分。 标签 "felix osgi" 明确指出我们要讨论的是关于Apache ...

    org.apache.felix.main.distribution-4.2.1.zip

    Apache Felix 是一个开源项目,属于 Apache 软件基金会,主要致力于实现 OSGi(Open Service Gateway Initiative)规范。OSGi 是一种Java模块化系统,它允许开发人员将应用程序分解为独立的、可管理和可升级的组件。...

Global site tag (gtag.js) - Google Analytics