hongsoft

构客网首页  博客  论坛

 
  SOA我有话说
  用户信息
 
帐号:  新手必读
密码: 保存密码
 
  分类列表
全部类别(199 篇)
我的文章(199 篇)
  按月归档
2004年-09月(62 篇)
2004年-11月(16 篇)
2005年-03月(53 篇)
2005年-11月(6 篇)
2006年-08月(33 篇)
2006年-11月(2 篇)
2007年-07月(12 篇)
2007年-12月(8 篇)
2008年-01月(7 篇)
  SOA2007 - SOA实践
我们何时迈向SOA
——SOA在中国的整体发展现状究竟如何?
我们如何迈向SOA
——中国企业如何迈出实施SOA的第一步?
我们应采用何种技术
——SOA国际标准SCA/SDO的具体内涵?
我们还需要何种技能
——SOA将如何改变系统架构设计以及项目管理过程?

显示第 1-10 条记录,共 199 条记录 首页 前页 后页 尾页  到第 页,共 20

SDO性能优化

发布时间:2008年06月12日 作者:hongsoft

阅读次数:859次 类别:我的文章 永久链接 Trackback 
SDO性能优化
1       性能分析
1.1   环境
测试机器:192.168.1.181 windows IG内存
数据库机器:192.168.1.61 oracle 10g
公司内网环境。
1.2   分析方法
首先,为了方便春龙的后续工作,采用了CVS的已经有的代码(eos-data-xpath-perftest项目的DASTestCase.java测试类)
其次,为了屏蔽测试机器的CPU波动和网络环境变动所带来的影响,建立了DAS和JDBC两套测试,JDBC方式主要用来作为 选取 有效 测试数据的标准值。
最后,单次测试的值都不可靠,所以每次测试都循环100遍,取100遍的和来进行分析。
1.3   优化前的数据
先看总体情况的数据:(下面的数据都是100次的总和,单位都是纳秒)
测试方法
数据库连接
Criteria转换
执行时间(ps,rs,数据转换)
DAS
273xxx
1xx
xxxx
JDBC
7523 307
 
上表中,从这里我们看到,DAS执行时间比数据库连接多一个数量级,比Criteria转换也多一个数量级。是优化的重点。
 
DAS的执行时间是 100次的总和,包括了 准备PrepareStatement,取ResultSet和 转换成SDO的时间。我们把它分解到每次,在单次中,执行时间的具体分配如下:
准备Criteria
PrepareStatement
取ResultSet
rs->SDO
3xxxx
xxx
368xxxx
314xxxxx
从表中我们可以看到,rs->SDO比 “准备Criteria”多两个数量级,比PrepareStatement多两个数量级,比ResultSet多一个数量级。是优化的重点。
 
 
2       性能优化思路
2.1   优化DataObject.set
RsàSDO调用最多的是 DataObject.set方法,所以首先需要优化它。
我们大部分的情况都是 非openContent的SDO,也都是非Many的属性;但是我们现在的处理方式中,统一考虑了这样的两个特殊情况。
我们的优化思路是:首先考虑 80%的情况,直接处理;不满足再去考虑20%的情况。
所以在set方法中增加如下代码:
int index = ((ExtendedType)type).getPropertyIndex(path);
       if (index >= 0) {//open
           ExtendedProperty property = (ExtendedProperty) getType()
                  .getProperties().get(index);
           if (!property.isMany() && !property.isReadOnly()
                  && property.getType()!=null && property.getType().isDataType()) {//many
              propertyValues[index] = value;
              return;
           }
           setManyNotOpen(index,property, value);
           return;
       }
 
2.2   减少对DataObject的set 和get的调用
调试程序,主要定位对DataObject的set和get的调用,发现如下这些地方比较影响性能,从功能上也只是记录Hibernate的log,可以去掉:
1)  的loadFromResultSet方法是把 某一行ResultSet转成SDO对象的一部分,它会记录当前对象的信息,可以去掉。Loader.java
2)  的getRow方法是把 某一行ResultSet转成SDO对象的另外一部分,可以去掉。Loader.java
2.3   查看其他部分
其他部分都与功能直接相关,不能去掉。
3       性能优化后的数据
用与前面同样的环境,选与前面的JDBC接近的基准数据,优化后的值如下:
先看总体情况的数据:(下面的数据都是100次的总和,单位都是纳秒)
测试方法
数据库连接
Criteria转换
执行时间(ps,rs,数据转换)
DAS
2xxx
122xxx
4xxxxx
JDBC
8517 281
3393 5402 0 (得到rs)
1903 4732 01 (rs->javaBean)
 
在单次中,执行时间的具体分配如下:
准备Criteria
PrepareStatement
取ResultSet
rs->SDO
35xxxx
1xxxx
3xxxxx
22xxxxx
4       总结
Rs->SDO的优化率xxxxx
这个优化率只对 最普通的DAS操作有效,对 openContent和isMany属性没有什么优化。
在最普通的DAS操作情况下,我们基本是做到了 直接 放值和直接取值,可优化的空间已经非常小。
 
执行时间的优化率为 xxxxxxxx
 
这样的优化程度还不够,需要再进行其他方法的优化。

