专家访谈: Roland Barcia 谈 Ajax 和 WebSphere

WebSphere 咨询师 Roland Barcia 解答有关在 WebSphere® 中使用 Ajax 技术构建 Web 2.0 应用程序的问题。

Roland Barcia (barcia@us.ibm.com), 认证 IT 专家, IBM

Roland Barcia 是位于纽约/新泽西地区的IBM WebSphere 软件服务部的一位认证 IT 专家。他是 IBM WebSphere: Deployment and Advanced Configuration 的合著者之一。有关 Roland 的详细信息,请访问他的网站



2007 年 6 月 18 日

引言

请访问 Ajax 技术资源中心,这是有关 Ajax 编程模型信息的一站式中心,包括很多文档、教程、论坛、blog、wiki 和新闻。任何关于 Ajax 的新信息都能在这里找到。

WebSphere 咨询师 Roland Barcia 解答有关在 WebSphere 中使用 Ajax 技术构建 Web 2.0 应用程序的问题。他解答了有关从 Ajax 客户端调用 WebSphere 应用程序的问题,客户端包括 WebSphere Process Server、WebSphere Enterprise Service Bus 和 WebSphere Application Server。主题包括常用的数据传输格式(如 REST、JSON-RPC 和 SOAP)、工具(如 Eclipse Ajax Toolkit 和 Rational 工具)、或 Ajax 工具包(如 Dojo Toolkit 和 DWR)。他还讨论了如何将 Ajax 技术与 IBM 的 SOA 平台进行集成。

问:IBM 为支持 Ajax 服务器端组件框架做了哪些工作?

答:Web 2.0 对于 IBM® 来说非常重要。IBM 将 Web 2.0 作为面向服务的体系结构 (SOA) 中关键的部分,它是到 SOA 企业的接入点。对于服务器端,在未来的几个月内,IBM 即将发布几种技术,它们允许使用 Web 2.0 协议(如 REST 和 JSON)来调用服务。您可以在我们的 WebSphere 产品栈中使用该技术。包括下列产品,如 WebSphere Portal 和 WebSphere Business Integration 产品,以及 WebSphere Process Server 和 WebSphere Enterprise Server Bus。您还可将看到以其他编程语言(如 PHP)编写的 Web 2.0 服务器端组件。

IBM 在 Web 2.0 之上进行构建以满足企业级需求,如安全性,最终 Web 2.0 将会成为主流平台。安全性是基于 Ajax 的应用程序的一个重要问题。IBM 还通过 Open Ajax Alliance 与社区合作,帮助定义行业标准。

问:什么是最好的 Ajax 工具包?我们可以在 WebSphere Developer Studio Client 中使用 Ajax 吗?如果可以,应该怎样使用呢?

答:所谓“最好的”工具,这始终取决与您的具体需求。我可以告诉您我最喜欢的框架是什么,但我无法知道您需要的是什么。您应该问问自己下列问题:

  • 您需要提供异步调用抽象的 JavaScript 框架吗?
  • 您需要一组丰富的预构建小部件以及创建自己的小部件功能吗?
  • 您需要为以 XML 或 JSON 形式进入的 Ajax 请求处理封送的服务器端框架吗?
  • 您需要帮助调试 Ajax 应用程序的开发环境吗?

您可以从下面这些框架中选择。请记住,有些是开放源码的框架,您不得不从提供支持的社区那里获得这些框架的支持。

另外,IBM 将会发布前一个问题中所列举的那些 Web 2.0 功能。

大多数基于 Ajax 的框架都是基于 JavaScript 的,所以您可以在 WebSphere Developer Studio Client for iSeries 上使用基于 JavaScript 的框架。然而,无法使用 Eclipse Toolkit,因为它基于较新版本的 Eclipse。您可以考虑使用上面列出的任意一个浏览器调试工具。

问:可以从 WebSphere Process Server 的活动中以同步调用的方式调用外部 Web 应用程序吗?在业务流程的活动步骤中将这个 Web 应用程序显示给用户,通过完成这个 Web 应用程序步骤来完成这项活动,然后转到业务流程中的下一个步骤。如果是这样,那么如何实现这种操作?

答:我想,您是在问我们是否支持人工任务。答案是肯定的。您可以让 Web 应用程序页面自己进行刷新,以检查是否存在一项使用了人工任务管理器 API 的活动。具体的步骤与下面所示类似:

  1. 业务流程可以调用人工任务组件来创建一项活动。
  2. Web 页面可以使用人工任务 API 来访问队列中的活动。您可以在后台使用某种异步 Ajax 请求,以便不时地进行检查,以接近实时的方式发送通知。
  3. 然后,用户可以访问该活动,输入数据,并将该活动推进到下一个步骤(可能通过调用 Web 服务)。

