首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

用 Ajax 和 Apache Geronimo 创建异步消息框架-3

用 Ajax 和 Apache Geronimo 创建异步消息框架-3

客户机与服务器之间的消息流本例的 UI 由一个简单的支持 Ajax 的 JavaServer Page (JSP) 组件构成。JSP 将定义一个表单(参见清单 5),该表单用于使用先前讨论的 XMLHttpRequest 对象向服务器传递服务请求。
清单 5. 支持 Ajax 的 HTML 表单
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
<form name="ServiceRequestForm" method="POST" onSubmit="return false">
  <table>
     <tr>
       <th>
         Raw Ajax XML
       </th>
       <th>
         User Names
       </th>
     </tr>
      
     <tr>
       <td>
         <textarea name="result" id="result" cols="40" ROWS="8"></textarea>
       </td>
       <td>
         <textarea name="users" id="users" COLS="20" ROWS="8"></textarea>
       </td>
     </tr>
      
     <tr>
       <td colspan="2">
         <input name="submit" id="submit" type="submit" value="Get User Names"
                onclick="callService('services?ServiceName=UserAccountService&'
                                     + 'MethodName=getUserNames&ServiceParams=');">
         <input name="reset" id="reset" type="reset"
                onclick="resetFields();">
       </td>
     </tr>
  </table>
</form>




由表单发起的请求都是使用 callService JavaScript 函数发出的,该函数将使用 XMLHttpRequest 对象处理 HTTP 通信。当 servlet 收到消息后,该消息将被转换为异步消息并通过最终得到业务服务请求和基于 XML 的服务响应的 Java 组件框架来发送。
图 2 演示了 Ajax 系统的消息流程和方法调用流程。
图 2. 异步系统流程如图 2 所示,流程如下:
  • FrontController servlet 在 Web 层收到一条消息。
  • FrontController servlet 使用请求处理程序将每个 HTTP 请求转换为规范化的异步消息。
  • 每条消息连同异步回调侦听程序一起被发布到驻留在业务层的消息总线。
  • 消息总线将创建一个事件对象,并且将该事件对象连同业务服务的实例一起发送给事件通道。
  • 事件通道将执行调用业务服务和向订阅事件通道的所有侦听程序通知事件成功完成还是未能完成两项任务。
数据将以模型对象的形式在层与组件之间来回传递。模型对象可以根据需要(例如当 FrontController servlet 响应基于 XML 的 Ajax 客户机时)被序列化为 XML。
系统中的基本概念是使用回调对象,通过使用回调对象可以将给定操作是成功还是失败回传给负责处理失败或成功的组件。最终,这个失败或成功状态被发送给 Ajax 客户机并显示给用户。回调对象与异步通知之间的依赖性将导致出现一个在典型请求或响应 Web 应用程序中不太常见的顾虑:及时响应客户机请求的挑战,牢记用户注意广度和 HTTP 超时限制。为了打消这个顾虑,通常在业务层中使用超时来确保过程的阻塞不超出合理的时间长度。Java Timer 对象、子线程、begin-wait-abort 循环和消息队列超时都是可用于强制执行有效的超时限制的几种机制。本例中的系统将使用简单的 begin-wait-abort 循环。
整合异步消息传递系统与 Apache GeronimoGeronimo 可以帮助简化异步消息传递系统的部署操作。该系统被打包成 WAR 文件,然后再使用 Geronimo 平台附带的 Deployer 工具部署到 Geronimo 中。Deployer 工具可在位于 {GERONIMO_HOME}\bin\ 的 deployer.jar 中找到,其中 {GERONIMO_HOME} 是 Geronimo 的安装目录。
创建 WAR 文件运行清单 6 中所示的命令来编译系统类并创建 WAR 文件。
清单 6. 创建 WAR 文件
1
{YOUR_PROJECT_DIR}{MAVEN_HOME}\bin\mvn clean compile war:war




部署 WAR 文件运行清单 7 中的命令将 WAR 文件部署到 Geronimo 应用服务器上。
清单 7. 部署 .war 文件
1
2
{YOUR_PROJECT_DIR}{JAVA_HOME}\bin\java -jar {GERONIMO_HOME}\bin\deployer.jar deploy \
target/GeronimoAndAJAX-1.1.war




您应当会看到类似清单 8 所示的结果。
清单 8. WAR 文件部署结果
1
2
3
4
Username: system
Password: *******
    Deployed default/GeronimoAndAJAX-1.1/1169329928406/war @
    http://localhost:8080/GeronimoAndAJAX-1.1




运行异步消息传递系统通过把 Web 浏览器指向 http://localhost:8080/GeronimoAndAJAX-1.1,从异步消息传递系统的启用 Ajax 的启动页面向服务器发送一条消息。这样将显示类似图 3 所示的启动页面。
图 3. 异步系统启动页面当您看到启动页面时,单击 Submit Query 以发出异步服务调用。显示在浏览器窗口中的页面应当类似图 4 所示。
图 4. 异步系统结果页面注意,从服务器接收未经加工的 XML 的方法显示在左栏,而表示结果的经过格式处理的列表显示在右栏。
返回列表