使用WebSphere Process Server进行持续集成

 
   | |

导读:本文研究使用CruiseControl作为持续集成服务器,以监视CVS存储库中的SCA构件,并在每当发生更改时在IBM WebSphere Process Server上运行测试用例。

关键词:持续集成 服务器 CVS 存储库 SCA构件 测试用例

 
正在加载数据...

  本系列的第1部分重点介绍了在IBM? WebSphere? Integration Developer中编写SCA业务流程之前,如何使用Cactus为SCA数据映射编写测试用例。第2部分将研究如何使用CruiseControl作为持续集成服务器,以监视CVS存储库中的SCA构件,并在每当发生更改时在IBM WebSphere Process Server上运行测试用例。

  来自IBM WebSphere Developer Technical Journal。

  引言

  敏捷软件开发是许多软件开发方法的行业公认最佳实践,它使得持续集成变得非常流行。持续集成的主要功能是双重的:

  ·在单步构建过程中测试整个应用程序而不只是测试单个项目。构建过程签出所有代码,构建整个应用程序,运行所有单元测试,并向开发人员报告结果。
  ·按定期间隔运行的计划构建过程;例如,每当代码发生更改的时候。如果构建中发生任何问题,可以立即对其进行查找和纠正。

  持续集成缩短了开发SOA应用程序所花的时间。当您做出更改时,提交更改之前您不必运行整个系统中所有服务的测试用例。您可以测试服务并提交更改,然后让持续集成服务器运行其他服务的所有测试用例。如果存在问题,您将迅速获得通知,并且可以立即处理问题。

  持续集成还使得查找和修复SOA应用程序中的问题变得更加容易。当问题发生时,您只需查看在上次构建间隔期间做出的更改即可修复问题。此外,做出更改时将自动进行构建,因此如果发生问题,问题不会发展为更大的问题。

  在这个有关SOA环境中的测试驱动的开发系列中,第1部分向您介绍了如何为SOA应用程序编写单元测试。本文演示如何使用持续集成服务器来测试运行于IBM WebSphere Process Server上的服务组件体系结构(Service Component Architecture,SCA)应用程序。该持续集成服务器是在以下开放源代码项目的基础上构建而成的:

  ·CVSNT 2.5.03用作开放源代码存储库。
  ·CruiseControl 2.7.3用作持续集成服务器。
  ·Ant 1.7.0用于构建第1部分中的SOA应用程序。

  除了这些开放源代码项目以外,本文还使用第1部分中的示例应用程序来演示如何自动构建和测试SOA应用程序。该示例应用程序是使用IBM WebSphere Integration Developer V6.1(以下称为Integration Developer)来开发的。本文的其余部分将对该过程进行阐述:

  ·创建源代码存储库:创建一个源代码存储库来存储该示例应用程序以便进行团队开发。
  ·将应用程序签入存储库:将该示例应用程序签入源代码存储库,以使其对持续集成服务器可用。
  ·启动WebSphere Process Server:启动WebSphere Process Server V6.1,以使其能够部署该应用程序并代表持续集成服务器运行测试。
  ·启动持续集成服务器:启动持续集成服务器,以使其能够轮询存储库中的应用程序更改。每当检测到更改,它将构建并测试该应用程序,并向开发人员报告任何问题。

  创建源代码存储库

  在任何持续集成环境中,您都需要为维护WebSphere Process Server应用程序的版本控制系统建立中央服务器。该服务器必须可由所有团队成员以及持续集成服务器访问。使用此中央存储库,团队成员将签入他们的SCA组件和测试用例,然后持续集成服务器将它们签出以执行构建。

  在本部分中,您将了解如何设置版本控制系统,并创建用于维护WebSphere Process Server应用程序和测试用例的存储库。请在您用作中央版本控制服务器的计算机上执行以下步骤:

  ·安装CVSNT。

  下载CSVNT Server并按照安装向导的指示对其进行安装。选择Typical安装。完成安装后,重新启动系统以使更改生效。

  ·创建CVS存储库。

  决定您希望存储库位于文件系统上的什么位置。存储库是CVS将在其中维护文件(文件的存档版本)的根目录。存储库目录名称不能包含空格,因此要使用诸如c:\cvsrepo或类似的路径。可以使用CVSNT控制程序创建存储库:

  选择“开始”=>“程序”=>“CVSNT”=>“CVSNT Control Program”。
  选择About选项卡并停止CVSNT服务和锁服务。
  选择Add以添加新存储库。
  浏览到存储库所在的路径。如果该目录不存在,可以使用New Folder按钮为您的新存储库创建文件夹结构。创建一个存储库(例如c:\cvsrepo)并选择OK以添加该存储库。
  如果该存储库是新的,则会提示您对其进行创建和初始化。回答Yes以创建并初始化该新存储库。
  选择About选项卡并启动CVSNT服务和锁服务。

  ·保护CVS存储库。

  可以采用多种方式保护对CVS存储库的访问。尽管存在更安全的方法,但本文将使用pserver协议,因为它非常容易使用和配置。如果您希望使用更安全的协议,请参阅参考资料中的CVS手册。

  要配置pserver协议,您必须确定该CVS存储库的管理员。为此,请在存储库下的CVSRoot目录中创建一个名为passwd的文件。例如,如果CVS存储库在c:\csvrepo之下,则此文件将在c:\cvsrepo\CVSROOT中。此文件应该包含单个行,即当前登录用户的名称。如果当前登录用户为admin,则此文件的内容应该类似如下:

  admin:

  停止并重新启动CVSNT服务和锁服务。

  ·测试CVS连接。

  打开控制台窗口并输入:

  set CVSROOT=:pserver:admin@localhost:/cvsrepo