这里提供了一些关于 WebSphere Process Server 中人工任务组件的参考资料:

问:您如何在 Rational Application Developer (RAD) V6.0 中设置系统属性?然而,我并不希望在 WebSphere Application Server 中定义系统属性(以下称为 Application Server)。

答:我不是很清楚您需要的是什么。您是希望在 Eclipse 工作台运行的时候为 JVM 添加系统属性吗?您可以在启动 RAD 时使用 -vmargs 输入命令参数。有关更多的信息,请参阅 The Eclipse runtime options

您是希望为正在测试的 J2SE 应用程序设置系统属性吗?对于您所启动的任何其他的 JVM(如客户端应用程序),IBM 启动程序(通过 Run 调用)允许您对各种类型的 Java 应用程序进行配置,并且通常具有一个 Environment 选项卡。

您是希望为 WebSphere Application Server V6 Test Server 设置系统属性吗?这必须通过 WebSphere 管理控制台来完成,因为 RAD 中 Application Server V6 的测试环境是完整的 WebSphere Application Server。

问:您可以推荐一种合适的策略,以便管理通过 Servlet 发出的基于 Ajax 的 XML 数据请求的安全性,其中应用程序开发为 Portlet。(稍后当 Portlet 2.0 规范和资源请求可用时,再来解决这个问题。)

答:首先,您应该确保您的 Servlet 使用了 J2EE 安全角色。这将仅允许经过身份验证的浏览器进入。对于 Ajax,安全性是一个比较棘手的问题。Ajax 是新旧并存的。对于任何 Web 应用程序,有许多“旧”的问题需要解决。请参阅下面的关于加强 WebSphere 安全性的文章:

除了这些“旧”的内容之外,我们必须认识到,Ajax 是一种新的、功能强大且复杂的技术,尽管基于旧思想进行构建,但在实际的使用过程中,还可能引入新的漏洞。正因为如此,它改变了某些事物的本质。例如,因为人们通过浏览器发送更多的 XML 请求,您可能会遇到更多的 XML 威胁。可以使用 SOA Appliance 作为一种解决方案,如 DataPower,它专门处理 XML 威胁。有关这个问题的更多信息,请参阅 评论专栏: Bill Hines:(XML) 威胁无处不在……

另外,客户端面临着插入到响应处理程序中的恶意 JavaScript 代码的危险。请确保您的浏览器仅执行来自受信任的服务器站点的 JavaScript。例如,Mozilla® 只允许执行经过签名的脚本。

对于 Web 2.0 站点,您需要考虑下列所有问题:

  • 使用 JavaScript 可以进行许多攻击(已出现过这样的情况)。
  • 在客户端保存状态可能产生危险,是否对其进行了保护?
  • 客户端的代码可能产生危险,我是否可以确定您系统的工作方式?浏览器中过多的业务逻辑可能是一个严重的危险,并公开业务过程。
  • 是否可以更容易地欺骗浏览器以运行恶意代码?
  • 浏览器中的 Javascript 甚至可能从企业网络内部 对公司进行攻击。
  • 对于服务器,可能还需要考虑其他一些问题:
    • 通过 Internet 公开许多细粒度服务将会增加攻击范围。
    • 对服务器的 SQL 和 XML 注入。

对于 Ajax 和 Web 2.0 的安全性问题,还有许多尚未可知的问题,只有随着时间和技术的成熟,我们才能够发现所有可能的威胁。有关更多的信息,请参阅 Ajax and security

问:Ajax 是不是破坏了 Model 2 编程,并将我们带回到像以前那种 Web 页面中包括非表示逻辑的情况?这是不是一种临时搭配,以尝试和模拟真正的桌面 GUI 应用程序功能?

答:答案是,这取决于实际情况。先回头看一下 Model 2,这是 MVC 模式的 J2EE 编程实现。下面的图 1 描述了 Model 2。

图 1. Model 2
图 1. Model 2

在 J2EE Model 2 体系结构中,Servlet 是 UI 控制器,负责获取输入数据,调用某些后端的业务逻辑,然后决定转发到哪一个 JSP。JSP 负责生成页面。然而,还存在应用程序控制器的概念,有时实现于会话外观层,它负责控制底层任务以进行调用,然后构建某种类型的响应。

类似地,可以考虑将这些应用程序控制器(或外观层)作为 Web 服务公开。通常,Web 服务框架包含某种前端 Servlet,它负责接收 SOAP 输入,将输入封送给某个后端服务,接收响应,并生成 XML 标记而不是 HTML 标记。