BPEL与XPDL的定位区别

发布时间:2008年06月03日 作者:hongsoft

阅读次数:1595次 类别:我的文章 永久链接 Trackback 
根据最近对几个BPEL产品的研究,根据以前对XPDL的了解,分析了BPELXPDL在业务目标方面的主要区别。
定义、缩略语:
XPDLThe XML Process Definition Language。
BPELBusiness Process Execution Language
背景描述:
公司最近交给我的任务之一,是通过分析BPEL的业务目标定位,来帮助我们分析在EOS产品中怎么利用BPELBPEL4People,HumanTask),实现产品的“帮助用户快速构建稳定,易用,灵活,易管控的SOA应用”的目标。
最近两周研究的产品主要有下面几个:
1)ActiveBPEL(包括Designer和ActiveVOS和ActiveBPEL Server)
2)Apache ODE
前期的工作学习中,已经学习过或者使用过的产品有:
1) IBM Websphere Process Server
2) JBoss jBPM-BPEL
3) BEA Aqualogic BPM Suite
研究的技术和规范内容主要是:
1)BPEL2.0
2)BPEL4People 和HumanTask
3)下载了最新的XPDL2.1规范,重新看了一遍
4)重新看了一遍BPMN(没有作为重点)
下面主要讨论的是BPEL和XPDL的业务目标方面的区别,对于技术方面的区别,会根据工作情况,在后面再另外写文档说明。
1       业务分析人员的视角
1.1   业务分析人员从用户的视角来做过程建模
业务分析人员没有能力从系统的视角来对过程做建模,他们建模的结果可以告诉我们的是:用户执行什么样的操作来完成整个过程;他们建模的结果不可以告诉我们的是:系统怎么样对用户的操作做出反应。[请参见jBPM的leader的博客:http://blogs.jboss.com/blog/tbaeyens/2006/07/05/About_BPM_miracles_and_what_you_can_expect_in_real_life.txt]
我们举个例子来说明上面这段话的意思:对于普元今年做的招聘活动,会有一个流程来对应。对于HR的xiaofang(严格说来,她是一个用户,不是一个业务分析人员;但是业务分析人员的需求也是从她这里获取的)来说,下面这个图她是能够看明白的:
上面是招聘活动的状态图,业务人员基本可以看懂;但是xiaofang肯定不能告诉我们技术人员说:是的,这个就是我们的流程。因为这个图其实还没有描述“用户执行什么样的操作来完成整个过程”,我们在状态图上加上部分“用户活动”,对xiaofang可能更容易明白一点:
在图上加的几个注解,可以帮助用户和业务人员和技术人员更好的理解整个流程。上面这个图是状态图和活动图的结合。
要特别说明的是:业务人员不会去根据系统边界,消息发送,业务对象等内容来思考问题;上面的图中,不会出现“invoke”一个服务的活动(BPEL),也不会出现“自动活动”(xpdl)。
1.2   业务人员的工具
业务人员的工具当然首先是vendor提供的产品,但是他们还应该有另外一个工具:简化的BPMN。
简化的BPMN的第一层含义:首先应该是BPMN。
比如对于“招聘流程”,其实可以画出多个 上面的那个“状态活动图”:内部推荐的和普通应聘 的“招聘流程”并不相同,初级人员招聘和高级人员招聘也不相同。
Xiaofang不可能在图中用if…else来表达不同的情况,她只能对内部推荐的情况,画一个图给我们;对普通应聘的情况,画一个图给我们……
我们不可能对每个情况定义一个流程的,那样就是硬编码而不是BPM了。所以,业务分析人员需要把xiaofang给的几个情况结合考虑,最后用BPMN画的图大概如下:
是不是比较复杂?有点看不懂?是的,所以我们需要的是“简化的BPMN”。BPMN是一份超过300页的规范。即使业务分析人员决心去掌握所有这些概念,它也是难以思考的。( Michael)这个调查的结论是日常只使用了大约25个BPMN结构。
不过我从BPEL4People的TC的member那里问到的情况是:BPEL4People定稿后,还将去调整BPMN,应对BPEL领域的新的变化。
1.3   分析模型与实现模型的鸿沟
根据上面的图,我们已经得到了分析模型,但是还没有实现模型。
Alast这些以前专攻XPDL领域的学院派,现在也在做BPMN-BPEL的转换等方面的工作;但是需要说明的是,我们不能要求业务分析人员根据BPMN图,直接得到实现模型。这个已经是业界的共识(请参考bpmn-xpdl-and-bpel  和  BPEL implement等等很多文章)。
实现模型还是要靠BPEL
2       的业务定位BPEL
前面的招聘流程的例子中,BPEL的图可能是如下:(请参考BPEL
我们为图取的名称是“Application Service”,它本质上只实现了一个服务,而不是一个流程。流程在哪里呢?流程已经被业务分析人员用BPMN给画出来了,流程图涉及到多个人多个系统多个活动多个状态;而我们的BPEL服务实现,只是实现了一个或者多个服务,它只管理这些服务的生命周期。
3       的业务定位XPDL
实际上,WFMC也认为XPDL与BPEL是不同业务定位的两个标准,它的说明如下:
How Does XPDL Compare to BPEL?
BPEL and XPDL are entirely different yet complimentary standards.  BPEL is an "execution language" designed to provide a definition of web services orchestration, specifically the underlying sequence of interactions, the flow of data from point-to-point. For this reason, it is best suited for straight-through processing or data-flows vis-a-vis application integration. 
The goal of XPDL is to store and exchange the process diagram, to allow one tool to model a process diagram, and another to read the diagram and edit, another to "run" the process model on an XPDL-compliant BPM engine, and so on. For this reason, XPDL is not an executable programming language like BPEL, but rather a process design format that literally represents the "drawing" of the process definition. Specifically, it has ‘XY" or vector coordinates, including lines and points that define process flows. This allows an XPDL to store a one-to-one representation of a BPMN process diagram. For this reason, XPDL is effectively the file format or "serialization" of BPMN, as well as any non-BPMN design method or process model which use in their underlying definition the XPDL meta-model (there are presently about 70 tools which use XPDL for storing process models.)
WFMC用了些什么名词来形容XPDL呢?design format,process diagram,BPMN,DRAWING….等等。
WFMC认为BPEL才是“执行语言”,而认为XPDL主要用来“建模”。实际上通过前面的分析我们也很容易就明白:XPDL领域主要还是利用了活动图,状态图和FSM等元素;这些元素的结合很容易用来表达一个流程的建模模型;但是--------我们的平常的做法,就是直接拿这个建模模型来作为了执行语言。
我们这样做有什么缺点呢?
首先,我们用XPDL表达了流程的建模模型,但是我们为了让它可执行,加入了太多的业务人员不能理解的元素,导致业务人员不能直接使用它;
其次,我们用XPDL表达了可执行的元素,为了容易“建模”,加入了很多“活动”等“建模”元素,这些元素一般会需要去配置很多的属性,而这些属性是干扰和影响“执行”的。
XPDL就是一个建模和执行的混合体,是一个分析和实现的混合体。
4       总结
就算我们前面的分析是正确的,但是我们已经用XPDL很久了,我们是否要用BPEL呢?
这个还是需要我们另外花很多的时间去研究和证明的,下面是目前的看法,具体怎么做需要大家一起来判断分析:
1)  个人认为XPDL其实不算是个标准(支持它的vendor都非常小,而且支持得到底怎么样,说不清楚)
2)  BPEL当然也是“遵徇了WFMC模型”的 (就如很多国内厂商的宣传一样)
3)  的支持vendor就比较多,而且都是比较大的公司和组织BPEL
4)  其实IBM以前也支持XPDL的(教材里面的FileNet,非常的XPDL);但是,现在基本很少听到有人提到它了;从IBM的态度我们也应该能够找到我们的方向(从另外说明了一点:IBM大力做BPEL不是因为纯商业原因,因为它做XPDL也比我们强)
5)  集成应该是BPM的一大主力方向,集成是BPEL的最大优势。(具体为什么,需要再做具体的分析比较)

