本文主要解决如何在Java 应用程序的服务器端使用IBM Rational PurifyPlus的问题。
简介
这份白皮书主要解决如何在Java 应用程序的服务器端使用IBM Rational PurifyPlus的问题。
这些说明也许并不能完全满足每种可能的部署环境――例如一个托管并运行Java server端组件的Java应用服务器。另外,现在市场上也有很多种Java 应用服务器。这份白皮书展示了一种经过验证的有效方法来使用Rational PurifyPlus测试运行在Apache Jakarta Tomcat Version 4 服务器上的 JSP(Java ServePages)和 Java Servlet应用程序。类似的方法可以应用在商业性的Java 应用服务器上;许多运行在BEA WebLogic(版本5.1、6.0、6.1)和IBM WebSphere( 版本3.5 和 4)的J2EE应用程序都因此得到了"净化"。
关于 Jakarta Tomcat
Jakarta是一个Sun公司支持的开源项目。它的最终目标是创造一个质量达到了那些商业解决方案要求的免费J2EE服务器端解决方案。Tomcat应用程序是整个项目的主要部分,并且在很多人看来,它几乎就等同于整个的 Jakarta 项目。Tomcat并不是一个完整的Java 应用服务器,它只是一个 Servlet+JSP 引擎,不过用它来部署和测试 JSP 和 Java Servlet 应用程序是绰绰有余的。它既可以独立运行,也可以集成在 Apache Web 服务器中运行。之所以选中 Tomcat 是因为它非常健壮、可靠,并可以免费获取。更多的关于Tomcat和Jakarta项目的信息可在文档末尾的参考文献列表中找到,在参考文献中列出的页面同时还包括一个到Tomcat安装程序和源代码的URL地址。
关于 IBM Rational PurifyPlus
PurifyPlus是一个测试Java应用程序的完整解决方案。它包括三个应用程序:
这三种工具不仅对Java,对Visual C/C++,Visual Basic和.Net应用也都提供了全面的支持。在这份白皮书中,Rational PurifyPlus指的是 Rational PurifyPlus 版本2001A。为了利用 Rational PurifyPlus来测试 Java Server端应用程序,您必须先在服务器上安装它。
关于 Servlets 和 JavaServePages
Servlets是运行在服务器端的 Java 应用程序;它们的主要作用是根据客户端的需要为Web页面创建内容。客户端通常是一个 Web 浏览器和一个用户用来输入数据的网页,这些数据将由运行在服务器端的Servlet处理。而 Servlet 处理的结果则将显示在客户端的网页上。
JavaServerPage(JSP) 基本上是一些 HTML 页面,它们带有一些特殊的标签可以用来将 Java代码包含进来或者访问服务器端运行的 Java beans 和servlet。Rational PurifyPlus并不能检查HTML语法,但它却可以通过监控从JVM(JAVA 虚拟机)上收集到的事件来测试JSP中包含的Java部分。
准备利用Rational PurifyPlus进行测试的Java servlets和JavaServer Pages
PurifyPlus提供了两种基本的数据收集级别: 方法级和行级。如果使用方法级来测试Java应用程序,您就不需要重编译测试的Java程序来获得所有和那些方法相关的数据。如果您对行级的信息感兴趣,那您就得用Symbolic调试信息来重编译Java代码。在Sun的Java编译器中用来得到Java类文件中的Symbols的开关是 '-g'。
|
所有在兼容Sun Java2的虚拟机上运行的Java应用程序信息都可以通过JVMPI(Java Vitrul Machine Profiling Interface )收集。注意必须使用与Sun Java2 要求完全兼容的JAVA 虚拟机。Rational PurifyPlus 同时也完全支持 Microsoft Java 虚拟机。
在编译 servlet 时您需要在 CLASSPATH 中包含 servlet 库"servlet.jar"。整个库文件是随 Tomcat 一起安装的,可以在目录
|
准备 Windows 环境以便利用 Rational PurifyPlus 测试 JSP 和 Java Servlets
环境变量:
JAVA_HOME
指明了默认 JVM 的 home 目录。它也是使用 Rational PurifyPlus 的JVM的默认选择。为了正确安装 Java 使得 PurifyPlus 可以运行,您必须在一个新的Java服务创建之后第一次profiling之前执行下面的命令行:
|
这个命令会更新选中的Java实时环境(JRE:Java Runtime Enviroment)的Java Policy文件。现在来看另一个环境变量:
|
Rational PurifyPlus 通过 Java 虚拟机假脱机接口(JVMPI)来收集所有关于Java应用程序的信息。因为JVM和Rational PurifyPlus是作为两个不同的进程运行的,Java进程需要载入一个名为PureJVMPI的PurifyPlus共享文件来侦听 JVM 事件,通过 JVMPI 收集运行数据。这个动态连接库是通过一个运行Java可执行文件时的附加选项:'-Xrun'来加载的。这里有一个关于PurifyPlus如何从命令行启动的例子:
|
为了分析服务器端Java应用程序和服务,您需要手动创建一个特殊的包括"-Xrun"选项的系统参数,从而在每一次使用JAVA虚拟机时自动运行选中的PurifyPlus工具。对Sun JVM,整个变量的名称是_JAVA_OPTIONS,它的值应该是:
|
如果您使用的的是IBM JVM(在运行IBM WebSphere Java应用服务器时必须选择该JVM),那么整个环境变量的名字应该是 IBM_JAVA_OPTIONS.
在_JAVA_OPTIONS环境变量中设置的上述选项会使Tomcat应用程序运行时启动Rational Purify(或者Quantify和PureCoverage),而Purify(或者Quantify和PureCoverage)则会自动的开始收集该Java进程的数据。您可以使它的报告不包含与测试的JSPs和Servlets无关的数据,具体方式是通过预滤器(pre-filter)或PurifyPlus的过滤管理器来实现的。
准备Java 应用服务器环境来运行Rational PurifyPlus
为了使PurifyPlus和Java应用服务器一起运行,必须为服务器和PurifyPlus工具指定相同的JAVA_HOME 参数。对Apache Tomcat,您可以直接执行下列命令:
|
如果是BEA WebLogic 服务器或者IBM WebSphere,可以修改您用来安装环境的批处理文件,只要根据如上所示改变参数JAVA_HOME的值就可以了。
准备PurifyPlus来收集在Apache Tomcat上运行的Java应用程序信息
为了使PurifyPlus可以收集在Apache Tomcat上运行的Java servlet或者JSP信息,您必须在开始测试之前创建一个自定义的预滤器(pre_filter)。
PurifyPlus过滤器。在PurifyPlus中有两种途径来过滤与测试无关的数据。第一种方法是为您要使用的工具(Rational PrufifyPlus、Quantify或PureCoverage)设定一个预滤器。
过滤器是一个列表,它包含了那些无需从中获取数据的Java包的名字。整个列表在Profile.ini文件的[Prefilter]节定义,您可以在PurifyPlus工具的主目录下找到该文件。
列表上的每个Java包都必须位于新行。请看一个演示预过滤在PurifyPlus中如何工作的例子:
图1: 一个Rational PurifyPlus 的 Profile.ini文件
假设我们想要过滤Java包com.sun 。如果我们将 "com.sun."(请注意这里字符串末尾的点号)作为一行放到Profile.ini的pre-filetering部分,那么这个文件和它的所有子包都将在PruifyPlus进行数据收集时被排除在外(请看图1)。如果要预过滤单个的类,您可以使用该类的全名(不需要结束的点号)。例如,com.rational.MyClass将预过滤com.rational包中的MyClass。如果您仅仅指明了类文件(e.g.MyClass),那么所有的包中的这个类都将被过滤掉。PurifyPlus不能过滤一个类的单个方法。