Ajax 使得我们可以直接从浏览器调用服务。如果您通过像 Struts 这样的模型-视图-控制器框架来调用这些服务,那么您最终将会得到如图 2 所示的 MVC 膨胀。

图 2. MVC 膨胀
图 2. MVC 膨胀

然而,在 Web 2.0 模型中,可以将一些控制器逻辑和呈现逻辑转移到客户端(请参见图 3)。

图 3. Web 2.0 模型
图 3. Web 2.0 模型

在这种情况下,您的模型视图框架,如 Struts 和 JSF,将负责初始的页面生成,使用传统的 Model 2 体系结构。不过,随后可以将一些 UI 控制器逻辑转移到客户端。

请记住,业务逻辑和安全数据应该在服务器上进行维护。Ajax 为您提供了更具可扩展性和无状态的中间层。然而,我认为只有处理了相关的安全性问题,我们才能在将来看到融合(请参见前面的安全性问题)。优化用于安全性的 SOA Appliance,像 Data Power,可能可以帮助更快地实现这个目标。

问:我正在安装 WebSphere Process Server,这是四个步骤的安装过程之一。我的 IBM WebSphere Integration Developer 已安装成功,但是在第 3 步中,即安装 WebSphere Application Server Network Deployment 和 WebSphere Process Server 时,我在日志中得到了这样的错误。我试图手动更新 wps_install.bat 文件,以便获得 WAS_SRC=%~1 和 WID_TARGET_DIR=%~2 的值,但是我所有的努力都失败了。Launchpad 在调用安装过程的第 3 步时失败了,并且日志文件中显示了下面的错误:

(Sep 16, 2006 9:06:11 AM), Install, com.ibm.wstools.CustomExec, err, Error when 
getting Resource Path: java.io.IOException: File does not exist: c:\software\
wpsinstall\disk5\external\WBI\extref.tmp

(Sep 16, 2006 9:06:11 AM), Install, com.ibm.wstools.CustomExec, err, Error when
changing permission of files: ServiceException: (error code = 399; message = 
"/wps_install.bat does not exist"; severity = 0)

(Sep 16, 2006 9:06:11 AM), Install, com.ibm.wstools.CustomExec, err, IO Error 
when Execute commands: java.io.IOException: CreateProcess: /wps_install.bat  
C:\WID\WebSphere error=2

答:碰到这样的问题,我会打开 PMR,请求 IBM Support 的帮助。您可以查看 Troubleshooting installations and updates to WebSphere Integration Developer。我曾在磁盘空间耗尽、在计算机上不具有正确的权限、或从网络安装目录进行安装时,碰到过类似的问题。通常,在 WebSphere Integration Developer 安装结束后,您可以运行 wps_install.bat。

问:我正在进行 JMS 点到点队列消息传递,得到了下面的错误:

javax.naming.NameNotFoundException: Context: blrkec32515d/nodes
/blrkec32515d/servers/server1, name: jms/QCF: First component in name 
QCF not found.  Root exception is
org.omg.CosNaming.NamingContextPackage.NotFound: IDL:omg.org
/CosNaming/NamingContext/NotFound:1.0
 at org.omg.CosNaming.NamingContextPackage.NotFoundHelper.read
 (NotFoundHelper.java:84)
 at com.ibm.WsnOptimizedNaming._NamingContextStub.resolve_complete_info
 (Unknown Source)
 at com.ibm.ws.naming.jndicos.CNContextImpl.cosResolve
 (CNContextImpl.java:3491)
 at com.ibm.ws.naming.jndicos.CNContextImpl.doLookup
 (CNContextImpl.java:1519)
 at com.ibm.ws.naming.jndicos.CNContextImpl.doLookup
 (CNContextImpl.java:1480)
 at com.ibm.ws.naming.jndicos.CNContextImpl.lookupExt
 (CNContextImpl.java:1187)
 at com.ibm.ws.naming.jndicos.CNContextImpl.lookup
 (CNContextImpl.java:1067)
 at com.ibm.ws.naming.util.WsnInitCtx.lookup(WsnInitCtx.java:132)
 at javax.naming.InitialContext.lookup(InitialContext.java:360)
 at PointToPoint.<init>(PointToPoint.java:41)
 at PointToPoint.main(PointToPoint.java:109)
 at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
 at sun.reflect.NativeMethodAccessorImpl.invoke
 (NativeMethodAccessorImpl.java:79)
 at sun.reflect.DelegatingMethodAccessorImpl.invoke
 (DelegatingMethodAccessorImpl.java:41)
 at java.lang.reflect.Method.invoke(Method.java:386)
 at com.ibm.websphere.client.applicationclient.launchClient.createContainer
 AndLaunchApp(launchClient.java:627)
