`
bergman
  • 浏览: 8474 次
  • 性别: Icon_minigender_1
  • 来自: 济南
文章分类
社区版块
存档分类
最新评论

OSGi中的DS(Declarative Services)的web应用实现探索

阅读更多
    我正在用equinox的servletbridge在tomcat上搭建web应用,我想每个功能点做成一个bundle,主servlet作为控制器,基于请求URL而调用bundle中的bean来执行,我采用了DS来发布和使用服务。
    我先说一下我想实现的目标吧:
    一个bundle,例如是商品的查看维护,有增、删、改、查四种action,每个需要一个作为一个服务被主servlet调用,其中增、删、改都实现ActionExecute接口,有个void execute方法,查则实现ActionView接口,有Object execute方法(返回object)。
    还有其它的bundle,差不多一个表的增删改查就是一个bundle,并都实现ActionExecute接口和ActionView接口之一。所有bundle中的bean都需要实现这两个公共接口之一。
    主servlet接收到用户请求时,根据请求URL中的对应关系,调用不同的Action去执行。如用户在浏览器输入../getitem,则主servlet把请求作为参数并调用商品bundle中的ItemView的ActionView方法。

1、一个bundel如何发布多个服务呢?每个bundle至少有四个服务需要发布,网上例子中component.xml是这样的:
<?xml version="1.0" encoding="UTF-8"?>
<component name="ItemView">
	<implementation class="com.abc.item.ItemView"/>
	<service>
		<provide interface="com.abc.core.ActionView"/>
	</service>
</component>

多个服务难道是多个service标签吗?那么implementation标签呢?试了一下,多个service标签似乎不行。
多个服务难道需要分别写多个xml配置吗?试了一下可以,我现在使用多个xml文件,一个是一个组件,包含一个服务,即增删改查各自算一个组件了,有点别扭。

2、这种接口的用法似乎与DS所要求的不同,DS的示例程序都是在一个bundle中写一个业务接口,在一个或多个bundle中写它的实现,需要这个服务的bundle中则在component.xml中把实现注入,并可以有“0..1","0..n"等不同的匹配规则。那我应该怎么发布服务呢?也把每个action都写成action接口的实现吗?但我需要根据请求动态注入,而不能在xml中写死,应该怎么处理呢?这个还没有搞定。
    另外,在主servlet中,请求URL中有字符串形式的beanid,如何根据它获得bean实例呢?DS还有lookup方式,但没找到查找过滤服务的方法,DS支持三种生命周期类型的组件,其中有一个factory类型,好象可以解决我的问题,但找不到例子搞不懂。
    但我也想出了一个办法:自己写一个简单的beanManager(类似于spring的FactoryBean),每个bundle初始化(start)时,把所有服务向这个beanmanager注册,结束时(stop)则向beanManager注销,bean id就是component.xml中的name属性,根据请求URL,直接在主servlet中实例化要执行的bean。这种方式如何?

嗯,我先这样做吧,有何结果或问题再向大家汇报。
分享到:
评论
6 楼 healer_kx 2009-11-04  
2009年,OSGi相关的东西,变化太快,变数太多。
Spring-dm,...Java7也要支持动态模块了~...OSGi-ds~~~
疯了~加快标准化进程吧,希望能稳定一阵子,相信稳定后,会有大量优秀的JavaEE作品出现,而且更多的精力可以放到业务逻辑本身。
5 楼 classtwo5367 2009-07-08  
其实爱立信已经使用OSGi开发完成了一个叫OSS 的网络管理软件,里面有很多是使用DS实行的,我有空看看有什么解决办法
4 楼 bergman 2009-07-02  
放弃osgi!
问题太多了,一年也解决不完,还是把时间花在具体业务上吧,这东西风险太高了。
为了一点模块化代价太高了,不值得,还不如用php重写呢,一个文件就是一个模块,拷上就能用了。
3 楼 fcoffee 2009-07-01  
PS: 对于楼主的问题 1, 应该是这样写:
 <?xml version="1.0" encoding="UTF-8"?>  
 <component name="ItemView">  
     <implementation class="com.abc.item.ItemView"/>  
     <service>  
         <provide interface="com.abc.core.ActionView"/> 
         <provide interface="com.abc.core.OtherInterface"/> 
     </service>  
 </component>

ItemView 是同时实现了这两个接口的类
2 楼 fcoffee 2009-07-01  
可以考虑下使用 Spring DM 来代替 osgi ds
1 楼 bergman 2009-06-30  
osgi4的Declarative Services还是没有弄清楚,不知如何动态运行时注入。在组件定义文件中写的依赖类似于spring,是固定的,这用处不大。
实在找不到的话,我还是用传统的osgi服务的注册吧,不用DS了

相关推荐

    osgi-ds对应的demo

    DS(Declarative Services)是OSGi框架中的一个重要组件,用于声明式地管理服务。它简化了服务的生命周期管理,让开发者能够通过XML配置文件声明服务的依赖和行为,而不是通过代码来控制。 在标题“osgi-ds对应的...

    OSGI服务 DS EVENT

    总的来说,OSGI服务DS事件是OSGI框架中实现组件间动态交互和协作的重要机制。它使得开发者能够构建出灵活、可扩展且易于维护的Java应用程序。通过理解并熟练运用DS事件,开发者可以更高效地利用OSGI框架来解决复杂的...

    《osgi与equinox 创建高度模块化的java系统》第6章DS代码

    本章聚焦于OSGi中的Declarative Services(DS),这是一种声明式的服务管理机制,它简化了服务的生命周期管理。 Declarative Services(DS)是OSGi服务模型的一部分,它允许开发者在配置文件中声明服务的依赖关系和...

    declarative

    在Equinox OSGi实现中,Declarative Services(DS)的工作流程大致可以分为以下几个步骤: 1. **加载ComponentDescriptor**:这是通过`org.eclipse.equinox.ds.tracker.BundleTracker`来完成的。BundleTracker会...

    OSGi实现用户登录验证

    2. OSGi Declarative Services (DS) 实现: DS是OSGi规范中的一个重要部分,它简化了服务的生命周期管理和依赖注入。在DS中,服务的声明和依赖关系都在XML配置文件(通常是MANIFEST.MF或_metatype/目录下的*.xml...

    OSGI 进阶源码和中文文档

    4. **DS(Declarative Services)**:DS是OSGI中的一种服务组件模型,它允许开发者通过XML配置文件声明服务的生命周期和依赖关系,简化了服务的管理和维护。 5. **事件机制**:OSGI提供了一种事件传递机制,允许...

    osgi-webservice教程

    在OSGi中实现Web服务,常常会用到Apache Axis。Axis是一个开放源码的SOAP栈,它支持创建和部署Web服务。在OSGi环境中,我们可以将Axis作为一个服务发布,这样其他模块就可以通过OSGi服务机制来使用它,实现Web服务的...

    carrot-osgi-anno-scr-make-2.0.1.zip

    本文将围绕"carrot-osgi-anno-scr-make-2.0.1.zip"这个开源项目,深入探讨其在OSGi DS(Declarative Services)中的作用和应用。 "carrot-osgi-anno-scr-make"项目是一个针对OSGi服务组件的工具,主要功能是帮助...

    osgi基础demo-搭建servlet

    这个Bundle不仅包含Servlet类,还必须包含一个Servlet的部署描述符(如web.xml),尽管在OSGi中,通常推荐使用Declarative Services(DS)来注册Servlet。 5. **编写Declarative Services**:DS是OSGi标准的一部分...

    Intellij 13下OSGi的Maven例子

    客户端和服务端的实现通常会涉及到OSGi的Declarative Services(DS)或Blueprint,它们是声明式服务配置的方式,通过XML文件定义服务的依赖和行为。在DS中,我们可以使用`@Component`和`@Reference`注解来声明服务...

    OSGI的消息机制及注册服务

    在OSGI环境中,消息机制是实现bundle之间通信的关键部分,而服务注册是OSGI中实现模块间服务发现和交互的核心功能。下面将详细探讨这两个知识点。 首先,我们来了解一下OSGI的消息机制。在OSGI框架中,bundle之间的...

    OSGI资料,OSGI进阶,OSGI实战,OSGI入门和整合Spring

    2. **Declarative Services(DS)**:利用OSGI的DS注解声明服务,简化Spring配置。 3. **Blueprint**:Spring的OSGI扩展,提供类似Spring XML配置的模块化服务定义方式。 4. **Aries SPI Fly**:一种用于将Spring...

    OSGi Technology 教程

    "Getting Started with OSGi 7 Introducing Declarative Services.doc"引入了声明式服务(Declarative Services,DS),这是OSGi中一种简化服务管理的方法。DS允许开发者通过XML配置文件来声明服务依赖和生命周期...

    OSGI简单示例

    1. **OSGI简单实例DS**:这里的DS可能指的是Declarative Services,它是OSGI框架中的一个组件模型。Declarative Services允许开发者声明式地定义服务及其依赖关系,而不是通过编程方式管理服务生命周期。通过XML配置...

    OSGI实战中文版

    4. **依赖注入**:OSGi支持基于Declarative Services(DS)的依赖注入,使得组件之间的依赖关系声明化,简化了代码编写和维护。 5. **版本管理和类加载机制**:OSGi对类的加载进行了精细的控制,允许不同版本的同一...

    spring-osgi.jar及其依赖包

    4. **自动依赖管理**:Spring OSGi可以自动管理bundle之间的依赖关系,通过声明式服务(Declarative Services, DS)来声明服务和依赖,降低配置复杂性。 5. **集成其他Spring特性**:Spring OSGi支持Spring的AOP、...

    解决osgi spring 事务配置问题

    2. **使用Blueprint或DS(Declarative Services)**:在OSGi中,可以使用Apache Blueprint或Declarative Services来替代Spring的XML配置。这两种方式都可以声明服务并提供事务管理的支持。 3. **使用Spring DM ...

    osgi三本教程

    此外,它可能还会讨论复杂的依赖管理和模块间通信,如使用Declarative Services(DS)和Blueprint等框架进行服务配置。 《OSGi原理与最佳实践》则可能深入到OSGi的核心机制,讲解其内部的工作原理,如类加载器、包...

Global site tag (gtag.js) - Google Analytics