我正在用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。这种方式如何?
嗯,我先这样做吧,有何结果或问题再向大家汇报。
分享到:
- 2009-06-29 06:31
- 浏览 1430
- 评论(6)
- 论坛回复 / 浏览 (6 / 2764)
- 查看更多
相关推荐
DS(Declarative Services)是OSGi框架中的一个重要组件,用于声明式地管理服务。它简化了服务的生命周期管理,让开发者能够通过XML配置文件声明服务的依赖和行为,而不是通过代码来控制。 在标题“osgi-ds对应的...
总的来说,OSGI服务DS事件是OSGI框架中实现组件间动态交互和协作的重要机制。它使得开发者能够构建出灵活、可扩展且易于维护的Java应用程序。通过理解并熟练运用DS事件,开发者可以更高效地利用OSGI框架来解决复杂的...
本章聚焦于OSGi中的Declarative Services(DS),这是一种声明式的服务管理机制,它简化了服务的生命周期管理。 Declarative Services(DS)是OSGi服务模型的一部分,它允许开发者在配置文件中声明服务的依赖关系和...
在Equinox OSGi实现中,Declarative Services(DS)的工作流程大致可以分为以下几个步骤: 1. **加载ComponentDescriptor**:这是通过`org.eclipse.equinox.ds.tracker.BundleTracker`来完成的。BundleTracker会...
2. OSGi Declarative Services (DS) 实现: DS是OSGi规范中的一个重要部分,它简化了服务的生命周期管理和依赖注入。在DS中,服务的声明和依赖关系都在XML配置文件(通常是MANIFEST.MF或_metatype/目录下的*.xml...
4. **DS(Declarative Services)**:DS是OSGI中的一种服务组件模型,它允许开发者通过XML配置文件声明服务的生命周期和依赖关系,简化了服务的管理和维护。 5. **事件机制**:OSGI提供了一种事件传递机制,允许...
在OSGi中实现Web服务,常常会用到Apache Axis。Axis是一个开放源码的SOAP栈,它支持创建和部署Web服务。在OSGi环境中,我们可以将Axis作为一个服务发布,这样其他模块就可以通过OSGi服务机制来使用它,实现Web服务的...
本文将围绕"carrot-osgi-anno-scr-make-2.0.1.zip"这个开源项目,深入探讨其在OSGi DS(Declarative Services)中的作用和应用。 "carrot-osgi-anno-scr-make"项目是一个针对OSGi服务组件的工具,主要功能是帮助...
这个Bundle不仅包含Servlet类,还必须包含一个Servlet的部署描述符(如web.xml),尽管在OSGi中,通常推荐使用Declarative Services(DS)来注册Servlet。 5. **编写Declarative Services**:DS是OSGi标准的一部分...
客户端和服务端的实现通常会涉及到OSGi的Declarative Services(DS)或Blueprint,它们是声明式服务配置的方式,通过XML文件定义服务的依赖和行为。在DS中,我们可以使用`@Component`和`@Reference`注解来声明服务...
在OSGI环境中,消息机制是实现bundle之间通信的关键部分,而服务注册是OSGI中实现模块间服务发现和交互的核心功能。下面将详细探讨这两个知识点。 首先,我们来了解一下OSGI的消息机制。在OSGI框架中,bundle之间的...
2. **Declarative Services(DS)**:利用OSGI的DS注解声明服务,简化Spring配置。 3. **Blueprint**:Spring的OSGI扩展,提供类似Spring XML配置的模块化服务定义方式。 4. **Aries SPI Fly**:一种用于将Spring...
"Getting Started with OSGi 7 Introducing Declarative Services.doc"引入了声明式服务(Declarative Services,DS),这是OSGi中一种简化服务管理的方法。DS允许开发者通过XML配置文件来声明服务依赖和生命周期...
1. **OSGI简单实例DS**:这里的DS可能指的是Declarative Services,它是OSGI框架中的一个组件模型。Declarative Services允许开发者声明式地定义服务及其依赖关系,而不是通过编程方式管理服务生命周期。通过XML配置...
4. **依赖注入**:OSGi支持基于Declarative Services(DS)的依赖注入,使得组件之间的依赖关系声明化,简化了代码编写和维护。 5. **版本管理和类加载机制**:OSGi对类的加载进行了精细的控制,允许不同版本的同一...
4. **自动依赖管理**:Spring OSGi可以自动管理bundle之间的依赖关系,通过声明式服务(Declarative Services, DS)来声明服务和依赖,降低配置复杂性。 5. **集成其他Spring特性**:Spring OSGi支持Spring的AOP、...
2. **使用Blueprint或DS(Declarative Services)**:在OSGi中,可以使用Apache Blueprint或Declarative Services来替代Spring的XML配置。这两种方式都可以声明服务并提供事务管理的支持。 3. **使用Spring DM ...
此外,它可能还会讨论复杂的依赖管理和模块间通信,如使用Declarative Services(DS)和Blueprint等框架进行服务配置。 《OSGi原理与最佳实践》则可能深入到OSGi的核心机制,讲解其内部的工作原理,如类加载器、包...