竹十一
在匆忙与奔走中堕落

Fabric3简要入门

Fabric3的关注源于对SOA的关注。最近SCA这个概念可是很火啊,而且Fabric3的背景有BEA,(Tuscany背后是IBM),刚刚在上海结束的BEA2007发布了WebLogic Server 10.3 Tech Preview,其中SCA的实现就是基于Fabric3的。而且Fabric3现在在codehaus上,codehuas可是出品了不少精品啊,XFireMuleGroovyAspectWerkz等等,凭这点也值得关注下。

SCA的概念就不多说了,本文关注的是如何用Fabric3开发最简单的SCA应用,用的是Calculator的例子。Fabric3Tuscany不约而同的选了这个作为例子,不知道是历史渊源呢还是Calculator的典型性,有趣的问题:)

废话不多说,先看代码组织结构图

编译必须的库(Eclipse: properties/Java Build Path


环境准备好了,下面开始编写代码。

先看看我们要组织的SCA结构,这里为了减少本文篇幅只声明两个component,其余可以类似添加:

<?xml version="1.0" encoding="UTF-8"?>
<composite xmlns="http://www.osoa.org/xmlns/sca/1.0" 
           xmlns:fabric3
="http://fabric3.org/xmlns/sca/2.0-alpha"
           name
="CalculatorComposite"
           autowire
="true">
    
<component name="calculator">
        
<implementation.java class="calculator.CalculatorServiceImpl"/>
    
</component>
    
<component name="adder">
        
<implementation.java class="calculator.AddServiceImpl"/>
    
</component>
</composite>

很简单,只有两个component。首先看CalculatorServiceImpl:

public class CalculatorServiceImpl implements CalculatorService {
    
private AddService addService;
    @Reference
    
public void setAddService(AddService addService) {
        
this.addService = addService;
    }
}

很简单仅有一点需要说明@Referenceorg.osoa.sca.annotations.Reference,负责组装component。注意composite配置中的autowire="true",在calculator里面并没显示的添加对adder的引用。另外还有两个annotation可以关注下,@Init和@Destroy,类似Junit里的setup和teardown,在component的每个方法调用前后执行些初始、善后的工作。

AddServiceAddServiceImpl很简单,没什么好说的。

下面是CalculatorClient,让我们来看看Fabric3的客户端APITuscany有什么不同。

public class CalculatorClient {
    
public static void main(String[] args) throws Exception {
        Domain domain 
= new Domain();
        URL url 
= Thread.currentThread().getContextClassLoader().getResource("calculator.composite");
        domain.activate(url);
        CalculatorService calculator 
= domain.connectTo(CalculatorService.class"calculator");
        System.out.println(
"0.2 + 0.6 = " + calculator.add(0.20.6));
    }
}

怎么说呢,除了用了不同的方法签名之外和Tuscany好像大同小异:),都是先建立domain,然后拿到component进行操作。当然建立domain进行装配这一过程很多细节还是值得一挖的,本文限于主题和篇幅不去涉及这些主题,(关键是俺能力有限,挖不深:))。

代码准备好了,下面来运行下。

这里需要注意的是,光上面四个jar不足以运行Fabric3的例子,还需要Development Runtime中的/boot/system两个文件夹下的内容,层次结构如上图所示,放在工程目录下就行了。可以在http://fabric3.codehaus.org/Downloads下载Development Runtime,目前的版本是0.3

然后再次编译运行,打印出结果,运行顺利通过,OK 

本文只涉及了calculatoradder两个component,其余三个操作各位同学可以做个练习J 还有文中提到的@Init@Destroy也可以同时尝试下,更深入的主题还需要不断的探索。


备注

Fabric3是另一个SCA的实现(http://fabric3.codehaus.org/)。写这篇东东是为了介绍除Tuscany之外的SCA实现供大家参考,现在江湖中Tuscany很是流行,但毕竟,一枝独秀不是春,百花齐放春满园,拿Fabric3来比较下竞争下,不是要弄它个血雨腥风,而是为了江湖能够更和谐。不过老实说,在组织这篇东东的过程中,确实为非技术性的因素所困扰――Fabric3在文档方面确实非常非常缺乏。如果这点不改进的话,恐怕很难和Tuscany竞争。

References
http://fabric3.codehaus.org/
http://dev2dev.bea.com/blog/editors/archive/2007/12/sca_for_weblogi.html

 

posted on 2007-12-24 00:48 竹十一 阅读(2501) 评论(1)  编辑  收藏 所属分类: SOA
Comments
  • # re: Fabric3简要入门[未登录]
    xmlspy
    Posted @ 2007-12-24 12:47
    什么web services,soa等等一对东西,800年前叫闹哄哄的,不过至今都没广泛应用,看了代码,其实就是和以前一样的东西换个名称  回复  更多评论   

只有注册用户登录后才能发表评论。


网站导航: