主页 | 新闻 | 深度报道 | 技术文章 | 开源软件 | 资源站点 | 书讯 | 往日版面  | 网站地图
 Linux 日报 

  LinuxDaily.net  
Linux 日报
信箱 1: linuxdaily.net AT 163.com
信箱 2: linuxdaily.net AT gmail.com
2008年04月20日
星期日

技术文章
总第60期

北京: 中雨转阵雨
11℃~14℃
本期技术文章共2页, 这是第2页, 其它页: 1  
Java 理论与实践: 应用 fork-join 框架,第 2 部分

2008 年 4 月 15 日

Java™ 7 中的 java.util.concurrent 包的新增功能之一是一个用于 fork-join 风格的并行分解的库。在本系列的 第 1 部分 中,Brian Goetz 演示了 fork-join 如何为众多的算法提供一种自然的分解机制,以有效地利用硬件的并行性。在本文中,他将介绍 ParallelArray 类,这个类简化了内存中数据结构上的并行排序和搜索操作。

上一期 Java 理论与实践 中,我们研究了 fork-join 库,这个库将添加到 Java 7 的 java.util.concurrent 包中。fork-join 技术提供了一种表示 divide-and-conquer 并行算法的简单方式,这种方式能够在大量硬件上有效执行,无需修改代码。

随着处理器数量的增加,为了有效利用可用的硬件,我们需要识别并利用程序中更细粒度的并行性。最近几年中,选择粗粒度的任务边界(例如在 Web 应用程序中处理单一请求)和在线程池中执行任务,通常能够提供足够的并行性,实现可接受的硬件利用效率。但是如果要再进一步,就必须深入挖掘更多的并行性,以让硬件全速运转。一个成熟的并行领域就是大数据集中的排序和搜索。用 fork-join 可以很容易地表示这类问题,正如您在 上一期 中看到的那样。 但是由于这些问题非常普遍,所以该类库提供了一种更简单的方法 — ParallelArray

回顾:fork-join 分解

fork-join 将 divide-and-conquer 技术具体化;它接受一个问题并将其递归分解为子问题,直到子问题小到用顺序方法解决更有效。递归步骤包括将一个问题分解成两个或更多子问题,将子问题排队求解(分叉(fork)步骤),等待子问题的结果(合并(join) 步骤),然后合并结果。这类算法的一个示例是使用 fork-join 库进行合并排序,如清单 1 所示:

使用 CAS 在 Tomcat 中实现单点登录

2008 年 4 月 10 日

单点登录(Single Sign On , 简称 SSO )是目前比较流行的服务于企业业务整合的解决方案之一, SSO 使得在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统。CAS(Central Authentication Service)是一款不错的针对 Web 应用的单点登录框架,本文介绍了 CAS 的原理、协议、在 Tomcat 中的配置和使用,对于采用 CAS 实现轻量级单点登录解决方案的入门读者具有一定指导作用。

CAS 介绍

CAS 是 Yale 大学发起的一个开源项目,旨在为 Web 应用系统提供一种可靠的单点登录方法,CAS 在 2004 年 12 月正式成为 JA-SIG 的一个项目。CAS 具有以下特点:

  • 开源的企业级单点登录解决方案。
  • CAS Server 为需要独立部署的 Web 应用。
  • CAS Client 支持非常多的客户端(这里指单点登录系统中的各个 Web 应用),包括 Java, .Net, PHP, Perl, Apache, uPortal, Ruby 等。

CAS 原理和协议

从结构上看,CAS 包含两个部分: CAS Server 和 CAS Client。CAS Server 需要独立部署,主要负责对用户的认证工作;CAS Client 负责处理对客户端受保护资源的访问请求,需要登录时,重定向到 CAS Server。图1 是 CAS 最基本的协议过程:

基于服务的企业集成模式轻松入门,第 2 部分: 进一步介绍基本概念的演变

2008 年 4 月 15 日

本文是系列文章的第 2 部分,将接着介绍第 1 部分中没有讲到的内容。到目前为止,您已经学习了两个最早的集成模式——数据共享(socket 编程)和远程过程调用 (RPC),下面将继续学习一些基本概念。再学习两个更高级的模式:分布式对象和异步消息传递。了解语言独立性的概念、服务接口声明、服务的发布和发现的基本思想,以及企业服务总线 (ESB) 的基础知识。

引言

本系列文章的第 1 部分和第 2 部分主要探索企业集成模式的发展,介绍一些基本概念,并重点介绍基于面向服务的体系结构 (SOA) 的集成模式。第 1 部分介绍了两个早期模式:数据共享(socket 编程)和 RPC,探索了服务提供者和服务使用者、平台独立性和连接性的概念。

为改进 RPC 的功能,现在我们介绍以下两种方法:

  • 分布式对象,也称为对象请求代理(Object Request Broker,ORB):此方法侧重于代码重用和语言独立性。
  • 异步消息传递:此方法解决了应用程序之间的紧密耦合问题。

让我们首先了解一下分布式对象这一方法,因为它与 RPC 的关系更密切一些。目前,大多数应用服务器都基于 ORB 技术。

分布式对象:对象请求代理

分布式对象技术的实现有三个主要类型。其中之一就是语言独立性和平台独立性,即所谓的公共对象请求代理体系结构(Common Object Request Broker Architecture,CORBA)。其他技术则依赖于语言或者依赖于平台和语言。Java 远程方法调用 (RMI) 是依赖于语言技术的示例,而 Microsoft 分布式对象组件模型 (DCOM) 和 IBM 系统对象模型 (SOM) 是依赖于平台技术的示例。

现在我们将详细介绍 CORBA,因为它是最常见(独立于语言和平台)的技术,并且来自不同供应商且基于此技术的产品可以一起使用。例如,基于 ORB 的 IBM WebSphere Application Server 可以与许多其他供应商的应用服务器通信。

除引入面向对象的优点(如继承、多态性和封装)外,CORBA 还引入了大量的新功能。最重要的可能要数 ORB 这一概念,ORB 提取了用于封送输入和输出参数的代码和用于从客户端和服务器应用程序到独立软件组件通信的代码。另外,ORB 还提供了用于获取远程对象引用的设备,以便调用该远程对象上的方法。

基于服务的企业集成模式轻松入门,第 1 部分: 基本概念的演变

2008 年 4 月 15 日

本系列文章以便于理解和分步指导的方式解释基于服务的企业集成模式。在本系列文章的第 1 部分中,您将学习两种最早的集成模式——仅共享数据和远程过程调用 (RPC)——通过学习这两种模式可以帮助您理解服务提供者和服务使用者、平台独立性和连接性的概念。研究 RPC 可以帮助您熟悉两个应用程序共享功能所需的基本步骤。本文还将向您概括介绍松散耦合、代码重用、分层和组件化的概念。本系列的第 2 部分将继续讨论这些早期模式,而第 3 和第 4 部分将概括介绍基于面向服务的体系结构 (SOA) 的集成模式,其中还包括一些示例。

引言

使一个企业中的所有应用程序以集成方式运行以便提供统一而一致的数据和功能是一项非常艰难的任务。这涉及到各种应用程序,如自主构建的应用程序 (C 、Java™ 或 Java 2 Platform, Enterprise Edition [J2EE])、打包的应用程序(如 SAP CRM 应用程序)以及遗留应用程序(大型机 IBM CICS 或 IBM Information Management System [IMS™])。而且,这些应用程序可能分布在不同的地理位置,并可能运行于各种平台上。这可能需要集成企业之外的应用程序。

随着企业的发展,企业集成中涉及的复杂性也随着时间的推移而增加,并涉及了许多集成模式。因此,目前存在着大量的集成模式。这些集成模式各种各样,有的是基于文件在应用程序之间进行简单的数据传输,有的是完全基于 SOA 的集成模式。

本系列的第 1 部分和第 2 部分介绍这些模式的演变,目的是为了帮助您理解基于 SOA 的集成模式中涉及的所有基本概念和功能。涉及的一些概念和功能包括:

  • 服务的使用者和提供者
  • 松散耦合
  • 代码重用和分层
  • 语言独立性
  • 平台独立性
  • 服务接口的定义、发布和发现(即注册表概念)
  • 企业服务总线 (ESB) 从点对点集成发展,涉及连接性、封送处理和中介的概念
  • 粗粒度

集成模式发展的这些描述还重点强调了许多以前技术和技术概念大大促进了基于 SOA 的集成模式的发展。

利用 IBM Web 2.0 Feature Pack 创建 Ajax 风格的架构

2008 年 4 月 15 日

本文展示了如何借助 IBM WebSphere Application Server Feature Pack for Web 2.0 以 Ajax 风格的架构增强 Java™ 2 Platform, Enterprise Edition (J2EE) 应用程序。了解如何在不重写整个 Web 应用程序的情况下,将 Ajax 风格的架构与现有的应用程序结合起来。此外,您还会了解如何将 Web 2.0 Feature Pack 应用到面向 IBM WebSphere Application Server 的 J2EE 应用程序中。

“Plants by WebSphere” 应用程序是随 IBM WebSphere Application Server Feature Pack for Web 2.0 提供的诸多示例程序中的一个。此应用程序演示了一个典型的 J2EE 应用程序以及如何在不重写整个应用程序的前提下用 Ajax 风格的架构对其进行增强。此示例应用程序虚拟了一个在线植物商店,在该商店中,顾客可以订购和购买鲜花、树、植物和其他附件。图 1 展示了此 Web 应用程序的首页:


图 1:Plants by WebSphere Web 应用程序
Plants by WebSphere Web 应用程序

图 2 展示了此应用程序在添加 Ajax 风格特性之前的最初架构。该架构的设计初衷是为了代表一种典型的运行于 WebSphere Application Server 上的 J2EE 应用程序。在高层,此应用程序遵从的是一种 Model-View-Controller (MVC) 设计模式,这也是很多 Web 应用程序都不同程度采用的模式。浏览器访问该应用程序的 URL,并返回一个由 JSP 呈现的 HTML 页面。浏览器向该应用程序发出额外请求,servlet 用来控制由用户购买请求驱动的流程。Enterprise JavaBeans (EJB) 则用来服务于数据库上可用的模型数据。

在 Ajax 中进行 XML 处理,第 2 部分: 两种使用 Ajax 和 XSLT 的方法

2008 年 4 月 10 日

前面 第 1 部分 主要介绍一些基础内容,同时审视第一种方法 —— 遍历 DOM 树。

在本系列的第 2 部分,Mark Pruett 介绍了 Asynchronous JavaScript XML (Ajax) 天气面板的另外两种方法。这两种方法都使用可扩展样式表语言转换(XSLT) — 一种在服务器端,另一种在浏览器中。

在最后的 第 3 部分 中,将介绍实现天气面板的最后一种方法,利用 Web 公共服务 JavaScript Object Notation (JSON) 和动态脚本标记来实现。

本系列的 第 1 部分 提出了问题说明:建立便于插入任何 Web 页面的天气面板。天气面板采用 Ajax 技术实现,利用 United States National Weather Service (NWS) 提供的数据。NWS 数据以 XML 格式提供,每 15 分钟更新一次。

本系列文章分析了实现天气面板的四种不同方法。第一部分中介绍的一种办法是利用一种 Apache Web 服务器规则将 NWS XML 数据代理给浏览器。然后通过 JavaScript 代码从 DOM 提取需要的数据,转变为 HTML 格式再显示出来。