build the eclipse project of tucany sdo

发布时间:2008年04月10日 作者:hongsoft

阅读次数:610次 类别:我的文章 永久链接 Trackback 
tuscany的项目结构比较麻烦,我们用eclipse的不太适应,不过其实还是是比较简单的,方法如下:

 

1)Download the following:

    * JDK 5.0+ (J2SE 1.5.0+)
    * Apache Maven (2.0.4+)
    * Subversion (1.2+)

2)用svn取到 https://svn.apache.org/repos/asf/incubator/tuscany/java/sdo 的代码

3)在环境变量 path中加入 maven,设置JAVA_HOME

4)在cmd中,转到 <sdo-source-root>/sdo目录,执行 mvn
  ( attention:保证网络是连通的)

5)在cmd中,转到 <sdo-source-root>/sdo/sdo-api目录,执行 mvn -Peclipse eclipse:eclipse

6)在cmd中,转到 <sdo-source-root>/sdo/impl目录,执行 mvn -Peclipse eclipse:eclipse

7)在cmd中,转到 <sdo-source-root>/sdo/tools目录,执行 mvn -Peclipse eclipse:eclipse

后面的工作就需要按E文的来了,基本上是比较简单常用的eclipse操作,比较的不好说,就copy了:

    * Start up eclipse
    * Switch to the Java perspective
    * Execute "File => Import ... => General => Existing project into workspace
    * Click "Browse ..." Navigate to the spec/sdo-api directory and click OK
    * Select the sdo-api project and click OK
    * After Eclipse has built the project you will see that there are compile errors. This is because Maven has created build dependencies for the project on the contents of your maven repository, but Eclipse doesn"t yet know where that repository is. You must create and assign a value to the M2_REPO variable within eclipse to resolve these dependencies
          o Right click in the Package Explorer frame on the root of the newly created project and select Properties => Java Build Path
          o Click on the "Libraries" tab and select "Add Variable...", "Configure Variables ...", "New ..."
          o Set Name to M2_REPO and Click on "Folder..."
          o Navigate to the "repository" folder/directory (on Windows this is \Documents and Settings\<user>\.m2\repository, on Linux it is ~/.m2/repository) and click OK
          o Accept the request for doing a full rebuild
          o Cancel away from the "Configure Variables" dialog
          o Click "OK" on the Project Properties Window
          o When building is complete the project should now have no errors

