`

OSGI学习笔记(六)

 
阅读更多

 

SpringDM初步使用(一)

官方地址http://www.springsource.org/osgi

上面提到了仓库位置:

<repository>
 
<id>spring-maven-milestone</id>
 
<name>Springframework Maven Repository</name>
 
<url>http://maven.springframework.org/milestone</url>
</repository>

 

中文指南下载:http://forever-framework.googlecode.com/files/SpringDM_ZH.rar

先谈哈这篇内容能给你什么,通过springDM简化osgi开发。

通过maveneclipse的结合达到更方便的开发和测试。

谈哈这篇内容会使用到的东西:

apache-maven-3.0.3spring-osgi-1.2.1eclipse-jee-indigo-win32nexus-oss-webapp-1.9.1.1-bundle.zip

下面主要介绍spring-osgi-1.2.1下面的4个例子:

 

 

下面要做的就是把这4个例子正常跑起来。这几个项目需要maven的支持。

 如果直接导入这几个例子很有可能不能正常运行,大部分原因是jar不能够导入进来。所以我自己创建项目,建立pom信息。目录结构如下:

 

 将simple-service-bundle和simple-service-integration-test下面的src复制到项目中。

 配置pom.xml信息,主要注意相应的jar是否引入到项目,我这里自己在nexus创建了一个springdm仓库提供所有的jar。

 simple-service-bundle引入的jar:



 

 simple-service-integration-test引入的jar图:


整个项目很简单,普通的接口,实现类,单元测试,加入了spring进行bean的管理。

只是多了simpleservice-osgi.xml这么一个文件。为什么要分开放,方便做测试。

<osgi:service id="simpleServiceOsgi" ref="simpleService"

interface="org.springframework.osgi.samples.simpleservice.MyService" />

告诉我们这个接口作为osgi里面的一个服务在运行。在simple-service-integration-test里面将看到在osgi环境里怎么获取该服务。

先将simple-service-bundle打包到本地仓库,
 对测试类SimpleServiceBundleTest说明一哈:

public class SimpleServiceBundleTest extends AbstractConfigurableBundleCreatorTests {

	protected String[] getTestBundlesNames() {
		return new String[] {
			"org.springframework.osgi.samples, simple-service-bundle,1.2.1"
		};
	} 
	
	public Resource getTestingFrameworkBundlesConfiguration() {
		return new InputStreamResource(
			AbstractDependencyManagerTests.class.getResourceAsStream("/boot-bundles.properties"));
	}
	
	public void testOSGiStartedOk() {
		assertNotNull(bundleContext); 
	} 
	 
	public void testSimpleServiceExported() {
        ServiceReference ref = bundleContext.getServiceReference(MyService.class.getName());
        assertNotNull("Service Reference is null", ref);
        try {  
            MyService simpleService = (MyService) bundleContext.getService(ref);
            assertNotNull("Cannot find the service", simpleService);
            assertEquals("simple service at your service", simpleService.stringValue());
        } finally {
            bundleContext.ungetService(ref);
        }
	}
	
}

 

  如果要让测试类正常运行,必须先将simple-service-bundle安装在本地仓库,还有就是测试框架必须的jar,从测试运行的路径可以看出来:

startup()里面Resource[] bundleResources = locateBundles();

会加载路径文件:/org/springframework/osgi/test/internal/boot-bundles.properties 

这个文件内容:

 #
# Properties file indicating the boot (or mandatory) bundles that are loaded
# by the testing framework.
#
# Normally, this file should not be edited since it is used by the testing infrastructure.
# Users that want to install bundles before starting a test, should use #bundles() method.
#

#
# format: <groupId,artifactId,version>=+/-15
# - the optional value is used to install/remove bundles if running on JDK >= 1.5
# - see Spring org.springframework.core.JdkVersion for jdk major version codes.

# elements that have to be ignored should star with
# ignore

# Note: inner placeholders are not supported.

#
# common properties
#

# versioning
ignore.backport.version=3.1.0
ignore.junit.version=3.8.2
ignore.log4j.version=1.2.15-SNAPSHOT

ignore.spring.version=2.5.6.SEC01
ignore.spring.osgi.version=1.2.1
ignore.slf4j.version=1.5.0
ignore.asm.version=2.2.3

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

#
# actual libraries
#
# listed in dependency order to ease deployment


# dependencies

# junit
org.junit,com.springsource.junit,${ignore.junit.version}=
# log4j
${ignore.spring.osgi.groupId},log4j.osgi,${ignore.log4j.version}=
# slf4j (commons-logging API)
#${ignore.slf4j.groupId},slf4j-api,${ignore.slf4j.version}=
#${ignore.slf4j.groupId},slf4j-log4j12,${ignore.slf4j.version}=
#${ignore.slf4j.groupId},jcl104-over-slf4j,${ignore.slf4j.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,1.0.0=
# asm
org.objectweb.asm,com.springsource.org.objectweb.asm,${ignore.asm.version}=
# backport concurrent
edu.emory.mathcs.backport,com.springsource.edu.emory.mathcs.backport,${ignore.backport.version}=-15

# spring libs
${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.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}=

如果想修改框架默认加载的bundle,只需要重写getTestingFrameworkBundlesConfiguration方法:

这里我就改写了log4j.osgi-1.2.15-SNAPSHOT为log4j.osgi-1.2.15,你甚至可以将你自己的bundle写在里面,就不用在代码里面写了。

 完整的代码地址:http://chenjun-java.googlecode.com/svn/spring-osgi/

 

 下面说哈怎么在eclipse的控制台运行该服务:

1.将spring-osgi-1.2.1下的lib和dist的jar放在eclipse-jee-indigo-SR2-win32\dropins\spring-osgi-1.2.1\eclipse\plugins目录下,然后重启eclipse。

2.新建一个osgi运行配置:



 

 勾上所需bundle然后run:会看到控制台出现如下界面,说明已经成功启动:



 可以尝试输入stop 10和start10试试看效果。

 

  • 大小: 5.9 KB
  • 大小: 7.9 KB
  • 大小: 13.1 KB
  • 大小: 18.5 KB
  • 大小: 29.8 KB
  • 大小: 20.7 KB
分享到:
评论

相关推荐

    osgi学习笔记(一)

    OSGi(Open Services Gateway Initiative)学习笔记(一) 在IT领域,OSGi是一种模块化系统和Java服务平台,它提供了一种动态管理软件组件的能力。本文将深入探讨OSGi的基本概念、架构以及如何使用它来构建可扩展和...

    osgi学习笔记(二)

    在本篇“osgi学习笔记(二)”中,我们将深入探讨OSGi(Open Services Gateway Initiative)框架的核心概念、工作原理以及如何在实际项目中应用它。OSGi是一种Java模块化系统,它允许开发人员创建可独立更新和依赖...

    OSGI学习笔记.doc

    OSGI(Open Services Gateway Initiative)是一种Java模块化系统,它允许开发者将应用程序分解为独立的模块,称为bundle,每个bundle包含自己的类加载器和资源。这些bundle可以通过动态安装、启动、停止、更新和卸载...

    osgi学习笔记(三)

    在本篇OSGi学习笔记中,我们将深入探讨OSGi(Open Service Gateway Initiative)这一模块化系统,特别是关于服务方面的知识。OSGi是一个Java平台上的动态模块化系统,它允许开发者创建可热部署、互相依赖的模块,...

    OSGi原理与最佳实践 学习笔记 一

    OSGi(Open Service Gateway Initiative)是一个基于Java语言的服务规范,旨在提供一个开放的服务平台,它...学习OSGi原理与最佳实践,不仅可以提升个人的编程和系统设计能力,也是把握现代Java开发趋势的重要一环。

    Eclipse插件开发学习笔记全篇+源码.rar

    本文将深入探讨Eclipse插件开发的相关知识点,结合提供的"全书分为4篇共24章"的学习笔记和源码,帮助你更全面地理解和实践Eclipse插件开发。 第一篇:基础篇 在这一篇中,你将学习到Eclipse插件开发的基础知识,...

    Eclipse插件开发学习笔记.pdf

    Eclipse插件开发学习笔记将带领我们深入了解Eclipse插件开发的方方面面。 首先,我们需要了解Eclipse插件的基础概念。在Eclipse中,插件主要由一系列的扩展点(Extension Points)组成,这些扩展点定义了插件可以...

    Eclipse 插件开发学习笔记.rar

    本学习笔记将深入探讨Eclipse插件开发的相关知识,以帮助你掌握这一核心技能。 一、Eclipse插件体系结构 Eclipse基于OSGi(Open Service Gateway Initiative)框架,采用模块化设计,使得每个功能都以插件的形式...

    Eclipse插件开发学习笔记-源代码1至24章.zip

    本学习笔记涵盖从基础到进阶的Eclipse插件开发全过程,通过24个章节的源代码实例,旨在帮助开发者掌握如何创建、调试和发布Eclipse插件。 在Eclipse插件开发中,首先需要理解的是OSGi(Open Services Gateway ...

    [Eclipse插件开发学习笔记].张鹏等.扫描版-1

    【Eclipse插件开发学习笔记】是一本详细探讨Eclipse插件开发的教程,由张鹏等人编写。这本书深入浅出地介绍了如何利用Eclipse平台进行插件开发,旨在帮助开发者提升在Eclipse环境中定制和扩展功能的能力。通过阅读...

    eclipse插件开发学习笔记

    ### Eclipse插件开发知识点解析 #### 一、Eclipse平台简介 **1.1 Eclipse集成开发环境(IDE)** ...通过以上内容的学习,开发者可以全面掌握Eclipse插件开发的基本原理和技术细节,为进一步深入研究打下坚实的基础。

    SpringDM笔记13-OSGi服务注册与引用

    本篇笔记将探讨如何在OSGi环境中注册服务以及如何引用这些服务,同时会涉及到源码分析和工具的使用。 首先,OSGi服务是一个在OSGi容器中注册的可发现和可使用的对象。服务注册的过程通常包括以下步骤: 1. **实现...

    阿里P8 架构师整理Java学习笔记.pdf

    ### Java学习笔记知识点总结 #### 一、JVM与内存管理 **1.1 JVM基本概念** - **JVM(Java Virtual Machine)**: Java虚拟机是执行Java字节码的虚拟机,它提供了运行Java程序所需的环境。 **1.2 线程** - **线程...

    很久之前的osgi整理

    标题中的“很久之前的osgi整理”表明这是一份关于OSGi技术的历史回顾或者早期学习笔记。OSGi(Open Service Gateway Initiative)是一个Java模块化系统,它允许开发人员将应用程序分解为独立的模块或服务,这些模块...

    Eclipse插件学习笔记

    《Eclipse插件学习笔记》是一本专注于Eclipse插件开发的书籍,旨在帮助开发者深入理解和掌握Eclipse平台上的插件开发技术。Eclipse作为一款强大的开源集成开发环境(IDE),其可扩展性主要体现在丰富的插件系统上,...

    struts2学习笔记

    这个"struts2学习笔记"涵盖了Struts2的核心概念、配置、动作、拦截器、结果类型等关键知识点,旨在帮助初学者深入理解并掌握Struts2框架。 1. **Struts2核心概念** - **Action**:是Struts2的核心,负责处理用户的...

    WAS 8.5 Liberty学习笔记.pdf

    文档中提及的修订记录揭示了该学习笔记是如何逐步完善的过程,从概念理解、环境搭建、开发测试到应用发布和项目部署,每一修订版本都对应着学习笔记内容的更新和完善。这些记录有助于跟踪学习进度和笔记内容的演变。...

    Eclipse插件开发学习笔记1-5章

    本学习笔记涵盖了Eclipse插件开发的前五章内容,旨在帮助开发者深入理解和掌握如何构建自己的Eclipse插件。 第1章:Eclipse平台简介 在这一章节中,我们首先会了解到Eclipse平台的基本架构,包括Workbench、...

Global site tag (gtag.js) - Google Analytics