一段涂鸦代码:简易的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 and Apache Felix 3.0 Beginner's Guide 英文版和代码
FELIX
org.apache.felix-4.5.0 源代码 JAR,方便学习、调试felix。
felix文档 一个简单的helloworld
《OSGi and Apache Felix 3.0 Beginner's Guide》此书中例子的源代码,已使用过,是可以跑的
包含电子书和第04、05、06、07、08、09、10、11、13章的代码, 是学习OSGi和Apache Felix的一个很好的入门资料, 虽然版本有一点点老了, 但是基本的东西没有变, 值得下下来一看!
felix 可以用jar包felix 可以用jar包felix 可以用jar包felix 可以用jar包felix 可以用jar包
华为Felix开发和运行包
osgi框架最新felix-framework-5.6.8,想找个felix插件版的,可惜404
OSGi In Practice作者的推荐OSGi框架的Felix 最新版本 2.0.4包括jar包,配置文件等等 学习OSGi必须的
运用apache的felix,写的demo
Warhammer's Felix and Gotrek series. It contain eleven book.
Felix_OSGi实作,介绍最流行的OSGI framwork-Felix的好文档
该例子属于OSGi的应用,服务器使用的是felix1.4.0,在我机器上运行成功
最近一段时间有不少朋友发邮件给我要这个例子,有时候没有来得及回邮件,今天把代码上传到CSDN上,需要的下载吧,2个资源分,哈哈。 1、解压后,里面有5个工程,名字为abc的工程是个web工程,用来部署struts插件工程...
使用 Felix 和 Struts2 开发 Web 应用 采用了struts 构建web ,feilx 构建bundle
felix软件包 org.apache.felix.main.distribution-5.4.0.zip
PHP新手上路_Felix整理、修改,整理来自百度的一些信息,非常有用!
Felix 4.2.1 源码
最新版 org.apache.felix 4.5.0