Now repeat the same instructions for importing the sdo-impl and sdo-tools projects into the eclipse environment. You aklready have the M2_REPO variable defined now, so these projects should build OK.

At this point you have three separate projects each dependent on binary artifacts in your maven repository. Don"t be tricked into thinking that
if you modify the sdo-impl project, that those changes will be picked up by the sdo-tools project. If you want this behaviour then follow these steps

    * In the package exlporer pane of the Java perspective, Right Click on Properties and select the libraries tab
    * Select the M2_REPO/commonj/sdo-api* library entry and click "remove"
    * Select the Projects tab and click "Add..."
    * Select the SDO API project and click OK
    * If you plan to work in the tools project
          o Select the "Order and Export" tab and select the sdo-api project and click OK (this means that the sdo-impl project will expose the interfaces of the sdo-api project, so that you don"t have to import them into projects which depend on the sdo-impl project)
          o Repeat the above instructions, removing the sdo-api and sdo-impl library dependencies from the tools project, and adding a project dependency for the sdo-tools project on the sdo-impl project


OASIS 2007成就总结

发布时间:2008年04月09日 作者:hongsoft

阅读次数:452次 类别:我的文章 永久链接 Trackback 
这是我作为普元软件派在OASIS的会员代表之一,于2008年2月2日收到的OASIS主席兼CEO Patrick Gannon发送的OASIS 2007成就总结的信件的主要内容,从中可以看到OASIS这个组织最近做的事情和行业的发展动向。



OASIS 2007成就总结

亲爱的OASIS会员:

一月就要过去,我想花点时间,总结一下我们在2007年所取得的一些成绩。
我们去年启动了5个新的会员区[1],组成了13个新的技术委员会,批准了16个OASIS标准和25个规范。董事会批准了新的会员区政策,更新了OASIS的规章制度和技术委员会流程。
2007年早期我们启动了OASIS中国办事处,OASIS的官方中文翻译网站也运作了起来。OASIS网站新加了一个Take-A-Tour的演示[9],用来提供一个关于我们做的事情的简单概括的介绍。另外我们加强了DITA/ebXML/OpenDocument/UDDI等组织技术的在线交流。
OASIS技术服务团队完成了对网络架构和网站内容的更新,OASIS会员可以使用我们的search功能和管理工具.......

.....

[1] http://www.oasis-open.org/who/ms-list.php

[2] http://www.oasis-open.org/specs/index.php

[3] http://www.oasis-open.org/who/intellectualproperty.php

[4] http://www.oasis-open.org/who/bod.php

[5] http://www.oasis-open.org/who/ms_policy.php

[6] http://www.oasis-open.org/who/bylaws/index.php

[7] http://www.oasis-open.org/committees/process.php

[8] http://www.oasis-open.org/news/oasis-news-2007-03-15.php

[9] http://www.oasis-open.org/home/tour.php

[10] http://dita.xml.org/

[11] http://ebxml.xml.org/

[12] http://opendocument.xml.org/

[13] http://uddi.xml.org/

[14] http://search.oasis-open.org/

[15] http://www.oasis-open.org/who/staff.php

在发完这个信件后的2月6号,已经在OASIS 主席兼CEO任上呆了8年的Patrick Gannon正式卸任。信件通知内容如下:
Dear OASIS members,


As Eduardo informed you last week, I have resigned as President and CEO
of OASIS. In the nearly eight years I have been associated with the
consortium on staff and the Board of Directors, I saw the organization
grow from its roots in SGML to e-business to the place it holds today as
the nexus of open standards that advance the global information society.
It has been my deepest privilege to be part of that growth and to have
known and worked alongside you all.

On your behalf, I have had the opportunity to literally travel the
world, representing your interests at conferences and summits with
industry leaders, heads of state, and cross-governmental bodies. You"ve
shared your ideas and enthusiasm with me, as well as your personal
stories and cultures, and for these acts of fellowship, I will always be
grateful.

My time leading OASIS has been one of the most exciting, rewarding
experiences of my career. I wish and fully expect much success for the
consortium in the many years to come.


SOA技术圈子会后感

发布时间:2008年03月14日 作者:hongsoft

阅读次数:928次 类别:我的文章 永久链接 Trackback 

2008年2月29日,下午四点,出发。动身之前记住了一个名字:马越。2月末刚好在做JSF和我们自己的页面流的整合,所以知道这个07年7月从美国回来办咨询公司的Seam人士,他,将和我同一间房。

不过我先到酒店,因为太累已经睡着了。早上迷迷糊糊中醒来,发现另一床上的人好象见过,这不是InfoQ的泰稳吗?原来昨天马越敲了半天门没有人应,换了房间;泰稳就过来同住了。以前在北京,通过江南白衣认识的泰稳;呵呵,聊了一下,发现他对我们公司的内部情况和最近发展非常熟悉,后来才知道,原来是因为最近公司招聘和他们有过合作的。

第一天上午讨论的是SOA的市场价值,robbin主持,主要讨论了web2.0与SOA和BPM间的发展关系。整个讨论的氛围大家可以看看http://blog.csdn.net/cenwenchu79/archive/2008/03/03/2141839.aspx ,我想到的是我们公司对EOS6产品的公式概括: EOS应用模型=流程+数据+人机交互。我从会上讨论想到的是企业应用分为三类:交易类,流程类,消息类;而 流程类企业应用=流程逻辑+数据逻辑+事件逻辑。这样的分类和定义当然是没有什么理论根据的,只是个人总结,以后通过技术文章再和大家分享。

下午讨论的是SOA的架构方法,程勇主持,主要讨论了SOA的本质和行业发展。我从会上想到的是BPM和SOA发展的方向问题。来自淘宝的BlueDavy问我怎么好久没有见我做BPM和工作流的事情了,现在想起来以前好象和他在网上聊过;马越提到了工作流和业务间的关系的问题,其实这个问题是我一直在思考一直想要解决的,也是我为什么要到SOA领域发展的一个最重要的原因。我认为从工作流向BPM发展是一条直路,但是这条路多有陡坡,很难走通;从工作流到SOA到BPM是条弯路,但是这条路就比前面那条要平坦得多。其实,我一直在考虑BPM的问题,这个也一直是我主要的发展方向。

晚上和曹晓钢同房,我请教了他开公司的事情,他问了我对现在做的事情的看法。他睡后,我还在想白天听到的讨论内容,三点才有点睡意……

第二天是公司总监讲解产品的内容,内容非常好;可能是因为我接触产品有段时间了,讲的问题也是我思考过或者思考后不解的内容,所以听得非常认真而且激动。讲解引发了圈内朋友的激烈讨论,大家出去玩儿的时侯还在激烈辩论这些技术问题……

2008年3月1日和2日,是我应该努力记住的日子。在这两天,我第一次到了被称为“东方夏威夷”的三亚,第一次到了“天下第一湾”亚龙湾,第一次入住价值900人民币的环球城,第一次见到诸多圈内大腕,第一次全范围思考自己工作领域的过去和将来……


JSF的PhaseListener的扩展

发布时间:2008年03月14日 作者:hongsoft

阅读次数:227次 类别:我的文章 永久链接 Trackback 
最近做 JSF和我们自己实现的 pageFlow的整合,基本已经完全调通了。过程中间考虑到了对JSF的 PhaseListener的扩展,后来发现这个思路对我们这个工作并没有帮助,但是 已经摸透了这个技术点,就记录下来,以后可以查查看。
1)faces-config.xml的编辑
 <lifecycle>
            <phase-listener>com.primeton.jsf.FlowPhaseListener</phase-listener>