cvs login

  然后系统将提示您输入密码。

  将应用程序签入存储库

  出于演示目的,您将使用本系列的第1部分中开发的示例应用程序。为此,您需要将Integration Developer与CVS集成,并将Integration Developer项目签入CVS。一旦将项目签入了CVS,持续集成服务器就可以在每当发生更改时签出项目,运行构建,并执行测试。

  ·配置Integration Developer以访问CVS存储库。

  Integration Developer提供了内置的支持,允许使用CVS存储库对构成WebSphere Process Server应用程序的SCA组件和构件进行版本控制。为了将SCA构件从Integration Developer中签入CVS,您必须配置Integration Developer以访问CVS存储库:

  在Integration Developer中,选择Window => Open Perspective => Other。
  选择CVS Repository Exploring透视图。单击鼠标右键并选择New => Repository Location。
  输入运行CVSNT服务的主计算机的名称。
  输入存储库在该计算机上所在的路径。例如,如果存储库在服务器上位于c:\cvsrepo,则存储库位置将为\cvsrepo。
  输入CVS用户ID作为用户名和密码;这应该是您的本地帐户信息。
  确保选择pserver作为连接类型,并选择缺省端口。

  输入此信息以后,Integration Developer将提示您输入密码,验证存储库访问权限,并且在您获得授权的情况下,允许您将SOA应用程序签入CVS,包括SCA模块、SCA库和Web测试用例。

  ·签入Integration Developer项目。

  获得该示例应用程序的副本,它是一个可从第1部分下载的项目交换文件。将项目交换文件导入Integration Developer并通过运行单元测试来验证安装之后,您可以将Integration Developer项目签入CVS:

  打开Business Integration透视图。您应该看到三个项目:

  L_AddressCleansingService
  T_AddressCleansingService
  T_AddressCleansingServiceJUnitWeb。

  右键单击某个项目并选择Team => Share Project...
  选择存储库类型,在此例中为CVS,但它也可以是ClearCase。
  添加可选的注释以便进行版本跟踪。

  对每个项目执行步骤b至d,然后所有文件将被上载到CVS存储库,并且该示例应用程序可供持续集成服务器签出。

  启动WebSphere Process Server

  在设置持续集成服务器之前,确保WebSphere Process Server V6.1正在运行。需要WebSphere Process Server的实例才能按照持续集成服务器的指示部署SCA模块和运行测试用例。

  就本文而言,我们将使用Integration Developer附带的WebSphere Process Server实例,因为它已经安装了。如果您愿意,也可以使用WebSphere Process Server的独立实例来运行构建,而不使用Integration Developer来实现此目的。在任一种情况下,都必须有一个WebSphere Process Server实例正在运行。只有这样,持续集成服务器才能构建和测试SCA模块。

  启动持续集成服务器

  存在若干可用的开放源代码持续集成服务器,例如CruiseControl、AntHill、Hudson、Luntbuild和Apache Continuum。就本文而言,这里将使用CruiseControl。

  ·下载并安装某个持续集成服务器。

  按照下载说明获得并安装CruiseControl的二进制分发版。在本文编写之际,最新的版本为2.7.3版。在安装时,服务器文件将解压缩到某个文件夹,例如d:\cruise。

  ·创建工作目录。

  下面您需要在集成服务器计算机上创建工作目录。CruiseControl将在这些工作目录中运行构建并存储结果。应该将这些目录与CruiseControl安装目录分离。清单1显示了持续集成服务器的目录结构。本文附带的下载文件中包括了这些目录。

  清单1. 目录结构
      
