Sofa学习总结
}
/**
* @param action The action to set.
*/
public void setAction(String action) {
this.action = action;
}
/**
* @return Returns the executor.
*/
public DemoCommExecutor getExecutor() {
c. 执行测试用例,在日志中找到:“20:24:54,397 [main] DEBUG DemoCalcMultiExecutor : 执行乘法计算。[1 +2=2]”则说明配置成功
6. 在平台实现一个简单的 Try-Catch-Finally 框架
a. 定义三个扩展点:
<!-- extension point --> <osgi:extension-point ref="demoCalcComponent" name="finally">
return executor;
}
/**
* @param executor The executor to set.
*/
public void setExecutor(DemoCommExecutor executor) {
this.executor = executor;
}
}
/**
* Inc.
step2: 根据提示,输入信息如下:Choose a number: (1):1 继续执行,提示输入内容如下:Define value for sofa_app_name: : demo 继续执行,提示输入内容如下:Define value for artifactId: : demo 继续执行,如果不想改变版本信息,就直接留空不用输入任何信息,直接往下执行。 运行后命令行提示内容如下:
其中 需 要 指 出 扩 展 点 名 : executor, 关 联 的 Component 为 demoCalcComponent, 声 明 扩 展 标 志:action ="Add", 其 值 定 义 在 demo-core-model 子 工 程 的 DemoActionEnum 中 , 扩 展 对 应 的 实 现 为 demoCalcAddExecutor 4. 利用 demo 中现有扩展点,创建一个乘法实例 a. 增加一个扩展标志 Multi
e. 在 TestDemoCalcFacade 类中增加测试用例
f. 执行测试用例 5. 对乘法实例进行改造,将其抽出,改造成为一个独立的工程
a. 复制 demo-biz-add 子工程,将其命名为:demo-biz-multi 修改 E:\demo\demo\biz\multi 下 pom 文件修改 artifactId 为 demo-biz-multi 修改 E:\demo\demo\biz 下 pom 文件,在 modules 字节点增加节点为:<module>multi</module> 修改 E:\demo 下 pom 文件中增加依赖:
<osgi:object class="com.alipay.sofa.demo.core.engine.api.DemoCommExecutorDescriptor" /> </osgi:extension-point>
b. 三个类实现如下:
/**
* Inc.
* Copyright (c) 2005-2008 All Rights Reserved.
b. 在 demo-biz-add.xml 中发布实现 bean:
c. 在 demo-biz-add-extension.xml 中发布扩展
d. 在 demo-service-facade 的 DemoCalcFacade 中增加接口,并在 demo-ext-service 中对新增接口进行实现 DemoCalcFacade DemoCalcFacadeImpl
Sofa 学习总结
作者 吕方
版本 V0.0.1
时间 2008-11-13
1. 搭建 sofa 平台运行环境: 首先需要对从 confluence 中下载一个支持包,地址: :8080/pages/viewpage.action?pageId=3703045 或者直接使用链接: :8080/download/attachments/3703045/sofa-core-archetype.zip 下载后解压工程,然后 Maven 打包并 install 到本地资源仓库中。如果没有将这个小工程放到 Maven 的本地资源仓 库中则后面操作都会有很多小麻烦。接下来开始建立一个小的 sofa 平台: step1:运行命令:E:\>mvn archetype:generate -DarchetypeCatalog=local 运行后命令行内容提示如下:
找到代码:
修改后如下:
运行测试用例,进行环境测试。如果通过则说明平台搭建 OK 了。 2. demo-core-engine 使用总结:
a. 关于 demo-core-engine.xml:
其中扩展点名字为:executor 在 生 成 好 的 demo 中 ,engine 向 下 提 供 了 一 个 扩 展 点 。 所 有 的 扩 展 点 都 被 封 装 成 了 一 个 com.alipay.sofa.demo.core.engine.api.DemoCalcExecutorDescriptor 对象。 其中的 annotation 为各个扩展提供了配置的节点关系及相关属性。如 DemoCalcExecutorDescriptor 类中:
其中@XObject("executor")指明了扩展的节点类型为:executor, 同时,该节点类型同时拥有 action(由@
XNode("@action")定义)和 executor(由@XNodeSpring("@executor")定义)两个属性 对于 Annotation 跟 Java 对象之间的对象对应关系则是交给了 XMap 来处理。 根据 DemoCalcExecutorDescriptor 类中的定义,在各个扩展中需要定义一个节点如下结构:
<osgi:object class="com.alipay.sofa.demo.core.engine.api.DemoCatchExecutorDescriptor" /> </osgi:extension-point> <osgi:extension-point ref="demoCalcComponent" name="try">
*/
package com.alipay.sofa.demo.core.engine.api;
import mon.xmap.annotation.XNode;
import mon.xmap.annotation.XObject;
import mon.xmap.spring.XNodeSpring;
step3: 根据提示输入 Y 继续执行,执行成功后提示信息如下:
step4: 生成 eclispe 工程,导入 IDE,可以导入 9 个子工程。其中 demo-test-test 工程用于测试 step5: 对 com.alipay.sofa.demo.test.service.TestDemoCalcFacade 类进行修改。
action;
/**
* 计算的执行者。
*/
@XNodeSpring("@executor")
priБайду номын сангаасate DemoCommExecutor executor;
/**
* @return Returns the action.
*/
public String getAction() {
return action;
/**
* 计算执行者描述器。
*
* @author
* @version 0.01
*/
@XObject("try")
public class DemoCommExecutorDescriptor {
/**
* 计算的动作名称。
*/
@XNode("@action")
private String
在 demo-test-test 工程中增加依赖:
重新构建 eclipse 工程:mvn eclipse:eclipse 修改 multi 工程下 demo-biz-add.xml 为 demo-biz-multi.xml 修改 multi 工程下 demo-biz-add-extension.xml 为 demo-biz-multi-extension.xml 删除 demo-biz-add 工程中所有有关 multi 的内容 b. 在 demo-test-test 工程 com.alipay.sofa.demo.test.service.BaseTestCase 类的 getConfigurationLocations()方法中增 加内容
<osgi:object class="com.alipay.sofa.demo.core.engine.api.DemoFinallyExecutorDescriptor" /> </osgi:extension-point> <osgi:extension-point ref="demoCalcComponent" name="catch">