科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网软件频道用Spring Web Flow和Terracotta搭建Web应用

用Spring Web Flow和Terracotta搭建Web应用

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

  Spring Web Flow是Spring Framework中的web应用组件,它提供了一种编写有状态和基于会话的web应用的简便手段。Spring Web Flow使得逻辑流程成为Web应用中的一等公民,它能让你定义为自包含模块。

作者:中国IT实验室 来源:中国IT实验室 2007年9月30日

关键字:

  • 评论
  • 分享微博
  • 分享邮件

在本页阅读全文(共3页)

  定义页面流转

  剩余的逻辑在我们已经注册的flowRegistry bean的流转定义中。(参照前面的'配置flow executor和flow registry beans章节)。

  在深入流转实现细节前,我们先看一下页面流转的状态图(如下图)。

  从上面我们可以看到流转在结束前经过了几个步骤,在决定销售是否需要送货时有一个决策状态。

  一个很好的针对上面导航规则的初始流转定义实现如下:

  

  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

  xsi:schemaLocation="

  http://www.springframework.org/schema/webflow

  http://www.springframework.org/schema/webflow/spring-webflow-1.0.xsd">

  

  我们从上面的定义可以看到,实际状态与状态图中的状态对应,状态转换与图中的箭头对应。"sale" bean是流转开始时分配的流转变量实例。它持有了Sale相关的属性。

  上面的定义展示了所有的导航逻辑,但还没有实现任何应用行为。特别是在用户提交时更新Sale Bean的逻辑还没有实现。另外后台的sale处理逻辑还没有定义。

  实现了所有必需行为的完整Spring Web Flow定义如下:

  

  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

  xsi:schemaLocation=" http://www.springframework.org/schema/webflow

  http://www.springframework.org/schema/webflow/spring-webflow-1.0.xsd"

  

  在定义导航逻辑之外,也定义了适时调用恰当应用行为的action。这包括处理用户提交事件和调用后台处理器来处理sale的逻辑。

  Form绑定和验证

  当进入展示表单的视图状态时,流转调用一个FormAction command bean来进行表单的装配和提交逻辑。在提交时,FormAction把用户的请求参数绑定到相应的sale属性上并同时验证它们。

  更多信息

  Spring Web Flow全部的代码、文档和10个示例应用(包括sellitem)都可以在Spring网站上找到http://www.springframework.org/webflow。

  集群Sellitem应用

  现在我们已经看过了如何使用Spring Web Flow来实现一个有状态web应用。接下来让我们更高兴的看如何给我们的示例应用启用高可用性和故障恢复,如何使用Terracotta for Spring进行集群来提供透明容错性和在节点间共享状态。

  听上去很难? 你会发现这实际上很简单。

  声明式配置

  Sellitem示例应用使用一个Sale类的实例来保存当前销售的会话数据;同样Spring Web Flow executor repository也使用HTTP session 来保存所有的会话数据。

  要使用Terracotta for Spring,我们需要确保为给定的web应用启用了HTTP session集群,包括所有可能被保存在 HTTP session中(或者能被保存在HTTP session中的实例引用)的类,以便于检测。这里是Terracotta for Spring的tc-config.xml配置文件的一个例子: 

  name="swf-sellitem">

  true

  org.springframework.webflow.samples.sellitem.Sale

  这里我们为swf-sellitem WAR文件启用了HTTP session集群并配置了Sale类。

  就是这样,我们已经做了很多了。

  启用Terracotta

  我们唯一需要做的就是在应用中启用Terracotta for Spring运行时。这可以通过修改Tomcat web服务器的启动脚本并在脚本最前面加入下面的环境变量完成:

  set JAVA_OPTS=-Xbootclasspath/p:"%DSO_BOOT_JAR%"

  set JAVA_OPTS=%JAVA_OPTS% -Dtc.install-root="%TC_INSTALL_DIR%"

  set JAVA_OPTS=%JAVA_OPTS% -Dtc.config="%LOCAL_DIR%\tc-config.xml"

  这里面:

  DSO_BOOT_JAR环境变量指向jar的根目录(能在Terracotta for Spring安装的根目录的common/lib/dso-boot下找到)。

  TC_INSTALL_DIR环境变量指向Terracotta for Spring安装的根目录。

  LOCAL_DIR指向包含tc-config.xml的目录.。

  Sellitem应用预配置了Terracotta for Spring集群的代码可以在下面的'Resources'章节找到。也包括了开箱即用的Tomcat集群配置。

  注解:Spring应用上下文中的集群bean可以在服务(bean)级别配置,并依赖于Terracotta for Spring的 auto-include检测机制.例如,大多数情况下我们不需要关心引入哪个类,而只需要在tc-config.xml文件中定义希望集群的bean的名称。

  总结

  Spring Web Flow 给包括文章中看到的这种简单应用到有很多页面流转的大型企业应用,都提供了构建基于会话的有状态应用的有力手段。 Terracotta for Spring给你的Spring Web Flow提供了高可用性。

  简而言之, Terracotta for Spring提供了:

  给基于Spring Web Flow的应用包括普通Spring的应用提供容错性。

  不需要实现java.lang.Serializable,在多个节点间分布的应用中透明共享状态。

  在多个分布式节点进行资源调用。

  在多个分布式节点间保持了Pass-by-reference语义。

  声明式配置基本上不用修改现有代码(除了以前是无状态Spring应用,现在需要变成有状态)

  Spring Web Flow和Terracotta for Spring结合在一起,给你提供了构建有状态、基于会话、可扩展和高可用性web应用的新方式。

查看本文来源

    • 评论
    • 分享微博
    • 分享邮件