Sofa学习总结
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
其中 需 要 指 出 扩 展 点 名 : executor, 关 联 的 Component 为 demoCalcComponent, 声 明 扩 展 标 志:action ="Add", 其 值 定 义 在 demo-core-model 子 工 程 的 DemoActionEnum 中 , 扩 展 对 应 的 实 现 为 demoCalcAddExecutor 4. 利用 demo 中现有扩展点,创建一个乘法实例 a. 增加一个扩展标志 Multi
找到代码:
修改后如下:
运行测试用例,进行环境测试。如果通过则说明平台搭建 OK 了。 2. demo-core-engine 使用总结:
a. 关于 demo-core-engine.xml:
其中扩展点名字为:executor 在 生 成 好 的 demo 中 ,engine 向 下 提 供 了 一 个 扩 展 点 。 所 有 的 扩 展 点 都 被 封 装 成 了 一 个 com.alipay.sofa.demo.core.engine.api.DemoCalcExecutorDescriptor 对象。 其中的 annotation 为各个扩展提供了配置的节点关系及相关属性。如 DemoCalcExecutorDescriptor 类中:
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">
step2: 根据提示,输入信息如下:Choose a number: (1):1 继续执行,提示输入内容如下:Define value for sofa_app_name: : demo 继续执行,提示输入内容如下:Define value for artifactId: : demo 继续执行,如果不想改变版本信息,就直接留空不用输入任何信息,直接往下执行。 运行后命令行提示内容如下:
*/
package com.alipay.sofa.demo.core.engine.api;
import org.nuxeo.coFra Baidu bibliotekmon.xmap.annotation.XNode;
import org.nuxeo.common.xmap.annotation.XObject;
import org.nuxeo.common.xmap.spring.XNodeSpring;
return executor;
}
/**
* @param executor The executor to set.
*/
public void setExecutor(DemoCommExecutor executor) {
this.executor = executor;
}
}
/**
* Alipay.com Inc.
}
/**
* @param action The action to set.
*/
public void setAction(String action) {
this.action = action;
}
/**
* @return Returns the executor.
*/
public DemoCommExecutor getExecutor() {
step3: 根据提示输入 Y 继续执行,执行成功后提示信息如下:
step4: 生成 eclispe 工程,导入 IDE,可以导入 9 个子工程。其中 demo-test-test 工程用于测试 step5: 对 com.alipay.sofa.demo.test.service.TestDemoCalcFacade 类进行修改。
<osgi:object class="com.alipay.sofa.demo.core.engine.api.DemoCommExecutorDescriptor" /> </osgi:extension-point>
b. 三个类实现如下:
/**
* Alipay.com Inc.
* Copyright (c) 2005-2008 All Rights Reserved.
Sofa 学习总结
作者 吕方
版本 V0.0.1
时间 2008-11-13
1. 搭建 sofa 平台运行环境: 首先需要对从 confluence 中下载一个支持包,地址: http://confluence.alipay.net:8080/pages/viewpage.action?pageId=3703045 或者直接使用链接: http://confluence.alipay.net:8080/download/attachments/3703045/sofa-core-archetype.zip 下载后解压工程,然后 Maven 打包并 install 到本地资源仓库中。如果没有将这个小工程放到 Maven 的本地资源仓 库中则后面操作都会有很多小麻烦。接下来开始建立一个小的 sofa 平台: step1:运行命令:E:\>mvn archetype:generate -DarchetypeCatalog=local 运行后命令行内容提示如下:
-----------------------------------<executor action=""executor=""/> -----------------------------------其中第二个 executor 是 engine 向下提供的一个扩展接口(DemoCalcExecutor 接口),底层通过该接口实现 上下层对接,以实现向上层提供服务。第一个 executor则是节点类型(@XObject("executor")类型),而 action 则用于执行期对应实例的调用过程。 b. 关于 DemoCalcComponent 的使用总结: DemoCalcComponent 可以算是 engine 部分的核心部分,其实现继承自 Extensible 接口,Extensible 接口提供 了两个方法,分别用来卸载和注册扩展点,这两个方法最终在 DefaultComponent 中得到了一个默认实现, 在 DemoCalcComponent 的 实现类 DemoCalcComponentImpl 中 ,根据需 要又重 新对注 册扩展点 的方 法 ( registerExtension(Extension extension)) 进 行 了 改 造 。 每 次 系 统 找 到 一 个 扩 展 点 , 最 后 都 会 去 DemoCalcComponentImpl 中执行一下注册扩展点的方法(registerExtension(Extension extension))。 c. 关于 DemoCalcExecutor DemoCalcExecutor 是 engine 向下层提供的业务实现接口,供下层应用具体的业务实现实现。对 demo 中的 例子来说,他提供了加法和减法两个实现,分别位于 demo-biz-add 和 demo-biz-sub 两个子工程中。 3.扩展 demo-biz-add a. DemoCalcAddExecutor:继承扩展点提供接口——DemoCalcExecutor b. 发布扩展 demo-biz-add-extension.xml
<osgi:object class="com.alipay.sofa.demo.core.engine.api.DemoFinallyExecutorDescriptor" /> </osgi:extension-point> <osgi:extension-point ref="demoCalcComponent" name="catch">
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 文件中增加依赖:
在 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.DemoCatchExecutorDescriptor" /> </osgi:extension-point> <osgi:extension-point ref="demoCalcComponent" name="try">
其中@XObject("executor")指明了扩展的节点类型为:executor, 同时,该节点类型同时拥有 action(由@
XNode("@action")定义)和 executor(由@XNodeSpring("@executor")定义)两个属性 对于 Annotation 跟 Java 对象之间的对象对应关系则是交给了 XMap 来处理。 根据 DemoCalcExecutorDescriptor 类中的定义,在各个扩展中需要定义一个节点如下结构:
/**
* 计算执行者描述器。
*
* @author alipay.com
* @version 0.01
*/
@XObject("try")
public class DemoCommExecutorDescriptor {
/**
* 计算的动作名称。
*/
@XNode("@action")
private String
b. 在 demo-biz-add.xml 中发布实现 bean:
c. 在 demo-biz-add-extension.xml 中发布扩展
d. 在 demo-service-facade 的 DemoCalcFacade 中增加接口,并在 demo-ext-service 中对新增接口进行实现 DemoCalcFacade DemoCalcFacadeImpl
* Copyright (c) 2005-2008 All Rights Reserved.
*/
package com.alipay.sofa.demo.core.engine.api;
import org.nuxeo.common.xmap.annotation.XNode;
import org.nuxeo.common.xmap.annotation.XObject;
action;
/**
* 计算的执行者。
*/
@XNodeSpring("@executor")
private DemoCommExecutor executor;
/**
* @return Returns the action.
*/
public String getAction() {
return action;
找到代码:
修改后如下:
运行测试用例,进行环境测试。如果通过则说明平台搭建 OK 了。 2. demo-core-engine 使用总结:
a. 关于 demo-core-engine.xml:
其中扩展点名字为:executor 在 生 成 好 的 demo 中 ,engine 向 下 提 供 了 一 个 扩 展 点 。 所 有 的 扩 展 点 都 被 封 装 成 了 一 个 com.alipay.sofa.demo.core.engine.api.DemoCalcExecutorDescriptor 对象。 其中的 annotation 为各个扩展提供了配置的节点关系及相关属性。如 DemoCalcExecutorDescriptor 类中:
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">
step2: 根据提示,输入信息如下:Choose a number: (1):1 继续执行,提示输入内容如下:Define value for sofa_app_name: : demo 继续执行,提示输入内容如下:Define value for artifactId: : demo 继续执行,如果不想改变版本信息,就直接留空不用输入任何信息,直接往下执行。 运行后命令行提示内容如下:
*/
package com.alipay.sofa.demo.core.engine.api;
import org.nuxeo.coFra Baidu bibliotekmon.xmap.annotation.XNode;
import org.nuxeo.common.xmap.annotation.XObject;
import org.nuxeo.common.xmap.spring.XNodeSpring;
return executor;
}
/**
* @param executor The executor to set.
*/
public void setExecutor(DemoCommExecutor executor) {
this.executor = executor;
}
}
/**
* Alipay.com Inc.
}
/**
* @param action The action to set.
*/
public void setAction(String action) {
this.action = action;
}
/**
* @return Returns the executor.
*/
public DemoCommExecutor getExecutor() {
step3: 根据提示输入 Y 继续执行,执行成功后提示信息如下:
step4: 生成 eclispe 工程,导入 IDE,可以导入 9 个子工程。其中 demo-test-test 工程用于测试 step5: 对 com.alipay.sofa.demo.test.service.TestDemoCalcFacade 类进行修改。
<osgi:object class="com.alipay.sofa.demo.core.engine.api.DemoCommExecutorDescriptor" /> </osgi:extension-point>
b. 三个类实现如下:
/**
* Alipay.com Inc.
* Copyright (c) 2005-2008 All Rights Reserved.
Sofa 学习总结
作者 吕方
版本 V0.0.1
时间 2008-11-13
1. 搭建 sofa 平台运行环境: 首先需要对从 confluence 中下载一个支持包,地址: http://confluence.alipay.net:8080/pages/viewpage.action?pageId=3703045 或者直接使用链接: http://confluence.alipay.net:8080/download/attachments/3703045/sofa-core-archetype.zip 下载后解压工程,然后 Maven 打包并 install 到本地资源仓库中。如果没有将这个小工程放到 Maven 的本地资源仓 库中则后面操作都会有很多小麻烦。接下来开始建立一个小的 sofa 平台: step1:运行命令:E:\>mvn archetype:generate -DarchetypeCatalog=local 运行后命令行内容提示如下:
-----------------------------------<executor action=""executor=""/> -----------------------------------其中第二个 executor 是 engine 向下提供的一个扩展接口(DemoCalcExecutor 接口),底层通过该接口实现 上下层对接,以实现向上层提供服务。第一个 executor则是节点类型(@XObject("executor")类型),而 action 则用于执行期对应实例的调用过程。 b. 关于 DemoCalcComponent 的使用总结: DemoCalcComponent 可以算是 engine 部分的核心部分,其实现继承自 Extensible 接口,Extensible 接口提供 了两个方法,分别用来卸载和注册扩展点,这两个方法最终在 DefaultComponent 中得到了一个默认实现, 在 DemoCalcComponent 的 实现类 DemoCalcComponentImpl 中 ,根据需 要又重 新对注 册扩展点 的方 法 ( registerExtension(Extension extension)) 进 行 了 改 造 。 每 次 系 统 找 到 一 个 扩 展 点 , 最 后 都 会 去 DemoCalcComponentImpl 中执行一下注册扩展点的方法(registerExtension(Extension extension))。 c. 关于 DemoCalcExecutor DemoCalcExecutor 是 engine 向下层提供的业务实现接口,供下层应用具体的业务实现实现。对 demo 中的 例子来说,他提供了加法和减法两个实现,分别位于 demo-biz-add 和 demo-biz-sub 两个子工程中。 3.扩展 demo-biz-add a. DemoCalcAddExecutor:继承扩展点提供接口——DemoCalcExecutor b. 发布扩展 demo-biz-add-extension.xml
<osgi:object class="com.alipay.sofa.demo.core.engine.api.DemoFinallyExecutorDescriptor" /> </osgi:extension-point> <osgi:extension-point ref="demoCalcComponent" name="catch">
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 文件中增加依赖:
在 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.DemoCatchExecutorDescriptor" /> </osgi:extension-point> <osgi:extension-point ref="demoCalcComponent" name="try">
其中@XObject("executor")指明了扩展的节点类型为:executor, 同时,该节点类型同时拥有 action(由@
XNode("@action")定义)和 executor(由@XNodeSpring("@executor")定义)两个属性 对于 Annotation 跟 Java 对象之间的对象对应关系则是交给了 XMap 来处理。 根据 DemoCalcExecutorDescriptor 类中的定义,在各个扩展中需要定义一个节点如下结构:
/**
* 计算执行者描述器。
*
* @author alipay.com
* @version 0.01
*/
@XObject("try")
public class DemoCommExecutorDescriptor {
/**
* 计算的动作名称。
*/
@XNode("@action")
private String
b. 在 demo-biz-add.xml 中发布实现 bean:
c. 在 demo-biz-add-extension.xml 中发布扩展
d. 在 demo-service-facade 的 DemoCalcFacade 中增加接口,并在 demo-ext-service 中对新增接口进行实现 DemoCalcFacade DemoCalcFacadeImpl
* Copyright (c) 2005-2008 All Rights Reserved.
*/
package com.alipay.sofa.demo.core.engine.api;
import org.nuxeo.common.xmap.annotation.XNode;
import org.nuxeo.common.xmap.annotation.XObject;
action;
/**
* 计算的执行者。
*/
@XNodeSpring("@executor")
private DemoCommExecutor executor;
/**
* @return Returns the action.
*/
public String getAction() {
return action;