</lifecycle>
就可以了。

2)listener的编辑
因为马上就要从 自己的代码中把这个多余的代码去掉,所以,还是把code全部copy出来吧。

public class FlowPhaseListener implements PhaseListener {

    public void afterPhase(PhaseEvent event) {
        // TODO Auto-generated method stub         
    }

    public void beforePhase(PhaseEvent event) {
        FacesContext context=event.getFacesContext();
        HttpServletRequest request=(HttpServletRequest)( context.getExternalContext().getRequest());       
        UIViewRoot root=context.getViewRoot();       
        String theActionString=getActionString(root);
        if(theActionString==null)
            return ;
        else
        {//下面是我们想在listener中做的事情
            int i=theActionString.indexOf(".flow");
            request.setAttribute("_eosFlowID", theActionString.substring(0, i+5));
            request.setAttribute("_eosFlowAction", theActionString.substring(i+6,theActionString.length()));
        }

    }
    //访问组件树哦,这个功能不错
    private String getActionString(UIComponent comp)
    {   
        String theActionString=null;
        for (Iterator it = comp.getFacetsAndChildren(); it.hasNext(); )
        {
            UIComponent childOrFacet = (UIComponent)it.next();           
            if(childOrFacet instanceof ActionSource)
            {
                ActionSource source = (ActionSource) childOrFacet;               
                theActionString=source.getAction().toString();
                if(null!=theActionString&&theActionString.length()>0&&theActionString.indexOf(".flow")>0)
                    return theActionString;
            }
            theActionString=getActionString(childOrFacet);
        }
        return theActionString;
    }
   //指定某个阶段
    public PhaseId getPhaseId() {
        // TODO Auto-generated method stub
        return PhaseId.PROCESS_VALIDATIONS;
    }

PhaseListener的思路和在JSF中的地位大家应该都已经清楚的,否则应该也不会看这个文章,这里就不说了。

谈谈各大框架/产品的流程应用

发布时间:2008年01月07日 作者:hongsoft

阅读次数:1229次 类别:我的文章 永久链接 Trackback 3条评论
逻辑流/页面流/业务流 它们运行在非常不同的层面或粒度中。逻辑流来自于一次与单一用户的单一交互; 页面流来自于与单一用户的多次同一上下文的交互;而业务流则横跨许多用户和交互。从另外一个角度看,他们三个是完全正交的,可以在一起使用或是分开单独使 用,或者都不用。 1  长子:业务流
   业务流程了解得比较多,这里就不废话了。举几个例子用做广告:) EOS工作流/jBPM/其他的BPEL产品 等,我的博客上写了不少其他的产品(blog.csdn.net/hongbo781202/)。业务流程可能横跨多个用户的多次对话,流程的状态被保存 在数据库中,所以流程被认为是长时间运行的。

