Jdon框架下一步架构构想

09-09-09 banq
    

融合IOC + OSGI + REST + 异步HTTP。

这四个架构是当前热点,都是组件构件领域最先设计,如何把它们揉合在一起,形成一个轻量的方便使用框架,以下是我目前想法,欢迎大家讨论:

框架内部:

1. 将资源或服务以URI为名称注册到OSGI中。

2. 注册URI资源之前,首先要注册异步Http服务,可以挑选MINO xHttp等。

3. 注册总类如下,将上述两个组件注册到OSGI中,同时使用IOC依赖注射解决资源类之间的依赖。

 public class Activator implements BundleActivator
{
   public void start(BundleContext context) throws Exception
   {
      ServiceReference sRef = context.getServiceReference(RESTService.class.getName());
      if (sRef != null)
      {
         RESTService service = (RESTService) context.getService(sRef);
         //向OSGI注册一个资源,通过IOC依赖注射解决MyResource对其他类XXX的依赖
         service.registerResource("/resource", new MyResource(XXX), null, null);
      }
   }

   public void stop(BundleContext context) throws Exception
   {
      ServiceReference sRef = context.getServiceReference(RESTService.class.getName());
      if (sRef != null)
      {
         RESTService service = (RESTService) context.getService(sRef);
         service.unregister("/resource");
      }
   }
}
<p>

上述注册在框架被使用时,可以通过XML配置或Annotation实现:

<services>

<service name="/resource" class="xxx.MyResource.class"/>

</services>

@GET

@Resource("/resource")

Class MyResource{

...

}

客户端调用方式:

1.另外一个JVM或远程通过REST方式调用

http://localhost:8080/resource

2.同一个JVM中不同Bundle模块之间使用OSGI方式调用:

ServiceReference ref = bundleContext.getServiceReference("/resource");

try {

MyResource myResource = (MyResource) bundleContext.getService(ref);

...

} finally {

bundleContext.ungetService(ref);

}

3.同一个Bundle模块中以IOC依赖注射调用。

调用方式的粒度是不断从小到大,当然比REST更粗粒度的是SOA Web方式方式。提供各种粒度的对外开放接口,我相信这应该是未来轻量框架的一个目标。

    

nickshen3
2009-09-09 19:07

沙发

kingsun1980
2009-09-10 13:08

关注

Hqiu
2009-09-10 14:38

那个视图层用Struts已经不太合适了,jdon本来就是一个业务层的框架,把Struts集成进去太不习惯了。虽然也可以单独使用业务部分,但使用起来还是有些不友好。

JAAS本身是很不错的,但为了更好的普及,也不建议再用这个。关于权限这个问题,原来我一直觉得应该在业务层解决。实际上视图层也可以解决大部分问题,准确一点说,不涉及到数据库检测的都可以放在视图层解决。只是由于原来的框架对这方面的支持并不是很友好而已。如

@permitRole(name="administrator")

public class AdministratorAction{

.....................

JDON在这方面做得还不够,banq的理解主要在于业务,并没有重视视图层的一些解决方案,但却又集成了一个改良了的Struts(其实个人认为改良得还不彻底,当然这也是人力有限),与其这样,还不如直接放弃视图层,专心搞业务。

[该贴被Hqiu于2009-09-10 14:39修改过]

taochenpfj
2009-09-10 16:09

关注!

毕竟只有一个banq老师是不够的!

希望在不断理解中,能出一份力!

3Go 1 2 3 下一页