\builds
  contains the Cruise configuration file and a script to start the Cruise server
  \projects
      \L_AddressCleansingService
          contains this project’ build.xml file and a runbuild.bat script
          \source
    contains the inputs to the build script, e.g. SCA artifacts
          \target
    contains the outputs from the build script, e.g. test results
  \artifacts
      \L_AddressCleansingService
          contains time stamped sub-directories with published build artifacts
  \logs
      \L_AddressCleansingService
          contains the status.txt file indicating the build status

  您需要了解这些工作目录,这样才能编写构建脚本和配置CruiseControl以构建项目。清单1提供了简单的说明。所有集成构建将在\builds目录中执行。在\builds目录下,还存在三个子目录:

  ·\projects目录包含子目录,由持续集成服务器构建的每个项目对应于一个子目录。其中每个子目录包含:

  build.xml文件,将由持续集成服务器运行。
  \source目录,包含将从CVS签出的SCA构件。
  \target目录,将包含构建结果。

  ·\artifacts目录还包含针对每个项目的子目录。其中每个子目录包含多个带时间戳的子目录,每次成功的构建对应一个子目录。带时间戳的子目录包含已发布的构建结果。在此例中,它将包含项目的\target目录的内容(清单1)。
  ·\logs目录也包含针对每个项目的子目录。该子目录中有一个status.txt文件,指示当前的构建状态;例如,某次构建是正在进行还是在等待运行。

  ·编写构建脚本。

  最初,您需要手动将构建项目所需的CVS模块签出到项目的\source目录。就本文而言,所需的CVS模块为:

  L_AddressCleansingService:接受测试的SCA库。
  T_AddressCleansingService:用于测试该库的SCA模块。
  T_AddressCleansingServiceJUnitWeb:用于测试该库的Cactus测试用例。

  将模块签出到\projects\L_AddressCleansingService\source目录中。签出模块之后,CruiseControl将监视CVS中的那些模块的更改,并根据需要计划构建。您不需要再次手动签出它们。

  为了帮助您签出CVS模块,\projects\L_AddressCleansingService目录中提供了一个runbuild.bat文件。请确保在runbuild.bat文件中正确地设置环境。打开控制台窗口并输入runbuild checkout。

  下一步,您需要编写Ant构建脚本,CruiseControl将运行该脚本以构建您的项目。\projects\L_AddressCleansingService目录中提供了一个名为build.xml的示例。每当检测到更改并且需要构建项目时,CruiseControl将调用该构建脚本。当构建运行时,它将:

  目标:清理——删除\source和\target目录。
  目标:初始化——创建\source和\target目录。
  目标:签出——从CVS存储库获取最新源代码。
  目标:构建——构建用于WebSphere Process Server的SCA模块。
  目标:安装——将SCA模块安装到WebSphere Process Server。
  目标:启动——在WebSphere Process Server中启动SCA模块。
  目标:测试——在WebSphere Process Server中运行单元测试。
  目标:停止——在WebSphere Process Server中停止SCA模块。
  目标:卸载——从WebSphere Process Server卸载该SCA模块。

  每次将通过销毁\source和\target目录然后从CVS获得模块来创建清洁的构建。这可以避免增量构建所产生的潜在问题。

  以下是上面列出的构建脚本主要目标以及缺省目标(全部)的定义,缺省目标将按上述顺序调用主要目标。(Ant构建脚本可从下载文件中获得。)

  目标:全部是缺省Ant目标,由CruiseControl在需要运行构建时调用。它依赖许多按以下顺序运行的其他目标:清理、初始化、签出、构建、安装、启动、停止和卸载。

  清单2. 目标:所有
        
