<?xml version="1.0" encoding="utf-8"?>
<?xml-stylesheet type="text/xsl" href="http://feeds.qzone.qq.com/rss.xsl" version="1.0"?>
<rss version="2.0" xmlns:qz="http://qzone.qq.com">
<channel>
<title><![CDATA[希望草~欣/tp]]></title>
<description><![CDATA[希望草~欣的天空]]></description>
<link>http://155106081.qzone.qq.com</link>
<lastBuildDate>Sun, 29 Nov 2009 15:25:12 GMT</lastBuildDate>
<generator>Qzone</generator>
<language>zh-cn</language>
<copyright>Copyright (C), 2005-2008, Tencent Tech. Co., Ltd.</copyright>
<pubDate>Mon, 25 Aug 2008 23:34:14 GMT</pubDate>

<item>
<title><![CDATA[ESB分布式的基础–传输层、远程通讯]]></title>
<link>http://155106081.qzone.qq.com/blog/1219707254</link>
<description><![CDATA[   ESB作为SOA的基础产品，它的第一个目标就是服务的分布化。提到服务分布，那么必然会想到传输、远程通讯、TCP/IP、SOAP等等概念。<br>    不久前看到朋友的一篇文章<a href="http://www.blogjava.net/BlueDavy/archive/2008/03/04/182077.html" target="_blank"><span style="color:#356aa0;line-height:1.8em;">Java远程通讯可选技术及原理</span><wbr /></a><wbr />, 读完之后，感觉有些概念定义的还不是很清楚。再者最近又准备升级ESB产品，因此就一些想法写出来，和朋友们交流。归类正名古人有黑马和白马的逻辑辩论，其目的就是正名。只有把概念定义清楚了，外延画定了，我们在讨论问题的时候，才能避免大象和犀牛一起比较的情况。下面我就平时遇到的一些东西进行简单了归类和定义。<br><ol style="list-style-type:decimal"><li style="margin:25px;">四层协议：网络通讯的一种模型。参考<a href="http://net.csai.cn/Router_TCP_IP/200707091516311924.htm" target="_blank"><span style="color:#356aa0;line-height:1.8em;">TCP/IP协议分析-协议分层</span><wbr /></a><wbr />一文。 <li style="margin:25px;">传输协议：四层模型中的第三层–传输层，主要指TCP、UDP。 <li style="margin:25px;">应用协议：四层模型中的第四层–应用层，基于TCP/UDP，面向应用开发的高层协议。例如：HTTP、FTP等。 <li style="margin:25px;">ESB的传输层：它是一个逻辑概念，相对于ESB体系结构来说，解决服务（或系统）交互的一层。可以直接利用第四层协议，例如：SMTP协议，FTP协议等；或者基于第三层、第四层协议定制的解决服务交互的协议，把一个系统的数据+指令传输到另一个系统（可以获取回执，也可以不获取回执），例如：SOAP+HTTP协议，RMI协议，Hessian协议，REST（HTTP + XML方式）的协议，XML+JMS协议；甚至与传输无关的一些交互方式，例如：File协议，内存协议等。 <li style="margin:25px;">通讯框架：基于TCP、UDP等开发的面向应用协议的框架。这类框架往往为使用者提供了一套通讯解决方案，允许使用者，定制需要的业务协议。例如：MINA，Netty2 ，Cindy，Grizzly等。其它可参考：<a href="http://www.open-open.com/36.htm" target="_blank"><span style="color:#356aa0;line-height:1.8em;">Java开源 网络服务器端组件</span><wbr /></a><wbr />一文。 <li style="margin:25px;">POJO服务框架：这类框架提供了一种通用调用模式，简化POJO类的服务化问题，它们也提供了很强的扩展机制，允许使用通讯框架、ESB传输层来进行扩展。例如：Spring Remote，<a href="http://www.jboss.org/jbossremoting/" target="_blank"><span style="color:#356aa0;line-height:1.8em;">JBoss Remote</span><wbr /></a><wbr />，EJB等。 </li></ol>四层协议的共性通过分析，可以看到四层协议具有如下特点：<br><ol style="list-style-type:decimal"><li style="margin:25px;">每一层的职责清晰，专著于本层的关键问题。例如：网络层，它处理路由选择等分组在网络中的活动，而不会关心：与传输媒介的物理接口细节等。 <li style="margin:25px;">上层协议利用下层协议来处理更低级的数据传输问题。 <li style="margin:25px;">都有连接相关的定义。 <li style="margin:25px;">都有数据打包的定义。 <li style="margin:25px;">都有marshallers/unmarshallers 上层数据的定义。 <li style="margin:25px;">都提供了上层如何使用的方案，发送方，接收方（提供方）。 由此扩展到应用协议，我们会发现它们要解决的根本问题也都包含这几个方面。因此：通讯层的模式是相对稳定的。 <br></li></ol>ESB分布式层、JMS、POJO服务框架等分布式产品的一些共性<br><ol style="list-style-type:decimal"><li style="margin:25px;">明确定义服务标示的概念。例如：ESB产品Mule对服务的定义：vm://hello.service,xfire:http://localhost:8888/hello.service。JBOSS Remote中服务的定义：rmi://localhost:8797/hello.service。 <li style="margin:25px;">插件化的传输协议。例如：JBOSS Remote提供了，Socket ，RMI，HTTP等。 <li style="margin:25px;">插件化的数据编码和解码。该层与传输相关，而与应用无关。例如：<a href="http://www.w3.org/Protocols/rfc2616/rfc2616.html" target="_blank"><span style="color:#356aa0;line-height:1.8em;">Http协议</span><wbr /></a><wbr />，有文本型编码，Multipart编码。 <li style="margin:25px;">插件化的序列化解决体系，例如：Java对象可以用Hessian方式序列化，可以用XML方式序列化，可以用SOAP方式序列化，可以用Java二进制方式序列化，以Jason方式序列化，甚至自定义的方式序列化。这一层通常解决高级应用层的数据（可能包括指令）的序列化方案。 <li style="margin:25px;">有选择的提供数据压缩，数据加密，数据签名等常用方案。 <li style="margin:25px;">为POJO层（或者定义为：业务层）提供同步、异步等多种业务交互模式。 <li style="margin:25px;">错误处理机制。 <li style="margin:25px;">提供专有API，或者与IOC容器、EJB容器整合的解决方案。 <li style="margin:25px;">服务定位机制，寻址机制。 </li></ol>ESB分布式层的一种选型在我们的ESB产品中，分布式层解决了如下问题：<br><ol style="list-style-type:decimal"><li style="margin:25px;">包含了“ESB分布式层、JMS、POJO服务框架等分布式产品的一些共性“一节中描述的特性。 <li style="margin:25px;">一个服务，通过一个端口支持多种协议。例如：通过5200端口，我们提供Hessian协议，WS协议，REST协议，HTTP+XML业务协议的方式。而且可以依据需要进一步定制。 <li style="margin:25px;">传输质量的解决，例如：数据重发，超时。 <li style="margin:25px;">批量传输数据。 <li style="margin:25px;">长连接提升性能。 <li style="margin:25px;">软负载。 <li style="margin:25px;">大数据传输。 <li style="margin:25px;">可靠传输。 <li style="margin:25px;">流量监控。 <li style="margin:25px;">在通讯框架上，我们选择了MINA。原因：A：文档齐全 B：扩展性好 C：协议层定制方便 D：基于事件模型 E：有HTTP的扩展（AsyncWeb） F：稳定性也不错 H：公司内已经有使用先例 G：Apache在不断升级 【说明：】群集，远程类装载（JINI特性），服务器组等一些高级特性，由于在我们的SOA化过程中，并没有业务上的需求，因此没有考虑这方面的内容。此外，我们发现，可以通过其它一些简单的技术（软件 + 硬件 + 发布 + OSGI等）来简单获得这些复杂技术提供的基本特性，以满足我们业务的需求。<br>对于开发一款通用ESB产品和符合自己企业需要的ESB产品，其出发点是不同的，由此在分布式特性的选择上也必然不会相同，每种产品的特性选择，只要满足了自己的目标和需求即可。不过，有些共性的特性点，无论如何也跑不了的（当然，可以简化方案，例如传输层，可以只有RMI，或者JMS）。 <br></li></ol> <!--v:3.2--> ]]></description>
<category><![CDATA[新技术]]></category>
<author><![CDATA[155106081@qq.com(希望草~欣/tp)]]></author>
<comments>http://155106081.qzone.qq.com/blog/1219707254#comment</comments>
<qz:effect>512</qz:effect>
<pubDate>Mon, 25 Aug 2008 23:34:14 GMT</pubDate>
<guid>http://155106081.qzone.qq.com/blog/1219707254</guid>
</item>

<item>
<title><![CDATA[ESB产品升级准备：SOA、ESB、JBI、SCA、OSGI概念再学习、再理解]]></title>
<link>http://155106081.qzone.qq.com/blog/1219707139</link>
<description><![CDATA[这几日看了许多SOA，ESB，JBI，SCA，OSGI相关的书籍、BLOG、文章、JavaOne上的一些资料，希望在ESB产品升级之前，能对这些概念再次进行学习、理解。明确术语，确定关系。SOA<ol style="list-style-type:decimal">SOA是一种业务建模思想，是一种架构风格；它以服务为核心，构建系统；通过进化控制节奏;【摘录】支持对业务进行整合，使其成为一种能够相互联系、可重用的业务任务或者服务。<br>【注：此处的架构仅指技术相关的架构。】 <br><li style="margin:25px;">一种业务建模思想<br>SOA是一种业务建模思想，而不是一种技术体系。它来自业务敏捷的需求，植根于业务，致力于提升业务的敏捷性。<br>最低层面：使用SOA的思想分析、重构业务，用服务的概念定义业务单元。实现层甚至使用现有技术体系，选择几种结构型模式：Fa?ade模式，Proxy模式，Composite模式配合，从而达到原始的SOA层面。SOA并不强制我们必须分布，必须采用一些支持SOA的技术或产品，只要业务敏捷了，且当前技术架构也能够满足生产发展的需要，就是合适的。 <li style="margin:25px;">一种架构风格<br>SOA也是一种架构模式，特别是一种分布式架构模式。<br>实践观点：第二个层面以第一个层面为基础，没有第二个层面，只有第一个层面，我们还可以说这个系统是SOA化的；没有第一个层面，只有第二个层面，这个系统是否SOA化，值得商议。(IBM提出的SOA切入点中，包含有以技术为中心的切入点【连通性】，从我们实践、公开案例的实践、专家有关SOA实践的书籍来看，以业务为切入点是最合适的，也是最容易成功的，获得组织支持的概率也大；单一的基于技术切入SOA架构，案例较少)<br>它的一些特征：<br>以服务为基本单元，可以把服务视为构件。<br>服务质量可度量，且可以提升。<br>基于开放标准。<br>该架构同时是一种分层架构。<br>具有分布的能力。<br>与技术无关性。<br>鼓励扩展。<br>支撑业务敏捷的要求。<br>架构层面主张组合。 <li style="margin:25px;">服务设计的原则<br>松散耦合<br>服务契约<br>自治<br>抽象<br>复用性<br>组合性<br>无状态性<br>可发现性<br>互操作性 IBM的SOA架构框架：<br><a href="http://www.esbzone.net/wp-content/uploads/img/ibm-soa-arc.gif" target="_blank"><wbr /><a href="http://www.esbzone.net/wp-content/uploads/img/ibm-soa-arc.gif" target="_blank"><img style="border:0;" src="http://www.esbzone.net/wp-content/uploads/img/ibm-soa-arc.gif" /></a><wbr /></a><wbr /><br>该图从技术层面描绘了SOA的架构模型，以及OA技术架构所包含的主要概念。 <br></li></ol>ESB<ol style="list-style-type:decimal">ESB是一类中间件产品的通称；是一种分布式的技术架构，以中介为核心概念；是一种支持SOA实施的技术选择；来源于集成的需要，实现服务、系统之间的互联、整合；ESB产品通常提供一种容器，方便插入各类通用服务（编排服务、消息服务等）、提供服务虚拟化的能力（协议和模式、接口、身份等）、提供面向方向的连接（安全性、管理、日志记录和审核等）；支持业务逻辑和实现的技术逻辑的分离。<br><span style="font-weight:bold"><wbr /><a href="http://www.infoq.com/cn/articles/ESB-Roundup-Part1-Defining-ESB" target="_blank">最常用到的特性</a><wbr /></span><wbr />: <br><li style="margin:25px;">它使用XML（可扩展标识语言）作为标准通信语言。 <br>它支持Web服务标准。<br><br>它支持消息传递（同步、异步、点对点、发布-订阅）<br><br>它包含对服务编制（orchestration）和编排（choreography）的支持。<br><br>它包含智能、基于内容的路由服务（itenerary路由）。 <br>它包含转换服务（通常是使用XSLT），在发送应用和接收应用之间转换格式，简化数据格式和值的转换。 <br>它可以条件路由，或基于非集中策略的消息转换，即不需要集中规则引擎。 <br>它提供对服务监控、治理相关的内容。 <li style="margin:25px;">参考资料：<br>http://www.ibm.com/developerworks/cn/architecture/ar-esbpat2/index.html<br>http://www.ibm.com/developerworks/cn/architecture/ar-esbpat1/index.html<br>http://www-128.ibm.com/developerworks/cn/webservices/ws-esbscen/index.html<br>http://www.infoq.com/cn/articles/ESB-Roundup-Part1-Defining-ESB<br>http://www.ddj.com/java/201200303;jsessionid=DP5D5J5VEP4XKQSNDLPSKHSCJUNN2JVN?_requestid=459785 </li></ol>JBI<ol style="list-style-type:decimal">【摘录】是基于面向服务体系提倡的方法和原则，为了解决 EAI 和 B2B 若干问题的 Java 标准。JBI 定义了基于插件方式的架构，以便服务能融入“ JBI 运行时”环境。 JBI 提供了详细的接口，使服务能与“ JBI 运行时”环境交互。 <br><li style="margin:25px;">资料：<br>http://soaneu.blog.com.cn/index.shtml<br>http://www.jcp.org/en/jsr/detail?id=208<br>http://www.infoq.com/jbi 服务引擎、组件绑定图：<br><a href="http://www.esbzone.net/wp-content/uploads/img/jbi-arc.gif" target="_blank"><wbr /><a href="http://www.esbzone.net/wp-content/uploads/img/jbi-arc.gif" target="_blank"><img style="border:0;" src="http://www.esbzone.net/wp-content/uploads/img/jbi-arc.gif" /></a><wbr /></a><wbr /><br>本图强调了服务引擎，组件的绑定方式，更倾向与产品的扩展。对业务级别的服务模型支撑比较弱，业务通过API来实现与JBI产品的交互。 <br></li></ol>SCA<ol style="list-style-type:decimal">服务组件体系结构 (SCA) 是一个规范；是一种架构模式；是一种通用的面向业务服务的组件模型；定义了部署模型；提供了实现提供服务和使用其他服务的组件、组装组件，以通过服务引用其他服务的方式来构建业务应用程序–与SOA组合的原则一致；SCA是平台无关的；SCA是一种编程模型；支持业务逻辑和实现的技术逻辑的分离；是一种支持SOA实施的技术选择；SCA支持组件的分布。<br>【摘录】is a set of specifications which describe a model for building applications and systems using a Service Oriented Architecture. SCA models solutions as sets of service components offering services and making references to services supplied by others, which are combined together by composites which wire references to services and which declaratively apply bindings for communication methods and also apply policies for aspects such as security and transactions. SCA extends and complements prior approaches to implementing services, and SCA builds on open standards such as Web services. <br><li style="margin:25px;">资料：<br>http://dev.yesky.com/topic/308/7667308.shtml<br>http://www-128.ibm.com/developerworks/cn/webservices/ws-theme/ws-soa.html#sca<br>http://www.davidchappell.com/articles/Introducing_SCA.pdf<br>http://www.osoa.org/display/Main/Service+Component+Architecture+Home<br>http://www.infoq.com/sca<br>http://www.infoq.com/articles/setting-out-for-sca<br>http://developers.sun.com/learning/javaoneonline/j1sessn.jsp?sessn=TS-41500&amp;yr=2007&amp;track=3 核心概念图：<br><a href="http://www.esbzone.net/wp-content/uploads/img/sca-composite.GIF" target="_blank"><wbr /><a href="http://www.esbzone.net/wp-content/uploads/img/sca-composite.GIF" target="_blank"><img style="border:0;" src="http://www.esbzone.net/wp-content/uploads/img/sca-composite.GIF" /></a><wbr /></a><wbr /><br>本图强调了组件模型，服务组件之间的组合模式，把业务级别和系统级别的组件，同等对待。提供了业务组件接入容器的方式。完全符合SOA的概念。 <br></li></ol>OSGI<ul style="list-style-type:disc">【摘录】一个开放并且提供统一接口标准的体系框架，基于这个体系框架，服务提供商，程序开发人员，软件提供商，服务网管运营商，设备提供商能够协调地联合起来开发，部署以及管理向用户提供的各种服务。<br>【摘录】provides a service-oriented, component-based environment for developers, primarily on the<br>Java platform. It provides a dependency resolution mechanism, with version support and also offers standardized ways to manage the software lifecycle. OSGi is a particular boon when using different components that use different versions of some shared package. These capabilities greatly increase the value of a wide range of computers and devices that use the Java? platform. <br><li style="margin:25px;">资料：<br>http://www.riawork.org/<br>http://www.infoq.com/osgi<br>http://www.osoa.org/download/attachments/250/Power_Combination_SCA_Spring_OSGi.pdf?version=3<br>http://xml.coverpages.org/OSGi-ServicePlatformOverview2004.pdf<br>http://www.blogjava.net/BlueDavy/archive/2007/10/14/152820.html<br>http://www.blogjava.net/hx9111/archive/2006/11/10/OSGi-SCA.html<br>http://www.blogjava.net/zhaobin/archive/2007/11/06/158485.html </li></ul>相互之间的关系<ol style="list-style-type:decimal"><li style="margin:25px;">SOA – ESB <br>ESB是一种支持SOA实施的技术选择。 <li style="margin:25px;">SOA – JBI <br>JBI是Java领域一种支持SOA实施的技术选择。 <li style="margin:25px;">SOA – SCA<br>SCA是一种支持SOA实施的技术选择。 <li style="margin:25px;">SOA – OSGI<br>没有直接关系,目的不一致。 <li style="margin:25px;">ESB—JBI<br>JBI和ESB是互补的。JBI提供一个模型和将集成组件作为服务的标准接口。JBI可以宿主在一个应用程序服务器环境或者在一个ESB容器中。ESB提供了一套基础架构包括了事件驱动的SOA，高度分布的路由目的地命名，企业消息能力和分布管理能力。 <li style="margin:25px;">JBI – SCA <br>【摘录】SCA has a strong model for defining composite applications、Services can be implemented in multiple languages、Can bind interfaces and references to different technologies。<br>JBI:Defines a standard, loosely coupled, ESB architecture、SE / BC are exchangeable between JBI implementations、Provides standard abstraction for all JBI components。<br>融合性：When combining JBI and SCA, all JBI service engines can be used in SCA components, SCA components can be called from JBI, SCA applications can be deployed as service units in a JBI container. <li style="margin:25px;">SCA-OSGI <br>相同点：都是一种规范；都是一种架构；一种编程模式；都定义了模块，服务概念。<br>不同点：OSGI强调模块的动态性；SCA强调服务的分布性；OSGI来源与单个JVM产品架构的需求；SCA来业务SOA化的技术需求；OSGI更适合产品架构；SCA更适合业务系统架构。<br>融合性：SCA可以作为Bundle部署到OSGI环境，以增强OSGI环境的业务架构解决能力；OSGI可以作为一个模块部署到SCA环境中，从而利用OSGI环境下的基础通用服务。 <li style="margin:25px;">SCA-ESB<br>相同点：都是SOA的一个可选的技术方案；都基于服务的概念；都是可分布的；都提供插件特性等。<br>不同点：SCA是一个标准，ESB是一个概念；SCA有模块的概念，ESB没有这个概念；SCA是一个组装车间，ESB是一个中介机构；SCA简单而清晰，ESB复杂而模糊，不同产品特性千差万别。 </li></ol> <!--v:3.2--> ]]></description>
<category><![CDATA[新技术]]></category>
<author><![CDATA[155106081@qq.com(希望草~欣/tp)]]></author>
<comments>http://155106081.qzone.qq.com/blog/1219707139#comment</comments>
<qz:effect>513</qz:effect>
<pubDate>Mon, 25 Aug 2008 23:32:19 GMT</pubDate>
<guid>http://155106081.qzone.qq.com/blog/1219707139</guid>
</item>

<item>
<title><![CDATA[java开源工作流列表]]></title>
<link>http://155106081.qzone.qq.com/blog/1218942472</link>
<description><![CDATA[<wbr /><a href="http://www.open-open.com/resource/icon_1.gif" target="_blank"><img style="border:0;" src="http://www.open-open.com/resource/icon_1.gif" /></a><wbr /> Willow <br><wbr /><a href="http://www.open-open.com/resource/von.gif" target="_blank"><img style="border:0;" src="http://www.open-open.com/resource/von.gif" /></a><wbr /><br>由Huihoo Power开发详细可到其中文主页查看。 <a href="http://www.open-open.com/open8208.htm" target="_blank">更多Willow信息</a><wbr /><br><wbr /><a href="http://www.open-open.com/resource/icon_1.gif" target="_blank"><img style="border:0;" src="http://www.open-open.com/resource/icon_1.gif" /></a><wbr /> OpenWFE <br><wbr /><a href="http://www.open-open.com/resource/von.gif" target="_blank"><img style="border:0;" src="http://www.open-open.com/resource/von.gif" /></a><wbr /><br>OpenWFE是一个开放源码的Java工作流引擎。它是一个完整的业务处理管理套件：一个引擎，一个工作列表，一个Web界面和一个反应器（存放自动代理）。它可以可以跟你的程序很好的给合。 <a href="http://www.open-open.com/open9608.htm" target="_blank">更多OpenWFE信息</a><wbr /><br><wbr /><a href="http://www.open-open.com/resource/icon_1.gif" target="_blank"><img style="border:0;" src="http://www.open-open.com/resource/icon_1.gif" /></a><wbr /> jBpm <br><wbr /><a href="http://www.open-open.com/resource/von.gif" target="_blank"><img style="border:0;" src="http://www.open-open.com/resource/von.gif" /></a><wbr /><br>jBpm是一个灵活可扩展的工作流管理系统。作为 jBpm运行时server输入的业务流程使用简单强大的语言表达并打包在流程档案中。jBmp将工作流应用开发的便利性和杰出的企业应用集成（EAI）能力结合了起来。jBmp包括一个Web应用程序和一个日程安排程序。jBmp是一组J2SE组件，可以作为J2EE应用集群部署。 <a href="http://www.open-open.com/open9908.htm" target="_blank">更多jBpm信息</a><wbr /><br><wbr /><a href="http://www.open-open.com/resource/icon_1.gif" target="_blank"><img style="border:0;" src="http://www.open-open.com/resource/icon_1.gif" /></a><wbr /> OpenEbXML <br><wbr /><a href="http://www.open-open.com/resource/von.gif" target="_blank"><img style="border:0;" src="http://www.open-open.com/resource/von.gif" /></a><wbr /><br>OpenebXML项目致力于提供一个ebXML框架，主要支持不久将由 UN/CEFACT和OASIS发布的ebXML规范2.0版。 <a href="http://www.open-open.com/open10008.htm" target="_blank">更多OpenEbXML信息</a><wbr /><br><wbr /><a href="http://www.open-open.com/resource/icon_1.gif" target="_blank"><img style="border:0;" src="http://www.open-open.com/resource/icon_1.gif" /></a><wbr /> Werkflow <br><wbr /><a href="http://www.open-open.com/resource/von.gif" target="_blank"><img style="border:0;" src="http://www.open-open.com/resource/von.gif" /></a><wbr /><br>Werkflow是一个灵活可扩展的基于流程和状态的工作流引擎。它的目标是满足可以想象的所有工作流程，从企业级的业务流程到小范围的用户交互流程。通过使用可插拔和分层结构，可以方便地容纳各种工作流语义。 <a href="http://www.open-open.com/open10108.htm" target="_blank">更多Werkflow信息</a><wbr /><br><wbr /><a href="http://www.open-open.com/resource/icon_1.gif" target="_blank"><img style="border:0;" src="http://www.open-open.com/resource/icon_1.gif" /></a><wbr /> OSWorkflow <br><wbr /><a href="http://www.open-open.com/resource/von.gif" target="_blank"><img style="border:0;" src="http://www.open-open.com/resource/von.gif" /></a><wbr /><br>OSWorkflow是一个灵活的工作流引擎，设计成可嵌入到企业应用程序中。它提供了许多的持久化API支持包括：EJB,Hibernate,JDBC和其它。OSWorkflow还可以与Spring集成。 <a href="http://www.open-open.com/open10208.htm" target="_blank">更多OSWorkflow信息</a><wbr /><br><wbr /><a href="http://www.open-open.com/resource/icon_1.gif" target="_blank"><img style="border:0;" src="http://www.open-open.com/resource/icon_1.gif" /></a><wbr /> wfmOpen <br><wbr /><a href="http://www.open-open.com/resource/von.gif" target="_blank"><img style="border:0;" src="http://www.open-open.com/resource/von.gif" /></a><wbr /><br>WfMOpen是WfMC和OMG中所谓工作流设施（workflow facility） (工作流引擎)的J2EE实现。工作流通过扩展的XPDL描述。 <a href="http://www.open-open.com/open10308.htm" target="_blank">更多wfmOpen信息</a><wbr /><br><wbr /><a href="http://www.open-open.com/resource/icon_1.gif" target="_blank"><img style="border:0;" src="http://www.open-open.com/resource/icon_1.gif" /></a><wbr /> OFBiz <br><wbr /><a href="http://www.open-open.com/resource/von.gif" target="_blank"><img style="border:0;" src="http://www.open-open.com/resource/von.gif" /></a><wbr /><br>OFBiz是一个非常著名的开源项目，提供了创建基于最新J2EE/XML规范和技术标准，构建大中型企业级、跨平台、跨数据库、跨应用服务器的多层、分布式电子商务类WEB应用系统的框架。 OFBiz最主要的特点是OFBiz提供了一整套的开发基于Java的web应用程序的组件和工具。包括实体引擎, 服务引擎, 消息引擎, 工作流引擎, 规则引擎等。 <a href="http://www.open-open.com/open10408.htm" target="_blank">更多OFBiz信息</a><wbr /><br><wbr /><a href="http://www.open-open.com/resource/icon_1.gif" target="_blank"><img style="border:0;" src="http://www.open-open.com/resource/icon_1.gif" /></a><wbr /> ObjectWeb Bonita <br><wbr /><a href="http://www.open-open.com/resource/von.gif" target="_blank"><img style="border:0;" src="http://www.open-open.com/resource/von.gif" /></a><wbr /><br>Bonita 是一个符合WfMC规范、灵活的协同工作流系统。 对于各种动作如流程概念建模、定义、实例化、流程控制和用户交互等提供了全面的集成图形工具。 100% 基于浏览器、使用SOAP和XML数据绑定技术的Web Services封装了已有的工作流业务方法并将它们以基于J2EE的Web Service形式发布。基于活动预测模型的第三代工作流引擎。 <a href="http://www.open-open.com/open10508.htm" target="_blank">更多ObjectWeb Bonita信息</a><wbr /><br><wbr /><a href="http://www.open-open.com/resource/icon_1.gif" target="_blank"><img style="border:0;" src="http://www.open-open.com/resource/icon_1.gif" /></a><wbr /> Bigbross Bossa <br><wbr /><a href="http://www.open-open.com/resource/von.gif" target="_blank"><img style="border:0;" src="http://www.open-open.com/resource/von.gif" /></a><wbr /><br>速度非常快、轻量级的引擎，使用富有表达能力的Petri网定义工作流，不要求关系数据库，使用简单，能和Java应用集成。事实上，它是按嵌入式设计的。 <a href="http://www.open-open.com/open10608.htm" target="_blank">更多Bigbross Bossa信息</a><wbr /><br><wbr /><a href="http://www.open-open.com/resource/icon_1.gif" target="_blank"><img style="border:0;" src="http://www.open-open.com/resource/icon_1.gif" /></a><wbr /> XFlow <br><wbr /><a href="http://www.open-open.com/resource/von.gif" target="_blank"><img style="border:0;" src="http://www.open-open.com/resource/von.gif" /></a><wbr /><br>XFlow运行于EJB和servlet容器中。 <a href="http://www.open-open.com/open10708.htm" target="_blank">更多XFlow信息</a><wbr /><br><wbr /><a href="http://www.open-open.com/resource/icon_1.gif" target="_blank"><img style="border:0;" src="http://www.open-open.com/resource/icon_1.gif" /></a><wbr /> Taverna <br><wbr /><a href="http://www.open-open.com/resource/von.gif" target="_blank"><img style="border:0;" src="http://www.open-open.com/resource/von.gif" /></a><wbr /><br>Taverna项目的目标是提供一种语言和软件工具，方便在eScience中使用工作流和分布计算技术。 <a href="http://www.open-open.com/open10808.htm" target="_blank">更多Taverna信息</a><wbr /><br><wbr /><a href="http://www.open-open.com/resource/icon_1.gif" target="_blank"><img style="border:0;" src="http://www.open-open.com/resource/icon_1.gif" /></a><wbr /> Enhydra Shark <br><wbr /><a href="http://www.open-open.com/resource/von.gif" target="_blank"><img style="border:0;" src="http://www.open-open.com/resource/von.gif" /></a><wbr /><br>Shark完全基于WfMC和OMG标准，使用 XPDL作为工作流定义语言。流程和活动的存储使用Enhydra DODS(一个开源OR映射工具)。 <a href="http://www.open-open.com/open10908.htm" target="_blank">更多Enhydra Shark信息</a><wbr /><br><wbr /><a href="http://www.open-open.com/resource/icon_1.gif" target="_blank"><img style="border:0;" src="http://www.open-open.com/resource/icon_1.gif" /></a><wbr /> PowerFolder <br><wbr /><a href="http://www.open-open.com/resource/von.gif" target="_blank"><img style="border:0;" src="http://www.open-open.com/resource/von.gif" /></a><wbr /><br>PowerFolder是一个容易使用，容易安装基于J2EE的工作流服务器，包括开发人员使用的基于web的studio。 <a href="http://www.open-open.com/open11008.htm" target="_blank">更多PowerFolder信息</a><wbr /><br><wbr /><a href="http://www.open-open.com/resource/icon_1.gif" target="_blank"><img style="border:0;" src="http://www.open-open.com/resource/icon_1.gif" /></a><wbr /> Open Business Engine <br><wbr /><a href="http://www.open-open.com/resource/von.gif" target="_blank"><img style="border:0;" src="http://www.open-open.com/resource/von.gif" /></a><wbr /><br>Open Business Engine是一个开放源码的Java工作流引擎，支持WfMC规范，包括接口1（XPDL）、接口2/3（WAPI）和接口5。OBE为活动的运行提供了一个可控的集中环境。OBE主要基于J2EE实现。 <a href="http://www.open-open.com/open11108.htm" target="_blank">更多Open Business Engine信息</a><wbr /><br><wbr /><a href="http://www.open-open.com/resource/icon_1.gif" target="_blank"><img style="border:0;" src="http://www.open-open.com/resource/icon_1.gif" /></a><wbr /> OpenWFE <br><wbr /><a href="http://www.open-open.com/resource/von.gif" target="_blank"><img style="border:0;" src="http://www.open-open.com/resource/von.gif" /></a><wbr /><br>OpenWFE是一个开放源码的Java工作流引擎。 它包括可升级的三个组件：引擎、工作列表和Web界面。它的流程定义语言虽然使用XML格式，其灵感来源于 Scheme，一种Lisp方言。 <a href="http://www.open-open.com/open11208.htm" target="_blank">更多OpenWFE信息</a><wbr /><br><wbr /><a href="http://www.open-open.com/resource/icon_1.gif" target="_blank"><img style="border:0;" src="http://www.open-open.com/resource/icon_1.gif" /></a><wbr /> Freefluo <br><wbr /><a href="http://www.open-open.com/resource/von.gif" target="_blank"><img style="border:0;" src="http://www.open-open.com/resource/von.gif" /></a><wbr /><br>Freefluo 是一个使用Web Service的工作流协同工具，可以处理WSDL的Web Service调用。支持两种XML格式的工作流语言：IBM的WSFL和XScufl。Freefluo非常灵活，它的核心是不与任何工作流语言或执行架构关联的可重用协同框架。 Freefluo包括可执行使用WSFL一个子集描述的工作流的运行库。 <a href="http://www.open-open.com/open11308.htm" target="_blank">更多Freefluo信息</a><wbr /><br><wbr /><a href="http://www.open-open.com/resource/icon_1.gif" target="_blank"><img style="border:0;" src="http://www.open-open.com/resource/icon_1.gif" /></a><wbr /> Twiste <br><wbr /><a href="http://www.open-open.com/resource/von.gif" target="_blank"><img style="border:0;" src="http://www.open-open.com/resource/von.gif" /></a><wbr /><br>Twister的目标是提供新一代、易集成、应用Java领域中最新成果、面向B2B的工作流解决方案。流程引擎基于BPEL业务流程规范和Web Service标准。 <a href="http://www.open-open.com/open11408.htm" target="_blank">更多Twiste信息</a><wbr /><br><wbr /><a href="http://www.open-open.com/resource/icon_1.gif" target="_blank"><img style="border:0;" src="http://www.open-open.com/resource/icon_1.gif" /></a><wbr /> Con:cern <br><wbr /><a href="http://www.open-open.com/resource/von.gif" target="_blank"><img style="border:0;" src="http://www.open-open.com/resource/von.gif" /></a><wbr /><br>con:cern工作流引擎基于扩展的案例（case）处理方法，流程由一组具有前后条件的活动组成。 <a href="http://www.open-open.com/open11508.htm" target="_blank">更多Con:cern信息</a><wbr /><br><wbr /><a href="http://www.open-open.com/resource/icon_1.gif" target="_blank"><img style="border:0;" src="http://www.open-open.com/resource/icon_1.gif" /></a><wbr /> JFlower <br><wbr /><a href="http://www.open-open.com/resource/von.gif" target="_blank"><img style="border:0;" src="http://www.open-open.com/resource/von.gif" /></a><wbr /><br>JFlower是一个用Java开发的工作流引擎，可以通过Java插件来扩展。服务器可以解析XML文档来执行任务，检查条件。会话数据保存在一个数据库中，所以服务器是完全可伸缩的。 <a href="http://www.open-open.com/open35908.htm" target="_blank">更多JFlower信息</a><wbr /><br><wbr /><a href="http://www.open-open.com/resource/icon_1.gif" target="_blank"><img style="border:0;" src="http://www.open-open.com/resource/icon_1.gif" /></a><wbr /> JFolder <br><wbr /><a href="http://www.open-open.com/resource/von.gif" target="_blank"><img style="border:0;" src="http://www.open-open.com/resource/von.gif" /></a><wbr /><br>JFolder (formerly PowerFolder) 是一个工作流服务器和开发环境,它可以配置在任何J2EE服务器与数据库。 <a href="http://www.open-open.com/open36008.htm" target="_blank">更多JFolder信息</a><wbr /><br><wbr /><a href="http://www.open-open.com/resource/icon_1.gif" target="_blank"><img style="border:0;" src="http://www.open-open.com/resource/icon_1.gif" /></a><wbr /> JAWE <br><wbr /><a href="http://www.open-open.com/resource/von.gif" target="_blank"><img style="border:0;" src="http://www.open-open.com/resource/von.gif" /></a><wbr /><br>基于Java的图形化工作流编辑器。图形化工作流编辑器 。使用JAVA语言开发，开放源码 。严格遵循WFMC规范 。XPDL（XML Process Definition Language）WFMC的 XML 过程描述语言 。工作流定义文件保存在本地的XML文件中 <a href="http://www.open-open.com/open37108.htm" target="_blank">更多JAWE信息</a><wbr /><br><wbr /><a href="http://www.open-open.com/resource/icon_1.gif" target="_blank"><img style="border:0;" src="http://www.open-open.com/resource/icon_1.gif" /></a><wbr /> Zebra <br><wbr /><a href="http://www.open-open.com/resource/von.gif" target="_blank"><img style="border:0;" src="http://www.open-open.com/resource/von.gif" /></a><wbr /><br>Zebra是一个工作流引擎。原先的设计是为了填补商业开源工作流引擎的空白。它有一些不同于其它工作流系统的特点：<br>*所有工作流模型都可以在workflow patterns中描述<br>*一个易于使用的GUI designer <br>*一个持久层中间件<br>*OO设计<br>*一个基于Turbine的Web应用程序 <a href="http://www.open-open.com/open65708.htm" target="_blank">更多Zebra信息</a><wbr /><br><wbr /><a href="http://www.open-open.com/resource/icon_1.gif" target="_blank"><img style="border:0;" src="http://www.open-open.com/resource/icon_1.gif" /></a><wbr /> ActiveBPEL <br><wbr /><a href="http://www.open-open.com/resource/von.gif" target="_blank"><img style="border:0;" src="http://www.open-open.com/resource/von.gif" /></a><wbr /><br>ActiveBPEL引擎是一个健壮的运行时环境,它能执行依据BPEL4WS或just BPEL1.1与WS-BPEL2.0规范编写的业务流程。 <a href="http://www.open-open.com/open87108.htm" target="_blank">更多ActiveBPEL信息</a><wbr /><br><wbr /><a href="http://www.open-open.com/resource/icon_1.gif" target="_blank"><img style="border:0;" src="http://www.open-open.com/resource/icon_1.gif" /></a><wbr /> YAWL <br><wbr /><a href="http://www.open-open.com/resource/von.gif" target="_blank"><img style="border:0;" src="http://www.open-open.com/resource/von.gif" /></a><wbr /><br>YAWL(Yet Another Workflow Language)一个开源工作流语言/处理系统.它基于现有的工作流处理系统与工作流语言的一个精确分析.不像传统的系统,它提供对大部分工作流模式的直接支持.YAWL支持控制流透视图,数据透视图并且能与WSDL标准的web服务相结合. <a href="http://www.open-open.com/open87208.htm" target="_blank">更多YAWL信息</a><wbr /><br><wbr /><a href="http://www.open-open.com/resource/icon_1.gif" target="_blank"><img style="border:0;" src="http://www.open-open.com/resource/icon_1.gif" /></a><wbr /> MOBE <br><wbr /><a href="http://www.open-open.com/resource/von.gif" target="_blank"><img style="border:0;" src="http://www.open-open.com/resource/von.gif" /></a><wbr /><br>MidOffice BPEL Editor (MOBE) 是一个开源平台能够让执行,监控,调整,结束每个定义的过程和谐地结合起来.这个平台的实现使用到J2EE技术与公共的标准如:BPEL,XML与SOAP. <a href="http://www.open-open.com/open87308.htm" target="_blank">更多MOBE信息</a><wbr /><br><wbr /><a href="http://www.open-open.com/resource/icon_1.gif" target="_blank"><img style="border:0;" src="http://www.open-open.com/resource/icon_1.gif" /></a><wbr /> RUNA WFE <br><wbr /><a href="http://www.open-open.com/resource/von.gif" target="_blank"><img style="border:0;" src="http://www.open-open.com/resource/von.gif" /></a><wbr /><br>RUNA WFE是一个基于JBOSS-JBPM引擎的开源工作流工作平台它是一个跨平台适用于商业流程处理的最终用户解决方案,很容易与所有SQL数据库管理系统相结合. <a href="http://www.open-open.com/open92708.htm" target="_blank">更多RUNA WFE信息</a><wbr /><br><wbr /><a href="http://www.open-open.com/resource/icon_1.gif" target="_blank"><img style="border:0;" src="http://www.open-open.com/resource/icon_1.gif" /></a><wbr /> micro-workflow <br><wbr /><a href="http://www.open-open.com/resource/von.gif" target="_blank"><img style="border:0;" src="http://www.open-open.com/resource/von.gif" /></a><wbr /><br>micro-workflow框架适用于那些要在他们程序中分离控制与逻辑方面的开发者,所以这个框架可以使他们的流程相互独立。这样有利于代码重复使用与代码的完整性。 <a href="http://www.open-open.com/open96808.htm" target="_blank">更多micro-workflow信息</a><wbr /><br><wbr /><a href="http://www.open-open.com/resource/icon_1.gif" target="_blank"><img style="border:0;" src="http://www.open-open.com/resource/icon_1.gif" /></a><wbr /> bexee <br><wbr /><a href="http://www.open-open.com/resource/von.gif" target="_blank"><img style="border:0;" src="http://www.open-open.com/resource/von.gif" /></a><wbr /><br>bexee是一个BPEL执行引擎并且是BPEL标准的一个开源实现. <a href="http://www.open-open.com/open98808.htm" target="_blank">更多bexee信息</a><wbr /><br><wbr /><a href="http://www.open-open.com/resource/icon_1.gif" target="_blank"><img style="border:0;" src="http://www.open-open.com/resource/icon_1.gif" /></a><wbr /> PXE <br><wbr /><a href="http://www.open-open.com/resource/von.gif" target="_blank"><img style="border:0;" src="http://www.open-open.com/resource/von.gif" /></a><wbr /><br>PXE-Process eXecution Engine是一个模块化的商业流程执行引擎.支持用WS-BPEL2.0或用BPEL4WS1.1规范描述的商业流程.<br><wbr /><a href="http://www.open-open.com/resource/icon_1.gif" target="_blank"><img style="border:0;" src="http://www.open-open.com/resource/icon_1.gif" /></a><wbr /> Syrup <br><wbr /><a href="http://www.open-open.com/resource/von.gif" target="_blank"><img style="border:0;" src="http://www.open-open.com/resource/von.gif" /></a><wbr /><br>Syrup是一个自适应的工作流系统,它不同其它工作流解决方案没有遵循复杂的标准如Wf-XML,BPML和XPDL。Syrup可以用来描述作业,程序步骤,资料导入/导出需求和作为描述每个商业流程步骤的工具。为了能达到这些需求，Syrup提供了五种基础概念 Tasks（作业）, Links(链接), Workflows(工作流), Workers（工作者）和WorkSpace(工作环境). <a href="http://www.open-open.com/open99008.htm" target="_blank">更多Syrup信息</a><wbr /><br><wbr /><a href="http://www.open-open.com/resource/icon_1.gif" target="_blank"><img style="border:0;" src="http://www.open-open.com/resource/icon_1.gif" /></a><wbr /> uEngine <br><wbr /><a href="http://www.open-open.com/resource/von.gif" target="_blank"><img style="border:0;" src="http://www.open-open.com/resource/von.gif" /></a><wbr /><br>一个基于Web Service的工作流管理系统,采用Java和CBD思想进行开发.uEngine提供了商业BPM解决方案的大部分特性如:流程设计器,EIP,Web服务工具和DB应用程序生成器. <br><wbr /><a href="http://www.open-open.com/image/uenginesuite.gif" target="_blank"><img style="border:0;" src="http://www.open-open.com/image/uenginesuite.gif" /></a><wbr /> <a href="http://www.open-open.com/open110308.htm" target="_blank">更多uEngine信息</a><wbr /><br><wbr /><a href="http://www.open-open.com/resource/icon_1.gif" target="_blank"><img style="border:0;" src="http://www.open-open.com/resource/icon_1.gif" /></a><wbr /> Flow4J <br><wbr /><a href="http://www.open-open.com/resource/von.gif" target="_blank"><img style="border:0;" src="http://www.open-open.com/resource/von.gif" /></a><wbr /><br>Flow4J是一个可在Eclipse平台下以拖放的方式进行工作流建模的插件.一个工作流程可包含许多流程步骤(在该项目中叫作flowlet),然后这些步骤可接连在一起组合成复杂的流程.所有流程将包含以下两种类型的flowlet:Control Flowlets如开始,判断与跳转Flowlets这些将在Eclipse中配置.另一种类型是Task Flowlets:它是一个包含特定任务的Java类,包含的功能可以是任何事件的如EJB调用或JNI调用,这些任务还可用一些脚本语言如Jython,Groovy,JavaScript等来进行开发.当在Eclipse中设计完这些流程之后,所有流程的Java源代码将自动创建.<br><wbr /><a href="http://www.open-open.com/image/sample7.jpg" target="_blank"><img style="border:0;" src="http://www.open-open.com/image/sample7.jpg" /></a><wbr /> <a href="http://www.open-open.com/open115608.htm" target="_blank">更多Flow4J信息</a><wbr /><br><wbr /><a href="http://www.open-open.com/resource/icon_1.gif" target="_blank"><img style="border:0;" src="http://www.open-open.com/resource/icon_1.gif" /></a><wbr /> Dalma <br><wbr /><a href="http://www.open-open.com/resource/von.gif" target="_blank"><img style="border:0;" src="http://www.open-open.com/resource/von.gif" /></a><wbr /><br>这个引擎的核心是能够捕获一个线程的执行状态并在过后恢复它．利用Dalma来开发Workflow应用程序能够让你像开发普通程序一样简单而不需要任何样板文件。 <a href="http://www.open-open.com/open126508.htm" target="_blank">更多Dalma信息</a><wbr /><br><wbr /><a href="http://www.open-open.com/resource/icon_1.gif" target="_blank"><img style="border:0;" src="http://www.open-open.com/resource/icon_1.gif" /></a><wbr /> Swish <br><wbr /><a href="http://www.open-open.com/resource/von.gif" target="_blank"><img style="border:0;" src="http://www.open-open.com/resource/von.gif" /></a><wbr /><br>Swish(Simple Web services Interface to Shark)是一个开源基于Web服务并符合WfMC标准的工作流引擎框架。Swish在Enhydra Shark(工作流服务器)之上提供一个Web服务层接口。这样让Shark可以支持包括Java与非Java的客户端而且它这种非常简单的访问方式让Shark的使用更加一般化。 <a href="http://www.open-open.com/open128308.htm" target="_blank">更多Swish信息</a><wbr /><br><wbr /><a href="http://www.open-open.com/resource/icon_1.gif" target="_blank"><img style="border:0;" src="http://www.open-open.com/resource/icon_1.gif" /></a><wbr /> IX Workflow Modeler <br><wbr /><a href="http://www.open-open.com/resource/von.gif" target="_blank"><img style="border:0;" src="http://www.open-open.com/resource/von.gif" /></a><wbr /><br>IX Workflow Modeler是一个用于工作流建模的图形工具。工作流模型可以在不依赖于应用程序逻辑的基础上进行创建和编辑，然后再与工作流应用程序结合。从而能够快速，方便，透明地进行商业流程维护。IX Workflow Modeler是一个Eclipse插件。<br><wbr /><a href="http://www.open-open.com/image/ix_worflow_modeler.png" target="_blank"><img style="border:0;" src="http://www.open-open.com/image/ix_worflow_modeler.png" /></a><wbr /> <a href="http://www.open-open.com/open128808.htm" target="_blank">更多IX Workflow Modeler信息</a><wbr /><br><wbr /><a href="http://www.open-open.com/resource/icon_1.gif" target="_blank"><img style="border:0;" src="http://www.open-open.com/resource/icon_1.gif" /></a><wbr /> SWAMP <br><wbr /><a href="http://www.open-open.com/resource/von.gif" target="_blank"><img style="border:0;" src="http://www.open-open.com/resource/von.gif" /></a><wbr /><br>SWAMP是一个运行在tomcat之上灵活，基于Java的工作流处理平台.。它从XML文件读取它的工作流定义。通过Web和SOAP接口管理，追踪工作流的instance，单个任务的执行。<br><wbr /><a href="http://www.open-open.com/image/swamp.png" target="_blank"><img style="border:0;" src="http://www.open-open.com/image/swamp.png" /></a><wbr /> <a href="http://www.open-open.com/open157008.htm" target="_blank">更多SWAMP信息</a><wbr /><br><wbr /><a href="http://www.open-open.com/resource/icon_1.gif" target="_blank"><img style="border:0;" src="http://www.open-open.com/resource/icon_1.gif" /></a><wbr /> JPEd <br><wbr /><a href="http://www.open-open.com/resource/von.gif" target="_blank"><img style="border:0;" src="http://www.open-open.com/resource/von.gif" /></a><wbr /><br>JPEd是一个流程描述图形编辑器。它使用由WfMC规范定义的XPDL1.0交换格式。<br><wbr /><a href="http://www.open-open.com/image/JPEd.gif" target="_blank"><img style="border:0;" src="http://www.open-open.com/image/JPEd.gif" /></a><wbr /> <a href="http://www.open-open.com/open159508.htm" target="_blank">更多JPEd信息</a><wbr /><br><wbr /><a href="http://www.open-open.com/resource/icon_1.gif" target="_blank"><img style="border:0;" src="http://www.open-open.com/resource/icon_1.gif" /></a><wbr /> JawFlow <br><wbr /><a href="http://www.open-open.com/resource/von.gif" target="_blank"><img style="border:0;" src="http://www.open-open.com/resource/von.gif" /></a><wbr /><br>JawFlow是一个部分遵循WfMC规范，采用JMX技术开发的工作流引擎。它能够解析XPDL，并能够用Java或BSF支持的脚本语言来自定义行为。 <a href="http://www.open-open.com/open169508.htm" target="_blank">更多JawFlow信息</a><wbr /><br><wbr /><a href="http://www.open-open.com/resource/icon_1.gif" target="_blank"><img style="border:0;" src="http://www.open-open.com/resource/icon_1.gif" /></a><wbr /> OBPM <br><wbr /><a href="http://www.open-open.com/resource/von.gif" target="_blank"><img style="border:0;" src="http://www.open-open.com/resource/von.gif" /></a><wbr /><br>OBPM是一个开源，轻量级的BPM系统。它的目标是让非IT人员也可以轻松构建IT业务处理流程。OBPM内建工作流引擎（Workflow Engine）, Form构建器，Report设计器。OBPM支持浏览器（IE/Firefox）做为客户端，同时还提供了强大的图形客户端。 <br><wbr /><a href="http://www.open-open.com/projectimage/OPBM.gif" target="_blank"><img style="border:0;" src="http://www.open-open.com/projectimage/OPBM.gif" /></a><wbr /> <a href="http://www.open-open.com/open195208.htm" target="_blank">更多OBPM信息</a><wbr /><br><wbr /><a href="http://www.open-open.com/resource/icon_1.gif" target="_blank"><img style="border:0;" src="http://www.open-open.com/resource/icon_1.gif" /></a><wbr /> BeanFlow <br><wbr /><a href="http://www.open-open.com/resource/von.gif" target="_blank"><img style="border:0;" src="http://www.open-open.com/resource/von.gif" /></a><wbr /><br>BeanFlow是一个用于创建工作流的轻量级java类库，它使用bean来组织、协调事件。你可以把BeanFlow想像成是BPEL的一种简单选择，在其工作流上的所有说明定义和实现都是采用java代码来代替XML描述。 <a href="http://www.open-open.com/open200108.htm" target="_blank">更多BeanFlow信息</a><wbr /><br> <!--v:3.2--> ]]></description>
<category><![CDATA[Java]]></category>
<author><![CDATA[155106081@qq.com(希望草~欣/tp)]]></author>
<comments>http://155106081.qzone.qq.com/blog/1218942472#comment</comments>
<qz:effect>513</qz:effect>
<pubDate>Sun, 17 Aug 2008 03:07:52 GMT</pubDate>
<guid>http://155106081.qzone.qq.com/blog/1218942472</guid>
</item>

<item>
<title><![CDATA[使用Proxy和InvocationHandler实现代理器模式]]></title>
<link>http://155106081.qzone.qq.com/blog/1210776803</link>
<description><![CDATA[<span style="font-weight:bold"><wbr />元对象(被代理对象):</span><wbr />package com.zj.gof.proxy;<br>public interface StudentInfoService {<br>void findInfo(String studentName);<br>}<br>package com.zj.gof.proxy;<br>public class StudentInfoServiceImpl implements StudentInfoService {<br>public void findInfo(String name) {<br>  System.out.println(&quot;你目前输入的名字是:&quot; + name);<br>}<br>}<br><span style="font-weight:bold"><wbr />代理对象:</span><wbr />package com.zj.gof.proxy;<br>import java.lang.reflect.InvocationHandler;<br>import java.lang.reflect.Method;<br>import java.lang.reflect.Proxy;<br>import org.apache.log4j.Logger;<br>public class LogHandler implements InvocationHandler {<br>  private Object proxyObj;<br>  private static Logger log=Logger.getLogger(LogHandler.class);<br>  <br>  public Object bind(Object obj){<br>   this.proxyObj=obj;<br>   return Proxy.newProxyInstance(obj.getClass().getClassLoader(),obj.getClass().getInterfaces(),this);<br>  }<br>  <br>  public Object invoke(Object proxy,Method method,Object[] args) throws Throwable{<br>   Object result=null;<br>   try{<br>    //请在这里插入代码，在方法前调用<br>    log.info(&quot;调用log日志方法&quot;+method.getName());<br>    result=method.invoke(proxyObj,args); //原方法<br>    //请在这里插入代码，方法后调用<br>   }catch(Exception e){<br>    e.printStackTrace();<br>   }<br>   return result;<br>  }<br>}<br><span style="color:#ff0000;line-height:1.8em;">注意:通过InvocationHandler接口实现的代理器只能代理接口方法.</span><wbr /><br><span style="font-weight:bold"><wbr />代理工厂:</span><wbr />package com.zj.gof.proxy;<br>public class LogFactory {<br>private static Object getClassInstance(String clzName) {<br>  Object obj = null;<br>  try {<br>   Class cls = Class.forName(clzName);<br>   obj = (Object) cls.newInstance();<br>  } catch (ClassNotFoundException cnfe) {<br>   System.out.println(&quot;ClassNotFoundException:&quot; + cnfe.getMessage());<br>  } catch (Exception e) {<br>   e.printStackTrace();<br>  }<br>  return obj;<br>}<br>public static Object getAOPProxyedObject(String clzName) {<br>  Object proxy = null;<br>  LogHandler handler = new LogHandler();<br>  Object obj = getClassInstance(clzName);<br>  if (obj != null) {<br>   proxy = handler.bind(obj);<br>  } else {<br>   System.out.println(&quot;Can't get the proxyobj&quot;);<br>   //throw<br>  }<br>  return proxy;<br>}<br>}<br><span style="font-weight:bold"><wbr />客户端调用:</span><wbr />package com.zj.gof.proxy;<br>public class MainTest {<br>public static void main(String[] args) {<br>  //  PropertyConfigurator.configure(&quot;d:/log4j.properties&quot;);<br>  BasicConfigurator.configure();<br>  StudentInfoService studentInfo = (StudentInfoService) LogFactory<br>    .getAOPProxyedObject(&quot;com.zj.gof.proxy.StudentInfoServiceImpl&quot;);<br>  studentInfo.findInfo(&quot;阿飞&quot;);<br>}<br>}<br><span style="font-weight:bold"><wbr />运行结果:</span><wbr />0 [main] INFO root  - 调用log日志方法findInfo<br>你目前输入的名字是:阿飞 <!--v:3.2--> ]]></description>
<category><![CDATA[Java]]></category>
<author><![CDATA[155106081@qq.com(希望草~欣/tp)]]></author>
<comments>http://155106081.qzone.qq.com/blog/1210776803#comment</comments>
<qz:effect>512</qz:effect>
<pubDate>Wed, 14 May 2008 14:53:23 GMT</pubDate>
<guid>http://155106081.qzone.qq.com/blog/1210776803</guid>
</item>

<item>
<title><![CDATA[想看我“打开自己”的个性旅游护照吗？]]></title>
<link>http://155106081.qzone.qq.com/blog/1209999862</link>
<description><![CDATA[嗨，亲爱的朋友们！我参加了QQ空间和七喜联袂举行的<span style="filter: glow(color=#00FF00,strength=3);color:#FFFFFF;display:inline-block;line-height:1.8em;"><span style="font-weight:bold"><wbr /><a href="http://a.qzone.qq.com/7up/index.html" target="_blank">“打开自己，酷游天下”</a><wbr /></span><wbr /></span><wbr />活动。<br>下面是我“打开自己”的个性旅游护照，它记录着我所走过的每一个精彩足迹，是不是很棒呀？！<br>快来投票支持我，为我增加<span style="filter: glow(color=#00FF00,strength=3);color:#FFFFFF;display:inline-block;line-height:1.8em;"><span style="font-weight:bold"><wbr />冰爽值</span><wbr /></span><wbr />吧！<br><br><br><embed invokeURLs="false" allowNetworking="all" allowscriptaccess="always" allowFullScreen="true" menu="false" id="flash0" width="670" height="490" src="http://imgcache.qq.com/ACT/080305_7xi/swf/7up.swf?qq=155106081" /><br><span style="color:#ff0000;line-height:1.8em;">点击橙色的省份可以查看我去过的城市和靓照图片哦！</span><wbr /><br><br><br><span style="filter: glow(color=#00FF00,strength=3);color:#FFFFFF;display:inline-block;line-height:1.8em;"><span style="font-weight:bold"><wbr />我来自：</span><wbr /></span><wbr />上海-浦东新区<br><span style="filter: glow(color=#00FF00,strength=3);color:#FFFFFF;display:inline-block;line-height:1.8em;"><span style="font-size:13px;line-height:1.8em;"><span style="font-weight:bold"><wbr />我最想去：</span><wbr /></span><wbr /></span><wbr />西藏-阿里<br><span style="filter: glow(color=#00FF00,strength=3);color:#FFFFFF;display:inline-block;line-height:1.8em;"><span style="font-weight:bold"><wbr />我去过的城市：</span><wbr /></span><wbr /><br> <span style="color:#00ff00;line-height:1.8em;"><span style="font-weight:bold"><wbr />安徽-黄山</span><wbr /></span><wbr /><br> 城市印象：奇石林立,气势磅礴<br><br> <span style="color:#00ff00;line-height:1.8em;"><span style="font-weight:bold"><wbr />浙江-宁波</span><wbr /></span><wbr /><br><br> <span style="color:#00ff00;line-height:1.8em;"><span style="font-weight:bold"><wbr />浙江-杭州</span><wbr /></span><wbr /><br><br> <span style="color:#00ff00;line-height:1.8em;"><span style="font-weight:bold"><wbr />福建-厦门</span><wbr /></span><wbr /><br><br> <span style="color:#00ff00;line-height:1.8em;"><span style="font-weight:bold"><wbr />湖北-武汉</span><wbr /></span><wbr /><br><br> <span style="color:#00ff00;line-height:1.8em;"><span style="font-weight:bold"><wbr />广西-桂林</span><wbr /></span><wbr /><br><br> <span style="color:#00ff00;line-height:1.8em;"><span style="font-weight:bold"><wbr />江西-南昌</span><wbr /></span><wbr /><br><br> <span style="color:#00ff00;line-height:1.8em;"><span style="font-weight:bold"><wbr />山东-泰安</span><wbr /></span><wbr /><br><br> <span style="color:#00ff00;line-height:1.8em;"><span style="font-weight:bold"><wbr />山东-济南</span><wbr /></span><wbr /><br><br> <span style="color:#00ff00;line-height:1.8em;"><span style="font-weight:bold"><wbr />上海-浦东新区</span><wbr /></span><wbr /><br><br> <!--v:3.2--> ]]></description>
<category><![CDATA[个人日记]]></category>
<author><![CDATA[155106081@qq.com(希望草~欣/tp)]]></author>
<comments>http://155106081.qzone.qq.com/blog/1209999862#comment</comments>
<qz:effect>4608</qz:effect>
<pubDate>Mon, 05 May 2008 15:04:22 GMT</pubDate>
<guid>http://155106081.qzone.qq.com/blog/1209999862</guid>
</item>

<item>
<title><![CDATA[详解Spring Web MVC中的Controller_转载]]></title>
<link>http://155106081.qzone.qq.com/blog/1209483496</link>
<description><![CDATA[    MVC模型中的控制器负责解析用户的输入信息,并将之变换处理后传入一个model,而这个model则可能被呈现给发起请求的用户.Spring以非常抽象的方式体现了控制器的理念,从而开发人员在创建controller时将有多种选择.Spring包含了3类controller：处理HTML表单的controller,基于command的controller,和向导风格的controller.<br>    Spring中Controller的基本类是org.springframework.web.servlet.mvc.Controller,这是一个相当简洁的接口,源代码如下：<br>package org.springframework.web.servlet.mvc;<br>import javax.servlet.http.HttpServletRequest;<br>import javax.servlet.http.HttpServletResponse;<br>import org.springframework.web.servlet.ModelAndView;<br>public interface Controller {<br>    ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) throws Exception;<br>} <br>    Controller接口仅仅定义了一个方法用于负责处理客户请求,并返回适当的模型和视图,这也是所有控制器都需要完成的职责.ModelAndView与Controller,这便是Spring MVC框架实现的基础.尽管Controller相当抽象,但Spring提供了多种Controller接口实现类.<br>1. AbstractController 类<br>    AbstractController是WebContentGenerator的子类,并实现了Controller接口.AbstractController是最重要的Controller接口实现之一 ,它提供了一些很基本的功能特征,例如生成HTTP协议的缓存头标数据,设定GET/POST动作等等.<br>    考察一下AbstratorController所在的类层次：<br>java.lang.Object<br>|_ org.springframework.context.support.ApplicationObjectSupport<br>  |_ org.springframework.web.context.support.WebApplicationObjectSupport<br>    |_   org.springframework.web.servlet.support.WebContentGenerator<br>        |_ org.springframework.web.servlet.mvc.AbstractController <br>    AbstratorController从其超类中继承许多属性,这些属性可以通过配置文件注入：<br>* supportedMethods ：指明本Controller应该接受的方法,缺省值“GET,POST&quot;,开发人员也可以自己修改本属性以反应欲支持的方法.若一个请求带有该方法设定,但Controller并不支持,那么这个信息将被通知客户.<br>* requiresSession：指明本Controller是否需要一个HTTP会话以完成它的工作,若Contrller在接收一个请求时并没有HTTP会话存在,那么将抛出一个ServletException.本属性的缺省值是false.<br>* synchronizeSession：若在客户的HTTP会话中,需要以同步方式处理Controller,则使用本属性.<br>* cacheSeconds：当需要Controller为客户的HTTP响应生成一个缓存指令时,可以为cacheSeconds指定一个正整数.本属性缺省值为-1,即不设定缓存.<br>* useExpiresHeader：指示Controller为客户的HTTP响应指定一个兼容HTTP 1.0版本中的&quot;Expires&quot;头标数据.本属性缺省值是true.<br>* useCacheHeader：指示Controller为客户的HTTP响应指定一个兼容HTTP 1.1版本中的&quot;Cache-Control&quot;头标数据.本属性缺省值是true.<br>    我们阅读一下Spring src目录中的AbstractController的源代码：<br>package org.springframework.web.servlet.mvc;<br>import javax.servlet.http.HttpServletRequest;<br>import javax.servlet.http.HttpServletResponse;<br>import javax.servlet.http.HttpSession;<br>import org.springframework.web.servlet.ModelAndView;<br>import org.springframework.web.servlet.support.WebContentGenerator;<br>import org.springframework.web.util.WebUtils;<br>public abstract class AbstractController extends WebContentGenerator implements Controller {<br>    private boolean synchronizeOnSession = false;<br>    public final void setSynchronizeOnSession(boolean synchronizeOnSession) {<br>        this.synchronizeOnSession = synchronizeOnSession;<br>    }<br>    public final boolean isSynchronizeOnSession() {<br>        return synchronizeOnSession;<br>    }<br><br>    public final ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response)<br>              throws Exception {<br>        checkAndPrepare(request, response, this instanceof LastModified);<br>        if (this.synchronizeOnSession) {<br>              HttpSession session = request.getSession(false);<br>              if (session != null) {<br>                  Object mutex = WebUtils.getSessionMutex(session);<br>                  synchronized (mutex) {<br>                      return handleRequestInternal(request, response);<br>                  }<br>              }<br>        }<br>        <br>        return handleRequestInternal(request, response);<br>    }<br>    protected abstract ModelAndView handleRequestInternal(HttpServletRequest request, HttpServletResponse response)<br>      throws Exception;<br>}     <br>从上述代码可以看出,AbstractorController的工作流程如下：<br>1.DispatcherServlet调用handleRequest方法；<br>2.检查被支持的方法(GET/POST/PUT之一),若不支持则抛出ServletException；<br>3.若需要发起一个session,则尝试获取一个session,若获取不到,则抛出ServletException； <br>4.根据cacheSeconds属性,设定缓存头标的数据；<br>5.调用受保护的抽象方法handleRequestInternal,这个方法应由AbstractController的子类提供实际的功能实现,并返回ModelAndView对象.<br>    <br>    当开发人员使用AbstractController作为自己所设计的控制器的基类时,只需覆盖handleRequestInternal(HttpServletRequest, HttpServletResponse)方法即可,并返回一个ModelAndView对象,示例如下：<br>package samples;<br>public class SampleController extends AbstractController {<br>public ModelAndView handleRequestInternal(<br>HttpServletRequest request,<br>HttpServletResponse response) throws Exception {<br>    ModelAndView modelAndView = new ModelAndView(&quot;hello&quot;);<br>    modelAndView.addObject(&quot;message&quot;, &quot;Hello World!&quot;);<br>    return modelAndView;<br>}<br>} <br>    而配置文件中定义示例如下：<br>&lt;bean id=&quot;sampleController&quot; class=&quot;samples.SampleController&quot;&gt;<br>    &lt;property name=&quot;cacheSeconds&quot; value=&quot;120&quot;/&gt;<br>&lt;/bean&gt;<br>    <br>    在本例中,若使这个SampleController将在给客户的HTTP响应中指定120秒的缓存.SampleController返回了一个一个编码的视图（通常不建议这样设计）.<br>2. 其他简单的Controller<br>    尽管开发人员可以自己扩展AbstractController,不过Spring提供了许多具体的实现,可以用于简单的MVC应用.<br>    ParameterizableViewController类与上面的示例基本相同,除了开发人员可以自己指定所返回视图的名字,这样便不需要在Java类中写视图的名字.<br>UrlFilenameViewController检查URL,查找文件请求的文件名,并以之作为视图的名字.例如“http://www.springframework.org/index.html&quot;的文件名是“index&quot;.<br>3. MultiActionController<br>     Spring提供了一个多动作控制器MultiActionController,开发人员藉此可以将多个动作聚合在同一个控制器之内,实现功能集成,从而不必为控制器定义多个入口点.例如对商品信息进行查询、增删改等操作,这个动作可以用一个Contoller来实现.<br>     这个多动作控制器是Spring中一个独立的Java类包,即<br>org.springframework.web.servlet.mvc.multiaction,它能将客户请求与处理方法名字映射起来,并触发正确的方法.MultiActionController事实上是AbstractController的一个子类,而在应用中,MultiActionController的实现方式有两种：其一是继承MultiActionController,其二是在配置文件中定义一个代理bean,由它来定义哪个控制器是多动作的.<br>     <br>     对于控制器中的多个方法,MultiActionController是通过MethodNameResolver来选择执行的.MultiActionController中的MethodNameResolver包括：<br>1.InternalPathMethodNameResolver:这是MultiActionController缺省的MethodNameResolver,它是根据URL样式来解析方法名的,实际上就是根据URL中的“文件名”决定的,例如请求“http://www.springframework.org/testing.view”将令MultiActionController调用testing(HttpServletRequest,HttpServletResponse)方法.<br>2.ParameterMethodNameResolver：根据请求中的参数来解析并执行方法名,例如请求“http://www.springframework.org/index.view?testParam=testIt”将令MultiActionController调用testIt(HttpServletRequest, HttpServletResponse)方法.<br>3.PropertiesMethodNameResolver：根据查询一个key/value列表来解析并执行方法名.<br>     对于多动作控制器的使用,我们看一个简单的例子,并利用Eclipse和Tomcat来完成.<br>     第一步,定义web.xml.web.xml放置在WEB-INF目录下.<br>&lt;?xml version=&quot;1.0&quot; encoding=&quot;ISO-8859-1&quot;?&gt;<br><br>&lt;web-app xmlns=&quot;<a href="http://java.sun.com/xml/ns/j2ee" target="_blank">http://java.sun.com/xml/ns/j2ee</a><wbr />&quot;<br>  xmlns:xsi=&quot;<a href="http://www.w3.org/2001/XMLSchema-instance" target="_blank">http://www.w3.org/2001/XMLSchema-instance</a><wbr />&quot;<br>  xsi:schemaLocation=&quot;<a href="http://java.sun.com/xml/ns/j2ee" target="_blank">http://java.sun.com/xml/ns/j2ee</a><wbr /> <a href="http://java.sun.com/xml/ns/j2ee/web-app_2_5.xsd" target="_blank">http://java.sun.com/xml/ns/j2ee/web-app_2_5.xsd</a><wbr />&quot;<br>  version=&quot;2.5&quot;&gt;<br>&lt;servlet&gt;<br>     &lt;servlet-name&gt;dispatcherServlet&lt;/servlet-name&gt;<br>     &lt;servlet-class&gt;org.springframework.web.servlet.DispatcherServlet&lt;/servlet-class&gt;<br>     &lt;init-param&gt;<br>           &lt;param-name&gt;contextConfigLocation&lt;/param-name&gt;<br>           &lt;param-value&gt;/WEB-INF/dispatcherServlet-servlet.xml&lt;/param-value&gt;<br>     &lt;/init-param&gt;<br>     &lt;load-on-startup&gt;1&lt;/load-on-startup&gt;<br>&lt;/servlet&gt;<br>&lt;servlet-mapping&gt;<br>     &lt;servlet-name&gt;dispatcherServlet&lt;/servlet-name&gt;<br>     &lt;url-pattern&gt;*.do&lt;/url-pattern&gt;<br>&lt;/servlet-mapping&gt;<br>&lt;/web-app&gt;<br>     servlet-mapping定义所有以”.do”结尾开头的url请求都会被Spring 的dispatcherServlet处理转发.默认情况下DispatcherServlet会读取&lt;servlet-name&gt;-servlet.xml文件的配置信息初始化,该文件中urlMapping的定义决定当前请求转发给哪个controller来处理,这里则定义了一个 dispatcherServlet-servlet.xml文件.<br>     第二步,定义 dispatcherServlet-servlet.xml文件<br><br>&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;<br>&lt;!DOCTYPE beans PUBLIC &quot;-//SPRING//DTD BEAN 2.0//EN&quot;<br>&quot;<a href="http://www.springframework.org/dtd/spring-beans-2.0.dtd" target="_blank">http://www.springframework.org/dtd/spring-beans-2.0.dtd</a><wbr />&quot;&gt;<br>&lt;beans&gt;<br>     &lt;bean id=&quot;urlMapping&quot; class=&quot;org.springframework.web.servlet.handler.SimpleUrlHandlerMapping&quot;&gt;<br>            &lt;property name=&quot;mappings&quot;&gt;<br>                 &lt;props&gt;<br>                       &lt;prop key=&quot;sample.do&quot;&gt;sampleMultiActionController&lt;/prop&gt;<br>                 &lt;/props&gt;<br>            &lt;/property&gt;<br>     &lt;/bean&gt;<br>     &lt;bean id=&quot;viewResolver&quot; class=&quot;org.springframework.web.servlet.view.InternalResourceViewResolver&quot;&gt;<br>            &lt;property name=&quot;viewClass&quot;&gt;<br>                 &lt;value&gt;org.springframework.web.servlet.view.InternalResourceView&lt;/value&gt;<br>            &lt;/property&gt;<br>            &lt;property name=&quot;prefix&quot;&gt;<br>                 &lt;value&gt;/WEB-INF/jsp/&lt;/value&gt;<br>            &lt;/property&gt;<br>            &lt;property name=&quot;suffix&quot;&gt;<br>                 &lt;value&gt;.jsp&lt;/value&gt;<br>            &lt;/property&gt;<br>     &lt;/bean&gt;<br>     <br>      <br>     &lt;bean id=&quot;sampleMultiActionController&quot; class=&quot;com.test.SampleMultiMActionController&quot;&gt;<br>           &lt;property name=&quot;methodNameResolver&quot;&gt;<br>                 &lt;ref bean=&quot;paraMethodResolver&quot;/&gt;<br>           &lt;/property&gt;<br>     &lt;!--viewName属性将依赖注入sampleMultiActionController类--&gt;<br>           &lt;property name=&quot;viewName&quot;&gt;<br>                 &lt;value&gt;showme&lt;/value&gt;<br>           &lt;/property&gt;<br>     &lt;/bean&gt;<br>     <br>     &lt;bean id=&quot;paraMethodResolver&quot; class=&quot;org.springframework.web.servlet.mvc.multiaction.ParameterMethodNameResolver&quot;&gt;<br>           &lt;property name=&quot;paramName&quot; value=&quot;whichMethod&quot;/&gt;<br>     &lt;/bean&gt;<br>&lt;/beans&gt;<br>     <br>     其中,urlMapping定义客户端的sample.do请求由名字为 sampleMultiActionController 的控制器来处理,由于是多动作处理器,所以需要定义MethodNameResolver来通知web.xml中定义的dispatcherServlet应该调用sampleMultiActionController 的哪个方法.这里用的是InternalPathMethodNameResolver,本例说明了sampleMultiActionController将在/WEB-INF/jsp/目录下的寻找一个showme.jsp文件作为显示model的视图.<br>     第三步,定义一个SampleMultiActionController类,它是MultiActionController的子类,并有insert、update、delete三个,其源代码如下:<br><br>import javax.servlet.http.HttpServletRequest;<br>import javax.servlet.http.HttpServletResponse;<br>import org.springframework.web.servlet.ModelAndView;<br>import org.springframework.web.servlet.mvc.Controller;<br>import java.io.IOException;<br>import java.util.*;<br>import javax.servlet.ServletException;<br>import org.apache.log4j.Logger;<br>import org.springframework.web.bind.*;<br>import org.springframework.web.servlet.ModelAndView;<br>import org.springframework.web.servlet.mvc.Controller;<br>org.springframework.web.servlet.mvc.multiaction.MultiActionController;<br>public class SampleMultiActionController extends MultiActionController {<br>     private Logger logger=Logger.getLogger(this.getClass().getName());<br>     private String viewName;<br>     //依赖注入一个名为viewName的参数,例如一个JSP文件,作为展示model的视图<br>     public String getViewName (){<br>           return this.viewName;<br>     }<br>     public void setViewName (String viewName){<br>           this. viewName =viewName;<br>     } <br>     <br>     <br>     public ModelAndView insert(HttpServletRequest req,<br>                 HttpServletResponse res) throws ServletRequestBindingException, IOException {<br>           Map model = new HashMap();<br>           model.put(&quot;dataList&quot;, &quot;新增数据...&quot;);<br>           return new ModelAndView(getViewName(),model);<br>     } <br>     <br>     public ModelAndView update(HttpServletRequest req,<br>                 HttpServletResponse res) throws ServletRequestBindingException, IOException {<br>           Map model = new HashMap();<br>           model.put(&quot;dataList&quot;, &quot;修改数据...&quot;);<br>           return new ModelAndView(getViewName(),model);<br>     }<br>     <br>     public ModelAndView delete(HttpServletRequest req,<br>                 HttpServletResponse res) throws ServletRequestBindingException, IOException {<br>           Map model = new HashMap();<br>           model.put(&quot;dataList&quot;, &quot;删除数据...&quot;);<br>           return new ModelAndView(getViewName(),model);<br>     }<br>}<br>     第四步,定义视图,此例中即是/WEB-INF/jsp/showme.jsp<br><br>&lt;[email=%@page]%@page[/email] contentType=&quot;text/html;charset=GBK&quot;%&gt;<br>&lt;%@ taglib prefix=&quot;c&quot; uri=&quot;<a href="http://java.sun.com/jstl/core_rt" target="_blank">http://java.sun.com/jstl/core_rt</a><wbr />&quot; %&gt;<br>&lt;%@ taglib prefix=&quot;fmt&quot; uri=&quot;http://java.sun.com/jstl/fmt&quot;%&gt; <br>&lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.01 Transitional//EN&quot;&gt;<br>&lt;html&gt;<br>&lt;head&gt;MuiltiActionController示例&lt;/head&gt; <br>&lt;body&gt;<br>  &lt;c:out value=&quot;${model.dataList}&quot;/&gt;<br>&lt;/body&gt;<br>&lt;/html&gt;<br>     第五步,测试.在Eclipse内启动Tomcat,在浏览器地址栏内分别输入,便可看到相应的页面输出信息:<br><a href="http://localhost:8080/sample.do?whichMethod=insert" target="_blank">http://localhost:8080/sample.do?whichMethod=insert</a><wbr /><br><a href="http://localhost:8080/sample.do?whichMethod=update" target="_blank">http://localhost:8080/sample.do?whichMethod=update</a><wbr /><br><a href="http://localhost:8080/sample.do?whichMethod=delete" target="_blank">http://localhost:8080/sample.do?whichMethod=delete</a><wbr /><br> <br> <!--v:3.2--> ]]></description>
<category><![CDATA[Java]]></category>
<author><![CDATA[155106081@qq.com(希望草~欣/tp)]]></author>
<comments>http://155106081.qzone.qq.com/blog/1209483496#comment</comments>
<qz:effect>512</qz:effect>
<pubDate>Tue, 29 Apr 2008 15:38:16 GMT</pubDate>
<guid>http://155106081.qzone.qq.com/blog/1209483496</guid>
</item>

<item>
<title><![CDATA[构建高性能J2EE应用的五种核心策略]]></title>
<link>http://155106081.qzone.qq.com/blog/1209316659</link>
<description><![CDATA[ <br>对于J2EE，我们知道当开发应用时，在架构设计阶段的决定将对应用的性能和可扩展性产生深远的影响。现在当开发一个应用项目时，我们越来越多地注意到了性能和可扩展性的问题。应用性能的问题比应用功能的不丰富问题往往更为严重，前者会影响到所有用户，而后者只会影响到碰巧使用该功能的那些用户。 <br>作为应用系统的负责人，一直被要求&quot;要少花钱多办事&quot;----用更少的硬件，更少的网络带宽，以及更短的时间完成更多的任务。J2EE通过提供组件方式和通用的中间件服务是目前首选的最优方式。而要能够构建一个具有高性能和可扩展性的J2EE应用，需要遵循一些基本的架构策略。 <br>1. 缓存(Caching) <br>简单地说，缓存中存放着频繁访问的数据，在应用的整个生命周期中，这些数据存放在持久性存储器或存放在内存中。在实际环境中，典型的现象是在分布式系统中每个JVM中有一个缓存的实例或者在多个JVM中有一个缓存的实例。 <br>缓存数据是通过避免访问持久性存储器来提高性能的，否则会导致过多的磁盘访问和过于频繁网络数据传输。 <br>2.复制 <br>复制是通过在多台物理机器上创建指定应用服务的多个拷贝来获得整体更大吞吐效率。理论上看，如果一个服务被复制成两个服务，那么系统将可处理两倍的请求。复制是通过单一服务的多个实例的方式从而减少每个服务的负载来提高性能的。 <br>3.并行处理 <br>并行处理将一个任务分解为更为简单的子任务，并能够同时在不同的线程中执行。 <br>并行处理是通过利用J2EE层执行模式的多线程和多CPU特点来提高性能。与使用一个线程或CPU处理任务相比，以并行方式处理多个子任务可以使操作系统在多个线程或处理器中进行分配这些子任务。 <br>4.异步处理 <br>应用功能通常被设计为同步或串行方式。异步处理只处理那些非常重要的任务部分，然后将控制立即返回给调用者，其他任务部分将在稍后执行。 <br>异步处理是通过缩短那些在将控制返回给用户之前必须处理的时间来提高性能的。虽然都做同样多的事情，但是用户不必等到整个过程完成就可以继续发出请求了。 <br>5.资源池 <br>资源池技术使用的是一套准备好的资源。与在请求和资源之间维持1：1的关系的不同，这些资源可被所有请求所共享。资源池的使用是有条件的，需要衡量下面两种方式的代价： <br>A、维持一套可被所有请求共享资源的代价 <br>B、为每个请求都重新创建一个资源的代价 <br>当前者小于后者时，使用资源池才是有效率的。<br> <!--v:3.2--> ]]></description>
<category><![CDATA[Java]]></category>
<author><![CDATA[155106081@qq.com(希望草~欣/tp)]]></author>
<comments>http://155106081.qzone.qq.com/blog/1209316659#comment</comments>
<qz:effect>512</qz:effect>
<pubDate>Sun, 27 Apr 2008 17:17:39 GMT</pubDate>
<guid>http://155106081.qzone.qq.com/blog/1209316659</guid>
</item>

<item>
<title><![CDATA[JTA JDBC 管理事务方式的差别]]></title>
<link>http://155106081.qzone.qq.com/blog/1207297070</link>
<description><![CDATA[JTA 提供了跨Session 的事务管理能力。这一点是与JDBC Transaction 最大的差异。<br>JDBC事务由Connnection管理，也就是说，事务管理实际上是在JDBC Connection 中实现。<br>事务周期限于Connection的生命周期之类。同样，对于基于JDBC Transaction 的Hibernate 事务管理机制而言，事务管理在Session 所依托的JDBC Connection 中实现，事务周期限于Session的生命周期。<br>JTA 事务管理则由 JTA 容器实现，JTA 容器对当前加入事务的众多Connection 进行调度，实现其事务性要求。<br>JTA的事务周期可横跨多个JDBC Connection生命周期。<br>同样对于基于JTA事务的Hibernate而言，JTA事务横跨可横跨多个Session。 <!--v:3.2--> ]]></description>
<category><![CDATA[Java]]></category>
<author><![CDATA[155106081@qq.com(希望草~欣/tp)]]></author>
<comments>http://155106081.qzone.qq.com/blog/1207297070#comment</comments>
<qz:effect>512</qz:effect>
<pubDate>Fri, 04 Apr 2008 08:17:50 GMT</pubDate>
<guid>http://155106081.qzone.qq.com/blog/1207297070</guid>
</item>

<item>
<title><![CDATA[托老婆的鸿福可以回家了]]></title>
<link>http://155106081.qzone.qq.com/blog/1201790971</link>
<description><![CDATA[能坐火车回家了，老婆就是路子广啊<br>哎，可以把汽车票退了<br>终于少了一些担惊受怕，第一次享受春运的恐怖。<br>天灾、人灾、聚在一起。<br>挡不住我们<img src="http://imgcache.qq.com/qzone/em/e31.gif"><wbr />聚在一起 <!--v:3.2--> ]]></description>
<category><![CDATA[个人日记]]></category>
<author><![CDATA[155106081@qq.com(希望草~欣/tp)]]></author>
<comments>http://155106081.qzone.qq.com/blog/1201790971#comment</comments>
<qz:effect>512</qz:effect>
<pubDate>Thu, 31 Jan 2008 14:49:31 GMT</pubDate>
<guid>http://155106081.qzone.qq.com/blog/1201790971</guid>
</item>

<item>
<title><![CDATA[Oracle DB Link介绍]]></title>
<link>http://155106081.qzone.qq.com/blog/1201540472</link>
<description><![CDATA[<span style="line-height:1.8em;">数据库连接串主要用于建立对远程数据库的访问方法，可以直接读取远程Oracle的数据，或者直接修改。数据库连接串可以是公用连接PUBLIC或者私有连接PRIVATE。这一点和同义词很相像。</span><wbr /><br><span style="line-height:1.8em;">1。创建语法：</span><wbr /><br><span style="line-height:1.8em;">CREATE DATABASE LINK TEST </span><wbr /><br><span style="line-height:1.8em;">CONNECT TO USERNAME IDENTIFIED BY PASSWORD </span><wbr /><br><span style="line-height:1.8em;">USING 'CONNECT_STRING'; </span><wbr /><br><span style="line-height:1.8em;">解释：TEST是数据库连接串的名字。以后就通过这个名字来进行调用远程数据库的内容。</span><wbr /><br><span style="line-height:1.8em;">USERNAME是用来连接到远程数据库的合法Oracle用户名。PASSWORD为该用户连接到Oracle时候的合法密码。</span><wbr /><br><span style="line-height:1.8em;">CONNECT_STRING为该Oracle数据库所在的主机上的tnsnames.ora文件里边定义的数据库连接串。</span><wbr /><br><span style="line-height:1.8em;">2。使用方法：</span><wbr /><br><span style="line-height:1.8em;">SELECT COUNT(*) FROM TABLE_NAME@DB_LINK </span><wbr /><br><span style="line-height:1.8em;">WHERE WHERE_CLAUSE;//查阅远程数据库的内容。</span><wbr /><br><span style="line-height:1.8em;">UPDATE SO SET SO_NBR=NEW_SO_NBR </span><wbr /><br><span style="line-height:1.8em;">WHERE WHERE_CLAUSE;//修改远程数据库的内容。</span><wbr /><br><span style="line-height:1.8em;">在实际使用过程中，还可以通过为这个远程表建立一个同义词来进一步增加透明性，使该数据库连接串对于程序和开发人员来讲完全透明。</span><wbr /><br><span style="line-height:1.8em;">CREATE SYNONYM TABLE_NAME FOR TABLE_NAME@DB_LINK; </span><wbr /><br><span style="line-height:1.8em;">3。数据库连接的管理：</span><wbr /><br><span style="line-height:1.8em;">1。如何知道当前用户、当前系统中有哪些数据库连接串？</span><wbr /><br><span style="line-height:1.8em;">SELECT * FROM USER_DB_LINKS; </span><wbr /><br><span style="line-height:1.8em;">这个查询会给出当前用户的数据库联接的名字、联接用户名、联接密码、要连接的主机以及创建时期。</span><wbr /><br><span style="line-height:1.8em;">SELECT * FROM DBA_DB_LINKS; </span><wbr /><br><span style="line-height:1.8em;">这个查询会给出当前系统中所有的数据库联接的创建用户、联接用户名、要连接的主机以及创建时期。</span><wbr /><br><span style="line-height:1.8em;">SELECT * FROM V$DBLINK; </span><wbr /><br><span style="line-height:1.8em;">这个查询会给出当前打开的数据库联接。</span><wbr /><br><span style="line-height:1.8em;">4。常见错误处理：</span><wbr /><br><span style="line-height:1.8em;">//////////////////////////////////////////////////////////////// </span><wbr /><br><span style="line-height:1.8em;">1。不能分解服务名：</span><wbr /><br><span style="line-height:1.8em;">登录到远程服务器上的结果：</span><wbr /><br><span style="line-height:1.8em;">net97&gt;show parameters global_name </span><wbr /><br><span style="line-height:1.8em;">NAME TYPE VALUE </span><wbr /><br><span style="line-height:1.8em;">------------------------------------ ------- ------------------------------ </span><wbr /><br><span style="line-height:1.8em;">global_names boolean FALSE </span><wbr /><br><span style="line-height:1.8em;">net97&gt; </span><wbr /><br><span style="line-height:1.8em;">net97&gt;drop database link jinhua; </span><wbr /><br><span style="line-height:1.8em;">数据库链接已丢弃。</span><wbr /><br><span style="line-height:1.8em;">net97&gt;create database link jinhua </span><wbr /><br><span style="line-height:1.8em;">2 connect to username identified by password </span><wbr /><br><span style="line-height:1.8em;">3 using 'jinhua'; </span><wbr /><br><span style="line-height:1.8em;">数据库链接已创建。</span><wbr /><br><span style="line-height:1.8em;">net97&gt;select * from so@jinhua; </span><wbr /><br><span style="line-height:1.8em;">select * from so@jinhua </span><wbr /><br><span style="line-height:1.8em;">* </span><wbr /><br><span style="line-height:1.8em;">ERROR 位于第 1 行</span><wbr /><span style="line-height:1.8em;">: </span><wbr /><br><span style="line-height:1.8em;">ORA-12154: TNS:不能分解服务名称</span><wbr /><span style="line-height:1.8em;">. </span><wbr /><br><span style="line-height:1.8em;">net97&gt;conn username/password@jinhua; </span><wbr /><br><span style="line-height:1.8em;">已连接。</span><wbr /><br><span style="line-height:1.8em;">net97&gt; </span><wbr /><br><span style="line-height:1.8em;">这是因为在Oracle数据库所在的Unix主机上面的tnsnames.ora文件里边没有对jinhua这个服务名的定义。所以不能分解服务名。</span><wbr /><br><span style="line-height:1.8em;">//////////////////////////////////////////////////////// </span><wbr /><br><span style="line-height:1.8em;">2。GlobalName和数据库联接的名字不一致的情况：</span><wbr /><br><span style="line-height:1.8em;">解决方案：</span><wbr /><br><span style="line-height:1.8em;">1。修改本Oracle实例的global_name为false。</span><wbr /><br><span style="line-height:1.8em;">登录到本地的NTserver 上面的ORacle816数据库：</span><wbr /><br><span style="line-height:1.8em;">本地的tnsnames.ora文件里边有jinhua这个连接串的描述。</span><wbr /><br><span style="line-height:1.8em;">GLOBAL_NAME=TRUE的时候的情况：</span><wbr /><br><span style="line-height:1.8em;">SQL&gt; show parameters global </span><wbr /><br><span style="line-height:1.8em;">NAME TYPE VALUE </span><wbr /><br><span style="line-height:1.8em;">------------------------------------ ------- ------------------------------ </span><wbr /><br><span style="line-height:1.8em;">global_names boolean TRUE </span><wbr /><br><span style="line-height:1.8em;">SQL&gt;conn username/password </span><wbr /><br><span style="line-height:1.8em;">SVRMGR&gt; create database link jinhua </span><wbr /><br><span style="line-height:1.8em;">2&gt; connect to spgroup identified by spgroup </span><wbr /><br><span style="line-height:1.8em;">3&gt; using 'jinhua'; </span><wbr /><br><span style="line-height:1.8em;">语句已处理。</span><wbr /><br><span style="line-height:1.8em;">SVRMGR&gt; select count(*) from spgroup.so@jinhua; </span><wbr /><br><span style="line-height:1.8em;">select count(*) from spgroup.so@jinhua </span><wbr /><br><span style="line-height:1.8em;">* </span><wbr /><br><span style="line-height:1.8em;">ORA-02085: ?????JINHUA.world?ORCL.WORLD??? </span><wbr /><br><span style="line-height:1.8em;">SVRMGR&gt; drop database link jinhua; </span><wbr /><br><span style="font-family:'宋体';line-height:1.8em;">语句已处理。</span><wbr /><br><span style="line-height:1.8em;">ORA-02085: ?????JINHUA.WORLD?ORCL.WORLD??? </span><wbr /><br><span style="line-height:1.8em;">SVRMGR&gt; drop database link jinhua.world; </span><wbr /><br><span style="line-height:1.8em;">语句已处理。</span><wbr /><br><span style="line-height:1.8em;">SQL&gt; conn username/password </span><wbr /><br><span style="line-height:1.8em;">已连接。</span><wbr /><br><span style="line-height:1.8em;">SQL&gt; create database link orcl.world </span><wbr /><br><span style="line-height:1.8em;">2 connect to username identified by password</span><wbr /> <!--v:3.2--> ]]></description>
<category><![CDATA[Oracle]]></category>
<author><![CDATA[155106081@qq.com(希望草~欣/tp)]]></author>
<comments>http://155106081.qzone.qq.com/blog/1201540472#comment</comments>
<qz:effect>512</qz:effect>
<pubDate>Mon, 28 Jan 2008 17:14:32 GMT</pubDate>
<guid>http://155106081.qzone.qq.com/blog/1201540472</guid>
</item>

</channel>
</rss>

