Configuring J2EE Deployment Descriptors
by Steve Taylor


Listing One

# This sample code shows how to use a CSV file to update deployment descriptor 
# configuration data. It generates an Ant build.xml file that uses the xmltask
# replace and xmltask insert to perform the updating of the configuration data
# within the deployment descriptors. 
#Usage: update_deployment.pl <CSV File> <Deployment Descriptor XML File>
#Author: Steve Taylor, Catalyst Systems Corporation 

################################
# Read the CSV file into a list
################################
open(FP,$ARGV[0]);
@lines = <FP>;
close(FP);

################################
# Remove Header Line
################################
shift @lines; 

#############################################################
# Initialize output list with xmltask input and output files
#############################################################
push @xmltask,"<xmltask source=\"$ARGV[1]\" dest=\"updated_$ARGV[1]\" 
                                                  preserveType=\"true\">\n";

#########################################
# Loop through the lines in the CSV file
#########################################
foreach $line (@lines)
{
 $line =~ s/\n//g;

 ###############################
 # Split the CVS into parts
 ###############################
 ($env,$instance,$archive,$file,$xpath,$value) = split(/,/,$line);
 
 ($action,@x) = split(/ /,$xpath);
 $xpath = join(" ",@x);
 
######################### ###############################
 # Write ANT Xml for xmltask insert based up on CSV data 
 ########################################################
 if ($action =~ /Insert/i)
 {
  push @xmltask, '       <insert  path="' . $xpath . '" 
                                                 position="after"' . ">\n";
  push @xmltask, '          <![CDATA[' . $value . "]]>\n";
  push @xmltask, "       </insert>\n";
 }
 
 #########################################################
 # Write ANT Xml for xmltask replace based up on CSV data 
 #########################################################
 if ($action =~ /Replace/i)
 {
  push @xmltask, '       <replace path="' . $xpath . '" 
                                            withText="' . $value . "\"/>\n";
 }
}

###############################
# Close xmltask tag 
###############################
push @xmltask, "     </xmltask>";

###############################
# Fill Out build.xml
###############################
$build_xml =<<ENDXML;

<project name="Deployment Update" default="update" basedir=".">
 <taskdef name="xmltask" classname="com.oopsconsultancy.xmltask.ant.XmlTask"/>
   <target name="update">
     @xmltask
   </target>
</project>
ENDXML

#############################################
# Write out the actual build.xml to the file 
#############################################
open(FP,">build.xml");
print FP $build_xml;
close(FP);

###############################
# Run Ant
###############################
print `perl -S runant.pl 2>&1`;



Listing Two

Env,Instance,Archive,File,Xpath,Value
Production,DB1,Minibank.war,application.xml,
    Replace /application/module/web/context-root/text(),banking/MinibankWEB
Production,DB1,Minibank.war,application.xml,
    Insert /application/module/web,<description>Prodution 
                                  context root for MinibankWEB</description>


Listing Three

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE application PUBLIC "-//Sun Microsystems, Inc.//DTD J2EE 
  // Application 1.2//EN" "http://java.sun.com/j2ee/dtds/application_1_2.dtd">
<application id="Application_ID">
      <display-name>MinibankEAR</display-name>
      <description>Minibank Example Enterprise Application</description>
      <module id="EjbModule_1">
        <ejb>MinibankEJB.jar</ejb>
      </module>
      <module id="WebModule_1">
        <web>
            <web-uri>MinibankWEB.war</web-uri>
            <context-root>MinibankWEB</context-root>
</web>
      </module>
   </application>



Listing Four

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE application PUBLIC "-//Sun Microsystems, Inc.//DTD J2EE 
  // Application 1.2//EN" "http://java.sun.com/j2ee/dtds/application_1_2.dtd">
<application id="Application_ID">
      <display-name>MinibankEAR</display-name>
      <description>Minibank Example Enterprise Application</description>
      <module id="EjbModule_1">
        <ejb>MinibankEJB.jar</ejb>
      </module>
      <module id="WebModule_1">
        <web>
            <web-uri>MinibankWEB.war</web-uri>
            <context-root>banking/MinibankWEB</context-root>
</web>
<description>Prodution context root for MinibankWEB</description>
      </module>
   </application>
3