<target
   name="all"
   depends="clean, init, checkout, build, install, start, test,
  stop, uninstall">
  </target>

  目标:清理通过删除\source目录和\target目录清除前一次构建。这将删除前一次构建中使用的源代码和类文件。这样可以确保此次构建将从清洁状态开始。

  清单3. 目标:清理
        
<target name="clean">
     <delete dir="${source.dir}"/>
     <delete dir="${target.dir}"/>
     </target>

  目标:初始化设置运行此构建所需要的环境。创建\source目录和\target目录。它建立用于此构建的工作目录

  清单4. 目标:初始化
        
<target name="init">
    <mkdir dir="${source.dir}"/>
    <mkdir dir="${target.dir}"/>
    </target>

  目标:签出构建此项目所需要的CVS模块。也就是说,它将CVS模块的最新副本签出到\source子目录中。

  清单5. 目标:签出
        
<target name="checkout">
  <cvs
    command="-q co -d source/${test.module.name} ${test.module.name}">
  </cvs>
  <cvs
    command="-q co -d source/${test.webapp.name} ${test.webapp.name}">
  </cvs>
  <cvs
    command="-q co -d source/${library.name} ${library.name}">     
  </cvs>
  </target>

  目标:构建用于WebSphere Process Server的SCA模块。它首先创建一个.zip文件,其中包含SCA模块及其依赖项。然后它使用IBM serviceDeploy任务生成EAR文件。

  清单6. 目标:构建
        
<target name="build">
   <zip
      destfile="${target.dir}/${test.module.name}.zip"
      basedir="${source.dir}"
      includes="${test.module.name}/**,${test.webapp.name}/**,
  ${library.name}/**">
   </zip>

   <serviceDeploy 
     scaModule="${target.dir}/${test.module.name}.zip"
     outputApplication="${target.dir}/${test.module.name}.ear"
     workingDirectory="${target.dir}"
     wasHome="${wps.home}">
   </serviceDeploy>
   </target>

  目标:安装将SCA模块安装到WebSphere Process Server。

  清单7. 目标:安装
        
  <target name="install">
     <wsInstallApp
        profilename="${profile.name}"
        wasHome="${wps.home}"
        ear="${target.dir}/${test.module.name}.ear">
    </wsInstallApp>
    </target>

  目标:启动在WebSphere Process Server上启动SCA模块。

  清单8. 目标:启动
        
  <target name="start">
     <wsStartApp
        profilename="wps"
        user="admin"
        password="admin"
        wasHome="${wps.home}"
        application="${test.module.name}App" >
     </wsStartApp>
     </target>

  目标:测试在WebSphere Process Server上运行Cactus测试用例,并将输出发送到项目的\test-results目录中的XML文件,以便持续集成服务器能够显示测试结果。为此,它首先编译测试用例,然后使用JUnit来运行那些测试用例。

  清单9. 目标:测试
        
<target name="runTest">

  <mkdir dir="${target.dir}/test-classes"/>
  <javac
    destdir="${target.dir}/test-classes"
    srcdir="${source.dir}/${test.webapp.name}/JavaSource">
    <classpath>
      <path refid="compile.class.path"/>
    </classpath>
    <include name="**/*Test.java" />
  </javac>

  <mkdir dir="${target.dir}/test-results"/>
  <junit fork="yes">
    <classpath>
      <path refid="test.class.path"/>
    </classpath>
    <formatter type="brief" usefile="false" />
    <formatter type="xml" />
    <batchtest todir="${target.dir}/test-results">
      <fileset
        dir="${target.dir}/test-classes"
        includes="**/*Test.class">
      </fileset>
    </batchtest>
    <jvmarg
      value="-Dcactus.contextURL=${cactus.context.url}">
    </jvmarg>
  </junit>

