技术开发 频道

Fabric3简要入门

【IT168 技术文章】

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

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

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

    环境准备好了,下面开始编写代码。
 
    先看看我们要组织的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; 
    }
}

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

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

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.2, 0.6)); 
    }
}

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

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

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

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

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

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

参考:
http://fabric3.codehaus.org/

0
相关文章