Fabric3简要入门
对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的典型性,有趣的问题:)
。
废话不多说,先看代码组织结构图
编译
必须的库(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;
}
}
很简单,仅有一点需要说明,@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的实现(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