</target>

  目标:停止在WebSphere Process Server上停止SCA模块。

  清单10. 目标:停止
        
  <target name="stop">
     <wsStopApp
        profilename="${profile.name}"
        wasHome="${wps.home}"
        application="${test.module.name}App" >
     </wsStopApp>
     </target>

  目标:卸载从WebSphere Process Server卸载该SCA模块。

  清单11. 目标:卸载
        
  <target name="uninstall">
     <wsUninstallApp
        profilename="${profile.name}"
        wasHome="${wps.home}"
        application="${test.module.name}App" >
    </wsUninstallApp>
    </target>

  配置CruiseControl以构建项目。

  可以通过配置XML文件对Cruise Control进行配置。此文件控制构建循环,并告诉CruiseControl如何以及何时应该运行构建。用于此示例的配置文件为config.xml文件,包含在\builds目录中,并将在下面逐个部分地对其进行描述。可以从本文附带的下载文件中获得config.xml的副本。

  定义项目。

  config.xml文件的前几行定义项目:

  清单12. config.xml
         
<cruisecontrol>
   <project name="L_AddressCleansingService" buildafterfailed="false">

  <project>元素定义CruiseControl负责构建的项目。此文件中可能有多个project元素,每个元素分别具有唯一的名称。在此<project>元素中,buildafterfailed的值设置为Fasle,以便在构建失败后,如果自从该构建以来CVS中没有对源文件做出更改,则不再重新尝试该构建。

  侦听构建事件

  下一步,定义在构建过程中接受事件通知的侦听器:

  清单13. 定义侦听器
         
<listeners>
   <currentbuildstatuslistener
      file="./logs/${project.name}/status.txt">
   </currentbuildstatuslistener>
</listeners>

  在此配置文件中,<currentbuildstatuslistener>元素被指定将构建的当前状态写到\logs\L_AddressCleansingService\status.txt文件。此状态指示CruiseControl是正在尝试某个构建还是在等待尝试某个构建。采用这种方式,可以通过CruiseControl Web应用程序获得当前构建状态。

  检查更改。

  定义CruiseControl如何检查更改以确定是否需要某个构建:

  清单14. 检查更改
         
<modificationset quietperiod="30">
   <cvs localworkingcopy="${source.dir}/${test.module.name}"/>
   <cvs localworkingcopy="${source.dir}/${test.webapp.name}"/>
   <cvs localworkingcopy="${source.dir}/${library.name}"/>
</modificationset>

  <modificationset>元素指定要检查什么CVS模块的更改以确定是否需要某个构建。在上面的<modificationset>元素中,值为30的quietperiod指示CVS存储库在尝试某个构建之前必须静默30秒钟。这为开发人员提供了在尝试构建之前签入所有更改的机会。

  三个带localworkingcopy属性的<cvs>元素指向构建项目所必需的CVS模块的本地副本。<cvs>元素使CruiseControl能够定位CVS存储库并检查更改。它不执行签出;签出是由构建脚本执行的。

  除了CVS以外,还有一个针对ClearCase用户的<clearcase>元素。

  定义构建间隔。

  定义构建间隔和要调用的构建脚本:

  清单15. 定义构建间隔
         
<schedule interval="60">
   <ant anthome="${ant.home}"
        buildfile="${projects.dir}/${project.name}/build.xml"
        target="all"/>
</schedule>

  <schedule>元素指定构建间隔。在此示例中,构建间隔设置为60秒。这告诉CruiseControl每隔60秒检查一次CVS存储库中的文件更改。如果存在更改,则将会进行构建;如果不存在更改,则CruiseControl将在60秒后再次检查。<ant>元素将Ant脚本的位置和每当运行构建时要调用的目标告诉CruiseControl。在此例中,CruiseControl将运行\projects\L_AddressCleansingService\build.xml文件中的所有目标。

  定义日志目录

  定义CruiseControl日志的位置并记录JUnit测试结果:

  清单16定义日志位置
         
<log dir="${logs.dir}/${project.name}">
   <merge dir="${target.dir}/test-results"/>
</log>

  <log>元素指定日志文件的位置。CruiseControl在每次尝试某个构建时在\logs\L_AddressCleansingService目录中创建一个日志文件。

  除了CruiseControl创建的日志文件条目以外,您还可能希望记录JUnit测试用例产生的测试结果。为此,可以使用<merge>元素,并将其目录属性指向构建脚本以将JUnit测试结果作为XML来写入的位置。

  发布构建构件。

  发布您希望保留的构建构件,如EAR文件:

  清单17. 发布构建构件
         