2   老二:无状态的页面流

   无状态的页面流早已经存在,大家也都非常熟悉。就比如webwork框架等。无状态的页面流定义了一种映射,把事件的的逻辑结果用命名规则直接映射到视图的结果页面。新近的两个无状态的页面流是JSF和Seam框架。
    JSF举例如下:
<navigation-rule>
    <from-view-id>/numberGuess.jsp</from-view-id>
       
    <navigation-case>
        <from-outcome>guess</from-outcome>
        <to-view-id>/numberGuess.jsp</to-view-id>
        <redirect/>
    </navigation-case>

    <navigation-case>
        <from-outcome>win</from-outcome>
        <to-view-id>/win.jsp</to-view-id>
        <redirect/>
    </navigation-case>
       
    <navigation-case>
        <from-outcome>lose</from-outcome>
        <to-view-id>/lose.jsp</to-view-id>
        <redirect/>
    </navigation-case>

</navigation-rule>
     Seam举例如下:
<page view-id="/numberGuess.jsp">
       
    <navigation>
        <rule if-outcome="guess">
            <redirect view-id="/numberGuess.jsp"/>
        </rule>
        <rule if-outcome="win">
            <redirect view-id="/win.jsp"/>
        </rule>
        <rule if-outcome="lose">
            <redirect view-id="/lose.jsp"/>
        </rule>
    </navigation>

</page>(说明:这两个example是从seam的userguide中抄过来的)。

3  老三:有状态的页面流
  用过业务流程和无状态的页面流的同学大都有过心痒痒的感觉,是不是这两个东西可以合起来用啊?因为我以前一直是做业务流程的,所以我在05年就做过一套 “自认为创世纪的东东”,其实就是把业务流程用到页面上来。后来终于有一天,知道了这个东西的名字是“页面流”,也知道那个“自认为创世纪的东东”早就在 业界有了产品了。  我最早是用BEA workshop试验的页面流,当时挺撼动的,毕竟比自己捣鼓
的那个东东强多了。现在想来也就很一般的功能。
  BEA的jpf毕竟不是标准,(应该不是吧?呵呵)为了推广市场,BEA的Beehive包含了一个jpf框架:Pollinate的NetUI。 NetUI Page Flow(页面流)是一个基于Apache Sruts的Web应用程序框架,基于JSR-175元数据,它构建在模型/视图/控制器元素的核心Struts分离的基础之上。
  如果说NetUI Page Flow更偏重于无状态的页面流(使用简单),那么Spring WebFlow更偏重于业务流程(功能强大)。Spring WebFlow以有限自动机(Finite State machine)的概念为基础。Web应用内部的用户交互行为和事务被建模为一般的状态机。
  EOS的页面流更是同时吸收了BEA JPF的优点(eclipse插件方便用户开发)和Spring WebFlow的优点(功能全面),大家可以下载EOS6.0试试用用。
  页面流领域给我最大振撼的还是是jBPM。(注意,我认为seam的页面流功能是jBPM的功劳,不是Seam自己的)。因为我05年做的那套“自认为创 世纪的东东”,开始是想过要用这个思路的(我当时就已经用了好久的jBPM了),可惜当时我们团队掌握jBPM的人太少,没有用这个方案。
 下面是一个使用jPDL定义页面流的例子(摘自Seam2.0 userguide):

<pageflow-definition name="numberGuess">
   
   <start-page name="displayGuess" view-id="/numberGuess.jsp">
      <redirect/>
      <transition name="guess" to="evaluateGuess">
          <action expression="#{numberGuess.guess}" />
      </transition>
   </start-page>
  
   <decision name="evaluateGuess" expression="#{numberGuess.correctGuess}">
      <transition name="true" to="win"/>
      <transition name="false" to="evaluateRemainingGuesses"/>
   </decision>
  
   <decision name="evaluateRemainingGuesses" expression="#{numberGuess.lastGuess}">
      <transition name="true" to="lose"/>
      <transition name="false" to="displayGuess"/>
   </decision>
  
   <page name="win" view-id="/win.jsp">
      <redirect/>
      <end-conversation />
   </page>
  
   <page name="lose" view-id="/lose.jsp">
      <redirect/>
      <end-conversation />
   </page>
  
</pageflow-definition>
    用过jBPM的同学们,看到这个感觉怎么样?亲切吧?一个简单的页面流定义看起来跟业务流程定义非常相似(是同一种类型的东西),不同的是用 <page>节点替换了<task-node> 节点。

4.老四:逻辑流
   逻辑流应该是EOS首创(应该是吧?),在EOS中他们是.bizx文件,基本上等同一个java 方法,内部可以调用服务/运算逻辑和另外一个逻辑流。

不 要把这些个事情弄混了!逻辑流/页面流/业务流 它们运行在非常不同的层面或粒度中。逻辑流来自于一次与单一用户的单一交互; 页面流来自于与单一用户的多次同一上下文的交互;而业务流则横跨许多用户和交互。从另外一个角度看,他们三个是完全正交的,可以在一起使用或是分开单独使 用,或者都不用。

