spring-dm开发简单的绑定
记录一下使用spring-dm、eclipse、maven创建绑定的步骤。
使用环境
- jdk 1.6.0_07;
- eclipse 3.4;
- maven 2.0.9;
- spring 2.5.5;
- spring dm 1.1.2。
具体步骤
安装m2eclipse
通过help>software updates…在线安装。
只需安装maven integration即可,不需要安装optional components。
创建maven项目
下面是创建完成的效果,项目名称helloworldService:
转换为plug-in项目
在转换后项目中增加的内容:
第一次运行
第一次运行,通过如下方式:
运行后,控制台可能打印一些异常,类似下面的BundleException:
不过不影响使用,使用ss命令,后面跟项目名称,查看绑定的状态:
虽然是空的项目,但是却表示一个绑定,而且当前处于active状态。
创建新的运行配置
上面的运行,默认带了很多不相干的eclipse绑定,而且有些是不可用的。重新创建一个简化的可用的运行配置并再次运行helloworldService绑定。
然后创建新的osgi framework运行配置:
在对话框更新如下标示内容:
这回运行不再报错了。 可以看到,只有两个绑定,一个是eclipse osgi,另一个是helloworldService。
设置maven,导入对spring的库依赖
在pom.xml文件中增加如下内容,主要是导入对spring相关库的依赖以及为了导入这些库需要的仓库。
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<version>2.5.5</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>2.5.5</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>2.5.5</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-beans</artifactId>
<version>2.5.5</version>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<configuration>
<archive>
<manifestFile>META-INF/MANIFEST.MF
</manifestFile>
</archive>
</configuration>
</plugin>
</plugins>
</build>
<pluginRepositories>
<pluginRepository>
<id>maven-repo</id>
<name>maven repo</name>
<url>http://repo1.maven.org/maven2/
</url>
</pluginRepository>
<pluginRepository>
<id>agilejava</id>
<url>http://agilejava.com/maven/</url>
</pluginRepository>
</pluginRepositories>
<repositories>
<repository>
<id>eclipse-repository</id>
<name>Eclipse Repository</name>
<url>http://repo1.maven.org/eclipse/
</url>
</repository>
<repository>
<id>safehaus-repository</id>
<name>Safehaus Repository</name>
<url>http://m2.safehaus.org</url>
</repository>
<repository>
<id>spring-ext</id>
<name>Spring External Dependencies Repository</name>
<url>
http://springframework.svn.sourceforge.net/svnroot/springframework/repos/repo-ext/
</url>
</repository>
<repository>
<id>spring-release</id>
<name>Spring Portfolio Release Repository</name>
<url> http://s3.amazonaws.com/maven.springframework.org/release</url>
</repository>
<repository>
<id>spring-external</id>
<name>Spring Portfolio Release Repository</name>
<url> http://s3.amazonaws.com/maven.springframework.org/external
</url>
</repository>
<repository>
<id>spring-milestone</id>
<name>Spring Portfolio Milestone Repository</name>
<url> http://s3.amazonaws.com/maven.springframework.org/milestone
</url>
</repository>
<repository>
<id>i21-s3-osgi-repo</id>
<name>i21 osgi artifacts repo</name>
<snapshots>
<enabled>true</enabled>
</snapshots>
<url> http://s3.amazonaws.com/maven.springframework.org/osgi</url>
</repository>
</repositories>
这一步做完并保存,m2eclipse将自动导入pom.xml文件中声明的导入库:
通过m2eclipse执行maven的install
和通过命令行执行:
mvn install
效果相同,使用m2eclipse执行:
编写POJI和POJO
编写一个HelloWorldService接口:
package com.easymorse.marshal;
public interface HelloWorldService {
public void sayHello();
}
编写该接口的实现,HelloWorldServiceImpl:
package com.easymorse.marshal;
public class HelloWorldServiceImpl implements HelloWorldService {
public HelloWorldServiceImpl() {
System.out.println("————–>new HelloWorldService start");
}@Override
public void sayHello() {
System.out.println("Hello!!!!!!!!!!!!!!!!");
}
}
编写spring的配置文件
一般根据spring推荐的做法,有关业务服务方面的bean放在一个配置文件中,有关osgi的bean放在另外的配置文件中,这样便于管理。
创建目录:
创建helloworldService.xml文件:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-2.5.xsd">
<bean id="helloworldService" class=" com.easymorse.marshal.HelloWorldServiceImpl" />
</beans>
创建helloworldService-osgi.xml:
<?xml version="1.0" encoding="UTF-8"?>
<beans:beans xmlns="http://www.springframework.org/schema/osgi"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:beans="http://www.springframework.org/schema/beans"
xsi:schemaLocation="http://www.springframework.org/schema/osgi
http://www.springframework.org/schema/osgi/spring-osgi.xsd
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd">
<service id="helloworldServiceOsgi" ref="helloworldService"
interface="com.easymorse.marshal.HelloWorldService" />
</beans:beans>
通过spring ide osgi扩展安装目标平台
这里不能使用eclipse内置的平台,而是要使用spring-dm的平台。获取和配置这些的最简单办法就是安装spring ide,并且包括osgi可选项。
安装的网址:
这里使用比较新的每日构建版本,发现spring ide osgi extension目前还没有spring-dm1.1版本的target platform。下面演示是使用spring-dm 1.0.2的target platform,目前测试是可以使用。在plug-in development属性中设置spring-dm 1.0.2作为target platform,并load target:
编辑plug-in的MANIFEST.MF
设置运行时(runtime)标签页中的导出包(exported package):
修改运行选项
上面运行配置中将target platform去掉了,现在加上:
运行的效果:
可以看出是运行在spring-dm 1.0.2上。
手工设置spring-dm 1.1环境
如果需要用到spring-dm 1.1的新特性,可以手工实现环境搭建,不用预置的target platform。首先pom.xml文件的dependencies部分修改为:
<dependencies>
<dependency>
<groupId>org.aopalliance</groupId>
<artifactId>com.springsource.org.aopalliance
</artifactId>
<version>1.0.0</version>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>com.springsource.org.apache.commons.logging
</artifactId>
<version>1.1.1</version>
</dependency>
<dependency>
<groupId>net.sourceforge.cglib</groupId>
<artifactId>com.springsource.net.sf.cglib
</artifactId>
<version>2.1.3</version>
</dependency>
<dependency>
<groupId>org.springframework.osgi</groupId>
<artifactId>org.springframework.osgi.core
</artifactId>
<version>1.1.2.A</version>
</dependency>
<dependency>
<groupId>org.springframework.osgi</groupId>
<artifactId>org.springframework.osgi.io
</artifactId>
<version>1.1.2.A</version>
</dependency>
<dependency>
<groupId>org.springframework.osgi</groupId>
<artifactId>org.springframework.osgi.extender
</artifactId>
<version>1.1.2.A</version>
</dependency>
<dependency>
<groupId>org.eclipse.osgi</groupId>
<artifactId>org.eclipse.osgi</artifactId>
<version>3.4.2.R34x_v20080826-1230</version>
</dependency>
</dependencies>
然后执行maven的复制依赖库的插件:
mvn dependency:copy-dependencies
在target/dependency目录下应该复制了所有依赖的绑定jar文件。
导入这些绑定,通过eclipse的import功能:
取消target platform勾选,通过browse找到项目的dependecy目录:
下一步,add all即可,是全部所需的绑定:
完成后,package explorer中增加了其他绑定:
再次运行helloService,可以看到加载spring的日志,其中包括实例化helloService的打印内容:
在osgi控制台执行ss,看到所有绑定的状态:
手工执行的好处是,能够了解每个细节,而且可以去除所有不必要的绑定。
总结一下各个绑定(组件)和子系统之间的依赖关系:
增加跟踪信息
上面的启动没有留下日志信息,可以利用run选项里面的tracing标签页增加跟踪信息:
运行时可看到如下跟踪日志,比如加载绑定的耗时等:
源代码
http://easymorse.googlecode.com/svn/trunk/osgi/helloworldService/
参考文档
- Eclipse, Maven and Spring DM for OSGi? platform Quick Start,下载见:介绍eclipse、maven和spring dm开发osgi入门的电子书
- Spring Dynamic Modules Reference Guide 1.1.2
- Spring Dynamic Modules 1.1.1 with Eclipse Equinox 3.4
- SpringSource Enterprise Bundle Repository FAQ
这篇文章上的评论的 RSS feed TrackBack URI