<publishers>
   <onsuccess>
      <artifactspublisher
         dir= "${target.dir}"
         dest="${artifacts.dir}/${project.name}">
      </artifactspublisher>
   </onsuccess>
</publishers>

   </project>
</cruisecontrol>

  <artifactspublisher>元素指定如何发布某些构建构件,例如所生成的EAR文件。在此例中,您在将从\target目录中找到的所有项发布到\artifacts目录。这实际上是在\artifacts目录下创建一个与构建时间戳具有相同名称的子目录。这使得CruiseControl能够提供对历史构建构件的访问。

  启动构建循环。

  最后,您可以启动CruiseControl构建循环。为此,\builds目录中提供了一个runcruise.bat文件。在运行该文件之前,请确保在其中正确设置环境。然后您可以通过在控制台窗口中输入runcruise.bat来启动构建循环。

  当CruiseControl启动时,它将读取配置文件,尝试运行某个构建,然后检查CVS存储库中的修改。在第一次尝试构建您的项目时,它可能不检测修改,但它仍然会强制进行构建。在第一次构建之后,仅当存在修改时,它才会计划进行一次构建。您应该在控制台中看到类似如下的消息:

  清单18. 构建中产生的消息
         
projectName = [L_AddressCleansingService]
using settings from config file [D:\builds\config.xml]
No previously serialized project found [D:\builds\L_AddressCleansingService.ser]
 forcing a build.
Project L_AddressCleansingService starting
Project L_AddressCleansingService:  checking for modifications
Project L_AddressCleansingService:  No modifications found, build not necessary.
Project L_AddressCleansingService:  Building anyway, since build was explicitly
 forced.

  下一步,CruiseControl将调用Ant build.xml文件中的所有目标。Ant目标具有对其他目标的依赖关系,例如清理、初始化、签出等等。所依赖的目标将按指定的顺序运行,然后将运行全部目标。您应该在控制台中看到类似如下的输出。请确保您的单元测试已正确运行。

  清单19. 目标依赖关系
         
Project L_AddressCleansingService:  now building
Buildfile: .\projects\L_AddressCleansingService\build.xml

ccAntProgress -- clean
[delete] Deleting directory D:\builds\projects\L_AddressCleansingService\source
[delete] Deleting directory D:\builds\projects\L_AddressCleansingService\target

ccAntProgress -- init
[mkdir] Created dir: D:\builds\projects\L_AddressCleansingService\source
[mkdir] Created dir: D:\builds\projects\L_AddressCleansingService\target

ccAntProgress -- checkout
[cvs] U source/T_AddressCleansingService/.classpath
[cvs] U source/T_AddressCleansingService/.project
[cvs] U source/T_AddressCleansingService/.runtime
[cvs] U source/T_AddressCleansingService/sca.module
...

ccAntProgress -- build
[zip] Building zip: D:\builds\projects\L_AddressCleansingService\target\
T_AddressCleansingService.zip
[servicedeploy] Initializing workspace
[servicedeploy] Building project L_AddressCleansingService
[servicedeploy] Building project T_AddressCleansingServiceEJB
[servicedeploy] Building project T_AddressCleansingServiceJUnitWeb
[servicedeploy] Building project T_AddressCleansingServiceApp
[servicedeploy] Exporting application D:\builds\projects\
L_AddressCleansingService\target\T_AddressCleansingService.ear
[servicedeploy] Deployment has completed
[servicedeploy] Waiting for background jobs
[servicedeploy] Deleting workspace

ccAntProgress -- install
[wsInstallApp] Installing Application [D:\builds\projects\
L_AddressCleansingService\target\T_AddressCleansingService.ear]...
[wsInstallApp] Installed Application [D:\builds\projects\
L_AddressCleansingService\target\T_AddressCleansingService.ear]

ccAntProgress -- start
[wsStartApp] Starting Application [T_AddressCleansingServiceApp]...
[wsStartApp] Started Application [T_AddressCleansingServiceApp]

ccAntProgress -- test
[mkdir] Created dir: D:\builds\projects\L_AddressCleansingService\target\
 test-classes
