一段涂鸦代码:简易的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(); } }
相关推荐
《OSGi和Apache Felix 3.0初学者指南》是一本深入浅出介绍OSGi技术和Apache Felix实现的书籍。OSGi(Open Service Gateway Initiative)是一个Java模块化系统和标准,它为开发人员提供了构建可升级、可管理和可重用...
【标题】:“Felix华为Felix开发和运行包”揭示了这个压缩包是针对华为公司的一款名为Felix的开发和运行环境。Felix是Apache软件基金会下的一个项目,它是一个基于OSGi(Open Service Gateway Initiative)规范的...
Apache Felix 是一个基于 Java 的开源框架,它是 OSGi(Open Service Gateway Initiative)规范的实现。OSGi 是一套用于管理 Java 应用程序模块化、动态部署和版本控制的框架。Apache Felix 演示(apache-felix-demo...
felix软件包是Apache Felix项目的一部分,它是一个开源的实现,完全符合OSGi(开放服务网关倡议)规范的框架。OSGI是一种模块化系统,主要用于Java应用程序,它提供了动态模块发现、加载和管理的能力,使得开发人员...
《OSGi and Apache Felix 3.0 Beginner's Guide》是一本专为初学者设计的书籍,深入浅出地介绍了OSGi(Open Service Gateway Initiative)框架和Apache Felix这一实现OSGi规范的开源项目。源代码包包含了书中各个...
Apache Felix是Apache软件基金会开发的一款开源OSGi实现,它遵循OSGi规范并提供了一种灵活、模块化的Java应用程序开发方式。OSGi(Open Services Gateway Initiative)是一种服务导向架构,它的核心特性是将Java应用...
1. **模块化**:通过OSGi服务,Felix允许开发者将代码分解为独立的模块,每个模块有自己的生命周期和依赖关系。 2. **动态性**:在运行时可以添加、删除和更新模块,无需重启应用程序,这大大提高了系统的灵活性和可...
1. **模块化**:Felix将Java应用程序分解为独立的模块,每个模块都有自己的类路径,这使得代码更易于管理和维护。模块之间通过明确的接口进行通信,减少了耦合。 2. **动态性**:在Felix中,jar包可以被动态地安装...
1. "felix-1.4.0.zip":这应该是Felix框架的源代码或者二进制包,包含了运行OSGi应用所需的库和工具。用户可以通过解压此文件获取Felix运行时环境,然后部署和运行示例应用。 2. "osgi_orderapp_for_felix.zip":这...
#### 一、Apache Felix简介 Apache Felix 是一个遵循 OSGi(Open Service Gateway Initiative)R4 规范的开源实现。OSGi 是一个面向服务的架构,旨在为 Java 应用程序提供模块化支持,使应用程序能够在运行时动态...
Felix是OSGi联盟实现OSGi核心规范的一个开源实现,它是Apache软件基金会的一部分。Felix Plugin则是在Felix OSGi环境中使用的插件,用于扩展和增强Felix的功能。 这篇名为“osgi felix plug in”的博文虽然链接不...
Felix是Apache软件基金会提供的一个开源实现,它是基于OSGi(Open Service Gateway Initiative)规范的Java框架,主要用于管理和运行模块化的Java应用程序。而Struts2则是一个流行的MVC(Model-View-Controller)...
org.apache.felix-4.5.0 源代码 JAR,方便学习、调试felix。
Felix是OSGI规范的一种实现,它是Apache基金会的一个开源项目,提供了一个轻量级、高效的OSGI运行时环境。本篇文章将详细介绍如何在Eclipse中搭建Felix运行环境,以便进行OSGI企业应用的开发。 首先,我们需要安装...
每个bundle都是一个独立的、可热部署的代码单元,包含了类、资源和元数据,可以提供或使用服务。Felix框架通过解析bundle的MANIFEST.MF文件来识别其依赖和提供的服务。 **conf**: 这个目录存放配置文件,用于设置...
包含电子书和第04、05、06、07、08、09、10、11、13章的代码, 是学习OSGi和Apache Felix的一个很好的入门资料, 虽然版本有一点点老了, 但是基本的东西没有变, 值得下下来一看!
Felix 2.0.2是该框架的一个特定版本,其源代码的发布对开发者而言具有重要的学习和研究价值。 源代码包“Felix-2.0.2-src”包含了完整的Felix框架2.0.2版本的源码,这对于深入理解其内部工作原理、自定义功能或调试...
Felix是一个遵循OSGi规范的轻量级、模块化的Service Oriented Runtime,由Apache软件基金会支持,它允许在运行时动态地安装和卸载OSGi模块。Felix是OSGi容器的一个实现,是Java开发者在进行模块化开发时的常用工具。...
描述中的链接指向了MyOSChina博客上的一篇帖子,其中包含了Felix.main的源代码。这表明我们可以期待深入理解Felix框架如何启动和管理OSGi容器的核心部分。 标签 "felix osgi" 明确指出我们要讨论的是关于Apache ...
Apache Felix 是一个开源项目,属于 Apache 软件基金会,主要致力于实现 OSGi(Open Service Gateway Initiative)规范。OSGi 是一种Java模块化系统,它允许开发人员将应用程序分解为独立的、可管理和可升级的组件。...