OSGi - 第01章环境准备

来源:互联网 发布:二手软件app软件哪个好 编辑:程序博客网 时间:2024/05/16 19:11

基础要求:

具备Java的基础知识;

具备类加载机制的基础知识;

具备多线程相关基础知识;

具备Eclipse使用经验;

具备Maven的使用经验;

 

环境:

JDK6

OSGi5.0

Felix 4.2.1


POM文件:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>demo</groupId><artifactId>MiniRuntime</artifactId><version>0.0.1-SNAPSHOT</version><dependencies><dependency><groupId>org.apache.felix</groupId><artifactId>org.apache.felix.framework</artifactId><version>4.2.1</version></dependency></dependencies></project>

Felix 4.2.1的源码准备:

由于Maven中心仓库没有放置Felix4.2.1的源码,所以需要到apache的档案站点下载,下载地址:


Felix4.2.1源码下载

下载后,将源码取出,创建一个新的org.apache.felix.framework-4.2.1-sources.jar文件,和felix jar文件放置到同一个目录下,就可以查看源码了。

 

最简化的启动程序:

package demo;import java.io.File;import java.util.ArrayList;import java.util.Arrays;import java.util.Collections;import java.util.HashMap;import java.util.List;import java.util.Map;import org.osgi.framework.Bundle;import org.osgi.framework.BundleEvent;import org.osgi.framework.FrameworkEvent;import org.osgi.framework.FrameworkListener;import org.osgi.framework.SynchronousBundleListener;import org.osgi.framework.launch.Framework;import org.osgi.framework.launch.FrameworkFactory;public class Demo {public static void main(String[] args) throws Exception {Map<String, String> properties = new HashMap<String, String>();FrameworkFactory factory = new org.apache.felix.framework.FrameworkFactory();Framework framework = factory.newFramework(properties);framework.init();framework.getBundleContext().addBundleListener(new SynchronousBundleListener() {@Overridepublic void bundleChanged(BundleEvent event) {System.out.println("type=" + event.getType() + ", " + event);if (event.getType() == BundleEvent.INSTALLED) {throw new Error("eeeeeeeeeeee");}}});final List<FrameworkEvent> errors = new ArrayList<FrameworkEvent>();framework.getBundleContext().addFrameworkListener(new FrameworkListener() {@Overridepublic void frameworkEvent(FrameworkEvent event) {if (event.getType() == FrameworkEvent.ERROR) {errors.add(event);if (event.getThrowable() instanceof Error) {System.out.println("error: " + event);//System.exit(1);}}}});File[] files = new File("bundles").listFiles();if (files != null) {List<File> installingFiles = Arrays.asList(files);Collections.sort(installingFiles);for (File file : installingFiles) {Bundle bundle = framework.getBundleContext().installBundle(file.toURI().toURL().toString());bundle.start();}}framework.start();}}


我们观察到,程序第一次启动,在控制台打印出了几条错误信息以及错误堆栈。

把程序关闭,再次启动,这时候错误信息没有了。

我们稍后再来解释这个现象。

 

OSGi MiniRuntime示例环境

Felix4.2.1源码


0 0
原创粉丝点击