[javac] Compiling 1 source file to
 D:\builds\projects\L_AddressCleansingService\target\test-classes
[mkdir] Created dir: D:\builds\projects\L_AddressCleansingService\target\
 test-results
[junit] Testsuite:
 com.ibm.issw.service.addresscleansing.test.AddressCleansingServiceTest
[junit] Tests run: 2, Failures: 0, Errors: 0, Time elapsed: 1.578 sec

ccAntProgress -- stop
[wsStopApp] Stopping Application [T_AddressCleansingServiceApp]...
[wsStopApp] Stopped Application [T_AddressCleansingServiceApp]

ccAntProgress -- uninstall
[wsUninstallApp] Uninstalling Application [T_AddressCleansingServiceApp]...
[wsUninstallApp] Uninstalled Application [T_AddressCleansingServiceApp]

ccAntProgress -- all
BUILD SUCCESSFUL

  CruiseControl在运行构建以后,它将合并日志文件中的测试结果并发布构建构件。然后它将进入睡眠状态,并等待下一次构建时间。当它醒来时,将检查CVS存储库中的修该,如果发现任何修改,则运行另一次构建;否则,它将进入睡眠状态并等待下一次构建时间。

  清单20. 运行构建
         
Project L_AddressCleansingService: merging accumulated log files
Project L_AddressCleansingService: publishing build results
Project L_AddressCleansingService: idle
Project L_AddressCleansingService: next build in 1 minutes
Project L_AddressCleansingService: waiting for next time to build
... 
Project L_AddressCleansingService: No modifications found, build not necessary.
Project L_AddressCleansingService: idle
Project L_AddressCleansingService: next build in 1 minutes
Project L_AddressCleansingService: waiting for next time to build

  跟踪构建状态

  CruiseControl启动一个可用于跟踪构建状态的Jetty实例和一个Web应用程序。该Web应用程序的URL为http://<host>:8080/cruisecontrol,其中<host>是运行CruiseControl的计算机。因此,若要查看构建的当前状态,您所需做的就是打开浏览器并导航到该URL。一个网页将显示您的项目的构建状态,以及所有其他项目的构建状态。单击项目名称可以查看类似于图1所示的构建结果页面。

          

  图1. 查看构建状态
 
  另一种查看构建状态的方法是接收电子邮件。这可以通过向config.xml文件中的<publishers>集添加<email>元素来实现。

  清单21. 电子邮件通知
      
<email
   mailhost="IBM-F4A849C57A0"
   returnaddress=dhvines@us.ibm.com
   buildresultsurl="${buildresults.url}"  
   skipusers="true"
   spamwhilebroken="true">
   <always address="dhvines@us.ibm.com"/>
   <failure address="dhvines@us.ibm.com"/>
   </email>

  在此例中,一个地址始终接收构建状态电子邮件,另一个电子邮件地址将仅接收有关失败情况的电子邮件。电子邮件含有指向构建结果页面(请参见图1)的链接。通过使用<htmlemail>发布器,您甚至可以向提交更改的用户发送通知。

  总结

  这个包括两部分的文章系列讨论了SOA环境中的测试驱动的开发。在第1部分中,您了解了如何在使用WebSphere Integration Developer开发SCA业务流程之前为SCA数据映射编写测试用例,在第2部分中,您了解了如何设置持续集成服务器来测试WebSphere Process Server上的SOA应用程序。

  使用此持续集成服务器,您了解了如何轮询CVS存储库中的SOA应用程序更改。如果检测到更改,则持续集成服务器将从CVS中签出所有代码,构建SCA模块,将它们安装到WebSphere Process Server,运行单元测试,并记录构建结果。

  通过访问指向CruiseControl Web应用程序的URL或者接收电子邮件通知,您可以在任何时候查看构建结果。如果在SOA应用程序中发现错误,可以通过电子邮件向提交更改的团队成员发送错误报告,以便他们能够立即采取行动。

  持续集成服务器可以确保您的服务(以及依赖您的服务的所有服务)在每当发生更改时得到测试。如果出现测试错误,您可以迅速修复错误,因为您只需调查自从上次构建以来所做出的更改。这使您可以将SOA应用程序始终保持可发布状态。

  关于作者

  Donald Vines是IBM的一名执行IT架构师,他负责北美范围的WebSphere迁移实践。他目前从事的工作是为IBM主要客户创建解决方案体系结构,并在开发SOA和企业现代化项目过程中指导设计师和软件开发人员。他曾是对象管理组织(Object Management Group, OMG)的一位技术代表,在该组织中和其他人一同创立在Internet中广泛使用的Internet Inter-ORB Protocol(IIOP)。Don还是Sun认证的企业架构师、Sun认证的Java程序员和OMG认证的UML2专业人员。


