Thanks Donald, I took out the <version> tag and inserted
<scope>provided</scope>.

--Viet

On Thu, Mar 20, 2008 at 8:35 PM, Donald Woods <[EMAIL PROTECTED]> wrote:
>
>
>
>  [EMAIL PROTECTED] wrote:
>  > Author: viet
>  > Date: Thu Mar 20 07:56:56 2008
>  > New Revision: 639303
>  >
>  > URL: http://svn.apache.org/viewvc?rev=639303&view=rev
>  > Log:
>  > Fix for Geronimo-3925. Uses JAXB to manipulate XML.
>  >
>  > Added:
>  >     
> geronimo/server/trunk/plugins/monitoring/agent-jar/src/main/java/org/apache/geronimo/monitoring/snapshot/ObjectFactory.java
>    (with props)
>  >     
> geronimo/server/trunk/plugins/monitoring/agent-jar/src/main/java/org/apache/geronimo/monitoring/snapshot/SnapshotConfig.java
>    (with props)
>  >     geronimo/server/trunk/plugins/monitoring/agent-jar/src/xsd/
>  >     
> geronimo/server/trunk/plugins/monitoring/agent-jar/src/xsd/SnapshotConfig.xsd 
>   (with props)
>  > Modified:
>  >     geronimo/server/trunk/plugins/monitoring/agent-jar/pom.xml
>  >     
> geronimo/server/trunk/plugins/monitoring/agent-jar/src/main/java/org/apache/geronimo/monitoring/snapshot/SnapshotConfigXMLBuilder.java
>  >
>  > Modified: geronimo/server/trunk/plugins/monitoring/agent-jar/pom.xml
>  > URL: 
> http://svn.apache.org/viewvc/geronimo/server/trunk/plugins/monitoring/agent-jar/pom.xml?rev=639303&r1=639302&r2=639303&view=diff
>  > 
> ==============================================================================
>  > --- geronimo/server/trunk/plugins/monitoring/agent-jar/pom.xml (original)
>  > +++ geronimo/server/trunk/plugins/monitoring/agent-jar/pom.xml Thu Mar 20 
> 07:56:56 2008
>  > @@ -53,6 +53,18 @@
>  >              <artifactId>geronimo-j2ee-management_1.1_spec</artifactId>
>  >              <scope>provided</scope>
>  >          </dependency>
>  > +
>  > +        <dependency>
>  > +            <groupId>javax.xml.bind</groupId>
>  > +            <artifactId>jaxb-api</artifactId>
>  > +            <version>2.0</version>
>
>  Can you remove the explicit <version> and use the one set by
>  trunk/server/pom.xml?
>
>
>
>
>  > +            <exclusions>
>  > +                <exclusion>
>  > +                    <groupId>javax.xml.bind</groupId>
>  > +                    <artifactId>jsr173_api</artifactId>
>  > +                </exclusion>
>  > +            </exclusions>
>  > +        </dependency>
>  >      </dependencies>
>  >
>  >  </project>
>  >
>  > Added: 
> geronimo/server/trunk/plugins/monitoring/agent-jar/src/main/java/org/apache/geronimo/monitoring/snapshot/ObjectFactory.java
>  > URL: 
> http://svn.apache.org/viewvc/geronimo/server/trunk/plugins/monitoring/agent-jar/src/main/java/org/apache/geronimo/monitoring/snapshot/ObjectFactory.java?rev=639303&view=auto
>  > 
> ==============================================================================
>  > --- 
> geronimo/server/trunk/plugins/monitoring/agent-jar/src/main/java/org/apache/geronimo/monitoring/snapshot/ObjectFactory.java
>  (added)
>  > +++ 
> geronimo/server/trunk/plugins/monitoring/agent-jar/src/main/java/org/apache/geronimo/monitoring/snapshot/ObjectFactory.java
>  Thu Mar 20 07:56:56 2008
>  > @@ -0,0 +1,57 @@
>  > +//
>  > +// This file was generated by the JavaTM Architecture for XML 
> Binding(JAXB) Reference Implementation, v2.0-b26-ea3
>  > +// See <a 
> href="http://java.sun.com/xml/jaxb";>http://java.sun.com/xml/jaxb</a>
>  > +// Any modifications to this file will be lost upon recompilation of the 
> source schema.
>  > +// Generated on: 2008.03.18 at 12:52:02 AM GMT-05:00
>  > +//
>  > +
>  > +
>  > +package org.apache.geronimo.monitoring.snapshot;
>  > +
>  > +import javax.xml.bind.annotation.XmlRegistry;
>  > +import org.apache.geronimo.monitoring.snapshot.SnapshotConfig;
>  > +import org.apache.geronimo.monitoring.snapshot.SnapshotConfig.Mbeans;
>  > +
>  > +
>  > +/**
>  > + * This object contains factory methods for each
>  > + * Java content interface and Java element interface
>  > + * generated in the org.apache.geronimo package.
>  > + * <p>An ObjectFactory allows you to programatically
>  > + * construct new instances of the Java representation
>  > + * for XML content. The Java representation of XML
>  > + * content can consist of schema derived interfaces
>  > + * and classes representing the binding of schema
>  > + * type definitions, element declarations and model
>  > + * groups.  Factory methods for each of these are
>  > + * provided in this class.
>  > + *
>  > + */
>  > [EMAIL PROTECTED]
>  > +public class ObjectFactory {
>  > +
>  > +
>  > +    /**
>  > +     * Create a new ObjectFactory that can be used to create new 
> instances of schema derived classes for package: org.apache.geronimo
>  > +     *
>  > +     */
>  > +    public ObjectFactory() {
>  > +    }
>  > +
>  > +    /**
>  > +     * Create an instance of [EMAIL PROTECTED] Mbeans }
>  > +     *
>  > +     */
>  > +    public Mbeans createSnapshotConfigMbeans() {
>  > +        return new Mbeans();
>  > +    }
>  > +
>  > +    /**
>  > +     * Create an instance of [EMAIL PROTECTED] SnapshotConfig }
>  > +     *
>  > +     */
>  > +    public SnapshotConfig createSnapshotConfig() {
>  > +        return new SnapshotConfig();
>  > +    }
>  > +
>  > +}
>  >
>  > Propchange: 
> geronimo/server/trunk/plugins/monitoring/agent-jar/src/main/java/org/apache/geronimo/monitoring/snapshot/ObjectFactory.java
>  > 
> ------------------------------------------------------------------------------
>  >     svn:eol-style = native
>  >
>  > Propchange: 
> geronimo/server/trunk/plugins/monitoring/agent-jar/src/main/java/org/apache/geronimo/monitoring/snapshot/ObjectFactory.java
>  > 
> ------------------------------------------------------------------------------
>  >     svn:keywords = Date Revision
>  >
>  > Propchange: 
> geronimo/server/trunk/plugins/monitoring/agent-jar/src/main/java/org/apache/geronimo/monitoring/snapshot/ObjectFactory.java
>  > 
> ------------------------------------------------------------------------------
>  >     svn:mime-type = text/plain
>  >
>  > Added: 
> geronimo/server/trunk/plugins/monitoring/agent-jar/src/main/java/org/apache/geronimo/monitoring/snapshot/SnapshotConfig.java
>  > URL: 
> http://svn.apache.org/viewvc/geronimo/server/trunk/plugins/monitoring/agent-jar/src/main/java/org/apache/geronimo/monitoring/snapshot/SnapshotConfig.java?rev=639303&view=auto
>  > 
> ==============================================================================
>  > --- 
> geronimo/server/trunk/plugins/monitoring/agent-jar/src/main/java/org/apache/geronimo/monitoring/snapshot/SnapshotConfig.java
>  (added)
>  > +++ 
> geronimo/server/trunk/plugins/monitoring/agent-jar/src/main/java/org/apache/geronimo/monitoring/snapshot/SnapshotConfig.java
>  Thu Mar 20 07:56:56 2008
>  > @@ -0,0 +1,196 @@
>  > +//
>  > +// This file was generated by the JavaTM Architecture for XML 
> Binding(JAXB) Reference Implementation, v2.0-b26-ea3
>  > +// See <a 
> href="http://java.sun.com/xml/jaxb";>http://java.sun.com/xml/jaxb</a>
>  > +// Any modifications to this file will be lost upon recompilation of the 
> source schema.
>  > +// Generated on: 2008.03.18 at 12:52:02 AM GMT-05:00
>  > +//
>  > +
>  > +
>  > +package org.apache.geronimo.monitoring.snapshot;
>  > +
>  > +import java.util.ArrayList;
>  > +import java.util.List;
>  > +import javax.xml.bind.annotation.XmlAccessType;
>  > +import javax.xml.bind.annotation.XmlAccessorType;
>  > +import javax.xml.bind.annotation.XmlRootElement;
>  > +import javax.xml.bind.annotation.XmlType;
>  > +
>  > +
>  > +/**
>  > + * <p>Java class for snapshot-config element declaration.
>  > + *
>  > + * <p>The following schema fragment specifies the expected content 
> contained within this class.
>  > + *
>  > + * <pre>
>  > + * &lt;element name="snapshot-config">
>  > + *   &lt;complexType>
>  > + *     &lt;complexContent>
>  > + *       &lt;restriction base="{http://www.w3.org/2001/XMLSchema}anyType";>
>  > + *         &lt;sequence>
>  > + *           &lt;element name="duration" 
> type="{http://www.w3.org/2001/XMLSchema}string"/>
>  > + *           &lt;element name="retention" 
> type="{http://www.w3.org/2001/XMLSchema}string"/>
>  > + *           &lt;element name="mbeans">
>  > + *             &lt;complexType>
>  > + *               &lt;complexContent>
>  > + *                 &lt;restriction 
> base="{http://www.w3.org/2001/XMLSchema}anyType";>
>  > + *                   &lt;sequence>
>  > + *                     &lt;element name="mbean" 
> type="{http://www.w3.org/2001/XMLSchema}string"; maxOccurs="unbounded" 
> minOccurs="0"/>
>  > + *                   &lt;/sequence>
>  > + *                 &lt;/restriction>
>  > + *               &lt;/complexContent>
>  > + *             &lt;/complexType>
>  > + *           &lt;/element>
>  > + *         &lt;/sequence>
>  > + *       &lt;/restriction>
>  > + *     &lt;/complexContent>
>  > + *   &lt;/complexType>
>  > + * &lt;/element>
>  > + * </pre>
>  > + *
>  > + *
>  > + */
>  > [EMAIL PROTECTED](XmlAccessType.FIELD)
>  > [EMAIL PROTECTED](name = "", propOrder = {
>  > +    "duration",
>  > +    "retention",
>  > +    "mbeans"
>  > +})
>  > [EMAIL PROTECTED](name = "snapshot-config")
>  > +public class SnapshotConfig {
>  > +
>  > +    protected String duration;
>  > +    protected String retention;
>  > +    protected Mbeans mbeans;
>  > +
>  > +    /**
>  > +     * Gets the value of the duration property.
>  > +     *
>  > +     * @return
>  > +     *     possible object is
>  > +     *     [EMAIL PROTECTED] String }
>  > +     *
>  > +     */
>  > +    public String getDuration() {
>  > +        return duration;
>  > +    }
>  > +
>  > +    /**
>  > +     * Sets the value of the duration property.
>  > +     *
>  > +     * @param value
>  > +     *     allowed object is
>  > +     *     [EMAIL PROTECTED] String }
>  > +     *
>  > +     */
>  > +    public void setDuration(String value) {
>  > +        this.duration = value;
>  > +    }
>  > +
>  > +    /**
>  > +     * Gets the value of the retention property.
>  > +     *
>  > +     * @return
>  > +     *     possible object is
>  > +     *     [EMAIL PROTECTED] String }
>  > +     *
>  > +     */
>  > +    public String getRetention() {
>  > +        return retention;
>  > +    }
>  > +
>  > +    /**
>  > +     * Sets the value of the retention property.
>  > +     *
>  > +     * @param value
>  > +     *     allowed object is
>  > +     *     [EMAIL PROTECTED] String }
>  > +     *
>  > +     */
>  > +    public void setRetention(String value) {
>  > +        this.retention = value;
>  > +    }
>  > +
>  > +    /**
>  > +     * Gets the value of the mbeans property.
>  > +     *
>  > +     * @return
>  > +     *     possible object is
>  > +     *     [EMAIL PROTECTED] Mbeans }
>  > +     *
>  > +     */
>  > +    public Mbeans getMbeans() {
>  > +        return mbeans;
>  > +    }
>  > +
>  > +    /**
>  > +     * Sets the value of the mbeans property.
>  > +     *
>  > +     * @param value
>  > +     *     allowed object is
>  > +     *     [EMAIL PROTECTED] Mbeans }
>  > +     *
>  > +     */
>  > +    public void setMbeans(Mbeans value) {
>  > +        this.mbeans = value;
>  > +    }
>  > +
>  > +
>  > +    /**
>  > +     * <p>Java class for anonymous complex type.
>  > +     *
>  > +     * <p>The following schema fragment specifies the expected content 
> contained within this class.
>  > +     *
>  > +     * <pre>
>  > +     * &lt;complexType>
>  > +     *   &lt;complexContent>
>  > +     *     &lt;restriction 
> base="{http://www.w3.org/2001/XMLSchema}anyType";>
>  > +     *       &lt;sequence>
>  > +     *         &lt;element name="mbean" 
> type="{http://www.w3.org/2001/XMLSchema}string"; maxOccurs="unbounded" 
> minOccurs="0"/>
>  > +     *       &lt;/sequence>
>  > +     *     &lt;/restriction>
>  > +     *   &lt;/complexContent>
>  > +     * &lt;/complexType>
>  > +     * </pre>
>  > +     *
>  > +     *
>  > +     */
>  > +    @XmlAccessorType(XmlAccessType.FIELD)
>  > +    @XmlType(name = "", propOrder = {
>  > +        "mbean"
>  > +    })
>  > +    public static class Mbeans {
>  > +
>  > +        protected List<String> mbean;
>  > +
>  > +        /**
>  > +         * Gets the value of the mbean property.
>  > +         *
>  > +         * <p>
>  > +         * This accessor method returns a reference to the live list,
>  > +         * not a snapshot. Therefore any modification you make to the
>  > +         * returned list will be present inside the JAXB object.
>  > +         * This is why there is not a <CODE>set</CODE> method for the 
> mbean property.
>  > +         *
>  > +         * <p>
>  > +         * For example, to add a new item, do as follows:
>  > +         * <pre>
>  > +         *    getMbean().add(newItem);
>  > +         * </pre>
>  > +         *
>  > +         *
>  > +         * <p>
>  > +         * Objects of the following type(s) are allowed in the list
>  > +         * [EMAIL PROTECTED] String }
>  > +         *
>  > +         *
>  > +         */
>  > +        public List<String> getMbean() {
>  > +            if (mbean == null) {
>  > +                mbean = new ArrayList<String>();
>  > +            }
>  > +            return this.mbean;
>  > +        }
>  > +
>  > +    }
>  > +
>  > +}
>  >
>  > Propchange: 
> geronimo/server/trunk/plugins/monitoring/agent-jar/src/main/java/org/apache/geronimo/monitoring/snapshot/SnapshotConfig.java
>  > 
> ------------------------------------------------------------------------------
>  >     svn:eol-style = native
>  >
>  > Propchange: 
> geronimo/server/trunk/plugins/monitoring/agent-jar/src/main/java/org/apache/geronimo/monitoring/snapshot/SnapshotConfig.java
>  > 
> ------------------------------------------------------------------------------
>  >     svn:keywords = Date Revision
>  >
>  > Propchange: 
> geronimo/server/trunk/plugins/monitoring/agent-jar/src/main/java/org/apache/geronimo/monitoring/snapshot/SnapshotConfig.java
>  > 
> ------------------------------------------------------------------------------
>  >     svn:mime-type = text/plain
>  >
>  > Modified: 
> geronimo/server/trunk/plugins/monitoring/agent-jar/src/main/java/org/apache/geronimo/monitoring/snapshot/SnapshotConfigXMLBuilder.java
>  > URL: 
> http://svn.apache.org/viewvc/geronimo/server/trunk/plugins/monitoring/agent-jar/src/main/java/org/apache/geronimo/monitoring/snapshot/SnapshotConfigXMLBuilder.java?rev=639303&r1=639302&r2=639303&view=diff
>  > 
> ==============================================================================
>  > --- 
> geronimo/server/trunk/plugins/monitoring/agent-jar/src/main/java/org/apache/geronimo/monitoring/snapshot/SnapshotConfigXMLBuilder.java
>  (original)
>  > +++ 
> geronimo/server/trunk/plugins/monitoring/agent-jar/src/main/java/org/apache/geronimo/monitoring/snapshot/SnapshotConfigXMLBuilder.java
>  Thu Mar 20 07:56:56 2008
>  > @@ -20,18 +20,12 @@
>  >  import java.io.FileOutputStream;
>  >  import java.util.ArrayList;
>  >
>  > -import javax.xml.parsers.DocumentBuilder;
>  > -import javax.xml.parsers.DocumentBuilderFactory;
>  > -import javax.xml.parsers.ParserConfigurationException;
>  > +import javax.xml.bind.JAXBContext;
>  > +import javax.xml.bind.Marshaller;
>  > +import javax.xml.bind.Unmarshaller;
>  >
>  >  import org.apache.commons.logging.Log;
>  >  import org.apache.commons.logging.LogFactory;
>  > -import org.apache.xmlbeans.XmlCursor;
>  > -import org.apache.xmlbeans.XmlObject;
>  > -import org.w3c.dom.Document;
>  > -import org.w3c.dom.Element;
>  > -import org.w3c.dom.Node;
>  > -import org.w3c.dom.NodeList;
>  >
>  >  /**
>  >   * In charge of dealing with the XML processing of the snapshot's data.
>  > @@ -46,88 +40,91 @@
>  >      private static final String DURATION = "duration";
>  >      private static final String RETENTION = "retention";
>  >      private static final String MBEAN = "mbean";
>  > +
>  > +    private static JAXBContext jc = null;
>  > +
>  > +    static {
>  > +        try {
>  > +            jc = 
> JAXBContext.newInstance("org.apache.geronimo.monitoring.snapshot");
>  > +        } catch(Exception e) {
>  > +            log.error(e.getMessage());
>  > +        }
>  > +    }
>  > +
>  > +    /**
>  > +     * @return SnapshotConfig object which represents the XML document
>  > +     */
>  > +    private static SnapshotConfig getSnapshotConfig() {
>  > +        // ensure that there is a snapshot-config.xml at all times
>  > +        try {
>  > +            if(checkXMLExists()) {
>  > +                // unmarshall the xml document into SnapshotConfig object
>  > +                Unmarshaller m = jc.createUnmarshaller();
>  > +                return (SnapshotConfig)m.unmarshal( new File(pathToXML) );
>  > +            } else {
>  > +                SnapshotConfig sc = new SnapshotConfig();
>  > +                sc.setMbeans( new SnapshotConfig.Mbeans() );
>  > +                saveDocument(sc);
>  > +                return sc;
>  > +            }
>  > +        } catch(Exception e) {
>  > +            log.error(e.getMessage());
>  > +            return null;    // in the case of an error, return null
>  > +        }
>  > +    }
>  >
>  >      /**
>  >       * @return A list of all mbean names that have been previously saved.
>  >       * These mbean names are those to keep track of for per snapshot.
>  >       */
>  >      public static ArrayList<String> getMBeanNames() {
>  > -        ArrayList<String> mbeanList = new ArrayList<String>();
>  > -        // get an instance of the document
>  > -        Document doc = openDocument();
>  > -        // get the root element node
>  > -        Element rootElement = doc.getDocumentElement();
>  > -        // get all children in the root node (i.e. all config properties)
>  > -        NodeList configNodes = rootElement.getChildNodes();
>  > -        // find the duration node and save it
>  > -        for(int i = 0; i < configNodes.getLength(); i++) {
>  > -            if(MBEAN.equals(configNodes.item(i).getNodeName())) {
>  > -                mbeanList.add( configNodes.item(i).getTextContent() );
>  > -            }
>  > +        if(getSnapshotConfig().getMbeans() == null) {
>  > +            return new ArrayList<String>();
>  > +        } else {
>  > +            return 
> (ArrayList<String>)getSnapshotConfig().getMbeans().getMbean();
>  >          }
>  > -        return mbeanList;
>  >      }
>  >
>  >      /**
>  > -     * Adds to the snapshot-config.xml another configuration element 
> <mbean>
>  > +     * Removes from the snapshot-config.xml a configuration element 
> <mbean>
>  >       * in order to persistently keep track of all user requested 
> statistics.
>  > -     * If there is a duplicate, nothing will be done.
>  > +     * If there does not exist an instance of the mbeanNAme, nothing will 
> be done.
>  >       */
>  >      public static boolean removeMBeanName(String mbeanName) {
>  > -        ArrayList<String> mbeanList = getMBeanNames();
>  > -        // operate on the snapshot-config.xml if there exists the mbean 
> name
>  > -        if(mbeanList.contains(mbeanName)) {
>  > -            // get an instance of the document
>  > -            Document doc = openDocument();
>  > -            // get the root element node
>  > -            Element rootElement = doc.getDocumentElement();
>  > -            // find the Node that represents the mbeanName
>  > -            NodeList list = rootElement.getChildNodes();
>  > -            for(int i = 0; i < list.getLength(); i++) {
>  > -                // check the Node's text context for a match with 
> mbeanName
>  > -                if(list.item(i).getTextContent().equals(mbeanName)) {
>  > -                    // remove the node from rootElement
>  > -                    Node toRemoveNode = list.item(i);
>  > -                    rootElement.removeChild(toRemoveNode);
>  > -                    break;
>  > -                }
>  > +        ArrayList<String> mbeanNames = getMBeanNames();
>  > +        for(int i = 0 ; i < (int)mbeanNames.size(); i++) {
>  > +            if(mbeanNames.get(i).equals(mbeanName)) {
>  > +                // remove the mbean name by directly accessing it, 
> because it is by reference
>  > +                SnapshotConfig sc = getSnapshotConfig();
>  > +                sc.getMbeans().getMbean().remove(i);
>  > +                // save the current state of the SnapshotConfig object
>  > +                saveDocument( sc );
>  > +                return true;
>  >              }
>  > -            // save the document
>  > -            saveDocument(doc, pathToXML);
>  > -            return true;
>  > -        } else {
>  > -            return false;
>  >          }
>  > +        return false;
>  >      }
>  >
>  >      /**
>  > -     * Removes from the snapshot-config.xml a configuration element 
> <mbean>
>  > +     * Adds to the snapshot-config.xml another configuration element 
> <mbean>
>  >       * in order to persistently keep track of all user requested 
> statistics.
>  > -     * If there does not exist an instance of the mbeanNAme, nothing will 
> be done.
>  > +     * If there is a duplicate, nothing will be done.
>  >       */
>  >      public static boolean addMBeanName(String mbeanName) {
>  > -        ArrayList<String> mbeanList = getMBeanNames();
>  > -        if(mbeanList.contains(mbeanName)) {
>  > -            return false;
>  > -        } else {
>  > -            // get an instance of the document
>  > -            Document doc = openDocument();
>  > -            // get the root element node
>  > -            Element rootElement = doc.getDocumentElement();
>  > -            // create <mbean> element
>  > -            Element mbeanElement = doc.createElement(MBEAN);
>  > -            mbeanElement.setTextContent(mbeanName);
>  > -            // add <mbean> element to the rootElement
>  > -            rootElement.appendChild(mbeanElement);
>  > -            try {
>  > -                Thread.sleep(1000);
>  > -            } catch(Exception e) {
>  > -
>  > +        // check to see if the mbean name already exists
>  > +        ArrayList<String> mbeanNames = getMBeanNames();
>  > +        for(int i = 0 ; i < (int)mbeanNames.size(); i++) {
>  > +            if(mbeanNames.get(i).equals(mbeanName)) {
>  > +                return false;   // nothing needs to be done if it is 
> already there
>  >              }
>  > -            // save the document
>  > -            saveDocument(doc, pathToXML);
>  > -            return true;
>  >          }
>  > +
>  > +        // insert the mbean name into the SnapshotConfig object
>  > +        SnapshotConfig sc = getSnapshotConfig();
>  > +        sc.getMbeans().getMbean().add(mbeanName);
>  > +        // write the object to XML
>  > +        saveDocument(sc);
>  > +        return true;
>  >      }
>  >
>  >      /**
>  > @@ -135,7 +132,9 @@
>  >       * @param duration
>  >       */
>  >      public static void saveDuration(long duration) {
>  > -        saveAttribute(DURATION, duration);
>  > +        SnapshotConfig sc = getSnapshotConfig();
>  > +        sc.setDuration("" + duration);
>  > +        saveDocument(sc);
>  >      }
>  >
>  >      /**
>  > @@ -143,47 +142,11 @@
>  >       * @param retention
>  >       */
>  >      public static void saveRetention(int retention) {
>  > -        saveAttribute(RETENTION, retention);
>  > +        SnapshotConfig sc = getSnapshotConfig();
>  > +        sc.setRetention("" + retention);
>  > +        saveDocument(sc);
>  >      }
>  > -
>  > -    /**
>  > -     * Saves a generic attribute value into the node with text = 
> attribute name.
>  > -     * Creates one if there is not an instance of one.
>  > -     * @param attrName
>  > -     * @param attributeValue
>  > -     */
>  > -    private static void saveAttribute(String attrName, long 
> attributeValue) {
>  > -        Document doc = openDocument();
>  > -        // get the root node
>  > -        Element rootElement = doc.getDocumentElement();
>  > -        // get all children in the root node (i.e. all config properties)
>  > -        NodeList configNodes = rootElement.getChildNodes();
>  > -        // find the duration node and save it
>  > -        boolean foundNode = false;
>  > -        for(int i = 0; i < configNodes.getLength() && !foundNode; i++) {
>  > -            Node configNode = configNodes.item(i);
>  > -            if(attrName.equals(configNode.getNodeName())) {
>  > -                // found a match
>  > -                configNode.setTextContent(attributeValue + "");
>  > -                foundNode = true;
>  > -            }
>  > -        }
>  > -        // if there was not a duration node, make one
>  > -        if(!foundNode) {
>  > -            Element element = doc.createElement(attrName);
>  > -            element.setTextContent(attributeValue + "");
>  > -            rootElement.appendChild(element);
>  > -        }
>  > -        try {
>  > -            Thread.sleep(1000);
>  > -        } catch(Exception e) {
>  > -
>  > -        }
>  > -        log.info("***saving:  " + attrName + " = " + attributeValue);
>  > -        // save the document to file
>  > -        saveDocument(doc, pathToXML);
>  > -    }
>  > -
>  > +
>  >      /**
>  >       * Returns the value of the configuration attribute, defined by the 
> key
>  >       * @param key
>  > @@ -191,107 +154,39 @@
>  >       * @throws Exception
>  >       */
>  >      public static String getAttributeValue(String key) throws Exception {
>  > -        // ensure that there exists the 'monitor' directory
>  > -        ensureMonitorDir();
>  > -        // get an instance of the document
>  > -        Document doc = openDocument();
>  > -        // get the root element node
>  > -        Element rootElement = doc.getDocumentElement();
>  > -        // get all children in the root node (i.e. all config properties)
>  > -        NodeList configNodes = rootElement.getChildNodes();
>  > -        // find the duration node and save it
>  > -        for(int i = 0; i < configNodes.getLength(); i++) {
>  > -            if(key.equals(configNodes.item(i).getNodeName())) {
>  > -                return configNodes.item(i).getTextContent();
>  > -            }
>  > +        if(key.equals( DURATION )) {
>  > +            return getSnapshotConfig().getDuration();
>  > +        } else if(key.equals( RETENTION )) {
>  > +            return getSnapshotConfig().getRetention();
>  > +        } else {
>  > +            // Houston, we have a problem
>  > +            throw new Exception("[WARNING] Attribute: " + key + " is not 
> valid.");
>  >          }
>  > -        throw new Exception("[WARNING] " + key + " is not found in " + 
> SNAPSHOT_CONFIG);
>  >      }
>  >
>  >      /**
>  >       * Ensures that there is an existing XML file. Creates one if there
>  >       * does not exist one already.
>  >       */
>  > -    public static void checkXMLExists() {
>  > +    public static boolean checkXMLExists() {
>  > +        ensureMonitorDir();
>  >          File docFile = new File(pathToXML);
>  > -        // create an XML document if it does not exist
>  > -        if(!docFile.exists()) {
>  > -            Document doc = setUpDocument( createDocument() );
>  > -            saveDocument(doc, pathToXML);
>  > -        }
>  > +        return docFile.exists();
>  >      }
>  >
>  > -    /**
>  > -     * Prepares the root element for a document.
>  > -     */
>  > -    public static Document setUpDocument(Document document) {
>  > -        // add <snapshot-config> tag as the root
>  > -        Element rootElement = document.createElement("snapshot-config");
>  > -        document.appendChild(rootElement);
>  > -        return document;
>  > -    }
>  > -
>  > -    /**
>  > -     * Creates an instance of a Document and returns it
>  > -     */
>  > -    public static Document createDocument() {
>  > -        // get an instance of factory
>  > -        DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
>  > -        try {
>  > -            // get an instance of builder
>  > -            DocumentBuilder db = dbf.newDocumentBuilder();
>  > -            // create an instance of DOM
>  > -            return db.newDocument();
>  > -        } catch(ParserConfigurationException pce) {
>  > -            log.error("Error while trying to instantiate 
> DocumentBuilder", pce);
>  > -        }
>  > -        return null;
>  > -    }
>  >
>  >      /**
>  > -     * Write the document object to the file location specified by
>  > -     * the path.
>  > +     * Write the XML document.
>  >       */
>  > -    public static void saveDocument(Document document, String path) {
>  > +    public static void saveDocument(SnapshotConfig sc) {
>  >          try {
>  > -            // before saving, make sure the directory is present
>  > -            ensureMonitorDir();
>  > -
>  > -            //TODO GERONIMO-3719.  Hack to use xmlbeans to write out xml 
> instead of sun specific classes.
>  > -            XmlObject xmlObject = 
> XmlObject.Factory.parse(document.getDocumentElement());
>  > -            xmlObject.save(new File(path));
>  > -
>  > -            // formatting the doc
>  > -            // generate a file output
>  > +            Marshaller m = jc.createMarshaller();
>  > +            m.marshal(sc, new FileOutputStream( pathToXML ));
>  >          } catch(Exception e) {
>  > -            log.error(e.getMessage(), e);
>  > +            log.error(e.getMessage());
>  >          }
>  >      }
>  >
>  > -    /**
>  > -     * Parses the XML document specified by the private member 'pathToXML'
>  > -     * and stores the information in the a Document object
>  > -     */
>  > -    public static Document openDocument() {
>  > -        // ensure that the XML file is there
>  > -        checkXMLExists();
>  > -        // get the factory
>  > -        DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
>  > -        // continue to attempt to parse
>  > -        while(true) {
>  > -            try {
>  > -                // Using factory get an instance of document builder
>  > -                DocumentBuilder db = dbf.newDocumentBuilder();
>  > -                // parse using builder to get DOM representation of the 
> XML file
>  > -                Document doc = db.parse(pathToXML);
>  > -                return doc;
>  > -            } catch(Exception e) {
>  > -                // Either this file is being read/written to by snapshot 
> thread
>  > -                // or there is an UNKNOWN error
>  > -                log.error(e.getMessage(), e);
>  > -            }
>  > -        }
>  > -    }
>  >
>  >      /**
>  >       * Checks to see if the GERONIMO_HOME/var/monitoring/ directory was 
> made.
>  >
>  > Added: 
> geronimo/server/trunk/plugins/monitoring/agent-jar/src/xsd/SnapshotConfig.xsd
>  > URL: 
> http://svn.apache.org/viewvc/geronimo/server/trunk/plugins/monitoring/agent-jar/src/xsd/SnapshotConfig.xsd?rev=639303&view=auto
>  > 
> ==============================================================================
>  > --- 
> geronimo/server/trunk/plugins/monitoring/agent-jar/src/xsd/SnapshotConfig.xsd 
> (added)
>  > +++ 
> geronimo/server/trunk/plugins/monitoring/agent-jar/src/xsd/SnapshotConfig.xsd 
> Thu Mar 20 07:56:56 2008
>  > @@ -0,0 +1,44 @@
>  > +<?xml version="1.0" encoding="UTF-8"?>
>  > +<!--
>  > +    Licensed to the Apache Software Foundation (ASF) under one
>  > +    or more contributor license agreements.  See the NOTICE file
>  > +    distributed with this work for additional information
>  > +    regarding copyright ownership.  The ASF licenses this file
>  > +    to you under the Apache License, Version 2.0 (the
>  > +    "License"); you may not use this file except in compliance
>  > +    with the License.  You may obtain a copy of the License at
>  > +
>  > +     http://www.apache.org/licenses/LICENSE-2.0
>  > +
>  > +    Unless required by applicable law or agreed to in writing,
>  > +    software distributed under the License is distributed on an
>  > +    "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
>  > +    KIND, either express or implied.  See the License for the
>  > +    specific language governing permissions and limitations
>  > +    under the License.
>  > +-->
>  > +<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema";
>  > +            targetNamespace="http://geronimo.apache.org";
>  > +            xmlns:tns="http://geronimo.apache.org";>
>  > +
>  > +    <xsd:element name="snapshot-config">
>  > +        <xsd:complexType>
>  > +            <xsd:sequence>
>  > +                <xsd:element name="duration" type="xsd:string"
>  > +                             minOccurs="1"  maxOccurs="1"/>
>  > +                <xsd:element name="retention" type="xsd:string"
>  > +                             minOccurs="1"  maxOccurs="1"/>
>  > +                <xsd:element name="mbeans">
>  > +                    <xsd:complexType>
>  > +                        <xsd:sequence>
>  > +                            <xsd:element name="mbean" type="xsd:string"
>  > +                                         minOccurs="0" 
> maxOccurs="unbounded"/>
>  > +                        </xsd:sequence>
>  > +                    </xsd:complexType>
>  > +                </xsd:element>
>  > +            </xsd:sequence>
>  > +        </xsd:complexType>
>  > +
>  > +    </xsd:element>
>  > +
>  > +</xsd:schema>
>  >
>  > Propchange: 
> geronimo/server/trunk/plugins/monitoring/agent-jar/src/xsd/SnapshotConfig.xsd
>  > 
> ------------------------------------------------------------------------------
>  >     svn:eol-style = native
>  >
>  > Propchange: 
> geronimo/server/trunk/plugins/monitoring/agent-jar/src/xsd/SnapshotConfig.xsd
>  > 
> ------------------------------------------------------------------------------
>  >     svn:keywords = Date Revision
>  >
>  > Propchange: 
> geronimo/server/trunk/plugins/monitoring/agent-jar/src/xsd/SnapshotConfig.xsd
>  > 
> ------------------------------------------------------------------------------
>  >     svn:mime-type = text/xml
>  >
>  >
>  >
>

Reply via email to