Login | Register
My pages Projects Community openCollabNet


Here is a file containing the jeanda product.


Unzip the file into a target directory, hereafter refered to as ${JEANDA_HOME} (which is %JEANDA_HOME% on Windows). We assume that you already have ant installed and operational. If not, see http://ant.apache.org for those instructions.

Test Installation

Navigate to the ${JEANDA_HOME}/bin directory. You can set ${JEANDA_HOME} as an enviroment variable or edit on of the scripts in this directory. Then, execute one or all of the scripts in this directory...the test-all script will execute all of the tests. Check the ${JEANDA_HOME}/log directory and make sure there are no .err files (only .log files should be there). If there are .err files, please send them to us. Otherwise, jeanda is operating properly on your machine.

Integrate with ant

Copy the ${JEANDA_HOME}/lib/bcel-5.1.jar and ${JEANDA_HOME}/lib/jeanda.jar files to the ${ANT_HOME}/lib directory. ${ANT_HOME} is the directory where you installed ant and should be an environment variable that you've previously set.

Integrate with your build script(s)

A decent choice for your ${comparison.dir} ant variable (below) is the ${JEANDA_HOME}/comparison directory. However, the comparison directory can be wherever you want it to be. The comparison task will create the directory for you, assuming that it has permissions to do so.

   <target name="init">
      <taskdef name="build-compare" classname="ca.simplify.metrics.ant.BuildCompareTask"/>
      <property name="comparison.dir" value="${your.jeanda.home.here}/comparison"/>
      <property name="build.dir" value="${your.build.dir.here}"/>
   <target depends="init" name="compare">
      <build-compare comparisonDirectory="${comparison.dir}">
         <fileset dir="${build.dir}" >
            <include name="**/*.jar"/>

This snippet is not intended to be prescriptive...rather, it is intended to make it easy to integrate jeanda into your build script(s). The "init" section above shows a task definition and the setup of the ${comparison.dir} and ${build.dir} properties. You just need to fill in the appropriate values for "your.jeanda.home.here" and "your.build.dir.here".

Once you've done that, the compare task can be used as is, assuming your product is composed of a set of .jar files. The comparison task can process several variants of .zip files - .jar files, .war files, .ear files and directories that contain classes. You can change your fileset definition as is appropriate for your build product.

What happens when you run your build script?

When you run your build script (hopefully once a day), the comparison task will copy your build fileset to the ${comparison.dir}/builds/current directory. It will also keep the first build (that it processes) in the ${comparison.dir}/builds/first directory. Similarly, it will keep the last build (prior to the current build) in the ${comparison.dir}/builds/last directory.

Once the comparison task has the build files in the appropriate directories, it compares them. It does this by comparing the .class files in the "old" fileset with those in the "new" fileset. If you wish to see how it does this, take a look at the ca.simplify.metrics.methods and ca.simplify.metrics.instructions packages. After comparing the class files, the task outputs the comparison results into a "timestamped" directory within the ${comparison.dir}/comparisons directory.

Periodically send us the experimental data

You can use the following tasks to archive the experimental data. Hopefully this will make it more convenient for you to send it to us. Please request a "keystore" file from us so that the archive can be signed; this will help us maintain the integrity of the experiment.

Note: You won't actually need the keystore file until you're ready to send us your first archive.

   <target name="init">
      <taskdef name="archive-comparisons" classname="ca.simplify.metrics.ant.ArchiveComparisonsTask"/>
      <property name="comparison.dir" value="${your.jeanda.home.here}/comparison"/>
      <property name="archive.dir" value="${your.archive.dir.here}"/>

   <target depends="init" name="archive">
      <mkdir dir="${archive.dir}"/>
	    <format property="archive.timestamp" pattern="yyyy-MM-dd.hh-mm-ss"/>
      <property name="archive.filename" value="${archive.dir}/${archive.timestamp}.jar"/>
      <archive-comparisons comparisonDirectory="${comparison.dir}" outputFilename="${archive.filename}" />

   <target depends="archive" name="sign-archive">
       keystore="${jeanda.home}/keystore/jeanda.keystore" />

Again, this snippet is not intended to be prescriptive...rather, it is intended to make it easy for you to send us the results of the experiment. We recommend that you archive the results at the end of every iteration and email them to us. However, when we get the data isn't terribly important - what's most important is that we get the data. What's also important is that we get a rough timeline of when each iteration starts and stops. Thus sending us the data at the end of an iteration might be the easiest approach.


Finally, thank you for participating! We plan to support you by improving the toolset and the documentation associated with it. For example, we plan to provide XSL files that will transform the data output files (which are .xml) into html files which will provide a visual presentation of the experimental results (for your builds). If you have any suggestions, please mail them to us.

Main Project Pages