IBM WebSphere Application Server 常见问题及解答


IBM WebSphere Application Server 常见问题及解答 IBM developerWorks China IBM WebSphere Application Server 常见问题及解答 (Draft Version 2007/4/12) developerWorks 中国站点:www.ibm.com/developerworks/cn/ 1 IBM WebSphere Application Server 常见问题及解答 IBM WebSphere Application Server 常见问题及解答 目录 说明................................................................................................................................... 4 WebSphere Application Server 简介............................................................................. 5 WebSphere Application Server 常见问题及解答 ........................................................... 8 产品功能 ..................................................................................................................................8 1. WAS V6.1 中的新增功能有哪些?.......................................................................8 2. WAS 中附带的开放源码项目有哪些?................................................................9 3. WAS 是否支持动态增加服务器,即在原业务系统不停机的情况下动态增加服 务器?.............................................................................................................................12 4. WAS 是否支持目录服务 LDAP?请列举所支持的 LDAP 服务器。 ...........13 5. WAS 可以实现 Load Balance 功能, 这与 WAS Network Deployment 的实 现有什么区别?.............................................................................................................13 6. WAS Network Deployment 支持运行混合版本的单元吗?............................14 规划 ........................................................................................................................................15 1. 运行我的应用程序需要多少应用服务器?.........................................................15 2. 在一个节点上放置多个应用服务器实例时应考虑哪些因素? .........................15 3. 我是不是应该使用 WAS 来管理我的 HTTP 服务器?什么时候应该安装 IBM HTTP Server?.......................................................................................................16 4. 我应该在 WAS 中使用刀片服务器吗?............................................................16 5. 在规划 WAS V6.1 与旧版本共存时,应注意哪些事项?...............................17 安装与配置.............................................................................................................................18 1. 在 AIX 平台上安装 WAS 后,发现管理控制台没有被安装,如何解决此问 题?.................................................................................................................................18 2. 什么是概要文件(profile)?..............................................................................18 3. 如何创建概要文件(profile)?..........................................................................19 4. WAS 安装过程中概要文件(profile)创建失败的一个常见问题 ...................20 5. 怎样卸载 WAS?..................................................................................................20 开发与部署.............................................................................................................................21 1. WAS 产品包中的 Application Server Toolkit 可以为您的开发和运行提供哪 些帮助?.........................................................................................................................21 2. 是否用 MDB(Message-Driven Bean)来侦听 MQ 队列?..........................22 3. 如何处理 JSP 的中文显示问题?......................................................................22 4. 在 WAS 中连接 MQ 有哪些方式?最佳方式是什么?..................................23 5. 我希望编写的 Web 应用能够支持尽可能多的客户端,有哪些注意事项? .24 developerWorks 中国站点:www.ibm.com/developerworks/cn/ 2 IBM WebSphere Application Server 常见问题及解答 6. 我是否可以在 WAS 上自己实现多线程编程和实现类加载器? ....................24 7. 在多个独立的 WebSphere 应用程序服务器环境中,一个服务器上的应用程 序该如何访问运行在其他服务器上的应用程序?.....................................................25 8. 对于 EJB 的部署代码,是在构建应用程序时生成好,还是在部署应用程序时 生成好?.........................................................................................................................25 9. 关于 Java EE 开发,有哪些最佳实践应该采纳? ..........................................26 集群 ........................................................................................................................................28 1. 规划集群方案时应考虑哪些因素?.....................................................................28 2. 在异构平台上创建 WAS V6.1 集群,避免使用绝对路径。...........................28 3. 在设计和开发运行于 WAS 集群环境的应用程序时需要考虑哪些方面? ....29 4. 在集群环境中,我应该使用数据库持久化的方式还是使用内存到内存复制的方 式来进行会话故障转移?.............................................................................................29 性能 ........................................................................................................................................31 1. WAS 的重要优化参数有哪些?..........................................................................31 2. 性能调优的基本步骤是怎样的?.........................................................................32 3. 如何合理的使用缓存机制?.................................................................................33 4. WAS 性能差的几种表现和解决方法?..............................................................34 5. 我应该怎样去判断应用程序服务器的性能是否满足要求,都有哪些指标? .35 6. 系统中产生大对象对性能的影响怎样?.............................................................36 7. 如何解决内存泄漏问题?.....................................................................................36 8. 如何解决系统宕机问题?.....................................................................................37 9. WAS 运行在什么平台上性能最好?是Intel、UNIX、pSeries/AIX、Sun/Solaris, 还是 zSeries/zOS? ....................................................................................................37 安全 ........................................................................................................................................38 1. 我希望通过启用 WAS 全局安全性保护系统管理,但是我的应用程序本身并 没有应用 J2EE 安全。我能够做些什么呢? ...........................................................38 2. 当在 WAS 中实现自定义用户注册表的时候,都需要考虑哪些问题? ........38 3. 在非 admin 用户(Windows 平台)或非 root 用户(Unix 平台)的环境中, 如何为 WAS 设置安全特性?....................................................................................39 4. 共享一个 WAS cell 的 J2EE 应用程序需要注意哪些安全方面的问题?....39 5. 在使用基于表单登录的 WAS 应用程序中,为什么必须使用单点登录? ....39 迁移 ........................................................................................................................................41 1. 我是否可以将应用程序从 JBOSS 迁移到 WebSphere Application Server Community Edition? ...................................................................................................41 2. 我是否应该迁移到“x”版本的 WAS? .................................................................41 3. 我应该从 32 位 WAS 迁移到 64 位 WAS 吗? ..........................................42 故障诊断 ................................................................................................................................43 1. 应用服务器宕机后,为了方便分析问题,需要收集哪些日志? .....................43 2. 如何打开详细垃圾回收的开关?.........................................................................43 其他 ........................................................................................................................................44 1. IBM 的 HTTP Server 和 Apache 有什么关系? ...........................................44 推荐参考资源 .................................................................................................................. 45 developerWorks 中国站点:www.ibm.com/developerworks/cn/ 3 IBM WebSphere Application Server 常见问题及解答 说明 《IBM WebSphere Application Server 常见问题及解答》是一本关于 IBM WebSphere Application Server 产品家族的问题集锦,其中收集了客户在使用此产品时遇到的一些常见 问题。这本问题解答可以被看作是对产品使用手册以及 WebSphere Application Server 在 线信息中心的补充。 在编写本问题集锦时,WebSphere Application Server 的版本是 V6.1。除特殊说明,所有 问题及解答的场景将基于此版本。本文的后续部分简称 WebSphere Application Server 为 WAS。 如果您想获取最新内容以及查看这本问题集锦的在线版,请访问 developerWorks 中国站 点: http://www.ibm.com/developerworks/cn/websphere/zones/was/wasfaqs.html developerWorks 中国站点:www.ibm.com/developerworks/cn/ 4 IBM WebSphere Application Server 常见问题及解答 WebSphere Application Server 简介 IBM WebSphere Application Server,即 IBM 的 WebSphere 应用服务器,是 Java Platform, Enterprise Edition(Java EE)和 Web 服务应用程序平台,是 IBM WebSphere 软件平台 的基础。WebSphere Application Server 交付了安全、可伸缩、具有弹性的应用程序基础 架构,帮助构建、运行、集成和管理动态、随需应变的业务应用程序。这些基础架构是实现 面向服务体系结构(Services Oriented Application,SOA)所需要的。 不同的业务应用场景要求不同级别的应用服务器功能,WebSphere Application Server V6 提供了几种不同的产品包。每个产品包针对不同的解决方案和需求。业务增长时,您可以根 据迁移指导升级到 WAS 产品家族中支持更高级别需求的产品包。 按照用户需求导向、产品能力导向增强,WAS 家族包括以下产品包(见图 1): z WebSphere Application Server Community Edition V1 z WebSphere Application Server - Express V6  z WebSphere Application Server V6.1 z WebSphere Application Server Network Deployment V6.1  z WebSphere Application Server for zOS V6.1 z WebSphere Extended Deployment V6 图 1 WebSphere Application Server 家族的产品包 z WebSphere Application Server Community Edition V1 WebSphere Application Server Community Edition 简称 WAS CE,是一个轻量级的 J2EE developerWorks 中国站点:www.ibm.com/developerworks/cn/ 5 IBM WebSphere Application Server 常见问题及解答 应用程序服务器,它建立在 Apache 软件基金会的开放源代码应用程序服务器项目 Apache Geronimo 的基础上。WAS CE 旨在帮助您加速开发和部署工作、利用来自开放源代码社 区的最新技术、为构建 Java 应用程序提供易于访问和灵活的基础。WAS CE 适用于中小 型企业,可以免费下载和使用,并可获得 IBM 世界级的技术支持。 z WebSphere Application Server - Express V6 WebSphere Application Server 的 Express 版适合迅速简便的应用程序开发。它提供完整 的 J2EE 1.4 支持。Express 版适合台式机开发者的基本编程和运行时需要,其运行时环 境针对基于标准的 Web 编程和基于组件的编程以及 Web Service。此产品的管理模型是 单服务器环境,没有集群,也没有多服务器实例的集中式管理。与家族中其他软件包不同的 是,Express 版包括 Rational Web Developer 应用程序开发工具。 Rational Web Developer 是 WebSphere Application Server V5 中 WebSphere Studio Site Developer 的增强版本。 z WebSphere Application Server V6.1 (基本版) 这是 WAS 的基本版,与 Express 版本在功能上很接近,但其提供的软件包的版本和许可 证不同。WebSphere Application Server 的基本版定位于中型企业或大型企业中的某个部 门。 WebSphere Application Server 软件包提供了 Application Server Toolkit 和 Rational Application Developer 产品的试用版本。Application Server Toolkit 包括了一组开发工具 集,支持 J2EE 1.4 应用程序的开发、装配和部署,支持 Java 5 开发。Rational Application Developer 是 WebSphere Studio Application Developer V5 的增强版本。 z WebSphere Application Server Network Deployment V6.1 WebSphere Application Server Network Deployment 扩展了 WebSphere Application Server 的基本版,提供集群、高速缓存、故障转移和工作负载均衡等功能。这些功能适合 大中型企业。 z WebSphere Application Server for zOS V6.1 WebSphere Application Server for zOS V6.1 包含了 WebSphere Application Server Network Deployment V6.1 的所有功能,并针对在 IBM System z 服务器上运行进行了优 化,同时利用了 IBM z/OS 的服务质量优势。 z WebSphere Extended Deployment V6 WebSphere Extended Deployment 简称 WebSphere XD,是一个用来提供 J2EE 应用程 序虚拟化的平台。它并不是应用服务器,它在应用服务器之上运行,用来将应用服务器聚合 成一个网格或虚拟化环境。另外,WebSphere XD 还在很大程度上对应用服务器所提供的 服务质量进行了扩充,用于最大限度地提高其可伸缩性、可管理性、灵活性和性能。 小提示: WAS 的 Express 版本基本上包含了 WAS 基本版的全部功能,这样中小型企业能够基于 WebSphere Application Server Express 版开发 J2EE 的完整应用。它和基本版之间的主要 区别在于许可证方面的限制,Express 版最多只能支持 2 个 CPU 的硬件服务器,而 developerWorks 中国站点:www.ibm.com/developerworks/cn/ 6 IBM WebSphere Application Server 常见问题及解答 WebSphere Application Server 基本版却没有 CPU 方面的限制。另外,WebSphere Application Server Network Deployment 包含了 WebSphere Application Server Express 版 和基本版的所有功能,并且还通过 Deployment Manager 进程提供多机器托管和集中式管 理。 有关 WAS 产品家族的更多资源,请访问 developerWorks 中国站点的“WebSphere Application Server 新手入门”专栏: http://www.ibm.com/developerworks/cn/websphere/zones/was/newto/ 有关 WAS CE 管理、开发、部署、迁移等更多资源,请访问 developerWorks 中国站点 的“WebSphere Application Server Community Edition 专栏”: http://www.ibm.com/developerworks/cn/websphere/zones/was/wasce.html 下载 WebSphere Application Server Community Edition: http://www.ibm.com/developerworks/cn/downloads/ws/wasce/ 有关 WebSphere Application Server Express 的更多资源,请访问 developerWorks 中国 站点的“IBM 易捷(Express)软件技术资源中心”: http://www.ibm.com/developerworks/cn/express/ developerWorks 中国站点:www.ibm.com/developerworks/cn/ 7 IBM WebSphere Application Server 常见问题及解答 WebSphere Application Server 常见问 题及解答 产品功能 1. WAS V6.1 中的新增功能有哪些? 答: WebSphere Application Server V6.1 进一步扩展了 WebSphere Application Server V6.0 中提供的功能,在多个关键领域增加了许多旨在提高可用性的功能: z 系统管理: „ 控制台已重新设计,导航更加方便,并且添加了许多指导任务和快速路径对话框, 可以更加快捷地配置和管理通用操作。 „ 在管理控制台(现在使用 Portlet 实现)和 wsadmin 脚本语言中,都有许多管理 方面的改进。 „ 还可以使用命令帮助,该帮助详细解释了 wsadmin 命令。这使得创建管理脚本比 以前任何时候都更加方便。 z 安全性: „ 缺省情况下,现在使用基于文件的注册中心启用安全性。此外,还可以将多个独立 的注册中心映射为单个联合注册中心,称为 Virtual Member Manager。可以使用 这些注册中心替换基于文件的注册中心或者将其添加到基于文件的注册中心。 „ 密钥管理现在已集成到 WebSphere Application Server 管理(控制台和 wsadmin)中并与其关联。DummyKeyRing 不再随产品一起提供,而是在创建概 要期间生成唯一密钥(即使不启用安全性也是如此)。 „ 基于实例的管理可用于计算单元、节点、服务器和应用程序,从而支持将所有这些 范围的命令行管理限制于某个特定角色或组(在控制台中还没有实现基于实例的管 理)。 „ 对于需要 Windows 单点登录(SSO)解决方案的情况,现在有基于 SPENGO 的 TAI(Trust Association Interceptor),它允许基于 Windows 的 Web 客户端使用 Windows 登录,当其访问 WebSphere Application Server 中运行的应用程序时 无需再次登录。 z Portlet 容器: „ 除了可以将 Portlet 用于管理控制台实现之外,JSR-168 兼容的 Portlet 容器现 在已是 WebSphere Application Server V6.1 的一部分。 „ 不仅 Portlet 是受支持的编程选项,会话启动协议(Session Initiation Protocol, SIP)Servlet 也同样受支持——此外还有熟悉的 HTTP Servlet。所有这三个 API 都已在聚合的容器中实现,从而允许应用程序中的这些 API 之间共享应用程序状 态。 „ Java™ 2 Standard Edition 5(J2SE 5 或 JDK 5)支持对编程模型的另一项重要 developerWorks 中国站点:www.ibm.com/developerworks/cn/ 8 IBM WebSphere Application Server 常见问题及解答 增强,它不仅提供了附加的 Java 语言 API(如 Generic 、Annotation、 Enumeration 和 AutoBoxing),而且大大提高了 J2SE 5 上的 WebSphere Application Server 运行时实现的性能。 „ 还增加了许多 Web 服务增强功能。 z Application Server Toolkit „ Application Server Toolkit(AST)为创建面向 WebSphere Application Server V6.1 的新应用程序提供了基本的支持。其中包括用于创建新的 Web 应用程序、Web 服务、Portlet、EJB 组件的各种向导和工具,以及基于注释的编程支持、新的管 理工具、用于编辑 WebSphere 特定绑定和扩展的工具,等等。 „ AST 还包括了 J2EE 透视图和 Web 透视图、Eclipse 3.1 和 Eclipse Web Tools Platform(WTP)Version 1.0。它本身是一个完整的 J2EE 开发环境,因此您可 以使用它构造、调试并直接将新的应用程序部署到 WebSphere Application Server V6.1。 有关 WAS 6.1 新特性的更多资源,请参阅 developerWorks 中国站点的文章: z 《WebSphere Application Server V6.1:Version 6.1 中的新特性》 „ http://www.ibm.com/developerworks/cn/websphere/library/techarticles/0606_pet ersonr/0606_petersonr.html z 《WebSphere Application Server V6.1:安全新功能》 „ http://www.ibm.com/developerworks/cn/websphere/library/techarticles/0606_bot zum/0606_botzum.html z 《WebSphere Application Server V6.1:Web 服务方面的新特性》 „ http://www.ibm.com/developerworks/cn/websphere/library/techarticles/0608_cha ndran/0608_chandran.html 2. WAS 中附带的开放源码项目有哪些? 答: WAS 6.1 中附带有以下的开放源码项目: z XDoclet XDoclet 是一个开放源代码项目,它简化了自动的部署描述符的生成。XDoclet 不以独立文 件的方式维护配置信息,而是允许使用特殊的 Javadoc 标签在 Java 源代码中嵌入配置信 息。然后,它使用额外的元数据来生成类似部署描述符和源代码的相关文件。这个概念被命 名为面向属性编程(attribute-oriented programming)。使用 XDoclet,可以将配置信息与 源代码保存在一起,这样需要跟踪的事情就都在一个地方了。 XDoclet 实际上不只是擅长生成配置文件。它最初的设计目标是用于 EJB,除了实际的配 置文件之外,对于每个 bean,EJB 还需要多个样板文件。XDoclet 可以根据基本的 bean 源代码(受特殊的 Javadoc 标签控制)替 EJB 生成这些样板文件。随着 XDoclet 已经 扩展成可以处理许多 EJB 之外的其他应用,这个代码生成功能也得到了扩展。在需要样板 代码的地方,它是极为有用的工具,可以帮助源代码树消除那些对应用程序的操作毫无用处 developerWorks 中国站点:www.ibm.com/developerworks/cn/ 9 IBM WebSphere Application Server 常见问题及解答 的混乱。 目前 WAS V6.1 中所支持的 XDoclet 的版本包括 V1.2.1, V1.2.2, V1.2.3,XDoclet 可以 为 web(web.xml)、ejb、struts(struts-config.xml)、webwork、hibernate(mapping file)、 jdo、jmx 等等生成描述文件、源码等。此外,XDoclet 附带了使您能够创建 web.xml 文 件、ejb-jar.xml 文件和许多其它文件的 Ant 任务,可以完全通过 Ant 来完成任务。 更多关于XDoclet 的信息,请访问:http://xdoclet.sourceforge.net/xdoclet/。 z Axis Apache Axis 是 Apache SOAP 实施的第三代,其最初起源于 IBM 的“SOAP4J”,属于 最早的一批用于构造基于 SOAP 应用的 Framework。 它使得 SOAP 引擎更灵活、更容 易配置,借助于 W3C 开放式源代码,它还能够同时处理 SOAP 和将要实施的 XML 协议 规范。Axis 基于 JSR 101 Java(TM)API for XML based RPC(也称为 JAX-RPC)。JSR 101 向任何基于 XML 的 RPC 机制(包括 SOAP)提供单个接口。 IBM 为 Apache Axis 项目提供了资源和代码,并在 WebSphere Application Server 和 Rational Application Developer 中以运行时的方式为 Axis 提供环境支持。您可以在 WebSphere Application Server 中作为一个客户端或服务器运行 Axis,但是 IBM 不支持 Axis 成为生产环境,也不提供对 Axis 的支持和修改。在生产环境中,请使用 WebSphere SOAP Engine,IBM 对此提供 7*24 的完全产品支持。 有关 Apache Axis 的更多信息,请参阅: „ http://xml.apache.org/axis „ http://ws.apache.org/axis z XML WAS 使用的 XML 包的位置:[WASInstallDir]/java/jre/lib/xml.jar xalan:Version XSLT4J Java 2.7.4 xerces:Version XML4J 4.4.5 XML Serializer Java 2.7.4 xmlcommons: IBM JAXP 1.3.5 z Apache Struts Struts 是一个开放式源代码框架,用于构建使用“模型-视图-控制器”(MVC)体系结构 的 Web 应用程序。Struts 框架具有控制器组件并且结合了其他技术以提供模型和视图, 它把 Servlet、JSP、自定义标签和信息资源(message resources)整合到一个统一的框 架中,开发人员利用其进行开发时不用再自己编码实现全套 MVC 模式。Struts 为 Web 应 用程序提供了控制层,这会减少构造时间并帮助维护成本。目前 WAS V6.1 中所支持的 Apache Structs 的版本是 1.2.4。 有关 Apache Struts 的更多信息,请参阅 http://struts.apache.org/。 z Apache Commons Logging developerWorks 中国站点:www.ibm.com/developerworks/cn/ 10 IBM WebSphere Application Server 常见问题及解答 Apache Jakarta Commons Logging 为多个日志记录系统提供了一个简单的日志记录接口 和多个瘦包装器。日志记录接口使应用程序日志记录简单化并且与应用程序使用的日志记录 系统无关。您无须更改应用程序日志记录代码就可以更改已部署应用程序的日志记录实现。 但是,由于日志记录记录这种简单性,将使得应用程序无法利用日志记录系统的所有功能。 WebSphere Application Server V6.1 通过为 WebSphere Application Server 日志记录工 具提供一个记录器和瘦包装器来支持 Jakarta Commons Logging。记录器可以处理 Java 日志记录(JSR-47)和公共基本事件日志记录对象。日志记录对象是一个用来保存日志记 录条目信息的对象。Jakarta Commons Logging 的 WebSphere Application Server 支持不 会更改由 Jakarta Commons Logging 定义的接口。目前 WAS V6.1 中所支持的 Apache Commons Logging 的版本是 1.0.3。 最佳实践: Jakarta Commons Logging 的缺省配置存储在 commons-logging.properties 文件中。要指定在应用程序中与 Jakarta Commons Logging 配合使用的工厂类,请提供位 于 META-INF/services 目录中的文件 org.apache.commons.logging.LogFactory,该文件 的第一行包含工厂类的名称。就像 JDK 1.3 及以上版本中定义的那样,这是 JAR 文件服 务提供程序的配置机制。 要更好地理解 Jakarta Commons Logging,请参阅 http://jakarta.apache.org/commons/ 以 及 Java 记录的规范和公共基本事件的规范。 要了解如何在 WAS 6.1 中配置应用程序以使用 Jakarta Commons Logging,请参阅: http://publib.boulder.ibm.com/infocenter/wasinfo/v6r1/index.jsp?topic=/org.eclipse.jst.ws.a xis.ui.doc.user/tasks/tsklwsdla.html z Apache Ant Apache Ant 是一个基于 Java 的开放式源代码构建工具。Ant 现在几乎已经是任何 IDE 都集成的编译工具了。为了编译一大堆 java 源代码文件,需要一次次的在命令行敲重复的 命令,Ant 可以让您编写命令脚本,然后让 Ant 自动完成复杂的编译工作,类似于 Makefile, 但 Ant 脚本是标准的 XML 格式,更容易编写和阅读。事实上,巧妙地使用 Ant,您可以 让 Ant 自动完成编译,测试,输出文档,生成 Release 版本等一系列任务,使得整个项 目流程自动化。 由于 Ant 是基于 java 编写的,因此具有很好的跨平台性。它非常适合构建 Java 应用, 同时也能被很好地用来构建其他的任务。其中一个重要的特性是您可以使用 Java 创建新 的 Ant 任务来扩展产品的构建能力。目前 WAS V6.1 中所支持的 Apache Ant 的版本是 1.6.5。 有关Apache Ant 的更多信息,请参阅 http://ant.apache.org。 z Apache Derby/Cloudscape Apache Derby 是一种高质量的、纯 Java 的嵌入式关系数据库引擎,该项目是从 IBM 捐 献给 Apache Software Foundation [ASF] 的一个基于 Java 的 Cloudscape 关系数据库 发展而来的。IBM Cloudscape 是开放源代码 Apache Derby 关系数据库的商业版本,以 developerWorks 中国站点:www.ibm.com/developerworks/cn/ 11 IBM WebSphere Application Server 常见问题及解答 Derby 代码为基础。 Cloudscape 是一种基于 Java 的、具有全面事务支持能力的关系数据库技术。它是一种纯 嵌入式数据库,基于文件系统,具有高度的可移植性,可以用在应用程序中,也可以作为更 传统的客户机-服务器应用程序的数据库。它体积小,而且不需要数据库管理员;您只需编 写应用程序。在需要时直接调用数据库,Cloudscape 就可以为您服务。 WebSphere Application Server V6.1.x 要求运行的 Cloudscape 的版本至少为 V10.1.x。 (请注意,Cloudscape V10.1.x 包含 Derby 代码库)在 Application Server V6.1.x 升级 期间,迁移工具会自动升级由一些内部组件(例如,UDDI 注册中心)通过嵌入式框架访问 的数据库实例。该工具还会尝试升级应用程序通过嵌入式框架访问的 Cloudscape 实例。 必须验证这些后端数据库的迁移结果。 注:请勿将 Cloudscape V10.1.x 用作生产数据库。请仅将它用于开发和测试目的。 有关 Apache Derby 的更多信息,请参阅: „ http://db.apache.org/derby „ http://incubator.apache.org/projects/derby.html 此外在 WebSphere Application Server Toolkit 中用到的其它开源项目: z JUnit JUnit 是用于 Java 的开放式源代码单元测试框架。Junit 测试是程序员测试,即所谓白盒 测试,因为程序员知道被测试的软件如何(How)完成功能和完成什么样(What)的功能。 Junit 是一套框架,继承 TestCase 类,就可以用 Junit 进行自动测试了。在 WebSphere Application Server Toolkit 中可以使用 JUnit 测试框架来编写并运行测试。目前 WAS V6.1 中所支持的 JUnit 的版本是 3.8.1。 有关 JUnit 的更多资源,请参阅 http://www.junit.org。 下载 JUnit: http://download.eclipse.org/eclipse/downloads/。 3. WAS 是否支持动态增加服务器,即在原业务系统不停机 的情况下动态增加服务器? 答: IBM WebSphere Application Server 支持应用服务器的动态增加或去除,并且可以根据需要 通过自动复制应用程序到新增群集成员来响应增长的企业应用程序的使用。这让您可以在群 集上部署应用程序而不是在单个节点上部署,且无需考虑工作量。 WebSphere Application Server 能够在不中断系统运行的情况下,修改系统配置,增强了系 统的可管理性和灵活性。例如,管理员可以添加或除去群集成员来处理客户机负载的变化, 更改服务器属性并将更改自动复制到其群集成员,暂时停止服务器进行维护等等。 developerWorks 中国站点:www.ibm.com/developerworks/cn/ 12 IBM WebSphere Application Server 常见问题及解答 4. WAS 是否支持目录服务 LDAP?请列举所支持的 LDAP 服务器。 答: IBM WebSphere Application Server 完全支持 LDAP,并内置 IBM Directory Server(LDAP 服务器),同时可以兼容市场上其它的 LDAP 服务器,包括: z Sun ONE Directory Server 5.1 / 5.2 z Lotus Domino Enterprise Server 6.0.3 / 6.5.1 z Windows Active Directory 2000 / 2003 z Novell eDirectory 8.7.3 z IBM Directory Server 5.1 / 5.2 z z/OS Security Server LDAP Server 1.4 / 1.5 / 1.6 在应用开发时,WebSphere 允许应用程序通过 JNDI 访问 LDAP 服务器的目录数据。 有关 LDAP 设计和实现方面的更多资源,请参阅 IBM 红皮书《Understanding LDAP - Design and Implementation》: http://www.redbooks.ibm.com/Redbooks.nsf/RedbookAbstracts/sg244986.html?OpenDoc ument 5. WAS 可以实现Load Balance 功能, 这与 WAS Network Deployment 的实现有什么区别? 答: WAS 的负载均衡功能(Load Balance)和 WAS 的部署管理器(Deployment Manager), 这两个概念常常被初学者混淆。其实要区分它们,有一个很简单的方法,即 Load Balance 是针对运行时的;Deployment Manager 是针对 WAS 环境管理的,在运行时没有太大用 处。 详细描述如下: 1. Deployment Manager(DM)对 WAS 提供集中式的管理,这在复杂环境(例如,多台 服务器、异构的平台)中尤其有用。要在上述复杂的环境中创建和管理可以用来做 Load Balance 的 WAS 集群,非 Deployment Manager(DM)莫属。此外还有类似参数配置、 应用发布等工作,都是靠 DM 来进行。但是当环境配置的工作完成,WAS 投入运行时, DM 的任务就光荣地暂告一个段落。在运行时,DM 是否启动都不重要,只有当您需要更 改某些配置或发布新的应用是,DM 才需要启动起来。 developerWorks 中国站点:www.ibm.com/developerworks/cn/ 13 IBM WebSphere Application Server 常见问题及解答 2. Load Balance 是 WAS 在运行时非常重要的一个功能。在 WAS 的集群前面,通常都 有一个负载均衡器(通常是 IBM HTTP Server + Plugin,也可能是其它软件或者硬件的负 载均衡器),有这个负载均衡器来决定把请求分发给哪个 WAS 集群成员。WAS 集群成员 之间可以实现各种数据的复制/共享,包括:session, 有状态 session bean,dynamic cache replication。 有关 WAS Network Deployment 高可用性的更多资源,请参阅 IBM 红皮书《WebSphere Application Server Network Deployment V6: High Availability Solutions》: http://www.redbooks.ibm.com/abstracts/sg246688.html?Open 6. WAS Network Deployment 支持运行混合版本的单元 吗? 答: 是的,WebSphere Application Server Network Deployment(和 WebSphere Extended Deployment)支持混合版本单元,但是这被认为是一种临时性的方案,意味着仅使用几周 或几个月。这种适应能力使得您可以轻松地从一个版本迁移到另一个版本,但是这并不是一 个长期的解决方案。 建议是不要长期运行混合版本单元,因为运行两个(或更多)不同版本的时间越长,碰到问 题的可能性就越大。当从 WebSphere Application Server 的一个版本迁移到另一个版本时, 建议将新版本与当前已经安装的版本安装到同一台计算机上(这称为共存),在相同的硬件 中运行两个单元(一个是旧的版本,一个是新的版本),然后在迁移过程中调整每个单元中 的 WebSphere Application Server 实例,例如,减去一个 WebSphere Application Server V5.x 实例,添加一个 WebSphere Application Server V6.x 实例。 对于 Version 6.1 来说有点特殊,它具有一种“缺省安全”的新的安全基础结构,并且包括 了证书的生成(使用主机名)。如果您需要将单元迁移到 Version 6.1,那么迁移的单元在缺 省情况下是不安全的,除非您已经实现了旧版本 WAS 环境下的安全操作。 有关 WAS Network Deployment 高可用性的更多资源,请参阅 IBM 红皮书《WebSphere Application Server Network Deployment V6: High Availability Solutions》: http://www.redbooks.ibm.com/abstracts/sg246688.html?Open developerWorks 中国站点:www.ibm.com/developerworks/cn/ 14 IBM WebSphere Application Server 常见问题及解答 规划 1. 运行我的应用程序需要多少应用服务器? 答: 通常您可以增加应用服务器的克隆来改善应用程序的性能。一般情况下,您应调整一个应用 服务器的实例来观察吞吐量和性能,在添加每个克隆时,对其进行测试。从而确定为环境提 供最佳吞吐量和性能所需的克隆数。通常,在 CPU 利用率低于 75% 时,可以通过另添 加克隆来提高吞吐量。 有关此问题的更详细的解释,请参阅 developerWorks 中国站点的文章《欲言又止的 WebSphere Application Server 的相关问题》 http://www.ibm.com/developerworks/cn/websphere/techjournal/0506_col_alcott/0506_col _alcott.html 2. 在一个节点上放置多个应用服务器实例时应考虑哪些因 素? 答: 在一个节点上放置多个应用服务器实例时,应充分考虑节点的物理内存。如果希望应用程序 正常执行,则不应该将应用服务器实例的 JVM 换出物理内存。因此,如果计划每个节点启 动多个应用服务器,节点的物理内存必须足够大,能够包含所有其承载的应用服务器实例、 本机堆、其他应用程序以及操作系统的最大堆大小。 另外,还要考虑 CPU。如果两个 CPU 使用率都很高的应用程序部署到同一台计算机上, 可能会导致问题的出现。为了正常的执行,请让重要的应用程序获得 CPU。如果必须在多 个应用程序间共享资源,请考虑使用 WebSphere Application Server Extended Deployment(XD)帮助管理资源,以支持优先应用程序的性能需求。 有关 WebSphere 性能的更多资源,请参阅 developerWorks 中国站点的文章《专家访谈: Stacy Joines 和 Gary Hunt 谈 WebSphere 性能》: http://www.ibm.com/developerworks/cn/websphere/library/techarticles/0507_joines/0507_ joines.html developerWorks 中国站点:www.ibm.com/developerworks/cn/ 15 IBM WebSphere Application Server 常见问题及解答 3. 我是不是应该使用 WAS 来管理我的 HTTP 服务器? 什么时候应该安装 IBM HTTP Server? 答: 建议您不要使用 WebSphere Application Server 来管理您的 HTTP 服务器,即使 WebSphere Application Server 提供了完成该任务的功能,而且在您选择这样做时 IBM 将 为您提供支持。建议您不要这样做的理由是通常我们建议将 Web 服务器放在 DMZ 中, 但是因为 DMZ 通常是不够安全的区域,所以我们不推荐在 DMZ(Demilitarized Zone)中 加强 HTTP 服务器的功能。尽管 WebSphere Application Server 为 IBM HTTP 服务器的 远程管理提供了一种安全的和支持的解决方案,但不使用这个功能将大大减少被攻击的途 径。 在以上建议的基础上,还要补充一点的是,如果您的基础结构在 DMZ 中包括反向代理安 全服务器,一般这种情况下,HTTP 服务器将不位于 DMZ 中,而是和 WAS 处在同样安 全的区域中。这时经常见到的两种场景为: a. 当 HTTP 服务器和 WAS 服务器在同一台机器上,则使用 WebSphere Application Server 进行 HTTP 服务器管理是一种既方便又快捷的方式。 b. 当 HTTP 服务器和 WAS 服务器不在同一台机器上,这种情况下是否使用 WAS 服务 器进行 HTTP 服务器的管理,对工作量和管理的复杂度来说,不会存在明显的差异。 在以下情况下,可以考虑安装 IBM HTTP Server: 1. 从安全性的角度考虑,建议把 IHS 放在 DMZ 区中,这样可以有效隔离非安全的攻击; 2. 可以把一些非重要的静态页面放在 IHS 中,从而减轻 WAS 的负担; 3. 可以作为 WAS 的前一级 Http 请求队列的缓冲。但是,由于在 WAS V6 以上的版本 中,Web Container 对于 Http 请求采用了非阻塞 I/O 方式,IHS 的这一功能作用已经非 常弱化; 4. 对于需要做 WAS 的集群,且客户没有 Load Balancer 这样的功能组件的情况下,安装 IHS 可以提供对集群的唯一访问入口点。 更多关于 IBM WebSphere Application Server 体系结构的安全性,以及如何增强 WebSphere Application Server 环境的安全性方面的信息,请参阅 developerWorks 网站 的《WebSphere Application Server V6 高级安全性加强》一文。 http://www.ibm.com/developerworks/cn/websphere/techjournal/0512_botzum/0512_botzu m1.html 4. 我应该在 WAS 中使用刀片服务器吗? 答: 视情况而定。通常,如果您有许多容易复制的小对象,刀片策略可能非常有效。如果您有非 developerWorks 中国站点:www.ibm.com/developerworks/cn/ 16 IBM WebSphere Application Server 常见问题及解答 常大的对象,并难以将其划分为小的块,那么刀片的效率将非常糟糕。说得更清楚些,如果 您的应用程序的大小是确定的,并证明了它们非常适合于刀片服务器,那么刀片是个很好的 主意。如果您不能确定,则对于大型计算机来说,采用风险较小的方法更合适。所以,这取 决于应用程序及其部署、硬件的大小,也许将来还需要考虑 CPU、内存等因素。 5. 在规划 WAS V6.1 与旧版本共存时,应注意哪些事项? 答: 一般情况下,只要不发生端口冲突,WebSphere Application Server Version 5.x、6.0.x 和 6.1 产品的所有组合都可以共存 在您开始设置共存环境之前,在规划 WebSphere Application Server V5.0.x、V5.1.x 与 V6.1.x 的共存时,应注意以下事项: z 确定硬件要求。确保系统有足够的资源来同时运行多个 WebSphere Application Server 安装。系统内存应该至少为每个版本提供 512 MB 的 RAM。 z 确定需要修改哪些操作系统端口以支持多个应用程序服务器并发运行。 z 更新 WebSphere Application Server 的所有必需的补丁程序。 关于如何配置 WAS 不同版本共存的更多资源,请参阅 developerWorks 中国站点文章《配 置 WebSphere Application Server V6.1 与旧版本共存》: http://www.ibm.com/developerworks/cn/websphere/library/techarticles/0609_hanczaryk/0 609_hanczaryk.html developerWorks 中国站点:www.ibm.com/developerworks/cn/ 17 IBM WebSphere Application Server 常见问题及解答 安装与配置 1. 在 AIX 平台上安装 WAS 后,发现管理控制台没有被安 装,如何解决此问题? 答: 注意,本问题适用于在 AIX 平台安装 WAS V5.0。 当您安装 WebSphere Application Server V5.0 时,如果您的 /tmp 文件系统可用空间小于 90 MB,那么管理控制台的安装就会失败,这样安装后,您启动应用服务器不会有任何错误, http://:9080/snoop 也是成功的,但当您登录管理控制台时就会失败 (http://:9090/admin),这时如果您检查 /installedApps/ 目录,会发现没有 adminconsole.ear 目录存在。 要解决此问题,您可以手工安装管理控制台的应用程序: 首先安装之前请检查 /tmp 文件系统可用空间至少有 90 MB(可用命令 df -k 查看), 如 果没有足够的空间,请您删除一些不用的文件或扩大 /tmp 文件系统。 其次启动应用服务器 server1,运行下面的命令: #cd /bin/ #./wsadmin.sh #wsadmin>$AdminApp install /installableApps/adminconsole.ear #wsadmin>$AdminConfig Save 最后重新启动应用服务器 server1 后即可访问管理控制台。 注意,对于安装 WAS V6.1,/tmp 文件系统的可用空间不得小于 100 MB。 2. 什么是概要文件(profile)? 答: WebSphere Application Server V6 引进了概要文件(profile)概念,目的是将产品的二进 制文件(binaries)与用户数据物理分离,并使用户能定义多组用户数据。从而使管理变得 更加简单。 在 WebSphere Application Server 第 6 版之前,产品二进制文件和用户数据都位于 WebSphere 安装目录下: z 最终用户可以对 WebSphere Application Server 产品二进制文件进行读操作,却不能 对其进行修改。 二进制文件只能通过产品维护更新软件包(比如 fix pack 和 ifix)和 其它扩展 WebSphere 平台产品的安装程序(也可认为是一种类型的产品维护)进行 修改。 developerWorks 中国站点:www.ibm.com/developerworks/cn/ 18 IBM WebSphere Application Server 常见问题及解答 z 最终用户拥有用户数据,并可对其进行写操作。 通常情况下,用户数据包括配置文件、 部署的应用程序、日志文件和临时工作区等,但是并不局限于这些。 之前,产品安装程序常将产品二进制文件和 WebSphere 缺省配置置于安装目录下,用户 通过产品提供的各种系统管理工具,自定义配置并部署应用程序。换句话说,之前的产品二 进制文件和用户数据混在一起,并只有一组用户数据可以通过特定的 WebSphere 安装程 序来定义。 而另一方面,概要文件可以获取磁盘上的一组用户数据和相关的运行时执行环境: WebSphere Application Server V6 概要文件由该文件集组成,该文件集由某最终用户所有。 该最终用户可以对文件集进行写操作,且该流程以此最终用户的身份执行。 在 UNIX 和 Linux 系统上,已创建的概要文件中所包含的全部文件和目录,其组和所有者 权限都与执行实用程序来创建这个概要文件的用户相同。可以认为 WebSphere 概要文件 是“用户数据分区”,等同于 UNIX/Linux 操作系统环境中用户的主目录。 WebSphere Application Server V6 产品安装程序将创建的文件分别放在两个隔离的环境 中:一个用于安装产品二进制文件,另一个用于创建初始概要文件。创建初始概要文件的位 置与产品二进制文件安装位置是分开的,且最终用户可以对其进行配置。用户还可以在安装 完成之后创建其它概要文件。所有通过 WebSphere Application Server 安装创建的概要文 件共享相同的产品二进制文件,且这些产品二进制文件是不能修改的。 关于概要文件的更多资源,请参阅 developerWorks 中国站点上的文章《WebSphere Application Server V6 系统管理,第 3 部分:使用概要文件简化管理系统》: http://www.ibm.com/developerworks/cn/websphere/techjournal/0505_wang/0505_wang.h tml 3. 如何创建概要文件(profile)? 答: 通常在安装 WebSphere Application Server 的过程中,安装程序将把所有的产品二进制文 件置于用户指定的安装目录下。期间安装程序将会调用 GUI 概要文件创建工具(PCT)来 创建初始概要文件。PCT 向导将帮助您创建初始概要文件。 在缺省情况下,创建的概要文件位于以下目录: /profiles/ 当然,您还可以在 PCT 提示时自定义概要文件的位置。自定义的概要文件可以位于文件系 统中的任何位置,只要最终用户拥有在该位置创建目录和文件的权限。 如果在产品安装时您没有创建您的第一个概要文件,那么您可以直接使用 PCT 工具在产品 安装之后进行创建。该工具是位于 /bin/ProfileCreator 目 录中名为 pct 的可执行文件;例如,在 Windows 平台上可执行文件将称为 developerWorks 中国站点:www.ibm.com/developerworks/cn/ 19 IBM WebSphere Application Server 常见问题及解答 pctwindows.exe。您也可以用它来创建多个概要文件。 如果您想了解更多关于如何使用概要文件来简化 WebSphere Application Server 管理方面 的信息,请参阅 developerWorks 中国网站的文章《WebSphere Application Server V6 系 统管理——第 3 部分:使用概要文件简化管理系统》: http://www.ibm.com/developerworks/cn/websphere/techjournal/0505_wang/0505_wang.h tml 4. WAS 安装过程中概要文件(profile)创建失败的一个常 见问题 答: 如果在 WAS 安装过程创建概要文件失败,通常的解决办法是通过日志找出错误信息,分 析原因并找出具体解决方法。有一个常见原因是因为主机名中包含有“_”字符(即下划线), 这将会导致概要文件的创建失败。 如果机器的主机名是带有下划线的,那么在创建概要文件时,如果在 WAS 的“概要文件 创建选项”面板中选择了“创建典型概要文件”,带下划线的主机名格式将会导致概要文件 创建失败。为避免其他潜在的问题,建议机器的主机名中只采用字符和数字,并且不要太长。 如果主机名不能更改,可以在创建概要文件时,在“概要文件创建选项”面板中选择“创建 高级概要文件”,然后在“节点名和主机名”面板中,将其中的主机名修改为实际的 IP 地 址,然后再继续创建。 5. 怎样卸载 WAS? 答: 通常情况下,推荐使用 WebSphere 提供的卸载程序来卸载 WebSphere,而不要使用操作 系统的卸载软件的功能来卸载 WebSphere,因为那样步骤比较复杂,并且有可能由于漏掉 某些步骤而导致不能完全卸载干净。 卸载 WebSphere 之前,需要停止所有 WebSphere 相关的进程,最好查看系统中的进程确 保没有 java 进程运行,另外,如果使用了 Web 服务器,确保停止了 Web 服务器。然后运 行 WebSphere 的卸载程序,卸载程序命令在 UNIX 系统中为 uninstall,Windows 中为 uninstall.exe,存在于 WebSphere 的安装目录下的 _uninst 目录中。例如,在 UNIX 系统 中,将目录转至 install_root/_uninst 目录(install_root 为 WebSphere 的安装目录),运行 uninstall 命令,根据图形向导来卸载 WebSphere。 developerWorks 中国站点:www.ibm.com/developerworks/cn/ 20 IBM WebSphere Application Server 常见问题及解答 开发与部署 1. WAS 产品包中的 Application Server Toolkit 可以为 您的开发和运行提供哪些帮助? 答: Application Server Toolkit(AST)为创建面向 WebSphere Application Server V6.1 的新应 用程序提供了基本的支持。其中包括用于创建新的 Web 应用程序、Web 服务、Portlet、 EJB 组件的各种向导和工具,以及基于注释的编程支持、新的管理工具、用于编辑 WebSphere 特定绑定和扩展的工具,等等。 WAS V6.1 包括了 J2EE 透视图和 Web 透视图、Eclipse 3.1 和 Eclipse Web Tools Platform(WTP) Version 1.0。它本身是一个完整的 J2EE 开发环境,因此您可以使用它 构造、调试并直接将新的应用程序部署到 WebSphere Application Server V6.1。 尽管完全能够开发 J2EE 应用程序,但 AST 只是 IBM Rational® 开发环境,如 Rational Software Architect 和 Rational Application Developer 的子集。 图 2 中所示的层次结构能够很好的表明这几种工具组合的关系。外层的工具提供的功能完 全包含内层工具提供的功能。 图 2 集成开发环境 WAS V6.1 中的 AST 在 Eclipse Web Tools Platform 的基础上提供了下列关键特性: developerWorks 中国站点:www.ibm.com/developerworks/cn/ 21 IBM WebSphere Application Server 常见问题及解答 z 用于 WebSphere Application Server 的服务器工具,如调试和单元测试支持。 z 支持 WebSphere Application Server 特定扩展,如 SIP 和 Jython 工具。 z 用于 WebSphere Application Server 属性文件和部署描述符的图形编辑器。 Rational 组合甚至提供了更多的扩展特性,其中一些关键的特性包括: z 建模和可视化工具。 z 分析、验证和代码更正工具。 z 测试和分析工具。 z 支持多种服务器类型。 AST 被授权作为 WebSphere Application Server 的组件部分。可以对其进行无限制的复 制,这使得 AST 可以用于开发面向 WebSphere Application Server V6.1 的应用程序。 有关 WAS 和 AST 的更多资源,请参阅 developerWorks 中国站点的文章《Hello World, 第 4 部分:WebSphere Application Server 和 Application Server Toolkit V6.1》: http://www.ibm.com/developerworks/cn/views/websphere/tutorials.jsp?cv_doc_id=173702 2. 是否用 MDB(Message-Driven Bean)来侦听 MQ 队 列? 答: 我们建议用 MDB(Message-Driven Bean)来侦听 MQ 队列。因为 MDB 实现了多线程的 处理方式,而且 MDB 是 EJB 的规范,程序员进行编程和维护都很方便。MDB 有着自己的 容器来管理这些线程,使应用不必关心 MQ 侦听和线程池的各种细节。 3. 如何处理 JSP 的中文显示问题? 答: 在 WAS 中您需要采取以下两个步骤解决 JSP 的中文显示问题: 1.在每个 jsp 文件的最前面添加下面两行: <%@ page contentType="text/html; charset=GBK" %> <%request.setCharacterEncoding("GBK");%> 2.在控制台上,选中 Server > Java 和进程管理 > 进程定义 > Java 虚拟机,设置通用 JVM 参数: Dfile.encoding=GBK Dclient.encoding.override=GBK Ddefault.client.encoding=GBK developerWorks 中国站点:www.ibm.com/developerworks/cn/ 22 IBM WebSphere Application Server 常见问题及解答 有关 Web 开发中字符处理的更多资源,请参阅 developerWorks 中国站点的文章: z 《JSP/Servlet 中的汉字编码问题》 „ http://www.ibm.com/developerworks/cn/java/jsp_dbcsz/index.html z 《UTF-8 字符处理在 Web 开发中的应用》 „ http://www.ibm.com/developerworks/cn/web/wa-lo-utf8/ 4. 在 WAS 中连接 MQ 有哪些方式?最佳方式是什么? 答: 通常,在 WAS 中连接 WebSphere MQ 的方式有以下三种方式: 1. 使用 WebSphere MQ 链路 使用 WAS 的管理控制台来配置和管理 WebSphere MQ 链路(WebSphere MQ Link)。 该方式在 WAS 的服务集成总线(SI BUS)与 WebSphere MQ 消息传递网络中的队列管 理器之间提供直接连接。连接方式类似 WebSphere MQ 的 server 和 server 的连接,这 里把 WAS 看作一个 WebSphere MQ Server 来进行配置。 2. 在 WebSphere Application Server 中配置 WebSphere MQ 服务器 使用 WAS 的管理控制台配置一个 WebSphere MQ 服务器。该方式在 WebSphere Application Server 中的服务集成消息传递引擎与 z/OS WebSphere MQ 队列管理器或队 列共享组之间提供直接连接。但是,配置在 WAS 中的 WebSphere MQ 服务器已设计为 利用 WebSphere MQ on z/OS 网络提供的高可用性和最优负载均衡特征。所以,这种方式 适用于在 WAS 中连接在 z/OS 上的 WebSphere MQ 的情况。 3. 将 WebSphere MQ 用作 WAS 的外部 JMS 提供者 在这种方式中,作为外部 JMS 提供者的 WebSphere MQ 不会将服务集成总线消息传递 连接至 WebSphere MQ 网络,它允许直接从 WebSphere Application Server 中访问 WebSphere MQ。采用这种方式,WAS 不需要配置 WebSphere MQ 服务器,也不需要设 置 SI BUS 相关的内容,只需要在创建 JMS 资源时,选择创建 WebSphere MQ 的资源 (MQQueueConnectionFactory 和 MQQueue)即可。针对 WAS 和 WebSphere MQ 是 否安装在同一台机器上,分别有两种配置方法: (1) 如果 WAS 和 WebSphere MQ 在同一台服务器上,在配置 MQQueueConnectionFactory 的时候,其属性“transportType”选择“BINDING”。 (2) 如果 WAS 和 WebSphere MQ 不在同一台服务器上,在配置 MQQueueConnectionFactory 的时候,其属性“transportType” 选择“CLIENT”。 以上几种方式的详细描述参考 WAS InfoCenter: http://publib.boulder.ibm.com/infocenter/wasinfo/v6r1/index.jsp?topic=/com.ibm.webspher e.pmc.nd.doc/tasks/tjfp0015_.html 综上所述,通过结合客户实际应用案例,连接 WebSphere MQ 的最佳方式为第三种,尤 developerWorks 中国站点:www.ibm.com/developerworks/cn/ 23 IBM WebSphere Application Server 常见问题及解答 其当 WAS 和 WebSphere MQ 在同一台服务器上的情况下,即 3-(1)。这种配置模式从 WAS 的角度来说最为简单,而且可靠性和性能也都是最佳的。如果 WAS 和 WebSphere MQ 不能在同一台服务器上则推荐 3-(2),性能仅次于 3-(1)的方式。 关于 WAS 与 WebSphere MQ 连接的更多资源,请访问 developerWorks 中国站点文章 《保证 WebSphere Application Server 和 WebSphere MQ 之间连接的安全》: 第 1 部分: http://www.ibm.com/developerworks/cn/websphere/techjournal/0601_ratnasinghe/0601_r atnasinghe.html 第 2 部分: http://www.ibm.com/developerworks/cn/websphere/techjournal/0601_smithson/0601_smi thson.html 5. 我希望编写的 Web 应用能够支持尽可能多的客户端, 有哪些注意事项? 答: 可以用一句话来概括:您依赖的功能越少,您能支持的客户端就越多。 z 少用 ActiveX,Applet; z 少用持久性 cookies,但非持久性的 cookies 没关系; z 少用弹出式窗口; z 使用 Javascript 通常没问题,但要小心:有些人会限制某些 Javascript 的运行; z 使用各种插件存在风险。在主要功能上(如 flash,media player)使用插件是不明智 的。但在附加功能上使用插件没什么关系。 z 确信对敏感信息使用 HTTPS,并要保证使用知名 CA 发行的证书。 6. 我是否可以在 WAS 上自己实现多线程编程和实现类加 载器? 答: 不建议开发者自己再去控制多线程应用程序的实现,因为 WebSphere 已经提供了多线程的 容器。每一个请求在 WAS 里运行都是在独立的一个线程里运行的。如果应用程序自己实现 多线程编程,产生新的线程和维护线程对系统来说都有很大的系统开销。另外 WebSphere 已经提供了类加载器,应用程序也不需要实现自己的类加载器。 developerWorks 中国站点:www.ibm.com/developerworks/cn/ 24 IBM WebSphere Application Server 常见问题及解答 7. 在多个独立的 WebSphere 应用程序服务器环境中,一 个服务器上的应用程序该如何访问运行在其他服务器上 的应用程序? 答: 这涉及到名字空间(namespace)的联合问题。举例说明: 假设我们有两个独立的 WebSphere 应用服务器 Server1 和 Server2,为 了 让 Server1 上运 行的程序能够访问 Server2 上的 EJB 程序,我们需要使用 CorbaName 绑定 Server1 和 Server2 的名字空间。在联合上下文之前,运行 Server1 上的/bin 目录下 的 dumpNameSpace.sh/bat 命令,如: dumpNameSpace.sh -root server –port 2809 这时只会列出 Server1 的名字空间里的内容。下面,我们把 Server2 的名字空间绑定到 Server1 上。在 Server1 的管理控制台上,选择“环境”>“命名”> “名称空间绑定”,作 用域选择“节点 1”>“Server1”,点击“新建”, 选择“CORBA”绑定类型, 指定“绑定 标识”,在名称空间中的名称中输入 Server2(这是我们希望使用的名字),在“Corba 名称 URL”中输入如下类似内容: corbaname:iiop:*.*.*.*:2810#nodes/NODE1/servers/server2 选中“联合上下文”。此时,运行: dumpNameSpace.sh -root server –port 2809 这时也会列出 Server2 的名字空间里的内容。于是,当我们把 Server1 作为 Server2 的 Client 时,原来的 JNDI 名字“ejb/ibm/CMPHome”应该被改成“server2/ejb/ibm/CMPHome”。 综上,为了让不同服务器上的应用程序实现互访,关键要做到名字空间的共享。一旦把一台 服务器的名字空间共享给另一台服务器,则第二台服务器上的应用程序通过修改 JNDI 名字, 就可以轻松访问第一台服务器上的应用程序了。 8. 对于EJB的部署代码,是在构建应用程序时生成好,还是 在部署应用程序时生成好? 答: 这依赖于具体的环境: z 如果您确定服务器的版本、数据库的类型,那么在构建应用程序时直接生成一个完整的 可运行的 EAR 包会比较好。 z 如果您需要在不同的服务器版本、不同的数据库上运行 EJB 应用程序,那么应该在部 署应用程序时选中“部署 EJB”按钮。 另一个经验是:在开发测试较大的应用程序时,根据不同的阶段,既可以在构建时部署 EJB, 又可以在部署应用程序时部署 EJB。细说如下: developerWorks 中国站点:www.ibm.com/developerworks/cn/ 25 IBM WebSphere Application Server 常见问题及解答 z 在开发早期阶段,如果使用 IBM 的开发工具,则可由开发者直接生成完整的 EAR 包, 其中包含被部署过的 EJB 代码,便于开发者进行单体测试和功能测试。 z 在开发阶段中期,当这些代码被加到某个库系统中后,需在库系统中统一构建库。此时, 要到部署应用程序时再部署 EJB。 例如,在管理部署一个含有第三方编写的 EJB 的应 用程序时,由于不能完整构建整个应用,所以需要在部署应用时部署 EJB。 z 然而,在安装产品阶段,此时通常会使用 wsadmin 自动脚本,因为没法在部署应用时 部署 EJB,所以需要在构建应用程序时就部署 EJB。 9. 关于 Java EE 开发,有哪些最佳实践应该采纳? 答: 这里我们总结了 19 条 Java EE 开发的最佳实践: 1. 始终使用 MVC 框架:将业务逻辑(Java Bean 和 EJB 组件)从控制器逻辑 (Servlet/Struts 操作)和表示逻辑(JSP、XML/XSLT)中清晰地分离出来。良好的分层可 以带来许多好处。 2. 不要做重复的工作:使用常见的、经过证实的框架,如 Apache Struts、JavaServer Faces 和 Eclipse RCP。 3. 在每一层都应用自动单元测试和测试管理:不要只是测试您的图形用户界面(GUI)。 分层的测试使得调试和维护工作变得极其简单。 4. 按照规范来进行开发,而不是按照应用服务器来进行开发:要将规范熟记于心,如果 要背离规范,需经过慎密的考虑后才可以这样做。这是因为当您背离规则的时候,您所做的 事情往往并不是您应该做的事情。 5. 从一开始就计划使用 Java EE 安全性:启用 WebSphere 安全性。锁定您的 EJB 和 URL,只允许所有授权用户访问。 6. 构建您所知道的:迭代的开发工作将使您能够逐渐地掌握所有的 Java EE 模块。要 从创建小而简单的模块开始而不是从一开始就马上涉及到所有的模块。 7. 使用 EJB 组件时,始终使用会话 Façade:在体系结构合适的情况下,使用本地 EJB。 8. 使用无状态会话 Bean,而不是有状态会话 Bean:这样做可以使您的系统更经得起 故障考验。使用 HttpSession 存储和用户相关的状态。 9. 使用容器管理的事务:学习一下 Java EE 中的两阶段提交事务,并且使用这种方式, 而不是开发您自己的事务管理。容器在事务优化方面几乎总是比较好的。 10. 将 JSP 作为表示层的首选:只有在需要多种表示输出类型,并且输出类型必须被单 一的控制器及后端支持时才使用 XML/XSLT。 11. 当使用 HttpSession 时,尽量只将当前事务所需要的状态保存其中,其他内容不要 保存在 HttpSession 中:启用会话持久性。 12. 充分利用应用服务器中不需要修改代码的特性:使用某些特性(如 WebSphere Application Server 缓存和 Prepared Statement 缓存)可以极大地提高性能,并且使得开 销最小。 13. 充分利用现有的环境:提供一个 Java EE EAR 和可配置的安装脚本,而不是黑盒二 进制安装程序。 14. 充分利用应用服务器环境所提供的服务质量:设计可使用 WebSphere Application developerWorks 中国站点:www.ibm.com/developerworks/cn/ 26 IBM WebSphere Application Server 常见问题及解答 Server Network Deployment 集群的应用程序。 15. 充分利用 Java EE,不要欺骗:致力于构建真正利用 Java EE 功能的 Java EE 应 用程序。 16. 安排进行版本更新:更改是在所难免的。安排新的发行版和修复程序更新,以便您的 客户能够获得最新的版本。 17. 在代码中所有关键的地方,使用标准的日志框架记录程序的状态:这包括异常处理程 序。使用像 JDK 1.4 Logging 或 Log4J 这样的日志框架。 18. 在完成相应的任务后,请始终进行清理:如果您从池中获取了一个对象,请始终确保 将其返回到池中。 19. 在开发和测试过程中遵循严格的程序:这包括采用和遵循软件开发方法学。 由于篇幅的原因,在这里不能详细阐述,更多内容请访问 developerWorks 中国站点文章 《IBM WebSphere 开发者技术期刊:最重要的 Java EE 最佳实践》: http://www.ibm.com/developerworks/cn/websphere/techjournal/0701_botzum/0701_botzu m.html developerWorks 中国站点:www.ibm.com/developerworks/cn/ 27 IBM WebSphere Application Server 常见问题及解答 集群 1. 规划集群方案时应考虑哪些因素? 答: 在规划高可用的集群方案时,我们建议按以下因素规划和评估: 1. 分析需求: z 是否需要持续运转? 大多数用户不需要持续运转,硬软件升级可以脱机完成; z 运转时需要哪种可用性? z 故障恢复时对性能有什么要求?例如,一个 node/server 故障时,性能可能会受到 影响; 2. 分析成本: z 如果系统不可用,损失是多少? z 您准备向可用性投入多少? 3. 评估配置管理的复杂性:系统越复杂,越需要更高的技术人员技能和配置管理成本。 4. 考虑整个系统里各组件的可用性:通常,整体可用性由系统中最弱的点决定。 5. 分析故障恢复时间:主要是故障探测时间和恢复时间。对于不同的技术,故障恢复的时 间也是不同的。 6. 分析故障恢复的关键点:这直接关系到工作量和成本。 7. 理解编程模型:这关系到故障恢复对客户端和其他组件是否是透明的。如果部分组件不 是透明的,必要时需要添加额外的处理。 8. 考虑故障影响范围:一些系统可能有一些特别的约束。故障发生时,可能有其他的系统 受到影响。 2. 在异构平台上创建 WAS V6.1 集群,避免使用绝对路 径。 答: 在异构平台上创建 WebSphere Application Server V6.1 集群,最主要的问题是异构操作系 统的目录格式不同,产品的缺省安装目录也不同。为了避免因目录和目录格式的不相同所带 来的影响,在资源配置和应用部署中,应当避免使用绝对路径,而采用通用的节点作用域 WebSphere 变量来替代,然后根据每个节点的实际情况来对该变量赋值。 developerWorks 中国站点:www.ibm.com/developerworks/cn/ 28 IBM WebSphere Application Server 常见问题及解答 3. 在设计和开发运行于 WAS 集群环境的应用程序时需要 考虑哪些方面? 答: 在面向集群环境的应用程序中,需要考虑的方面主要包括文件同步,会话管理和动态缓存等。 z 文件同步 如果应用程序使用了存储于文件系统的数据,那么应当保证它们在每个集群服务器中的一 致。一个可行的解决方案是使用共享的文件系统或共享的数据库,然而这种方法会导致一个 新的单点故障和性能的瓶颈,并且可能会增加编程和配置工作的复杂性。另外一种方法是使 用 WAS 所支持的细粒度文件更新,您可以在集群范围内拥有更灵活的应用程序文件,并避 免引入新的单点故障。 关于细粒度文件更新的更多内容,请参见 WAS V6.1 信息中心: http://publib.boulder.ibm.com/infocenter/wasinfo/v6r1/index.jsp z 会话管理 会话管理是 Web 应用程序的一个重要的考虑事项。WAS 为集群环境下的应用程序提供了 实时一致的会话数据共享机制,提供包括基于内存拷贝的共享和基于数据库的共享方式。从 应用程序设计的开发的角度,您应该考虑进行对象序列化和反序列化,以便将其放入会话中 并在集群范围内进行共享。您可以使用自已定义的类将对象封装到会话中,然后执行验证。 会话的复制是一个开销比较大的过程。因此,为了保证性能,您需要尽量降低会话对象的大 小,从而提高复制时的效率。 z 动态缓存 您可以通过使用 WAS 提供的动态缓存和数据复制服务来实现集群范围内应用程序数据的共 享,这将显著地提高应用程序的性能。 关于动态缓存的更多内容,可参见 WAS V6.1 信息中心: http://publib.boulder.ibm.com/infocenter/wasinfo/v6r1/topic/com.ibm.websphere.nd.doc/in fo/ae/ae/tdyn_dynamiccache.html 4. 在集群环境中,我应该使用数据库持久化的方式还是使用 内存到内存复制的方式来进行会话故障转移? 答: 数据库持久化和内存到内存复制之间的性能差异并不大。这是因为 95% 的复制或持久化会 话开销是在会话对象的序列化/反序列化中产生的——不论会话保存在哪里,这种开销都必 定会产生。 决定选择哪种技术将部分基于这两种技术之间的差异: z 通过使用数据库,您实际上持久化了数据(保存到磁盘中),这样高可用性的数据库服 developerWorks 中国站点:www.ibm.com/developerworks/cn/ 29 IBM WebSphere Application Server 常见问题及解答 务器就可以在级联故障中幸免于难,而内存复制的方式无法达到此目的。 z 对于两个相同的单元/域,高可用性的数据库完全可以确保两个域之间的会话故障转移, 而对于内存到内存复制,两个单元只能有一个通用复制器;因此,它就变为单点故障 (Single Point Of Failure,SPOF)。 因此,对于必须进行交叉单元会话故障转移的配置,只能选择高可用性数据库来消除 SPOF。请注意,此时跨单元共享会话是得到支持的,但不建议这样做,因为在单元间共享 状态将使得在两个单元中独立升级组件(应用程序和 WAS)异常困难。 另外,利用内存到内存复制,您可以存储的会话信息的数量受应用服务器的 JVM 堆大小的 限制。即使在 WebSphere Application Server V6.01 中支持 64 位的 JVM,最大应用服 务器堆大小也大大小于数据库服务器(用作会话存储)上可用的磁盘空间数量。因此,尽管 在许多组织中,使用内存到内存复制对避免系统管理员和数据库管理员之间的角色和职责冲 突更有利,但数据库持久化仍是最佳选择。 有关会话、状态复制的更多资源,请参阅 developerWorks 中国站点的文章《Java 理论与 实践:Web 层的状态复制》: http://www.ibm.com/developerworks/cn/java/j-jtp07294/ developerWorks 中国站点:www.ibm.com/developerworks/cn/ 30 IBM WebSphere Application Server 常见问题及解答 性能 1. WAS 的重要优化参数有哪些? 答: 在着手进行应用程序服务器的优化之前,首先进行应用程序和操作系统的优化是一个更好的 选择。尤其是应用程序的优化,通过对应用程序中影响性能的部分进行重新的设计和调整, 往往能够带来比单纯的参数调优更为巨大的性能提升。 对于一般的 J2EE 应用程序而言,WAS 中最重要的优化参数包括针对 JVM、Web Container 和 Data Source 等的。 z JVM Heapsize(-Xms 和-Xmx):heapsize 的大小依赖于系统平台和具体的应用等多种因素。最 大 heapsize 需要小于机器的物理内存,一般来说,设置最大 heapsize 为 512m 是一个常见 的起点。同时,在生产环境中,最好将 Xms 设置为小于 Xmx 的值。 GC(Garbage Collection):一般来说,良好的 GC 状态需要保证相邻两次垃圾回收的平均 间隔时间应当是单次垃圾回收所需时间的至少 5-6 倍。GC 的调优是通过在模拟压力的情况 下不断调整最大最小 heapsize 来实现的。 Heap Fragmentation:heap 碎片的问题在 JVM 中存在大对象的情况下尤为突出。减少碎 片的方法包括调整 pCluster(-Xp)和 kCluster(-Xk)参数。 更多的 JVM 调优参数内容,参考 JDK diagnostic Guide: http://www.ibm.com/developerworks/java/jdk/diagnosis/ 以及 WAS V6.1 信息中心的相关内容: http://publib.boulder.ibm.com/infocenter/wasinfo/v6r1/index.jsp?topic=/com.ibm.webspher e.nd.doc/info/ae/ae/tprf_tunejvm_v61.html z Web Container 对 Web Container 的调优是通过对 Web Container 传输链中各个通道(TCP、HTTP、 WebContainer)的参数调整进行的。这些参数包括诸如 ThreadPool 的最大最小值,buffer 大小,timeout 时间的大小,keep-alive 的值等等。各个参数的含义及具体调整方法参见 WAS V6.1 信息中心: http://publib.boulder.ibm.com/infocenter/wasinfo/v6r1/index.jsp?topic=/com.ibm.webspher e.nd.doc/info/ae/ae/tprf_tunechain.html z Data Source 对 Data Source 的优化包括两个方面。一是 JDBC Driver 的选取,尽可能应使用 Type 4 的 JDBC driver,这种 driver 是纯 java 的,适用于 client/server 模式,并提供比 type2 和 legacy/CLI 的 driver 更好的性能。另一方面是 Database 连接池的参数设置,主要包括最大 和最小连接以及 timeout 的设置。具体的设置于应用程序的特性和并发用户量相关,一般来 说,可设置最小连接为 1 且最大连接为 30,作为一个继续调优的起点。 除了 JVM,Web Container 和 Data Source 之外,WAS 的性能调优还包括很多其他方面的 developerWorks 中国站点:www.ibm.com/developerworks/cn/ 31 IBM WebSphere Application Server 常见问题及解答 内容,如 JMS、EJB、Session、Dynamic Cache 等等。关于性能优化的更多内容,可参见 WAS V6.1 信息中心: http://publib.boulder.ibm.com/infocenter/wasinfo/v6r1/index.jsp?topic=/com.ibm.webspher e.nd.doc/info/ae/ae/welc6toptuning.html 另外,WAS 提供了若干工具,可以用于帮助衡量其性能。WAS 中免费提供的 Tivoli® Performance Viewer(TPV)允许客户对关键资源(如 JVM、Web 容器和 EJB 容器以及 远程连接池)进行监视。这款工具使用非常方便,可以用于确定应用程序使用可用资源的方 式,还可以提供针对行为不正常的远程资源的信息。例如,如果数据库连接池显示为了获得 连接进行了多次尝试,则可能表示远程数据过载,或者需要优化数据库,或者需要向不够大 的池中添加更多的连接。与此类似, WAS 还提供了 Runtime Performance Advisor 功能, 可以就系统中的潜在优化问题向管理员提供反馈。 WAS Information Center (http://www.ibm.com/software/webservers/appserv/was/library/) 包含了一个优化参数列表,还包括一个优化参数“热点列表”,其中描述最常用的经过调整 的参数。这是一份不错的参考资料,有助于您了解在该产品内调整内存和资源的基本知识。 其他的不错的参考资料包括 IBM® 红皮书,如 《WebSphere Application Server V6 Scalability and Performance Handbook》: http://www.redbooks.ibm.com/abstracts/sg246392.html 2. 性能调优的基本步骤是怎样的? 答: 部署在 WAS 上的 J2EE 应用程序,其性能是由多个因素决定的。例如网络、数据库、内存 分配、WAS 服务器的配置以及应用程序的设计。对于一个标准的 J2EE 应用,一个请求到 来时,往往需要经过多次转发:网络 > Web 服务器 Web 容器 > EJB 容器 > 数据库。而 每一次转发,都可能造成请求处理的瓶颈,使得应用程序整体性能下降。 如果我们把每一次转发的待处理资源都看成一个队列,如图 3: 图 3 待处理资源队列 对于 WAS 调优,要记住的一个基本原则就是,使得在队列中等待的请求的数量最小化。在 实践中我们发现,为了达到这个目的,最有效的配置方式就是使得队列成为一个“漏斗”。 也就是说,越靠近客户端的队列,其容量越大,而后面的队列,其容量要略小于或等于前面 的队列。按照这个原则,调优的基本步骤如下: developerWorks 中国站点:www.ibm.com/developerworks/cn/ 32 IBM WebSphere Application Server 常见问题及解答 z 设置的是 Web Server 的最大并发用户: „ 这个设置是在 conf/httpd.conf 这个文件里面配置的。在 Unix 系统中,对应的属性 是 MaxClient;在 Windows 系统中,对应的属性是 ThreadsPerChild。 „ 设置 Web Container 的最大、最小并发用户: „ 在管理控制台中点击应用程序服务器 > server1 > 线程池 >WebContainer,根据 观察的性能情况和应用情况输入合适的最小、最大进程数。 „ 对象请求代理(ORB)的线程池大小: „ 在管理控制台中点击应用程序服务器 > server1 > ORB 服务 > 线程池,根据观察 的性能情况和应用情况输入合适的最小、最大进程数。 „ 设置数据库的连接池属性: „ JDBC 提供者 >数据库JDBC驱动名称 > 数据源 > 数据源名称> 连接池 ,根据观 察的性能情况和应用情况输入合适的最小、最大连接数。 „ JVM 堆参数设置的性能调优: „ 应用程序服务器 > server1 > 进程定义 > Java 虚拟机,根据硬件物理内存和应用 情况输入合适的初始堆大小、最大堆大小。 „ ORB 参数调用方式的性能调优: „ 应用程序服务器 > server1 > ORB 服务>选中按引用传递。 „ 关闭动态加载开关: „ 企业应用程序 > 应用名称 > 关闭启动类重新装入开关。 „ 关闭会话序列化,应用程序服务器 > server1 > 会话管理 > 分布式环境设置 > 分 布式会话选择无即可。 这个调优的步骤只是涉及了利用 WAS 服务器参数的调整来优化应用程序的性能,实际上性 能的好坏很大部分是取决于应用的设计。好的性能源自好的代码设计。一般说来,性能调优 大概可以提高 10%-40%效率,而糟糕的代码设计却会使得性能几倍的下降。 3. 如何合理的使用缓存机制? 答: WAS 中可以用很多种手段实现缓存。其中最常见的一种,就是在应用中使用开发的手段缓 存一些中间结果。但这种缓存是一把双刃剑。用好了可以很好地提高性能,如果掌握不好, 使用过度了,则会对底层 JVM 的 Heap 造成很大的威胁。一般 JVM Heap 出现 OutOfMemery(内存泄漏)的问题,都是应用中直接或者间接的缓存技术滥用的后果。所 以缓存技术拿捏得当非常重要,也比较不容易。 下面主要谈谈 WAS 产品本身提供的缓存功能。 WAS 提供动态缓存机制,可以对 Web 命令、 Servlet 输出和 JavaServer Pages(JSP) 文件进行高速缓存,从而提高应用程序的性能。动态高速缓存服务在应用服务器 JVM 中工 作,拦截对可高速缓存对象的调用。例如,它通过 servlet 的 service 方法或命令执行方 法拦截调用,以及将对象的输出存储到高速缓存,或者对来自于动态高速缓存的对象内容进 行处理。 developerWorks 中国站点:www.ibm.com/developerworks/cn/ 33 IBM WebSphere Application Server 常见问题及解答 在 WAS 中可以通过配置实现常用的高速缓存对象、功能和模块有: z Servlet 高速缓存 z Portlet 片段高速缓存 z Edge Side Include 高速缓存 z Web 命令高速缓存 z Web Service 高速缓存 z Web Service 客户机高速缓存 关于 WAS 的缓存功能,详细信息请参见: http://publib.boulder.ibm.com/infocenter/wasinfo/v6r1/topic/com.ibm.websphere.nd.doc/in fo/ae/ae/welc6tech_dyn.html 对于 WAS 中的缓存机制,和应用开发中的缓存类似,也要掌握好缓存的“度”,避免滥用, 即题目中问的“如何合理的使用”?原则有如下几点: 1. 不是缓存用得越多越好。只要是 WAS 中提供了缓存机制的环节,统统都用上。这是错 误的。 对于这一原则,有一个非常简单的方法可以确定是否采用缓存,采用哪些缓存技术:如果实 现缓存本身相对于您的拓扑结构或者您所掌握的技术来说,显得非常的复杂,那么完全可以 不用。举例来说,虽然 Edge Component 中提供了很好的缓存技术,但您的生产环境中, 原本就没有考虑 Edge Component,现在为了缓存而缓存,非要把 Edge Component 加 进去,使得拓扑偏离了原先的设计,变得更复杂化,就很没有必要了。 2. 确认您想缓存的对象是否真的需要缓存。 这一点事先比较难以判断。因为生产环境真实的使用情况是千变万化的。最佳的方法就是在 真实环境中对缓存进行监控,查看被缓存对象的命中率。如果某些缓存环节利用率极低,或 者某个对象命中缓存的概率非常小,则完全可以取消这样的缓存。对于利用率高的缓存,可 以在内存使用比较平稳的前提下适当增大力度。 关于缓存监控的方法,请参考 WAS 的 InfoCenter,利用高速缓存监视器器对动态高速缓存 进行适当调整。网址如下: http://publib.boulder.ibm.com/infocenter/wasinfo/v6r1/topic/com.ibm.websphere.nd.doc/in fo/ae/ae/cdyn_cachemonitor.html 4. WAS 性能差的几种表现和解决方法? 答: 系统性能差一般的情况下有以下表现: 1. CPU 使用不高, 用户感觉交易响应时间很长。 2. CPU 使用很高,用户感觉交易响应时间很长。 对于第一种情况,可以断定是由于系统的某一小部分造成了瓶颈,导致了所有的请求都在等 待。简单举例来说,线程池的数量开的太小,导致所有的请求都在排队等待进入线程池,因 developerWorks 中国站点:www.ibm.com/developerworks/cn/ 34 IBM WebSphere Application Server 常见问题及解答 为没有可用的线程使用,所以这个交易请求一直在排队,导致交易响应时间很长。如果数据 库连接池开的太小,也会有同样的表现。 对于第二种情况,比较复杂。可能的根源之一是硬件资源不够。 根源之二是应用系统中产 生了多个大对象。根源之三是程序算法有问题。 解决思路如下: 用性能分析器,如 RAD 或 JProfiler, 对运行环境进行分析,分析哪个类甚至于哪个函数消耗了这么多的 CPU,并 找 到相应的解决方案。 有关 WebSphere 性能的更多资源,请参阅 developerWorks 中国站点的文章《专家访谈: Stacy Joines 和 Gary Hunt 谈 WebSphere 性能》: http://www.ibm.com/developerworks/cn/websphere/library/techarticles/0507_joines/0507_ joines.html 5. 我应该怎样去判断应用程序服务器的性能是否满足要求, 都有哪些指标? 答: 在遇到性能问题时,尝试使用 Tivoli Performance Viewer,并一一察看如下最重要的 10 个 监视项目: „ Servlets 和 Enterprise JavaBeans 1. 平均响应时间, 2. 请求数(事务), 3. 活的 HTTP Session 数 „ 线程池: 4. web 服务器线程 5. web 容器和 EJB 容器线程池 „ 数据源 6. 数据源连接池大小 „ Java 虚拟机 7. JVM 内存,垃圾收集统计 „ Web,应用程序,和数据库服务器上的系统资源 8. CPU 利用率 9. 磁盘和网络 I/O 10. Paging 活动 同时,可配合使用 Tivoli Performance Advisor,它们可帮助您调整您的系统,对设置不足 给出建议。 有关 WebSphere 调优工具的更多资源,请访问 developerWorks 中国站点文章和教程: z 《Ruth Willenborg 关于性能工具的提示:选择 WebSphere 性能工具》: „ http://www.ibm.com/developerworks/cn/websphere/techjournal/0410_col_willen borg/0410_col_willenborg.html z 《性能监测,诊断和优化》: developerWorks 中国站点:www.ibm.com/developerworks/cn/ 35 IBM WebSphere Application Server 常见问题及解答 „ http://www.ibm.com/developerworks/cn/views/websphere/seminar.jsp?cv_doc_i d=90662 z 《WebSphere 应用服务器内存泄漏探测与诊断工具选择最佳实践》 „ http://www.ibm.com/developerworks/cn/websphere/library/techarticles/0609_xue chao/ 6. 系统中产生大对象对性能的影响怎样? 答: 我们经常遇到如下的例子,如果一个报表系统运行在 WAS 里,用户经常抱怨系统的响应时 间太长,反应太慢的情况。问题的根本原因是报表系统会产生一些大对象,而这个大对象的 数值如果超过 2M, JVM 一定要在有限的空间里为对象找到连续的空间。如果 JVM 为这个对 象找不到连续的空间,就会对整个内存空间进行整理,如果大对象比较多,由于 JVM 对内 存空间的频繁整理会对系统的性能有着急剧的影响。造成系统的响应时间非常慢,所以应用 程序应尽量避免产生大对象,或者用一个链表的结构来表达大对象,本质上把一个大对象拆 成几个可以联接的小对象,让 JVM 可以很容易的分配内存空间。 7. 如何解决内存泄漏问题? 答: 由于系统的复杂性,不可能通过程序来确定内存泄漏的根源,因为内存泄漏的根源可以是来 源于自己写的应用,开放源码的组件,JDBC 组件,甚至可以怀疑 WAS 本身也能造成内存 泄漏。但也有一个解决思路,就是在应用程序已经发生内存泄漏时,把当前的内存中的所有 对象做一个快照。从这些所有的对象中做分析,找到怀疑的地方,并写测试案例来进行验证。 正常的情况下,要在不同的时间点上做几个内存快照。IBM 提供了几个分析工具, MemDumpDiag,HeapRoots,利用这些工具可以对系统内存的使用进行辅助分析。另外一 个有效的办法是 WebSphere 还可以把 GC ( Garbage Collection )的 log 打印到 SystemErr.log 上,通过分析 GC 的日志可以得到很多的直观上的对内存的使用,如内存的 随着时间的变化情况等。IBM 提供的工具是“IBM Pattern Modeling and Analysis Tool for Java Garbage Collector”,这个工具可以对 GC 进行分析统计。 有关在 WAS 中解决内存泄漏的更多资源,请参阅 developerWorks 中国站点的文章: z 《WebSphere Application Server 中的内存泄漏检测与分析:第 1 部分:内存泄漏概 述》 „ http://www.ibm.com/developerworks/cn/websphere/library/techarticles/0606_pod dar/0606_poddar.html z 《WebSphere Application Server 中的内存泄漏检测与分析:第 2 部分:用于泄漏检 测与分析的工具和功能》 „ http://www.ibm.com/developerworks/cn/websphere/library/techarticles/0608_pod dar/0608_poddar.html z 《WebSphere 应用服务器内存泄漏探测与诊断工具选择最佳实践》 „ http://www.ibm.com/developerworks/cn/websphere/library/techarticles/0609_xue developerWorks 中国站点:www.ibm.com/developerworks/cn/ 36 IBM WebSphere Application Server 常见问题及解答 chao/index.html 8. 如何解决系统宕机问题? 答: WAS 系统不会轻易的宕机,因为 WAS 容器能对它的内存和线程进行控制,大部分的情况 是由于内存问题造成系统宕机,如果这种情况发生,WAS 缺省的情况下会产生 JavaCore 文件和 Heap Dump 文件,需要对这两个文件进行分析。 另外的能导致系统宕机的情况是 WAS 调用外部程序,如对 C/C++程序的调用,这些 JNI 调用也有可能造成系统宕机,如遇 这种情况,从 WAS 出发找不到问题的根源的,需要从外部程序(C/C++)进行查找问题的 根源。 9. WAS 运行在什么平台上性能最好?是Intel、UNIX、 pSeries/AIX、Sun/Solaris,还是 zSeries/zOS? 答: 这里有几个关于 WAS 在不同平台上的性能总结。当然您要清楚,在选择 WAS 运行的平台 时需要考虑众多的因素,不仅是性能。 z WAS 几乎完全是一个 Java 应用程序(除了有一小部分平台相关的代码),基础代码对 任何平台都是一样的(除了 zSerires/zOS)。因此,性能的任何差别主要依赖底层硬件、 操作系统和 JVM 的性能。 z WebSphere的性能主要依赖于JVM的性能。JVM是本地代码,由IBM或者操作系统提供 者提供。IBM开发的JVM具有非常好的性能和可扩展性。pSeries平台上WebSphere 正 是使用IBM的JVM,它有着相当突出的性能和可扩展性。关于JVM性能基准的更多资源, 请访问以下站点:http://www.spec.org。 z WAS 代码对 SMP(对称多处理,Symmetrical Multi-Processing)处理器的可量测性 做了优化,通常的规则是:基于 UNIX,iSeries/OS400 和 zSeries/zOS 的 SMP 扩展 结果比基于 Intel 的更强。而在 UNIX 操作系统中,AIX 有最高的 SMP 扩展特性。 developerWorks 中国站点:www.ibm.com/developerworks/cn/ 37 IBM WebSphere Application Server 常见问题及解答 安全 1. 我希望通过启用 WAS 全局安全性保护系统管理,但是 我的应用程序本身并没有应用 J2EE 安全。我能够做些 什么呢? 答: 我们强烈建议所有的 WAS 用户使用全局安全。如果没有做这些,就意味着将应用服务器 公开给众多种类的攻击。通常情况下,简单启用全局安全对于应用程序并没有任何负面的影 响。然而,有一些可测量的性能指标和一些 API,比如 request.getRemoteUser(),在使用 安全的情况下会表现出不同的行为。如果应用程序依赖 request.getRemoteUser() 来返回 Web CGI 变量 REMOTE_USER 的值,在应用服务器启用安全的情况下它将崩溃。应用 服务器将返回空值,除非用户具备认证属性。我们强烈推荐应用程序利用 J2EE 安全,并 且不要禁用服务器级别的安全。 有关 WAS 安全性的更多资源,请参阅 developerWorks 中国站点文章《专家访谈:Keys Botzum 谈 WebSphere 安全性》: http://www.ibm.com/developerworks/cn/websphere/library/techarticles/0410_botzum/041 0_botzum.html 2. 当在 WAS 中实现自定义用户注册表的时候,都需要考 虑哪些问题? 答: 自定义用户注册表(UserRegistry 接口的一个实现,简称 CUR)使客户使用他们自己的自 定义注册表,而不是 WebSphere Application Server 中本来提供的两个:操作系统和 LDAP。首先,我们推荐如果您能避免的话尽量不要使用 CUR,因为这将限制同其他使用 LDAP 的应用程序的互操作性。然而,如果需要的话,您也可以编写一个 CUR。请注意, 您自己的自定义注册表实现可能没有依赖任何 WebSphere Application Server J2EE 组 件,诸如数据源,企业 Bean 等等。这是因为在启动时,安全是在其他大多数 WebSphere Application Server 组件之前初始化和可用的。如果您以前的实现使用这些组件,则需要做 一个更改来消除依赖。比如,如果您的应用以前用数据源来连接一个数据库,那么现在用 Java database connectivity(JDBC)来连接到数据库。注意在小心谨慎的情况下(和对初 始化过程的良好理解),在 CUR 中使用 DataSource 也是可能的,但是仅仅在一个应用服 务器内部(不是节点代理),并且仅仅在初始化结束以后。 有关 WAS 安全性的更多资源,请参阅 developerWorks 中国站点文章《专家访谈:Keys developerWorks 中国站点:www.ibm.com/developerworks/cn/ 38 IBM WebSphere Application Server 常见问题及解答 Botzum 谈 WebSphere 安全性》: http://www.ibm.com/developerworks/cn/websphere/library/techarticles/0410_botzum/041 0_botzum.html 3. 在非 admin 用户(Windows 平台)或非 root 用户 (Unix 平台)的环境中,如何为 WAS 设置安全特性? 答: 在非 admin 用户(Windows 平台)/非 root 用户(Unix 平台)环境中运行 WAS 时,在全局 安全(global security)特性被启用的前提下,用户的注册表(registry)必须是 LDAP 或一 个特定的注册表(自定义注册表)。 如果想使用本地操作系统的注册表,运行 WAS 的用户必须有管理员/root 用户的权限来调用 本地系统的认证或收集用户/组信息的 API。 4. 共享一个 WAS cell 的 J2EE 应用程序需要注意哪些 安全方面的问题? 答: 从根本上说,运行在同一个 Cell 中的应用程序有如下特点: z 管理操作是共同的,通过管理控制台; z 资源在 JNDI 中可见,因此可以被其他应用程序访问到,除非总是使用容器认证和别名; z 某些 WAS 子系统,如 DynaCache,在内部安全上没有什么规定,因此可被不明应用 程序访问; z 应用程序可访问 WAS JMS 基础结构,执行任何管理操作,包括改变其他应用程序或 cell 本身(Java2 禁止这种操作); z 即使启用了 Java 2 安全特性,应用程序也可以利用其知名的弱点而绕过 Java 2 安全检 查; 还有很多没列出来的问题。总之,WAS 不是被设计成从安全的角度考虑来隔离应用程序的。 5. 在使用基于表单登录的 WAS 应用程序中,为什么必须 使用单点登录? 答: 原因是非常简单的。通过使用单点登录(Single sign-on,SSO),WebSphere Application developerWorks 中国站点:www.ibm.com/developerworks/cn/ 39 IBM WebSphere Application Server 常见问题及解答 Server 在 Web 请求之间保留用户状态为 LTPA cookie。如果没有使用单点登录,每个单 独的请求都需要认证。如果您选择基于表单的登录,一旦表单完成了用户的认证,它将重定 向回原始请求的 URL。没有单点登录,用户的认证将丢失并且这些认证将失败。当使用基 本的认证时并不会出现这种情况,因为认证信息包含在每个 HTTP 请求中,并且 WebSphere Application Server 在任何需要的时候都可以使用它(这并不影响安全和性能)。 有关单点登陆的更多资源,请访问 developerWorks 中国站点文章: z 《WebSphere 环境下的 SSO 实现技术准备》 „ http://www.ibm.com/developerworks/cn/websphere/library/techarticles/xiaojing/S SOprepare/SSOprepare.html z 《WebSphere 环境下的 SSO 实现步骤》 „ http://www.ibm.com/developerworks/cn/websphere/library/techarticles/xiaojing/S SOimplement/SSOimplement.html developerWorks 中国站点:www.ibm.com/developerworks/cn/ 40 IBM WebSphere Application Server 常见问题及解答 迁移 1. 我是否可以将应用程序从 JBOSS 迁移到 WebSphere Application Server Community Edition? 答: 当然可以! JBoss Application Server 是一种兼容 J2EE 1.4 的开放源代码应用程序服务器。而 IBM WebSphere Application Server Community Edition (简称 WAS CE)是一种基于开放源 代码 Apache Geronimo 项目的 J2EE 容器,符合 J2EE 1.4 认证。您可以方便的将 J2EE 应用程序从 JBOSS 迁移到 WebSphere Application Server Community Edition。 迁移的详细步骤请参阅 developerWorks 中国站点上的文章《从 JBoss 迁移到 WebSphere Application Server Community Edition》: http://www.ibm.com/developerworks/cn/websphere/library/techarticles/0511_nagarajan2/ 0511_nagarajan2.html 另外,您也可以将应用程序从 Tomcat 、WebLogic 向 WAS 迁移,详细信息请访问 developerWorks 中国站点上的“迁移专题”: http://www.ibm.com/developerworks/cn/ondemand/migrate/server.html 2. 我是否应该迁移到“x”版本的 WAS? 答: 此问题通常与特定版本(如 V5.1、V6.02、V6.1 等)有关。 如果问何时针对特定软件版本进行生产部署,则最重要的因素应该是该版本的成熟和稳定。 您需要根据维护版本考虑所选用的软件版本。当然,在生产部署前要进行适当的测试。在这 段时间内,维护团队将针对预发布测试中可能遗漏的问题提供更新版本和修复程序。 决定何时进行迁移时必须考虑的另一个事项是,硬件、操作系统和第三方应用程序的生产更 换或转换周期的时间。有些客户可能选择立即升级或更新其整个基础结构,而有些可能选择 交错升级。无论采用哪一种方式,您对这一方面的策略和计划也应当有所考虑。 经验表明,大多数客户可以在 WebSphere Application Server V6.x 上重新部署 J2EE 1.2 或 J2EE 1.3 应用程序,而无需进行任何应用程序更改。 developerWorks 中国站点:www.ibm.com/developerworks/cn/ 41 IBM WebSphere Application Server 常见问题及解答 3. 我应该从 32 位 WAS 迁移到 64 位 WAS 吗? 答: 视情况而定。64 位并不会自动地提供更好的性能,实际上对大多数的应用程序来说,并没 有什么优势。下列的应用程序可以获得最大的性能提升: z 内存限制——64 位所提供的额外内存可以支持更好的缓冲策略,使得应用程序可以避 免开销很高的查询,等等。 z 计算上开销很高的代码,如数值分析、算法,等等。与使用 32 位的寄存器相比,由 于使用了 64 位的寄存器,要执行相应的计算工作,只需使用更少的指令。 如果您的应用程序符合上述的标准,那么您可以在 64 位的环境中对您的应用程序进行测 试,以分析是否有迁移的价值。请记住,很多从 32 位迁移到 64 位的应用程序并没有实 现性能的优势,相反带来了更大的内存占用,因为 64 位地址所占用的空间是 32 位地址 所占用空间的两倍。更大的内存占用还将很快地填满 L2/L3 缓存,这样会对性能产生负面 的影响。 developerWorks 中国站点:www.ibm.com/developerworks/cn/ 42 IBM WebSphere Application Server 常见问题及解答 故障诊断 1. 应用服务器宕机后,为了方便分析问题,需要收集哪些日 志? 答: 当应用服务器发生挂起、或者发生 out-of-menmory 的现象时,为了更好的全面分析问题, 则需要收集一定的日志信息,一般情况下我们需要收集以下这些日志: z 如果可能在问题重新出现之前打开垃圾回收开关,收集垃圾回收日志一般存储在 native_stderr.log 或者 native_stdout.log。 z 收集 Web server 服务器,插件 Plug-in(plugin-cfg.xml and http_plugin.log)的日志及 配置文件。以及应用服务器(install_root/profiles/profile_name/logs/server_name)下 所有的日志。. z 在 install_root/profiles/profile_name/目录下的 JavaCore 文件和 Heapdump 文件,如 果没有这些文件,可以在服务器没有响应的时候,运行命令来生成这些文件,对于 IBM JDK 中可以运行 kill -3 PID_Java_jvm,然后每隔两分钟,重复执行该命令,至少 3 次, 通过该命令生成的 JavaCore 文件会在 install_root/ profiles 目录下。 z FFDC 目录下的日志,install_root/profiles/profile_name/logs/ffdc。 z 如果应用程序具有自身的日志文件,也应收集对应的日志文件。 2. 如何打开详细垃圾回收的开关? 答: 如果您的应用程序频繁出现内存溢出(out-of-memory)的错误现象,那么为了找出问题的 所在,我们必须了解内存的分配情况和使用情况,那么这时候我们就需要详细垃圾回收的信 息和日志,为了得到这些信息,我们必须打开详细垃圾回收的开关。打开的步骤如下: 在管理控制台中点击服务器 > 应用服务器 > server1(或者是您自己定义服务器名) > JAVA 和进程管理 > 进程定义 > Java 虚拟机 > 选中详细垃圾回收选项,重启应用服务器, 即可生效。打开垃圾回收开关后,关于内存的使用情况的日志会存储到相应的日志目录中的 native_stdout.log 文件中,并且可以通过分析该文件中的信息快速的找到产生问题的根源。 developerWorks 中国站点:www.ibm.com/developerworks/cn/ 43 IBM WebSphere Application Server 常见问题及解答 其他 1. IBM 的 HTTP Server 和 Apache 有什么关系? 答: 由 Apache 驱动的 IHS (IBM HTTP Server),是以流行的 Apache webserver 为基础的功 能强大、坚固、安全并免费的 webserver。同时也是 IBM 和 Apache 合作的结晶。IHS 采 用最新而且稳定的 Apache 代码树,增加了一些模块以改善性能、安全性和可用性,并将 产品打包,用于 AIX、Solaris、Linux、Windows NT 以及 HP/UX 上。这些捆绑的模块有: z AFPA:Adaptive Fast-Path Architecture 提供内核级别的 TCP/IP 高速缓存,极大提 高了 webserver 的性能。 z Administration Server:提供远程 GUI 界面,以使用浏览器对 web server 进行配 置和控制。 z SSL:提供对 Secure Sockets Layer 3.0 规范的完全支持,以及基于 JAVA 的密钥管 理实用程序。 如果您对 IBM HTTP Server 感兴趣,可以参阅以下网址: http://www.ibm.com/software/webservers/httpservers/about.html developerWorks 中国站点:www.ibm.com/developerworks/cn/ 44 IBM WebSphere Application Server 常见问题及解答 推荐参考资源 developerWorks 中国网站 z WebSphere 专区: „ http://www.ibm.com/developerworks/cn/websphere/ z WebSphere 新手入门 „ http://www.ibm.com/developerworks/cn/websphere/newto/ z WebSphere Application Server 新手入门 „ http://www.ibm.com/developerworks/cn/websphere/zones/was/newto/index.html z WebSphere Application Server 专栏 „ http://www.ibm.com/developerworks/cn/websphere/zones/was/bigpicture.html z WebSphere V6 专题 „ http://www.ibm.com/developerworks/cn/websphere/zones/was/theme/was6.html z WebSphere 在线用户组 „ http://www.ibm.com/developerworks/cn/websphere/wug/ z WebSphere Application Server V6.1 试用版下载 „ http://www.ibm.com/developerworks/downloads/ws/was/ z WebSphere Application Server Community Edition 专栏 „ http://www.ibm.com/developerworks/cn/websphere/zones/was/wasce.html z WebSphere Application Server Community Edition 下载 „ http://www.ibm.com/developerworks/cn/downloads/ws/wasce/ IBM 红皮书 z WebSphere Application Server V6.1: System Management and Configuration „ http://publib-b.boulder.ibm.com/abstracts/sg247304.html?Open z WebSphere Application Server V6.1: Planning and Design „ http://publib-b.boulder.ibm.com/abstracts/sg247305.html?Open z WebSphere Application Server V6.1 Security Handbook „ http://publib-b.boulder.ibm.com/abstracts/sg246316.html?Open z WebSphere Application Server V6 System Management & Configuration Handbook „ http://publib-b.boulder.ibm.com/abstracts/sg246451.html?Open z WebSphere Application Server V6 Scalability and Performance Handbook „ http://publib-b.boulder.ibm.com/abstracts/sg246392.html?Open ibm.com z WebSphere Application Server 站点 „ http://www-306.ibm.com/software/webservers/appserv/was/ developerWorks 中国站点:www.ibm.com/developerworks/cn/ 45 IBM WebSphere Application Server 常见问题及解答 z WebSphere Application Server 产品支持 „ http://www-306.ibm.com/software/webservers/appserv/was/support/ z WebSphere Application Server 各版本的补丁程序下载 „ http://www-1.ibm.com/support/docview.wss?rs=180&uid=swg27006899 z WebSphere Application Server 的推荐补丁程序下载 „ http://www-1.ibm.com/support/docview.wss?rs=180&uid=swg27004980 z IBM 技术交流论坛 „ http://www.ibm.com/cn/support/forum/app/tscforum/default InfoCenter z WebSphere Application Server V6.1 信息中心 „ http://publib.boulder.ibm.com/infocenter/wasinfo/v6r1/index.jsp developerWorks 中国站点:www.ibm.com/developerworks/cn/ 46
还剩45页未读

继续阅读

下载pdf到电脑,查找使用更方便

pdf的实际排版效果,会与网站的显示效果略有不同!!

需要 10 金币 [ 分享pdf获得金币 ] 3 人已下载

下载pdf

pdf贡献者

huafenged

贡献于2012-07-24

下载需要 10 金币 [金币充值 ]
亲,您也可以通过 分享原创pdf 来获得金币奖励!
下载pdf