浏览 2764 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2009-06-29
我先说一下我想实现的目标吧: 一个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。这种方式如何? 嗯,我先这样做吧,有何结果或问题再向大家汇报。 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2009-06-30
osgi4的Declarative Services还是没有弄清楚,不知如何动态运行时注入。在组件定义文件中写的依赖类似于spring,是固定的,这用处不大。
实在找不到的话,我还是用传统的osgi服务的注册吧,不用DS了 |
|
返回顶楼 | |
发表时间:2009-07-01
可以考虑下使用 Spring DM 来代替 osgi ds
|
|
返回顶楼 | |
发表时间:2009-07-01
最后修改: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 是同时实现了这两个接口的类 |
|
返回顶楼 | |
发表时间:2009-07-02
放弃osgi!
问题太多了,一年也解决不完,还是把时间花在具体业务上吧,这东西风险太高了。 为了一点模块化代价太高了,不值得,还不如用php重写呢,一个文件就是一个模块,拷上就能用了。 |
|
返回顶楼 | |
发表时间:2009-07-08
其实爱立信已经使用OSGi开发完成了一个叫OSS 的网络管理软件,里面有很多是使用DS实行的,我有空看看有什么解决办法
|
|
返回顶楼 | |
发表时间:2009-11-04
2009年,OSGi相关的东西,变化太快,变数太多。
Spring-dm,...Java7也要支持动态模块了~...OSGi-ds~~~ 疯了~加快标准化进程吧,希望能稳定一阵子,相信稳定后,会有大量优秀的JavaEE作品出现,而且更多的精力可以放到业务逻辑本身。 |
|
返回顶楼 | |