扫一扫
分享文章到微信
扫一扫
关注官方公众号
至顶头条
引言
|
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 吗?如果可以,应该怎样使用呢?
答:所谓“最好的”工具,这始终取决与您的具体需求。我可以告诉您我最喜欢的框架是什么,但我无法知道您需要的是什么。您应该问问自己下列问题:
您可以从下面这些框架中选择。请记住,有些是开放源码的框架,您不得不从提供支持的社区那里获得这些框架的支持。
另外,IBM 将会发布前一个问题中所列举的那些 Web 2.0 功能。
大多数基于 Ajax 的框架都是基于 JavaScript 的,所以您可以在 WebSphere Developer Studio Client for iSeries 上使用基于 JavaScript 的框架。然而,无法使用 Eclipse Toolkit,因为它基于较新版本的 Eclipse。您可以考虑使用上面列出的任意一个浏览器调试工具。
问:可以从 WebSphere Process Server 的活动中以同步调用的方式调用外部 Web 应用程序吗?在业务流程的活动步骤中将这个 Web 应用程序显示给用户,通过完成这个 Web 应用程序步骤来完成这项活动,然后转到业务流程中的下一个步骤。如果是这样,那么如何实现这种操作?
答:我想,您是在问我们是否支持人工任务。答案是肯定的。您可以让 Web 应用程序页面自己进行刷新,以检查是否存在一项使用了人工任务管理器 API 的活动。具体的步骤与下面所示类似:
这里提供了一些关于 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 站点,您需要考虑下列所有问题:
对于 Ajax 和 Web 2.0 的安全性问题,还有许多尚未可知的问题,只有随着时间和技术的成熟,我们才能够发现所有可能的威胁。有关更多的信息,请参阅 Ajax and security。
问:Ajax 是不是破坏了 Model 2 编程,并将我们带回到像以前那种 Web 页面中包括非表示逻辑的情况?这是不是一种临时搭配,以尝试和模拟真正的桌面 GUI 应用程序功能?
答:答案是,这取决于实际情况。先回头看一下 Model 2,这是 MVC 模式的 J2EE 编程实现。下面的图 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 膨胀
然而,在 Web 2.0 模型中,可以将一些控制器逻辑和呈现逻辑转移到客户端(请参见图 3)。
图 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 文件中显示的错误:
下面是我的 .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领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。
现场直击|2021世界人工智能大会
直击5G创新地带,就在2021MWC上海
5G已至 转型当时——服务提供商如何把握转型的绝佳时机
寻找自己的Flag
华为开发者大会2020(Cloud)- 科技行者