sdo的三种实现方法

发布时间:2007年12月10日 作者:hongsoft

阅读次数:817次 类别:我的文章 永久链接 Trackback 7条评论
sdo的三种实现方法 1)就是 tuscany das的实现了,大家有兴趣可以自己去看看。
2)就是 EOS das的实现方式了。
其实就是对hibernate的一个扩充,实现了 sdo-r。
一个sdo是可以对应多个不同的 hbm mapping的,这个需要用studio的形式让用户做选择和配置。
3) Eclipse Teneo方式
teneo以前是elver 持久化组件,后来并入了Eclipse EMF Tools项目。
它的本质就是在 emf 对象和 hibernate/sdo间加了一个桥梁,这样我们只需要关注EMF对象的关系,而不用过多的考虑每一个eObject该如何与数据库表对应。

一般是用hibernate了,在这样的情况下,Teneo会根据ePackage所描述的Model中的eObject对象之间的关系,自动的产生hiernate.hbm.xml映射文件。
但是会有 数据库表结构需要 手工定的情况,这样的情况下,还是需要和EOS一样,用图形方式来让用户
选择。
可以参考  http://www.elver.org/hibernate/tutorialone/tutorial1_intro.html, 如果不想深入,
可以只看看下面的代码:

  1. final HbDataStore dataStore = HbHelper.INSTANCE.createRegisterDataStore(dataStoreName);
  2. dataStore.setEPackages(new EPackage[] { LibraryPackage.eINSTANCE });
  3. final SessionFactory sessionFactory = dataStore.getSessionFactory();
  4. Session session = sessionFactory.openSession();
  5. session.beginTransaction();
  6. LibraryAdapterFactory adapterFactory = new LibraryAdapterFactory();
  7. Library library = LibraryFactory.eINSTANCE.createLibrary();
  8. library.eAdapters().add( adapterFactory.createAdapter(library) );
  9. library.setName("My Library");
  10. session.save(library);
  11. Writer writer = LibraryFactory.eINSTANCE.createWriter();
  12. writer.setName("Writer One");
  13. Book book = LibraryFactory.eINSTANCE.createBook();
  14. book.setPages(305);
  15. book.setTitle("The Hobbit");
  16. book.setCategory(BookCategory.SCIENCE_FICTION_LITERAL);
  17. book.getWriter().add(writer);
  18. library.getWriters().add(writer);
  19. library.getBooks().add(book);
  20. session.getTransaction().commit();
  21. session.close();


build the eclipse project of tucany sdo

发布时间:2007年12月08日 作者:hongsoft

阅读次数:333次 类别:我的文章 永久链接 Trackback 2条评论
build the eclipse project of tucany sdo tuscany的项目结构比较麻烦,我们用eclipse的不太适应,不过其实还是是比较简单的,方法如下:


1)Download the following:

    * JDK 5.0+ (J2SE 1.5.0+)
    * Apache Maven (2.0.4+)
    * Subversion (1.2+)

2)用svn取到 https://svn.apache.org/repos/asf/incubator/tuscany/java/sdo 的代码

3)在环境变量 path中加入 maven,设置JAVA_HOME

4)在cmd中,转到 <sdo-source-root>/sdo目录,执行 mvn
  ( attention:保证网络是连通的)

5)在cmd中,转到 <sdo-source-root>/sdo/sdo-api目录,执行 mvn -Peclipse eclipse:eclipse

6)在cmd中,转到 <sdo-source-root>/sdo/impl目录,执行 mvn -Peclipse eclipse:eclipse

7)在cmd中,转到 <sdo-source-root>/sdo/tools目录,执行 mvn -Peclipse eclipse:eclipse

后面的工作就需要按E文的来了,基本上是比较简单常用的eclipse操作,比较的不好说,就copy了:

    * Start up eclipse
    * Switch to the Java perspective
    * Execute "File => Import ... => General => Existing project into workspace
    * Click "Browse ..." Navigate to the spec/sdo-api directory and click OK
    * Select the sdo-api project and click OK
    * After Eclipse has built the project you will see that there are compile errors. This is because Maven has created build dependencies for the project on the contents of your maven repository, but Eclipse doesn't yet know where that repository is. You must create and assign a value to the M2_REPO variable within eclipse to resolve these dependencies
          o Right click in the Package Explorer frame on the root of the newly created project and select Properties => Java Build Path
          o Click on the "Libraries" tab and select "Add Variable...", "Configure Variables ...", "New ..."
          o Set Name to M2_REPO and Click on "Folder..."
          o Navigate to the "repository" folder/directory (on Windows this is Documents and Settings<user>.m2 epository, on Linux it is ~/.m2/repository) and click OK
          o Accept the request for doing a full rebuild
          o Cancel away from the "Configure Variables" dialog
          o Click "OK" on the Project Properties Window
          o When building is complete the project should now have no errors

Now repeat the same instructions for importing the sdo-impl and sdo-tools projects into the eclipse environment. You aklready have the M2_REPO variable defined now, so these projects should build OK.