at com.ibm.websphere.client.applicationclient.launchClient.main(launchClient.
java:422)
 at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
 at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.
 java:79)
 at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessor
 Impl.java:41)
 at java.lang.reflect.Method.invoke(Method.java:386)
 at com.ibm.ws.bootstrap.WSLauncher.main(WSLauncher.java:105)

答:WebSphere Application Server 支持许多不同的 JMS 提供者,包括内置的 Service Integration Bus 和 WebSphere MQ。从您的问题中,看不出您究竟使用的哪一个。有关如何在 WebSphere 中配置 JMS,请参阅下面的文章:

如果您正在使用资源引用,请记住在 JNDI 查找前面加上 java:comp/env 限定。

问:这是在 WebSphere Integration Developer v6.0.1 中自动生成的 .wsdl 文件中显示的错误:

  1. cvc-attribute.3: The Value "of attribute 'name' on element 'definitions' is not valid with respect to its ,'NcName'.
  2. cvc-datatype-valid.1.2.1: "is Not a valid value for 'NcName'.

下面是我的 .wsdl 文件:

<?xml version="1.0" encoding="UTF-8"?>

<definitions xmlns="http://schemas.xmlsoap.org/wsdl/"
xmlns:ns="http://QuoteBusinessIntegration/com/satyam/aupl/components/
humantask/AcceptQuoteHT" xmlns:ns0="http://QuoteBusinessIntegration/com/
satyam/aupl/comonent/interfaces/
BusinessRules" xmlns:plnk="http://schemas.xmlsoap.org/ws/2004/03/partner-link/"
xmlns:tns="http://www.QuoteBusinessIntegration.process/AutoQuoteCGBS67378
/AutoQuoteCGBSArtifacts"
xmlns:wsdl0="http://QuoteBusinessIntegration/com/satyam/aupl/component
/interfaces/CreditScoreBridge"
xmlns:wsdl1="http://QuoteBusinessIntegration/com/satyam/aupl/component
/interfaces/QuoteBridge"
xmlns:wsdl2="http://QuoteBusinessIntegration/com/satyam/aupl/component
/interfaces/InsuredInfoBridge"
xmlns:wsdl3="http://QuoteBusinessIntegration/com/satyam/aupl/process
/AutoQuoteCGBSInterface" xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
name="" targetNamespace="http://www.QuoteBusinessIntegration.process
/AutoQuoteCGBS67378/
AutoQuoteCGBSArtifacts">

  <plnk:partnerLinkType name="CreditScoreBridgePLT">

    <plnk:role name="CreditScoreBridgeRole">

      <plnk:portType name="wsdl0:CreditScoreBridge"/>

    </plnk:role>

  </plnk:partnerLinkType>

答:Definitions 语句包括了属性 name=""。要么该属性不应该存在(根据我的习惯),要么它必须有一个值。

致谢

作者感谢 Joseph Sharpe、Keys Botzum、Robert Peterson、Tom Kristek 和 Russell Butek 对撰写本文提供的帮助。

参考资料

条评论

developerWorks: 登录

标有星(*)号的字段是必填字段。


需要一个 IBM ID?
忘记 IBM ID?


忘记密码?
更改您的密码

单击提交则表示您同意developerWorks 的条款和条件。 查看条款和条件

 


这是您第一次登陆到 developerWorks,已经自动为您创建了您的概要文件。 选择您概要文件中可以公开的信息的信息(如姓名、国家/地区,以及公司),这些信息同时也会与您所发布的内容相关联。 您可以随时更新您的 IBM 账号。

所有提交的信息确保安全。

选择您的昵称



当您初次登录到 developerWorks 时,将会为您创建一份概要信息,您需要指定一个昵称。您的昵称将和您在 developerWorks 发布的内容显示在一起。

昵称长度在 3 至 31 个字符之间。 您的昵称在 developerWorks 社区中必须是唯一的,并且出于隐私保护的原因,不能是您的电子邮件地址。

标有星(*)号的字段是必填字段。

(昵称长度在 3 至 31 个字符之间)

单击提交则表示您同意developerWorks 的条款和条件。 查看条款和条件.

 


所有提交的信息确保安全。


static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=10
Zone=WebSphere, Open source, SOA and web services
ArticleID=231462
ArticleTitle=专家访谈: Roland Barcia 谈 Ajax 和 WebSphere
publish-date=06182007