SOA中的数据之将数据转换成信息
 SOA中的数据之将数据转换成信息(一)
 SOA中的数据之将数据转换成信息(二)
 SOA中的数据之将数据转换成信息(三)
 SOA中的数据之将数据转换成信息(四)
 多重数据表述
 SOA环境中的测试驱动的开发,第1部分:测试数据映射
 使用WebSphere Process Server进行持续集成

原文出处:http://www.ibm.com/developerworks/cn/websphere/techjournal/0812_vines/0812_vines.html
 
来源:IBM    作者:Donald Vines    
 
 
 
 
 

SCA

 
你想知道Java实施内服务、参照和属性是如何定义的吗?让我们使用支付的例子看看Java注释为Payment组件,如何被添加到Java类中来定义SCA服务……
 
SCA符合应用的每一个组件都是使用实施类型实施的。SCA技术参数定义了许多实施类型并且Tuscany项目也增加了一些。
 
服务组件架构(SCA)标准体系的愿景,起源于IBM和BEA的概念,对面向服务架构(SOA)来说具有编程标准的性质,这个说法来自于……
 
随着SCA/SCDL工具集的发展和时间的变化,很可能会改变。和微软的Frontpage一样,简化了基于HTML Web网站的开发过程,新厂商的产品……
 
SOA和Web服务已经成为主流,有些人认为它们现在实际上代表了部署新应用与合成服务。组件重用、开放标准和轻松装配合成服务……

热门技术手册排行

 

随着开源技术越来越成熟,一个稍有开发经验的人通过学习就可以用开源的产品和技术构建一套可用的系统。对于从事软件开发的人员,尤其是对Java或动态语言相关领域的人来说,“开源”也许是他们最喜爱的单词。但是,很多时候我们需要的不仅仅是一个可用的系统,而是希望这个系统开发更简易、性能更高和扩展性更好等。这确实是一个令人头痛的问题。本指南很多地方都是点到为止,要深入了解相关信息的读者请借助参考资料、网站等自行挖掘。

 

本专题分六部分探讨SOA设计模式,当初设计面向服务架构的一大初衷就是降低服务间耦合度,由此提高服务的灵活性和自由度。

 

业务流程管理(business process management,bpm)不是一个新概念,甚至不是一个新名词。它是从相关的业务流程变革领域,如业务流程改进(bpi)、业务流程重组(bpr)、业务流程革新中发展起来的。流程管理技术也是从早期的工作流管理、eai、流程自动化、流程集成、流程建模、流程优化等技术中发展起来的。

 

TOAGF是一个架构框架,简而言之,TOGAF是一种协助发展,验收,运行,使用,和维护架构的工具。它是基于一个迭代(Iterative)的过程模型,支持最佳实践和一套可重用的现有架构资产。

 

云计算的概念越来越流行,Amazon、Google和IBM是第一批将云计算引入公众视线的公司。云计算就是新的Web2.0,一种既有技术上的市场绽放。

 

Mashup是一个非常cool的新的应用程序种类。如果你想真正的了解它们,我们需要回过头来看看你现在的计算机,其实它就是一个非常好的帮助你理解mashup的模型。现在开源的操作系统无疑是非常好的apis的集合或应用程序编程接口,帮助开发者去构建其应用程序。计算机本身也是一个很好的为用户提供接口的例子,键盘和鼠标可以被理解为你通过计算机的接口而使用的不同的应用程序。本技术手册为读者提供了一些相关信息,如果需要深入了解mashup,读者可以借助其他参考资源。

查看更多
 
 

登录TechTarget中国

关闭
本服务仅向TechTarget中国的会员开放,请登录或立即免费注册
电子邮件地址:
请输入您的电子邮件地址
密码:
下次自动登录