这一部分介绍第二和第三种方法。这两种办法有一点是共同的,即都使用 XSLT。

XSLT

在 Ajax 中进行 XML 处理,第 3 部分: 使用 JSON 并避免使用代理

2008 年 4 月 15 日

Ajax 风格的服务器调用不一定使用 XMLHttp 请求。本系列的最后一部分介绍天气面板的最后一种方法,利用 Web 公共服务 JavaScript Object Notation (JSON) 和动态脚本标记来实现。

前两部分介绍了三种方法创建可重用的天气面板。这些方法都采用了 Asynchronous JavaScript™ XML (Ajax) 技术,特别是 JavaScript XMLHttpRequest 对象来实现天气面板库。这些方法都使用了某种形式的 Web 代理将 XML 天气数据从 National Weather Service (NWS) XML 搬到我的服务器上,以避免 Ajax 的同一域问题。

本系列的 第 1 部分 详细讨论了同一域 问题,出于安全上的考虑将 XMLHttp 请求限制到提供原始 Web 页面的同一台服务器上。实际上,很多 Ajax 应用程序都需要超出一台服务器范围之外的其他数据。因此设计的时候必须确定访问 Web 服务器配置(比如创建 Apache ProxyPass 规则)还是创建专门的服务器脚本。

实践证明,还有另一种办法。它避免了同一域问题,程序员不需要处理上面所述的任务。

方法 4 需要的工具

详细讨论天气面板库的最后一种实现之前,首先介绍一下所需的工具:

  • Yahoo! Pipes
  • JSON
  • 动态脚本标记

Yahoo! Pipes

Yahoo! Pipes 是一种基于 Web 的工具,可以聚合能够通过 Web 访问的不同类型的数据,比如 RSS 提要。Yahoo! Pipes 使用图形化编辑器(如 图 1)编辑器创建,该编辑器可在标准 Web 浏览器中运行,如 Windows Internet Explorer 或 Firefox。

用 WSAS 和 Eclipse 简化 Web 服务的创建

2008 年 4 月 15 日

现在 Web 服务无处不在。如果需要为正在开发的新应用程序或是新特性创建 Web 服务,这是一个好机会。而在不久前,创建 Web 服务还是一项费力的工作。WSO2 意识到了这种情况并创建了一个 Eclipse 插件来帮助您更轻松地使用 Web 服务。本文将介绍 WSO2 Web Services Application Server (WSAS) Eclipse 插件以及它如何帮助开发 Web 服务。

WSO2 WSAS 是什么?

在深入介绍适用于 Eclipse 的 Web Services Application Server (WSAS) 插件之前,需要先讨论一下 WSAS 是什么。WSAS 是针对 Web 服务的 Java™ 应用服务器。它是在 Apache Software License 下发布的开源项目。WSAS 包含适用于需要用 Web 服务完成的所有任务(包括创建、部署、管理等)的工具。它提供了尤为有效的工具,使用这些工具可以在现代 Web 服务(包括您听说过的各种 WS-*)中启用期望的许多功能。WSAS 是一个相对新的产品,但是它构建在经过检验的开源技术(包括 Axis2 和 Apache Tomcat)之上。

您可以将 WSAS 与其他应用服务器结合使用,例如 Tomcat 或 IBM WebSphere,但是它也可以完全独立运行。在本文中,我们将以独立模式使用 WSAS,主要介绍作为 WSAS 的一部分的 Eclipse 插件,并查看如何用该 Eclipse 插件更轻松地创建 Web 服务及它如何与 WSAS 绑定在一起。

WSAS —— 及 Web 服务标准本身 —— 背后的一些开发人员在 WSO2 工作,WSO2 是一家基于 Apache 项目开发开源软件并提供支持、咨询和培训服务的公司。从 WSO2 的开发者门户 WSO2 Oxygen Tank 下载 WSAS(请参阅 参考资料)。