读书人

SpringDM札记7-开发SpringDM Bundle

发布时间: 2012-06-27 14:20:09 作者: rapoo

SpringDM笔记7-开发SpringDM Bundle

基于Maven创建:

1. mvn archetype:create -DgroupId=com.manning.sdmia -DartifactId=SpringDM-Sample

??? mvn eclipse:eclipse

2. Package:Felix Bundle Plugin

??? pom.xml:

??? ...

??? <build>
????? <plugins>
??????? <plugin>
?????????? <groupId>org.apache.felix</groupId>
?????????? <artifactId>maven-bundle-plugin</artifactId>
?????????? <version>2.3.4</version>
?????????? <extensions>true</extensions>
??????? </plugin>
??????? <plugin>
?????? ? ? <groupId>org.apache.maven.plugins</groupId>
? ? ?????? <artifactId>maven-compiler-plugin</artifactId>
?? ? ? ??? <version>2.3.2</version>
? ? ?????? <configuration>

????????????? <source>1.6</source>
????????????? <target>1 .6</target>
?? ? ? ??? </configuration>
????? ?? </plugin>
???? </plugins>
?? </build>

?? 执行命令:mvn package

3. 部署安装:

??? install file:///D:/sts_workspace/SpringDM-Sample/target/SpringDM-Sample-1.0.0.jar

4. 测试代码开发

??? The Spring DM integration test framework provides a handy abstract

??? class(AbstractConfigurableBundleCreatorTests) that provides hooks for the OSGi container??

??? configuration, and this test uses it as its parent class。

??? 例如:

??? public class SpringDmSampleTest extends AbstractConfigurableBundleCreatorTests {

??? public void testIntergration() {
??? ??? boolean bundleIsHereAndStarted = false;
??? ??? for (Bundle bundle : bundleContext.getBundles()) {
??? ??? ??? if ("com.manning.sdmia.SpringDM-Sample".equals(bundle.getSymbolicName()) &&??

??????????????? bundle.getState() == Bundle.ACTIVE) {
??? ??? ??? ??? bundleIsHereAndStarted = true;
??? ??? ??? ??? break;
??? ??? ??? }
??? ??? }
??? ??? assertTrue("SpringDM-Sample is not installed or activated!",bundleIsHereAndStarted);
??? }

??? /*
??? ?* SpringDM会为测试提供OSGi容器及依赖的JAR,若要添加扩展的JAR则需要复写该方法;
??? ?* 同时若希望被扩展的Bundle能被安装并启动,还需要提供Maven标示符:grouoId,
??? ?* artifactId,version。
??? */
??? @Override
???? protected String[] getTestBundlesNames() {
??? ??? return new String[]{"com.manning.sdmia,SpringDM-Sample,1.0.0"};
??? }

??? /*
???? * 若希望在测试周期中SpringDM测试框架能自动安装客制化的Bundle,需要复写该方法;
???? * 需指定一个地址路径指定所有希望的测试的周期中能被安装在OSGi容器中的
??? */
??? @Override
??? protected Resource getTestingFrameworkBundlesConfiguration() {
??? ??? return new InputStreamResource(SpringDmSampleTest.class.getResourceAsStream("boot-

??????? bundles.properties"));
??? }
? }

? 其中文件boot-bundles.properties:

# versioning
ignore.junit.version=4.8.1
ignore.log4j.version=1.2.15

ignore.spring.version=3.0.5.RELEASE
ignore.spring.osgi.version=2.0.0.M1
ignore.slf4j.version=1.6.1
ignore.asm.version=2.2.3
ignore.aopalliance.version=1.0.0

# groupIds
ignore.spring.groupId=org.springframework
ignore.spring.osgi.groupId=org.springframework.osgi
ignore.slf4j.groupId=org.slf4j

# junit
org.junit,com.springsource.org.junit,${ignore.junit.version}=
# log4j
org.apache.log4j,com.springsource.org.apache.log4j,${ignore.log4j.version}=

# slf4j (BRITS)
${ignore.slf4j.groupId},com.springsource.slf4j.api,${ignore.slf4j.version}=
${ignore.slf4j.groupId},com.springsource.slf4j.log4j,${ignore.slf4j.version}=
${ignore.slf4j.groupId},com.springsource.slf4j.org.apache.commons.logging,${ignore.slf4j.version}=
# aop alliance
org.aopalliance,com.springsource.org.aopalliance,${ignore.aopalliance.version}=
# asm
org.objectweb.asm,com.springsource.org.objectweb.asm,${ignore.asm.version}=

# spring libs
${ignore.spring.groupId},org.springframework.asm,${ignore.spring.version}=
${ignore.spring.groupId},org.springframework.beans,${ignore.spring.version}=
${ignore.spring.groupId},org.springframework.core,${ignore.spring.version}=
${ignore.spring.groupId},org.springframework.context,${ignore.spring.version}=
${ignore.spring.groupId},org.springframework.expression,${ignore.spring.version}=
${ignore.spring.groupId},org.springframework.aop,${ignore.spring.version}=
${ignore.spring.groupId},org.springframework.test,${ignore.spring.version}=

# spring osgi libs
${ignore.spring.osgi.groupId},spring-osgi-io,${ignore.spring.osgi.version}=
${ignore.spring.osgi.groupId},spring-osgi-core,${ignore.spring.osgi.version}=
${ignore.spring.osgi.groupId},spring-osgi-annotation,${ignore.spring.osgi.version}=+15
${ignore.spring.osgi.groupId},spring-osgi-extender,${ignore.spring.osgi.version}=
${ignore.spring.osgi.groupId},spring-osgi-test,${ignore.spring.osgi.version}=

?

5. 启动容器

??? java -jar org.eclipse.osgi-3.5.1.R35x_v20090827.jar -console

6. 案例代码

??? 见附件:SpringDM-Sample.rar

?

?

?

?

读书人网 >软件架构设计

热点推荐