At this point you have three separate projects each dependent on binary artifacts in your maven repository. Don't be tricked into thinking that
if you modify the sdo-impl project, that those changes will be picked up by the sdo-tools project. If you want this behaviour then follow these steps

    * In the package exlporer pane of the Java perspective, Right Click on Properties and select the libraries tab
    * Select the M2_REPO/commonj/sdo-api* library entry and click "remove"
    * Select the Projects tab and click "Add..."
    * Select the SDO API project and click OK
    * If you plan to work in the tools project
          o Select the "Order and Export" tab and select the sdo-api project and click OK (this means that the sdo-impl project will expose the interfaces of the sdo-api project, so that you don't have to import them into projects which depend on the sdo-impl project)
          o Repeat the above instructions, removing the sdo-api and sdo-impl library dependencies from the tools project, and adding a project dependency for the sdo-tools project on the sdo-impl project

SOA标准规范组织与案例分析

发布时间:2007年12月02日 作者:hongsoft

阅读次数:539次 类别:我的文章 永久链接 Trackback 6条评论
SOA标准规范组织与案例分析

前段时间,一个杂志社约我写了一篇SOA相关的文章,然后编辑问我:OSOA是一个标准组织吗?还真不是太

好直接地回答的问题。已经很久没有时间写BLOG的我考虑了一下说:还是写个BLOG回答你吧。


1.SOA标准化组织
标准一般是由业界公认的标准化组织制定和发布的,SOA领域最主要的标准化组织有两个:
1.1 万维网联盟(World Wide Web Consortium,W3C)
w3c的成立背景和主要工作请见http://blog.csdn.net/hongbo781202/archive/2005/10/15/504314.aspx
w3c的web服务工作组划分请见http://blog.csdn.net/hongbo781202/archive/2004/09/29/120785.aspx
w3c的工作流程请见http://blog.csdn.net/hongbo781202/archive/2005/10/15/504321.aspx
1.2 结构化信息标准促进组织(Organization for the Advancement of Structured Information Standards,OASIS)
OASIS专门做电子商务相关标准的制定和推广,是目前制定Web服务标准最多的一个组织(但是WSDL/SOAP

这些用的最多的web服务标准被W3C抢先了)。OASIS理事会成几乎全部来自MS、IBM、BEA 、Oracle、Sun

、SAP 等公司,它为SOA专门成立了六个技术委员会(Technical Committees)。
SOA标准申请提交到其它组织的情况很少,这两个组织也会有一定的竞争关系,看过我以前写的BPEL的标

准制定blog的就明白这一点。

 

2.SOA规范组织
规范并不是标准,它们是由厂商或厂商联盟制定发布的。但是一般来说,这些厂商拥有强大的市场地位,

他们定的规范往往会成为事实上的标准。SOA领域比较大的厂商联盟也主要有两个:
2.1 Web服务互操作组织(Web Services Interoperability Organization,WS-I)
WS-I主要致力于提升Web服务的对平台、操作系统和编程语言中立的互操作能力,其成员几乎覆盖了所有

重量级厂商,如IBM、微软、Sun、Oracle和BEA等。
2.2 开放SOA合作组织(Open SOA Collaboration,OSOA
OSOA厂商联盟使得各厂商能够共同开发一个语言中立的编程模型。目前加入OSOA的厂商包括IBM、BEA、

SAP、Primeton、Oracle等,其中Primeton是目前唯一加入该组织的中国公司,请见

http://gocom.primeton.com/modules/osoa/。OSOA不是一个标准化组织,但由于有IBM、BEA等厂商的支

持,它制定的规范很可能会成为事实上的标准;因此,我们可以把它看作一个准标准化组织。OSOA成立了

两个项目组,分别负责制定SCASDO规范(目前正在成立第3个项目组制定DAS规范)。

3.案例分析
笔者用一个现在已经过时的OSOALaunchFeb2007.xls的内容来描述SCA规范成为标准的一个过程:
3.1规范组织收尾过程
SCA规范是OSOA组织制定的,到2007年初这个Spec已经到了Finalization阶段。文件中写到,到2007年1月

31日,SCA规范的所有技术相关工作已经结束,那么2007年2月1日到2月28日是“Final 28 day review

period"。其中IBM会在2月2日把所有讨论过的规范草案提交到OSOA.org。
3.2提交标准计划
特别有意思的是第一步,将在2007年1月23日知会OMG:SCA将不会提交到你们那里。注意这个动作不是嘲

弄,而是表示”遗憾“。其实知道BPEL提交标准波折的朋友会明白,为什么不知会W3C而知会OMG。那么到

1月26日将会提交SCA到OASIS,OASIS Board将在2月20日同意申请。2月27日,OSOA会提交OASIS的SCA TC

(Technical Committees)章程到OASIS,然后被批准通过。然后OASIS会邀请各单位加入该TC,最后TC的

工作正式开始(我看的文件中有具体时间,不过是在本贴时间之后,这里按规定不写在这里)。
看清楚了吧?OSOA在计划中能够把时间都算的清清楚楚,所以,这些规范和标准并无太大区别。 



显示第 1-10 条记录,共 199 条记录 首页 前页 后页 尾页  到第 页,共 20