科技行者

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

知识库

知识库 安全导航

至顶网软件频道专家访谈: Roland Barcia 谈 Ajax 和 WebSphere

专家访谈: Roland Barcia 谈 Ajax 和 WebSphere

  • 扫一扫
    分享文章到微信

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

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

作者:ibm 来源:ibm 2007年10月7日

关键字: AJAX WEBSPHERE IBM 中间件

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

引言

请访问 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 应用程序的开发环境吗?

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

  • 面向 JavaScript 抽象和小部件库的浏览器工具包:
    • Dojo Toolkit
    • IBM JavaServer Faces Client
    • Google® Web Toolkit(使用 Java™ 语言构建 Ajax 应用程序)
  • 调试框架:
    • Eclipse Ajax Toolkit
    • Firebug® and coding tools
    • Firefox® Web Developer
    • Internet Explorer Developer Toolbar
  • 服务器端 Java 框架:
    • Direct Web Remoting (DWR)
    • JSON-RPC for Java
    • Ajax4jsf - Open Source Framework

另外,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 中人工任务组件的参考资料:

  • 用于实现 Web 服务的 SOA 编程模型,第 8 部分: 基于人工的 Web 服务
  • 使用 WebSphere Process Server 实现业务状态机和人工任务之间的双向交互
  • 开发使用 IBM WebSphere Portal 和 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 安全性的文章:

  • WebSphere Application Server V6 高级安全性加强,第 1 部分:安全性加强概述和方法
  • WebSphere Application Server V6 高级安全性加强,第 2 部分:高级安全性注意事项

除了这些“旧”的内容之外,我们必须认识到,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,请参阅下面的文章:

  • 对于 Version 6,使用 Service Integration Bus 作为 JMS 提供者:
    • 将消息驱动 bean 和 JMS 应用程序部署到服务集成总线中
    • IBM WebSphere 开发者技术期刊: 在服务集成总线中部署发布/订阅应用程序
  • 对于 Version 6,使用 WebSphere MQ 作为 JMS 提供者:
    • IBM WebSphere 开发者技术期刊: 让 WebSphere MQ 成为部署在 WebSphere Application Server 中的应用程序的 JMS 提供程序
  • 对于 Version 5:
    • JMS Topologies and Configurations with WebSphere Application Server and WebSphere Studio Version 5

如果您正在使用资源引用,请记住在 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=""。要么该属性不应该存在(根据我的习惯),要么它必须有一个值。

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

    如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

    重磅专题
    往期文章
    最新文章