You are viewing a plain text version of this content. The canonical link for it is here.
Posted to scm@geronimo.apache.org by ak...@apache.org on 2007/10/30 23:59:26 UTC

svn commit: r590502 [1/2] - in /geronimo/sandbox/monitoring/mrc-server: ./ mrc-car/ mrc-car/src/ mrc-car/src/main/ mrc-car/src/main/plan/ mrc-ds-car/ mrc-ds-car/src/ mrc-ds-car/src/main/ mrc-ds-car/src/main/plan/ mrc-ear/ mrc-ear/src/main/resources/MET...

Author: akulshreshtha
Date: Tue Oct 30 15:59:24 2007
New Revision: 590502

URL: http://svn.apache.org/viewvc?rev=590502&view=rev
Log:
GERONIMO-3561 Monitoring Plugin : Patch by Viet H. Nguyen

Added:
    geronimo/sandbox/monitoring/mrc-server/mrc-car/
    geronimo/sandbox/monitoring/mrc-server/mrc-car/LICENSE.txt   (with props)
    geronimo/sandbox/monitoring/mrc-server/mrc-car/NOTICE.txt   (with props)
    geronimo/sandbox/monitoring/mrc-server/mrc-car/pom.xml   (with props)
    geronimo/sandbox/monitoring/mrc-server/mrc-car/src/
    geronimo/sandbox/monitoring/mrc-server/mrc-car/src/main/
    geronimo/sandbox/monitoring/mrc-server/mrc-car/src/main/plan/
    geronimo/sandbox/monitoring/mrc-server/mrc-car/src/main/plan/plan.xml   (with props)
    geronimo/sandbox/monitoring/mrc-server/mrc-ds-car/
    geronimo/sandbox/monitoring/mrc-server/mrc-ds-car/LICENSE.txt   (with props)
    geronimo/sandbox/monitoring/mrc-server/mrc-ds-car/NOTICE.txt   (with props)
    geronimo/sandbox/monitoring/mrc-server/mrc-ds-car/pom.xml   (with props)
    geronimo/sandbox/monitoring/mrc-server/mrc-ds-car/src/
    geronimo/sandbox/monitoring/mrc-server/mrc-ds-car/src/main/
    geronimo/sandbox/monitoring/mrc-server/mrc-ds-car/src/main/plan/
    geronimo/sandbox/monitoring/mrc-server/mrc-ds-car/src/main/plan/plan.xml   (with props)
Modified:
    geronimo/sandbox/monitoring/mrc-server/mrc-ear/pom.xml
    geronimo/sandbox/monitoring/mrc-server/mrc-ear/src/main/resources/META-INF/geronimo-application.xml
    geronimo/sandbox/monitoring/mrc-server/mrc-ejb/src/main/java/org/apache/geronimo/monitor/MBeanHelper.java
    geronimo/sandbox/monitoring/mrc-server/mrc-ejb/src/main/java/org/apache/geronimo/monitor/MasterRemoteControl.java
    geronimo/sandbox/monitoring/mrc-server/mrc-ejb/src/main/java/org/apache/geronimo/monitor/MasterRemoteControlRemote.java
    geronimo/sandbox/monitoring/mrc-server/mrc-ejb/src/main/java/org/apache/geronimo/monitor/SMP.java
    geronimo/sandbox/monitoring/mrc-server/mrc-ejb/src/main/java/org/apache/geronimo/monitor/snapshot/SnapshotDBHelper.java
    geronimo/sandbox/monitoring/mrc-server/mrc-ejb/src/main/java/org/apache/geronimo/monitor/snapshot/SnapshotThread.java
    geronimo/sandbox/monitoring/mrc-server/pom.xml

Added: geronimo/sandbox/monitoring/mrc-server/mrc-car/LICENSE.txt
URL: http://svn.apache.org/viewvc/geronimo/sandbox/monitoring/mrc-server/mrc-car/LICENSE.txt?rev=590502&view=auto
==============================================================================
--- geronimo/sandbox/monitoring/mrc-server/mrc-car/LICENSE.txt (added)
+++ geronimo/sandbox/monitoring/mrc-server/mrc-car/LICENSE.txt Tue Oct 30 15:59:24 2007
@@ -0,0 +1,203 @@
+
+                                 Apache License
+                           Version 2.0, January 2004
+                        http://www.apache.org/licenses/
+
+   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+   1. Definitions.
+
+      "License" shall mean the terms and conditions for use, reproduction,
+      and distribution as defined by Sections 1 through 9 of this document.
+
+      "Licensor" shall mean the copyright owner or entity authorized by
+      the copyright owner that is granting the License.
+
+      "Legal Entity" shall mean the union of the acting entity and all
+      other entities that control, are controlled by, or are under common
+      control with that entity. For the purposes of this definition,
+      "control" means (i) the power, direct or indirect, to cause the
+      direction or management of such entity, whether by contract or
+      otherwise, or (ii) ownership of fifty percent (50%) or more of the
+      outstanding shares, or (iii) beneficial ownership of such entity.
+
+      "You" (or "Your") shall mean an individual or Legal Entity
+      exercising permissions granted by this License.
+
+      "Source" form shall mean the preferred form for making modifications,
+      including but not limited to software source code, documentation
+      source, and configuration files.
+
+      "Object" form shall mean any form resulting from mechanical
+      transformation or translation of a Source form, including but
+      not limited to compiled object code, generated documentation,
+      and conversions to other media types.
+
+      "Work" shall mean the work of authorship, whether in Source or
+      Object form, made available under the License, as indicated by a
+      copyright notice that is included in or attached to the work
+      (an example is provided in the Appendix below).
+
+      "Derivative Works" shall mean any work, whether in Source or Object
+      form, that is based on (or derived from) the Work and for which the
+      editorial revisions, annotations, elaborations, or other modifications
+      represent, as a whole, an original work of authorship. For the purposes
+      of this License, Derivative Works shall not include works that remain
+      separable from, or merely link (or bind by name) to the interfaces of,
+      the Work and Derivative Works thereof.
+
+      "Contribution" shall mean any work of authorship, including
+      the original version of the Work and any modifications or additions
+      to that Work or Derivative Works thereof, that is intentionally
+      submitted to Licensor for inclusion in the Work by the copyright owner
+      or by an individual or Legal Entity authorized to submit on behalf of
+      the copyright owner. For the purposes of this definition, "submitted"
+      means any form of electronic, verbal, or written communication sent
+      to the Licensor or its representatives, including but not limited to
+      communication on electronic mailing lists, source code control systems,
+      and issue tracking systems that are managed by, or on behalf of, the
+      Licensor for the purpose of discussing and improving the Work, but
+      excluding communication that is conspicuously marked or otherwise
+      designated in writing by the copyright owner as "Not a Contribution."
+
+      "Contributor" shall mean Licensor and any individual or Legal Entity
+      on behalf of whom a Contribution has been received by Licensor and
+      subsequently incorporated within the Work.
+
+   2. Grant of Copyright License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      copyright license to reproduce, prepare Derivative Works of,
+      publicly display, publicly perform, sublicense, and distribute the
+      Work and such Derivative Works in Source or Object form.
+
+   3. Grant of Patent License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      (except as stated in this section) patent license to make, have made,
+      use, offer to sell, sell, import, and otherwise transfer the Work,
+      where such license applies only to those patent claims licensable
+      by such Contributor that are necessarily infringed by their
+      Contribution(s) alone or by combination of their Contribution(s)
+      with the Work to which such Contribution(s) was submitted. If You
+      institute patent litigation against any entity (including a
+      cross-claim or counterclaim in a lawsuit) alleging that the Work
+      or a Contribution incorporated within the Work constitutes direct
+      or contributory patent infringement, then any patent licenses
+      granted to You under this License for that Work shall terminate
+      as of the date such litigation is filed.
+
+   4. Redistribution. You may reproduce and distribute copies of the
+      Work or Derivative Works thereof in any medium, with or without
+      modifications, and in Source or Object form, provided that You
+      meet the following conditions:
+
+      (a) You must give any other recipients of the Work or
+          Derivative Works a copy of this License; and
+
+      (b) You must cause any modified files to carry prominent notices
+          stating that You changed the files; and
+
+      (c) You must retain, in the Source form of any Derivative Works
+          that You distribute, all copyright, patent, trademark, and
+          attribution notices from the Source form of the Work,
+          excluding those notices that do not pertain to any part of
+          the Derivative Works; and
+
+      (d) If the Work includes a "NOTICE" text file as part of its
+          distribution, then any Derivative Works that You distribute must
+          include a readable copy of the attribution notices contained
+          within such NOTICE file, excluding those notices that do not
+          pertain to any part of the Derivative Works, in at least one
+          of the following places: within a NOTICE text file distributed
+          as part of the Derivative Works; within the Source form or
+          documentation, if provided along with the Derivative Works; or,
+          within a display generated by the Derivative Works, if and
+          wherever such third-party notices normally appear. The contents
+          of the NOTICE file are for informational purposes only and
+          do not modify the License. You may add Your own attribution
+          notices within Derivative Works that You distribute, alongside
+          or as an addendum to the NOTICE text from the Work, provided
+          that such additional attribution notices cannot be construed
+          as modifying the License.
+
+      You may add Your own copyright statement to Your modifications and
+      may provide additional or different license terms and conditions
+      for use, reproduction, or distribution of Your modifications, or
+      for any such Derivative Works as a whole, provided Your use,
+      reproduction, and distribution of the Work otherwise complies with
+      the conditions stated in this License.
+
+   5. Submission of Contributions. Unless You explicitly state otherwise,
+      any Contribution intentionally submitted for inclusion in the Work
+      by You to the Licensor shall be under the terms and conditions of
+      this License, without any additional terms or conditions.
+      Notwithstanding the above, nothing herein shall supersede or modify
+      the terms of any separate license agreement you may have executed
+      with Licensor regarding such Contributions.
+
+   6. Trademarks. This License does not grant permission to use the trade
+      names, trademarks, service marks, or product names of the Licensor,
+      except as required for reasonable and customary use in describing the
+      origin of the Work and reproducing the content of the NOTICE file.
+
+   7. Disclaimer of Warranty. Unless required by applicable law or
+      agreed to in writing, Licensor provides the Work (and each
+      Contributor provides its Contributions) on an "AS IS" BASIS,
+      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+      implied, including, without limitation, any warranties or conditions
+      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+      PARTICULAR PURPOSE. You are solely responsible for determining the
+      appropriateness of using or redistributing the Work and assume any
+      risks associated with Your exercise of permissions under this License.
+
+   8. Limitation of Liability. In no event and under no legal theory,
+      whether in tort (including negligence), contract, or otherwise,
+      unless required by applicable law (such as deliberate and grossly
+      negligent acts) or agreed to in writing, shall any Contributor be
+      liable to You for damages, including any direct, indirect, special,
+      incidental, or consequential damages of any character arising as a
+      result of this License or out of the use or inability to use the
+      Work (including but not limited to damages for loss of goodwill,
+      work stoppage, computer failure or malfunction, or any and all
+      other commercial damages or losses), even if such Contributor
+      has been advised of the possibility of such damages.
+
+   9. Accepting Warranty or Additional Liability. While redistributing
+      the Work or Derivative Works thereof, You may choose to offer,
+      and charge a fee for, acceptance of support, warranty, indemnity,
+      or other liability obligations and/or rights consistent with this
+      License. However, in accepting such obligations, You may act only
+      on Your own behalf and on Your sole responsibility, not on behalf
+      of any other Contributor, and only if You agree to indemnify,
+      defend, and hold each Contributor harmless for any liability
+      incurred by, or claims asserted against, such Contributor by reason
+      of your accepting any such warranty or additional liability.
+
+   END OF TERMS AND CONDITIONS
+
+   APPENDIX: How to apply the Apache License to your work.
+
+      To apply the Apache License to your work, attach the following
+      boilerplate notice, with the fields enclosed by brackets "[]"
+      replaced with your own identifying information. (Don't include
+      the brackets!)  The text should be enclosed in the appropriate
+      comment syntax for the file format. We also recommend that a
+      file or class name and description of purpose be included on the
+      same "printed page" as the copyright notice for easier
+      identification within third-party archives.
+
+   Copyright [yyyy] [name of copyright owner]
+
+   Licensed 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.
+

Propchange: geronimo/sandbox/monitoring/mrc-server/mrc-car/LICENSE.txt
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: geronimo/sandbox/monitoring/mrc-server/mrc-car/LICENSE.txt
------------------------------------------------------------------------------
    svn:keywords = Date Revision

Propchange: geronimo/sandbox/monitoring/mrc-server/mrc-car/LICENSE.txt
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Added: geronimo/sandbox/monitoring/mrc-server/mrc-car/NOTICE.txt
URL: http://svn.apache.org/viewvc/geronimo/sandbox/monitoring/mrc-server/mrc-car/NOTICE.txt?rev=590502&view=auto
==============================================================================
--- geronimo/sandbox/monitoring/mrc-server/mrc-car/NOTICE.txt (added)
+++ geronimo/sandbox/monitoring/mrc-server/mrc-car/NOTICE.txt Tue Oct 30 15:59:24 2007
@@ -0,0 +1,5 @@
+Apache Geronimo 
+Copyright 2003-2006 The Apache Software Foundation
+
+This product includes software developed by
+The Apache Software Foundation (http://www.apache.org/).

Propchange: geronimo/sandbox/monitoring/mrc-server/mrc-car/NOTICE.txt
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: geronimo/sandbox/monitoring/mrc-server/mrc-car/NOTICE.txt
------------------------------------------------------------------------------
    svn:keywords = Date Revision

Propchange: geronimo/sandbox/monitoring/mrc-server/mrc-car/NOTICE.txt
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Added: geronimo/sandbox/monitoring/mrc-server/mrc-car/pom.xml
URL: http://svn.apache.org/viewvc/geronimo/sandbox/monitoring/mrc-server/mrc-car/pom.xml?rev=590502&view=auto
==============================================================================
--- geronimo/sandbox/monitoring/mrc-server/mrc-car/pom.xml (added)
+++ geronimo/sandbox/monitoring/mrc-server/mrc-car/pom.xml Tue Oct 30 15:59:24 2007
@@ -0,0 +1,136 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!--
+ 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.
+-->
+
+<!-- $Rev$ $Date$ -->
+
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+
+    <modelVersion>4.0.0</modelVersion>
+
+<!--    <parent>
+        <groupId>org.apache.geronimo.plugins.mrc</groupId>
+        <artifactId>mrc-server</artifactId>
+        <version>2.1-SNAPSHOT</version>
+        <relativePath>../pom.xml</relativePath>
+    </parent>
+-->
+    <parent>
+        <groupId>org.apache.geronimo.configs</groupId>
+        <artifactId>configs</artifactId>
+        <version>2.1-SNAPSHOT</version>
+        <relativePath>../pom.xml</relativePath>
+    </parent>
+
+    <artifactId>mrc-server-car</artifactId>
+    <version>1.0-SNAPSHOT</version>
+    <name>Geronimo Plugins :: Monitoring CAR</name>
+    <packaging>car</packaging>
+
+    <dependencies>
+        <dependency>
+            <groupId>org.apache.geronimo.configs</groupId>
+            <artifactId>mrc-server-ds-car</artifactId>
+            <version>1.0-SNAPSHOT</version>
+            <type>car</type>
+        </dependency>
+
+        <dependency>
+            <groupId>org.apache.geronimo.plugins.mrc</groupId>
+            <artifactId>mrc-server-ear</artifactId>
+            <version>1.0-SNAPSHOT</version>
+            <type>ear</type>
+        </dependency>
+
+        <dependency>
+            <groupId>org.apache.geronimo.configs</groupId>
+            <artifactId>openejb</artifactId>
+            <version>2.1-SNAPSHOT</version>
+            <type>car</type>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.geronimo.configs</groupId>
+            <artifactId>transaction</artifactId>
+            <version>2.1-SNAPSHOT</version>
+            <type>car</type>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.geronimo.configs</groupId>
+            <artifactId>j2ee-server</artifactId>
+            <version>2.1-SNAPSHOT</version>
+            <type>car</type>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.geronimo.configs</groupId>
+            <artifactId>j2ee-security</artifactId>
+            <version>2.1-SNAPSHOT</version>
+            <type>car</type>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.geronimo.configs</groupId>
+            <artifactId>mejb</artifactId>
+            <version>2.1-SNAPSHOT</version>
+            <type>car</type>
+        </dependency>
+
+    </dependencies>
+
+    <build>
+        <resources>
+            <resource>
+                <directory>${pom.basedir}/src/main/resources</directory>
+                <filtering>true</filtering>
+            </resource>
+        </resources>
+
+        <plugins>
+            <plugin>
+
+                <groupId>org.apache.geronimo.plugins</groupId>
+                <artifactId>car-maven-plugin</artifactId>
+                <configuration>
+                    <deploymentConfigs>
+                        <deploymentConfig>${gbeanDeployer}</deploymentConfig>
+                        <deploymentConfig>${j2eeDeployer}</deploymentConfig>
+                        <deploymentConfig>${openejbDeployer}</deploymentConfig>
+                    </deploymentConfigs>
+                    <module>
+                        <groupId>org.apache.geronimo.plugins.mrc</groupId>
+                        <artifactId>mrc-server-ear</artifactId>
+                        <version>1.0-SNAPSHOT</version>
+                        <type>ear</type>
+                    </module>
+                    <category>Administration</category>
+                    <osiApproved>true</osiApproved>
+                    <useMavenDependencies>
+                        <value>true</value>
+                        <includeVersion>true</includeVersion>
+                    </useMavenDependencies>
+                    <commonInstance>
+                        <plugin-artifact>
+                            <source-repository>~/.m2/repository/</source-repository>
+                            <source-repository>http://repo1.maven.org/maven2/</source-repository>
+                            <source-repository>http://people.apache.org/repo/m2-snapshot-repository/</source-repository>
+                            <source-repository>http://people.apache.org/repo/m2-incubating-repository/</source-repository>
+                            <source-repository>file:///C:/.m2/</source-repository>
+                            </plugin-artifact>
+                        </commonInstance>
+                </configuration>
+            </plugin>
+        </plugins>
+    </build>
+</project>

Propchange: geronimo/sandbox/monitoring/mrc-server/mrc-car/pom.xml
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: geronimo/sandbox/monitoring/mrc-server/mrc-car/pom.xml
------------------------------------------------------------------------------
    svn:keywords = Date Revision

Propchange: geronimo/sandbox/monitoring/mrc-server/mrc-car/pom.xml
------------------------------------------------------------------------------
    svn:mime-type = text/xml

Added: geronimo/sandbox/monitoring/mrc-server/mrc-car/src/main/plan/plan.xml
URL: http://svn.apache.org/viewvc/geronimo/sandbox/monitoring/mrc-server/mrc-car/src/main/plan/plan.xml?rev=590502&view=auto
==============================================================================
--- geronimo/sandbox/monitoring/mrc-server/mrc-car/src/main/plan/plan.xml (added)
+++ geronimo/sandbox/monitoring/mrc-server/mrc-car/src/main/plan/plan.xml Tue Oct 30 15:59:24 2007
@@ -0,0 +1,22 @@
+<?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.
+-->
+
+<!-- $Rev$ $Date$ -->
+
+<application xmlns="http://geronimo.apache.org/xml/ns/j2ee/application-1.2">
+</application>

Propchange: geronimo/sandbox/monitoring/mrc-server/mrc-car/src/main/plan/plan.xml
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: geronimo/sandbox/monitoring/mrc-server/mrc-car/src/main/plan/plan.xml
------------------------------------------------------------------------------
    svn:keywords = Date Revision

Propchange: geronimo/sandbox/monitoring/mrc-server/mrc-car/src/main/plan/plan.xml
------------------------------------------------------------------------------
    svn:mime-type = text/xml

Added: geronimo/sandbox/monitoring/mrc-server/mrc-ds-car/LICENSE.txt
URL: http://svn.apache.org/viewvc/geronimo/sandbox/monitoring/mrc-server/mrc-ds-car/LICENSE.txt?rev=590502&view=auto
==============================================================================
--- geronimo/sandbox/monitoring/mrc-server/mrc-ds-car/LICENSE.txt (added)
+++ geronimo/sandbox/monitoring/mrc-server/mrc-ds-car/LICENSE.txt Tue Oct 30 15:59:24 2007
@@ -0,0 +1,203 @@
+
+                                 Apache License
+                           Version 2.0, January 2004
+                        http://www.apache.org/licenses/
+
+   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+   1. Definitions.
+
+      "License" shall mean the terms and conditions for use, reproduction,
+      and distribution as defined by Sections 1 through 9 of this document.
+
+      "Licensor" shall mean the copyright owner or entity authorized by
+      the copyright owner that is granting the License.
+
+      "Legal Entity" shall mean the union of the acting entity and all
+      other entities that control, are controlled by, or are under common
+      control with that entity. For the purposes of this definition,
+      "control" means (i) the power, direct or indirect, to cause the
+      direction or management of such entity, whether by contract or
+      otherwise, or (ii) ownership of fifty percent (50%) or more of the
+      outstanding shares, or (iii) beneficial ownership of such entity.
+
+      "You" (or "Your") shall mean an individual or Legal Entity
+      exercising permissions granted by this License.
+
+      "Source" form shall mean the preferred form for making modifications,
+      including but not limited to software source code, documentation
+      source, and configuration files.
+
+      "Object" form shall mean any form resulting from mechanical
+      transformation or translation of a Source form, including but
+      not limited to compiled object code, generated documentation,
+      and conversions to other media types.
+
+      "Work" shall mean the work of authorship, whether in Source or
+      Object form, made available under the License, as indicated by a
+      copyright notice that is included in or attached to the work
+      (an example is provided in the Appendix below).
+
+      "Derivative Works" shall mean any work, whether in Source or Object
+      form, that is based on (or derived from) the Work and for which the
+      editorial revisions, annotations, elaborations, or other modifications
+      represent, as a whole, an original work of authorship. For the purposes
+      of this License, Derivative Works shall not include works that remain
+      separable from, or merely link (or bind by name) to the interfaces of,
+      the Work and Derivative Works thereof.
+
+      "Contribution" shall mean any work of authorship, including
+      the original version of the Work and any modifications or additions
+      to that Work or Derivative Works thereof, that is intentionally
+      submitted to Licensor for inclusion in the Work by the copyright owner
+      or by an individual or Legal Entity authorized to submit on behalf of
+      the copyright owner. For the purposes of this definition, "submitted"
+      means any form of electronic, verbal, or written communication sent
+      to the Licensor or its representatives, including but not limited to
+      communication on electronic mailing lists, source code control systems,
+      and issue tracking systems that are managed by, or on behalf of, the
+      Licensor for the purpose of discussing and improving the Work, but
+      excluding communication that is conspicuously marked or otherwise
+      designated in writing by the copyright owner as "Not a Contribution."
+
+      "Contributor" shall mean Licensor and any individual or Legal Entity
+      on behalf of whom a Contribution has been received by Licensor and
+      subsequently incorporated within the Work.
+
+   2. Grant of Copyright License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      copyright license to reproduce, prepare Derivative Works of,
+      publicly display, publicly perform, sublicense, and distribute the
+      Work and such Derivative Works in Source or Object form.
+
+   3. Grant of Patent License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      (except as stated in this section) patent license to make, have made,
+      use, offer to sell, sell, import, and otherwise transfer the Work,
+      where such license applies only to those patent claims licensable
+      by such Contributor that are necessarily infringed by their
+      Contribution(s) alone or by combination of their Contribution(s)
+      with the Work to which such Contribution(s) was submitted. If You
+      institute patent litigation against any entity (including a
+      cross-claim or counterclaim in a lawsuit) alleging that the Work
+      or a Contribution incorporated within the Work constitutes direct
+      or contributory patent infringement, then any patent licenses
+      granted to You under this License for that Work shall terminate
+      as of the date such litigation is filed.
+
+   4. Redistribution. You may reproduce and distribute copies of the
+      Work or Derivative Works thereof in any medium, with or without
+      modifications, and in Source or Object form, provided that You
+      meet the following conditions:
+
+      (a) You must give any other recipients of the Work or
+          Derivative Works a copy of this License; and
+
+      (b) You must cause any modified files to carry prominent notices
+          stating that You changed the files; and
+
+      (c) You must retain, in the Source form of any Derivative Works
+          that You distribute, all copyright, patent, trademark, and
+          attribution notices from the Source form of the Work,
+          excluding those notices that do not pertain to any part of
+          the Derivative Works; and
+
+      (d) If the Work includes a "NOTICE" text file as part of its
+          distribution, then any Derivative Works that You distribute must
+          include a readable copy of the attribution notices contained
+          within such NOTICE file, excluding those notices that do not
+          pertain to any part of the Derivative Works, in at least one
+          of the following places: within a NOTICE text file distributed
+          as part of the Derivative Works; within the Source form or
+          documentation, if provided along with the Derivative Works; or,
+          within a display generated by the Derivative Works, if and
+          wherever such third-party notices normally appear. The contents
+          of the NOTICE file are for informational purposes only and
+          do not modify the License. You may add Your own attribution
+          notices within Derivative Works that You distribute, alongside
+          or as an addendum to the NOTICE text from the Work, provided
+          that such additional attribution notices cannot be construed
+          as modifying the License.
+
+      You may add Your own copyright statement to Your modifications and
+      may provide additional or different license terms and conditions
+      for use, reproduction, or distribution of Your modifications, or
+      for any such Derivative Works as a whole, provided Your use,
+      reproduction, and distribution of the Work otherwise complies with
+      the conditions stated in this License.
+
+   5. Submission of Contributions. Unless You explicitly state otherwise,
+      any Contribution intentionally submitted for inclusion in the Work
+      by You to the Licensor shall be under the terms and conditions of
+      this License, without any additional terms or conditions.
+      Notwithstanding the above, nothing herein shall supersede or modify
+      the terms of any separate license agreement you may have executed
+      with Licensor regarding such Contributions.
+
+   6. Trademarks. This License does not grant permission to use the trade
+      names, trademarks, service marks, or product names of the Licensor,
+      except as required for reasonable and customary use in describing the
+      origin of the Work and reproducing the content of the NOTICE file.
+
+   7. Disclaimer of Warranty. Unless required by applicable law or
+      agreed to in writing, Licensor provides the Work (and each
+      Contributor provides its Contributions) on an "AS IS" BASIS,
+      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+      implied, including, without limitation, any warranties or conditions
+      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+      PARTICULAR PURPOSE. You are solely responsible for determining the
+      appropriateness of using or redistributing the Work and assume any
+      risks associated with Your exercise of permissions under this License.
+
+   8. Limitation of Liability. In no event and under no legal theory,
+      whether in tort (including negligence), contract, or otherwise,
+      unless required by applicable law (such as deliberate and grossly
+      negligent acts) or agreed to in writing, shall any Contributor be
+      liable to You for damages, including any direct, indirect, special,
+      incidental, or consequential damages of any character arising as a
+      result of this License or out of the use or inability to use the
+      Work (including but not limited to damages for loss of goodwill,
+      work stoppage, computer failure or malfunction, or any and all
+      other commercial damages or losses), even if such Contributor
+      has been advised of the possibility of such damages.
+
+   9. Accepting Warranty or Additional Liability. While redistributing
+      the Work or Derivative Works thereof, You may choose to offer,
+      and charge a fee for, acceptance of support, warranty, indemnity,
+      or other liability obligations and/or rights consistent with this
+      License. However, in accepting such obligations, You may act only
+      on Your own behalf and on Your sole responsibility, not on behalf
+      of any other Contributor, and only if You agree to indemnify,
+      defend, and hold each Contributor harmless for any liability
+      incurred by, or claims asserted against, such Contributor by reason
+      of your accepting any such warranty or additional liability.
+
+   END OF TERMS AND CONDITIONS
+
+   APPENDIX: How to apply the Apache License to your work.
+
+      To apply the Apache License to your work, attach the following
+      boilerplate notice, with the fields enclosed by brackets "[]"
+      replaced with your own identifying information. (Don't include
+      the brackets!)  The text should be enclosed in the appropriate
+      comment syntax for the file format. We also recommend that a
+      file or class name and description of purpose be included on the
+      same "printed page" as the copyright notice for easier
+      identification within third-party archives.
+
+   Copyright [yyyy] [name of copyright owner]
+
+   Licensed 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.
+

Propchange: geronimo/sandbox/monitoring/mrc-server/mrc-ds-car/LICENSE.txt
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: geronimo/sandbox/monitoring/mrc-server/mrc-ds-car/LICENSE.txt
------------------------------------------------------------------------------
    svn:keywords = Date Revision

Propchange: geronimo/sandbox/monitoring/mrc-server/mrc-ds-car/LICENSE.txt
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Added: geronimo/sandbox/monitoring/mrc-server/mrc-ds-car/NOTICE.txt
URL: http://svn.apache.org/viewvc/geronimo/sandbox/monitoring/mrc-server/mrc-ds-car/NOTICE.txt?rev=590502&view=auto
==============================================================================
--- geronimo/sandbox/monitoring/mrc-server/mrc-ds-car/NOTICE.txt (added)
+++ geronimo/sandbox/monitoring/mrc-server/mrc-ds-car/NOTICE.txt Tue Oct 30 15:59:24 2007
@@ -0,0 +1,5 @@
+Apache Geronimo 
+Copyright 2003-2006 The Apache Software Foundation
+
+This product includes software developed by
+The Apache Software Foundation (http://www.apache.org/).

Propchange: geronimo/sandbox/monitoring/mrc-server/mrc-ds-car/NOTICE.txt
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: geronimo/sandbox/monitoring/mrc-server/mrc-ds-car/NOTICE.txt
------------------------------------------------------------------------------
    svn:keywords = Date Revision

Propchange: geronimo/sandbox/monitoring/mrc-server/mrc-ds-car/NOTICE.txt
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Added: geronimo/sandbox/monitoring/mrc-server/mrc-ds-car/pom.xml
URL: http://svn.apache.org/viewvc/geronimo/sandbox/monitoring/mrc-server/mrc-ds-car/pom.xml?rev=590502&view=auto
==============================================================================
--- geronimo/sandbox/monitoring/mrc-server/mrc-ds-car/pom.xml (added)
+++ geronimo/sandbox/monitoring/mrc-server/mrc-ds-car/pom.xml Tue Oct 30 15:59:24 2007
@@ -0,0 +1,94 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!--
+ 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.
+-->
+
+<!-- $Rev$ $Date$ -->
+
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+
+    <modelVersion>4.0.0</modelVersion>
+<!--
+    <parent>
+        <groupId>org.apache.geronimo.plugins.mrc</groupId>
+        <artifactId>mrc-server</artifactId>
+        <version>1.0-SNAPSHOT</version>
+        <relativePath>../pom.xml</relativePath>
+    </parent>
+-->
+    <parent>
+        <groupId>org.apache.geronimo.configs</groupId>
+        <artifactId>configs</artifactId>
+        <version>2.1-SNAPSHOT</version>
+        <relativePath>../pom.xml</relativePath>
+    </parent>
+
+    <artifactId>mrc-server-ds-car</artifactId>
+    <version>1.0-SNAPSHOT</version>
+    <name>Geronimo Plugins :: Monitoring CAR</name>
+    <packaging>car</packaging>
+
+    <dependencies>
+        <dependency>
+            <groupId>org.apache.geronimo.configs</groupId>
+            <artifactId>system-database</artifactId>
+            <version>2.1-SNAPSHOT</version>
+            <type>car</type>
+        </dependency>
+        <dependency>
+            <groupId>org.tranql</groupId>
+            <artifactId>tranql-connector-derby-embed-local</artifactId>
+            <version>1.3</version>
+            <type>rar</type>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.geronimo.configs</groupId>
+            <artifactId>connector-deployer</artifactId>
+            <version>2.1-SNAPSHOT</version>
+            <type>car</type>
+        </dependency>
+    </dependencies>
+
+    <build>
+        <resources>
+            <resource>
+                <directory>${pom.basedir}/src/main/resources</directory>
+                <filtering>true</filtering>
+            </resource>
+        </resources>
+
+        <plugins>
+            <plugin>
+
+                <groupId>org.apache.geronimo.plugins</groupId>
+                <artifactId>car-maven-plugin</artifactId>
+                <configuration>
+                    <deploymentConfigs>
+                        <deploymentConfig>${gbeanDeployer}</deploymentConfig>
+                        <deploymentConfig>${j2eeDeployer}</deploymentConfig>
+                        <deploymentConfig>${connectorDeployer}</deploymentConfig>
+                    </deploymentConfigs>
+                    <module>
+                        <groupId>org.tranql</groupId>
+                        <artifactId>tranql-connector-derby-embed-local</artifactId>
+                        <version>1.3</version>
+                        <type>rar</type>
+                    </module>
+                </configuration>
+            </plugin>
+        </plugins>
+    </build>
+</project>

Propchange: geronimo/sandbox/monitoring/mrc-server/mrc-ds-car/pom.xml
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: geronimo/sandbox/monitoring/mrc-server/mrc-ds-car/pom.xml
------------------------------------------------------------------------------
    svn:keywords = Date Revision

Propchange: geronimo/sandbox/monitoring/mrc-server/mrc-ds-car/pom.xml
------------------------------------------------------------------------------
    svn:mime-type = text/xml

Added: geronimo/sandbox/monitoring/mrc-server/mrc-ds-car/src/main/plan/plan.xml
URL: http://svn.apache.org/viewvc/geronimo/sandbox/monitoring/mrc-server/mrc-ds-car/src/main/plan/plan.xml?rev=590502&view=auto
==============================================================================
--- geronimo/sandbox/monitoring/mrc-server/mrc-ds-car/src/main/plan/plan.xml (added)
+++ geronimo/sandbox/monitoring/mrc-server/mrc-ds-car/src/main/plan/plan.xml Tue Oct 30 15:59:24 2007
@@ -0,0 +1,64 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<connector xmlns="http://geronimo.apache.org/xml/ns/j2ee/connector-1.1">
+    <environment>
+
+        <moduleId>
+            <groupId>org.apache.geronimo.configs</groupId>
+            <artifactId>mrc-server-ds-car</artifactId>
+            <version>1.0-SNAPSHOT</version>
+            <type>car</type>
+        </moduleId>
+
+        <dependencies>
+            <dependency>
+                <groupId>org.apache.geronimo.configs</groupId>
+                <artifactId>system-database</artifactId>
+                <version>2.1-SNAPSHOT</version>
+                <type>car</type>
+            </dependency>
+        </dependencies>
+    </environment>
+    <resourceadapter>
+        <outbound-resourceadapter>
+            <!-- Pool for Active Statisitcs -->
+            <connection-definition>
+                <connectionfactory-interface>javax.sql.DataSource</connectionfactory-interface>
+                <connectiondefinition-instance>
+                    <name>jdbc/ActiveDS</name>
+                    <config-property-setting name="CreateDatabase">true</config-property-setting>
+                    <config-property-setting name="Password">monitor</config-property-setting>
+                    <config-property-setting name="UserName">monitor</config-property-setting>
+                    <config-property-setting name="DatabaseName">ActiveMRCDB</config-property-setting>
+                    <connectionmanager>
+                        <local-transaction/>
+                        <single-pool>
+                            <max-size>10</max-size>
+                            <min-size>0</min-size>
+                            <match-one/>
+                        </single-pool>
+                    </connectionmanager>
+                </connectiondefinition-instance>
+            </connection-definition>
+
+            <!-- Pool for Archived Statisitcs -->
+            <connection-definition>
+                <connectionfactory-interface>javax.sql.DataSource</connectionfactory-interface>
+                <connectiondefinition-instance>
+                    <name>jdbc/ArchiveDS</name>
+                    <config-property-setting name="CreateDatabase">true</config-property-setting>
+                    <config-property-setting name="Password">monitor</config-property-setting>
+                    <config-property-setting name="UserName">monitor</config-property-setting>
+                    <config-property-setting name="DatabaseName">ArchiveMRCDB</config-property-setting>
+                    <connectionmanager>
+                        <local-transaction/>
+                        <single-pool>
+                            <max-size>10</max-size>
+                            <min-size>0</min-size>
+                            <match-one/>
+                        </single-pool>
+                    </connectionmanager>
+                </connectiondefinition-instance>
+            </connection-definition>
+        </outbound-resourceadapter>
+    </resourceadapter>
+</connector>

Propchange: geronimo/sandbox/monitoring/mrc-server/mrc-ds-car/src/main/plan/plan.xml
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: geronimo/sandbox/monitoring/mrc-server/mrc-ds-car/src/main/plan/plan.xml
------------------------------------------------------------------------------
    svn:keywords = Date Revision

Propchange: geronimo/sandbox/monitoring/mrc-server/mrc-ds-car/src/main/plan/plan.xml
------------------------------------------------------------------------------
    svn:mime-type = text/xml

Modified: geronimo/sandbox/monitoring/mrc-server/mrc-ear/pom.xml
URL: http://svn.apache.org/viewvc/geronimo/sandbox/monitoring/mrc-server/mrc-ear/pom.xml?rev=590502&r1=590501&r2=590502&view=diff
==============================================================================
--- geronimo/sandbox/monitoring/mrc-server/mrc-ear/pom.xml (original)
+++ geronimo/sandbox/monitoring/mrc-server/mrc-ear/pom.xml Tue Oct 30 15:59:24 2007
@@ -36,12 +36,14 @@
     <description>Geronimo Stats. EAR Module</description>
 
     <dependencies>
+    <!--
         <dependency>
-            <groupId>org.tranql</groupId>
-            <artifactId>tranql-connector-ra</artifactId>
-            <version>1.3</version>
-            <type>rar</type>
+            <groupId>org.apache.geronimo.configs</groupId>
+            <artifactId>mrc-server-ds-car</artifactId>
+            <version>1.0-SNAPSHOT</version>
+            <type>car</type>
         </dependency>
+        -->
         <dependency>
             <groupId>org.apache.geronimo.plugins.mrc</groupId>
             <artifactId>mrc-server-ejb</artifactId>
@@ -82,5 +84,6 @@
     </build>
 
 </project>
+
 
 

Modified: geronimo/sandbox/monitoring/mrc-server/mrc-ear/src/main/resources/META-INF/geronimo-application.xml
URL: http://svn.apache.org/viewvc/geronimo/sandbox/monitoring/mrc-server/mrc-ear/src/main/resources/META-INF/geronimo-application.xml?rev=590502&r1=590501&r2=590502&view=diff
==============================================================================
--- geronimo/sandbox/monitoring/mrc-server/mrc-ear/src/main/resources/META-INF/geronimo-application.xml (original)
+++ geronimo/sandbox/monitoring/mrc-server/mrc-ear/src/main/resources/META-INF/geronimo-application.xml Tue Oct 30 15:59:24 2007
@@ -29,11 +29,15 @@
             <version>1.0-SNAPSHOT</version>
             <type>ear</type>
         </moduleId>
-    </environment>
 
-    <module>
-        <connector>tranql-connector-ra-1.3.rar</connector>
-        <alt-dd>MonitorDBPool.xml</alt-dd>
-    </module>
-    
+        <dependencies>
+            <!-- dependency on the DataSource plugin  -->
+            <dependency>
+                <groupId>org.apache.geronimo.configs</groupId>
+                <artifactId>mrc-server-ds-car</artifactId>
+                <version>1.0-SNAPSHOT</version>
+                <type>car</type>
+            </dependency>
+        </dependencies>
+    </environment>
 </application>

Modified: geronimo/sandbox/monitoring/mrc-server/mrc-ejb/src/main/java/org/apache/geronimo/monitor/MBeanHelper.java
URL: http://svn.apache.org/viewvc/geronimo/sandbox/monitoring/mrc-server/mrc-ejb/src/main/java/org/apache/geronimo/monitor/MBeanHelper.java?rev=590502&r1=590501&r2=590502&view=diff
==============================================================================
--- geronimo/sandbox/monitoring/mrc-server/mrc-ejb/src/main/java/org/apache/geronimo/monitor/MBeanHelper.java (original)
+++ geronimo/sandbox/monitoring/mrc-server/mrc-ejb/src/main/java/org/apache/geronimo/monitor/MBeanHelper.java Tue Oct 30 15:59:24 2007
@@ -40,16 +40,16 @@
     /**
      * Return all MBeans that provide stats
      */
-    public Set<ObjectName> getStatsProvidersMBeans(Set<ObjectName> allMBeans) {
-        Set<ObjectName> result = new HashSet();
+    public Set<String> getStatsProvidersMBeans(Set<String> allMBeans) {
+        Set<String> result = new HashSet();
 
         try {
             for (Iterator it = allMBeans.iterator(); it.hasNext(); ) {
                 try {
-                    ObjectName objName = (ObjectName) it.next();
-                    Boolean statisticsProvider = (Boolean) kernel.getAttribute(objName, "statisticsProvider");
+                    String mbeanName = (String) it.next();
+                    Boolean statisticsProvider = (Boolean) kernel.getAttribute(new ObjectName(mbeanName), "statisticsProvider");
                     if (Boolean.TRUE.equals(statisticsProvider)) {
-                        result.add(objName);
+                        result.add(mbeanName);
                     }
                 } catch (Exception e) {
                     // this will happen if there is not a matching attribute "statisticsProvider"

Modified: geronimo/sandbox/monitoring/mrc-server/mrc-ejb/src/main/java/org/apache/geronimo/monitor/MasterRemoteControl.java
URL: http://svn.apache.org/viewvc/geronimo/sandbox/monitoring/mrc-server/mrc-ejb/src/main/java/org/apache/geronimo/monitor/MasterRemoteControl.java?rev=590502&r1=590501&r2=590502&view=diff
==============================================================================
--- geronimo/sandbox/monitoring/mrc-server/mrc-ejb/src/main/java/org/apache/geronimo/monitor/MasterRemoteControl.java (original)
+++ geronimo/sandbox/monitoring/mrc-server/mrc-ejb/src/main/java/org/apache/geronimo/monitor/MasterRemoteControl.java Tue Oct 30 15:59:24 2007
@@ -34,6 +34,7 @@
 
 import javax.annotation.Resource;
 import javax.annotation.PostConstruct;
+import javax.annotation.PreDestroy;
 import javax.annotation.security.RolesAllowed;
 import javax.annotation.security.RunAs;
 import javax.ejb.Remote;
@@ -55,8 +56,6 @@
 import javax.naming.InitialContext;
 import javax.naming.NamingException;
 
-//import org.apache.commons.logging.Log;
-//import org.apache.commons.logging.LogFactory;
 import org.apache.geronimo.gbean.AbstractName;
 import org.apache.geronimo.gbean.GBeanInfo;
 import org.apache.geronimo.gbean.GBeanInfoBuilder;
@@ -84,8 +83,6 @@
     private static final Long DEFAULT_DURATION = new Long(300000);
     private static final int DEFAULT_RETENTION = 30; // 30 days
 
-    //private static final Log log = LogFactory.getLog(MasterRemoteControl.class);
-
     // mbean server to talk to other components
     private static MBeanServer mbServer = null;
     
@@ -102,8 +99,8 @@
     private static MBeanHelper mbeanHelper;
 
     // inject Data Sources
-    @Resource(name="ActiveDS") private DataSource activeDS;
-    @Resource(name="ArchiveDS") private DataSource archiveDS;
+    @Resource(name="jdbc/ActiveDS") private DataSource activeDS;
+    @Resource(name="jdbc/ArchiveDS") private DataSource archiveDS;
 
     public MasterRemoteControl() {
         
@@ -189,22 +186,31 @@
      */
     private void createTables(Statement stmt) {
         try {
-            String tableMBeansCreate = "CREATE TABLE MBeans( id INT NOT NULL GENERATED ALWAYS AS IDENTITY (START WITH 1, INCREMENT BY 1), mbeanName VARCHAR(256) NOT NULL, PRIMARY KEY(id) )";
-            String tableSnapshotsCreate = "CREATE TABLE Snapshots(id INT NOT NULL GENERATED ALWAYS AS IDENTITY (START WITH 1, INCREMENT BY 1), snapshot_time BIGINT NOT NULL, snapshot_date VARCHAR(30) NOT NULL, PRIMARY KEY(id))";
+            // MBeans
+            // -id
+            // -mbeanName
+            // -statsNameList
+            String tableMBeansCreate      = "CREATE TABLE MBeans(";
+            tableMBeansCreate            +=     "id INT NOT NULL GENERATED ALWAYS AS IDENTITY (START WITH 1, INCREMENT BY 1),";
+            tableMBeansCreate            +=     "mbeanName VARCHAR(256) NOT NULL,";
+            tableMBeansCreate            +=     "statsNameList VARCHAR(512) NOT NULL,";
+            tableMBeansCreate            +=     "PRIMARY KEY(id)";
+            tableMBeansCreate            +=  ")";            
+            // Statistics
+            // -id
+            // -mbeanId (f.k. references MBeans.id)
+            // snapshot_time
+            // statsValueList
             String tableStatisticsCreate  = "CREATE TABLE Statistics (";
-                   tableStatisticsCreate +=     "id BIGINT NOT NULL GENERATED ALWAYS AS IDENTITY (START WITH 1, INCREMENT BY 1),";
+                   tableStatisticsCreate +=     "id INT NOT NULL GENERATED ALWAYS AS IDENTITY (START WITH 1, INCREMENT BY 1),";
                    tableStatisticsCreate +=     "mbeanId INT NOT NULL,";
-                   tableStatisticsCreate +=     "snapshotId INT NOT NULL,";
-                   tableStatisticsCreate +=     "statsValue BIGINT NOT NULL,"; 
-                   tableStatisticsCreate +=     "statsName VARCHAR(100) NOT NULL,";
+                   tableStatisticsCreate +=     "snapshot_time BIGINT NOT NULL,";
+                   tableStatisticsCreate +=     "statsValueList VARCHAR(512) NOT NULL,"; 
                    tableStatisticsCreate +=     "PRIMARY KEY(id),";
-                   tableStatisticsCreate +=     "FOREIGN KEY (mbeanId) REFERENCES MBeans(id),";
-                   tableStatisticsCreate +=     "FOREIGN KEY (snapshotId) REFERENCES Snapshots(id)";
+                   tableStatisticsCreate +=     "FOREIGN KEY (mbeanId) REFERENCES MBeans(id)";
                    tableStatisticsCreate += ")";
             stmt.executeUpdate(tableMBeansCreate);
             System.out.println("MBeans Table Created");
-            stmt.executeUpdate(tableSnapshotsCreate);
-            System.out.println("Snapshots Table Created");
             stmt.executeUpdate(tableStatisticsCreate);
             System.out.println("Statistics Table Created");
         } catch(Exception e) {
@@ -389,8 +395,9 @@
      * @return ArrayList
      */ 
     @RolesAllowed("mejbuser")
-    public ArrayList fetchSnapshotData(Integer numberOfSnapshot, Integer everyNthSnapshot) {
-        ArrayList retval = (ArrayList)org.apache.geronimo.monitor.snapshot.SnapshotDBHelper.fetchData(numberOfSnapshot, everyNthSnapshot);
+    public ArrayList<HashMap<String, HashMap<String, Object>>> fetchSnapshotData(Integer numberOfSnapshot, Integer everyNthSnapshot) {
+        ArrayList<HashMap<String, HashMap<String, Object>>> retval = 
+            (ArrayList<HashMap<String, HashMap<String, Object>>>)org.apache.geronimo.monitor.snapshot.SnapshotDBHelper.fetchData(numberOfSnapshot, everyNthSnapshot);
         return retval;
     }
     
@@ -402,8 +409,9 @@
      * @return HashMap
      */
     @RolesAllowed("mejbuser")
-    public HashMap fetchMaxSnapshotData(Integer numberOfSnapshot) {
-        HashMap retval = (HashMap)org.apache.geronimo.monitor.snapshot.SnapshotDBHelper.fetchMaxSnapshotData(numberOfSnapshot);
+    public HashMap<String, HashMap<String, Long>> fetchMaxSnapshotData(Integer numberOfSnapshot) {
+        HashMap<String, HashMap<String, Long>> retval = 
+            (HashMap<String, HashMap<String, Long>>)org.apache.geronimo.monitor.snapshot.SnapshotDBHelper.fetchMaxSnapshotData(numberOfSnapshot);
         return retval;
     }
 
@@ -415,8 +423,9 @@
      * @return HashMap
      */
     @RolesAllowed("mejbuser")
-    public HashMap fetchMinSnapshotData(Integer numberOfSnapshot) {
-        HashMap retval = (HashMap)org.apache.geronimo.monitor.snapshot.SnapshotDBHelper.fetchMinSnapshotData(numberOfSnapshot);
+    public HashMap<String, HashMap<String, Long>> fetchMinSnapshotData(Integer numberOfSnapshot) {
+        HashMap<String, HashMap<String, Long>> retval = 
+            (HashMap<String, HashMap<String, Long>>)org.apache.geronimo.monitor.snapshot.SnapshotDBHelper.fetchMinSnapshotData(numberOfSnapshot);
         return retval;
     }
     
@@ -471,7 +480,7 @@
      * statistics
      */
     @RolesAllowed("mejbuser")
-    public Set<ObjectName> getStatisticsProviderMBeanNames() {
+    public Set<String> getStatisticsProviderMBeanNames() {
         return mbeanHelper.getStatsProvidersMBeans( getAllMBeanNames() );
     }
     
@@ -481,26 +490,28 @@
      * @return A set containing all mbean names
      */
     @RolesAllowed("mejbuser")
-    public Set<ObjectName> getAllMBeanNames() {
+    public Set<String> getAllMBeanNames() {
         try {
-            return (Set<ObjectName>)mejb.queryNames(null, null);
+            Set<ObjectName> names = (Set<ObjectName>)mejb.queryNames(null, null);
+            Set<String> strNames = new HashSet<String>();
+            for(Iterator<ObjectName> it = names.iterator(); it.hasNext(); ) {
+                strNames.add(it.next().getCanonicalName());
+            }
+            return strNames;
         } catch(Exception e) {
             e.printStackTrace();
-            return new HashSet<ObjectName>();
+            return new HashSet<String>();
         }
     }
     
-    @RolesAllowed("mejbuser")
     private void saveDuration(long duration) {
         SnapshotConfigXMLBuilder.saveDuration(duration);
     }
     
-    @RolesAllowed("mejbuser")
     private void saveRetention(int retention) {
         SnapshotConfigXMLBuilder.saveRetention(retention);
     }
     
-    @RolesAllowed("mejbuser")
     private Long fetchSnapshotDuration() {
         final String DURATION = "duration";
         try {

Modified: geronimo/sandbox/monitoring/mrc-server/mrc-ejb/src/main/java/org/apache/geronimo/monitor/MasterRemoteControlRemote.java
URL: http://svn.apache.org/viewvc/geronimo/sandbox/monitoring/mrc-server/mrc-ejb/src/main/java/org/apache/geronimo/monitor/MasterRemoteControlRemote.java?rev=590502&r1=590501&r2=590502&view=diff
==============================================================================
--- geronimo/sandbox/monitoring/mrc-server/mrc-ejb/src/main/java/org/apache/geronimo/monitor/MasterRemoteControlRemote.java (original)
+++ geronimo/sandbox/monitoring/mrc-server/mrc-ejb/src/main/java/org/apache/geronimo/monitor/MasterRemoteControlRemote.java Tue Oct 30 15:59:24 2007
@@ -33,7 +33,7 @@
 @Remote
 public interface MasterRemoteControlRemote {
     @RolesAllowed("mejbuser")
-    public HashMap getStats(String s) throws Exception;
+    public HashMap<String, Long> getStats(String s) throws Exception;
     @RolesAllowed("mejbadmin")
     public void setAttribute(String s, String ss, Object o) throws Exception;
     @RolesAllowed("mejbuser")
@@ -41,11 +41,11 @@
     @RolesAllowed("mejbuser")
     public boolean stopSnapshot();
     @RolesAllowed("mejbuser")
-    public ArrayList fetchSnapshotData(Integer i, Integer ii);
+    public ArrayList<HashMap<String, HashMap<String, Object>>> fetchSnapshotData(Integer i, Integer ii);
     @RolesAllowed("mejbuser")
-    public HashMap fetchMaxSnapshotData(Integer i);
+    public HashMap<String, HashMap<String, Long>> fetchMaxSnapshotData(Integer i);
     @RolesAllowed("mejbuser")
-    public HashMap fetchMinSnapshotData(Integer i);
+    public HashMap<String, HashMap<String, Long>> fetchMinSnapshotData(Integer i);
     @RolesAllowed("mejbuser")
     public Long getSnapshotDuration();
     @RolesAllowed("mejbuser")
@@ -53,11 +53,11 @@
     @RolesAllowed("mejbuser")
     public void setSnapshotDuration(Long l);
     @RolesAllowed("mejbuser")
-    public Set getStatisticsProviderMBeanNames();
+    public Set<String> getStatisticsProviderMBeanNames();
     @RolesAllowed("mejbuser")
-    public Set getAllMBeanNames();
+    public Set<String> getAllMBeanNames();
     @RolesAllowed("mejbuser")
-    public HashMap getAllSnapshotStatAttributes();
+    public HashMap<String, ArrayList<String>> getAllSnapshotStatAttributes();
     @RolesAllowed("mejbuser")
     public void addMBeanForSnapshot(String s);
     @RolesAllowed("mejbuser")

Modified: geronimo/sandbox/monitoring/mrc-server/mrc-ejb/src/main/java/org/apache/geronimo/monitor/SMP.java
URL: http://svn.apache.org/viewvc/geronimo/sandbox/monitoring/mrc-server/mrc-ejb/src/main/java/org/apache/geronimo/monitor/SMP.java?rev=590502&r1=590501&r2=590502&view=diff
==============================================================================
--- geronimo/sandbox/monitoring/mrc-server/mrc-ejb/src/main/java/org/apache/geronimo/monitor/SMP.java (original)
+++ geronimo/sandbox/monitoring/mrc-server/mrc-ejb/src/main/java/org/apache/geronimo/monitor/SMP.java Tue Oct 30 15:59:24 2007
@@ -222,22 +222,22 @@
     }
 
     private static void testPrintStatisticsProviderMBeans(MasterRemoteControlRemote mrc) {
-        Set<ObjectName> list = mrc.getStatisticsProviderMBeanNames();
-        for(Iterator<ObjectName> it = list.iterator(); it.hasNext(); ) {
-            String mbeanName = it.next().getCanonicalName();
+        Set<String> list = mrc.getStatisticsProviderMBeanNames();
+        for(Iterator<String> it = list.iterator(); it.hasNext(); ) {
+            String mbeanName = it.next();
             System.out.println(mbeanName);
         }
     }
     
     private static void testRemoveMBeanToSnapshot(MBeanServerConnection mbServerConn) throws Exception {
         ObjectName objName = new ObjectName(PATH);
-        Set<ObjectName> mbeans = getStatsMBeans(mbServerConn);
+        Set<String> mbeans = getStatsMBeans(mbServerConn);
         try {
-            Iterator<ObjectName> it = mbeans.iterator();
-            String mbeanName = it.next().getCanonicalName();
-            mbeanName = it.next().getCanonicalName();
-            mbeanName = it.next().getCanonicalName();
-            mbeanName = it.next().getCanonicalName();
+            Iterator<String> it = mbeans.iterator();
+            String mbeanName = it.next();
+            mbeanName = it.next();
+            mbeanName = it.next();
+            mbeanName = it.next();
             System.out.println(mbeanName);
             mbServerConn.invoke(
                     objName,
@@ -252,13 +252,13 @@
 
     private static void testAddMBeanToSnapshot(MBeanServerConnection mbServerConn) throws Exception {
         ObjectName objName = new ObjectName(PATH);
-        Set<ObjectName> mbeans = getStatsMBeans(mbServerConn);
+        Set<String> mbeans = getStatsMBeans(mbServerConn);
         try {
-            Iterator<ObjectName> it = mbeans.iterator();
-            String mbeanName = it.next().getCanonicalName();
-            mbeanName = it.next().getCanonicalName();
-            mbeanName = it.next().getCanonicalName();
-            mbeanName = it.next().getCanonicalName();
+            Iterator<String> it = mbeans.iterator();
+            String mbeanName = it.next();
+            mbeanName = it.next();
+            mbeanName = it.next();
+            mbeanName = it.next();
             System.out.println(mbeanName);
             mbServerConn.invoke(
                     objName,
@@ -295,7 +295,7 @@
     
     private static void testGetStats(MBeanServerConnection mbServerConn) throws Exception {
         ObjectName objName = new ObjectName(PATH);
-        Set<ObjectName> mbeanNames = getStatsMBeans(mbServerConn);
+        Set<String> mbeanNames = getStatsMBeans(mbServerConn);
         for(Iterator it = mbeanNames.iterator(); it.hasNext(); ) {
             //String mbeanName = "geronimo:ServiceModule=org.apache.geronimo.configs/jetty6/2.0.1/car,J2EEServer=geronimo,name=JettyWebContainer,j2eeType=GBean";
             String mbeanName = ((ObjectName)it.next()).getCanonicalName();
@@ -347,11 +347,11 @@
         }
     }
     
-    private static Set<ObjectName> getStatsMBeans(MBeanServerConnection mbServerConn) throws Exception {
+    private static Set<String> getStatsMBeans(MBeanServerConnection mbServerConn) throws Exception {
         System.out.println("* * * testGetStatsMBeans() * * *");
         ObjectName objName = new ObjectName(PATH);
         try {
-            Set<ObjectName> set = (Set<ObjectName>)mbServerConn.invoke(
+            Set<String> set = (Set<String>)mbServerConn.invoke(
                     objName,
                     "getStatisticsProviderMBeanNames", 
                     new Object[] {},

Modified: geronimo/sandbox/monitoring/mrc-server/mrc-ejb/src/main/java/org/apache/geronimo/monitor/snapshot/SnapshotDBHelper.java
URL: http://svn.apache.org/viewvc/geronimo/sandbox/monitoring/mrc-server/mrc-ejb/src/main/java/org/apache/geronimo/monitor/snapshot/SnapshotDBHelper.java?rev=590502&r1=590501&r2=590502&view=diff
==============================================================================
--- geronimo/sandbox/monitoring/mrc-server/mrc-ejb/src/main/java/org/apache/geronimo/monitor/snapshot/SnapshotDBHelper.java (original)
+++ geronimo/sandbox/monitoring/mrc-server/mrc-ejb/src/main/java/org/apache/geronimo/monitor/snapshot/SnapshotDBHelper.java Tue Oct 30 15:59:24 2007
@@ -33,10 +33,9 @@
 public class SnapshotDBHelper {
     // field attributes for the Statistics table in the DB
     private static final String SNAPSHOT_TIME = "snapshot_time";
-    private static final String SNAPSHOT_DATE = "snapshot_date";
     private static final String MBEANNAME = "mbeanName";
-    private static final String STATSVALUE = "statsValue";
-    private static final String STATSNAME = "statsName";
+    private static final String STATSVALUELIST = "statsValueList";
+    private static final String STATSNAMELIST = "statsNameList";
     // Connection object used for DB interaction
     private static Connection conn = null;
     // Data Sources
@@ -51,17 +50,18 @@
         HashMap<String, ArrayList<String>> retval = new HashMap<String, ArrayList<String>>();
         try {
             Statement stmt = conn.createStatement();
-            String query = "SELECT DISTINCT M.mbeanName, S.statsName FROM Statistics S, MBeans M WHERE M.id=S.mbeanId";
+            String query = "SELECT DISTINCT mbeanName, statsNameList FROM MBeans";
             ResultSet rs = stmt.executeQuery(query);
             // add each mbean/statsValue combination to retval
             while(rs.next()) {
                 String mbeanName = rs.getString(MBEANNAME);
-                String statsValue = rs.getString(STATSNAME);
-                ArrayList<String> mbeanAttributeList = retval.get(mbeanName);
-                if(mbeanAttributeList == null) {
-                    mbeanAttributeList = new ArrayList<String>();
+                String statsNameStr = rs.getString(STATSNAMELIST);
+                String[] statsNameList = statsNameStr.split(",");
+                ArrayList<String> mbeanAttributeList = new ArrayList<String>();
+                // copy from String[] to ArrayList<String>
+                for(int i = 0; i < statsNameList.length; i++) {
+                    mbeanAttributeList.add(statsNameList[i]);
                 }
-                mbeanAttributeList.add(statsValue);
                 retval.put(mbeanName, mbeanAttributeList);
             }
         } catch(Exception e) {
@@ -81,7 +81,7 @@
         try {
             openActiveConnection();
             Statement stmt = conn.createStatement();
-            String query = "SELECT COUNT(DISTINCT snapshot_time) FROM Snapshots";
+            String query = "SELECT COUNT(DISTINCT snapshot_time) FROM Statistics";
             ResultSet rs = stmt.executeQuery(query);
             rs.next();
             retval = rs.getLong(1);
@@ -132,23 +132,30 @@
                     if(mbeanMap == null) {
                         mbeanMap = new HashMap<String, Long>();
                     }
-                    // compute the statsName and maximum statValue
-                    String statsName = snapshotData.getString(STATSNAME);
-                    Long statsValue = mbeanMap.get(statsName);
-                    if(statsValue == null) {
+                    String[] statsNameList = snapshotData.getString(STATSNAMELIST).split(",");
+                    String[] statsValueList = snapshotData.getString(STATSVALUELIST).split(",");
+                    assert(statsNameList.length == statsValueList.length);
+                    // for each statname/statsvalue combo in an mbean
+                    for(int i = 0 ; i < statsNameList.length; i++) {
+                        String statsName = statsNameList[i];
+                        Long maxStatsValue = mbeanMap.get(statsName);
+                        // give maxStatsValue some value if there isn't one
+                        if(maxStatsValue == null) {
+                            if(isMax) {
+                                maxStatsValue = new Long(0);
+                            } else {
+                                maxStatsValue = Long.MAX_VALUE;
+                            }
+                        }
+                        // relax
                         if(isMax) {
-                            statsValue = new Long(0);
+                            maxStatsValue = new Long(Math.max(Long.parseLong(statsValueList[i]), maxStatsValue.longValue()));
                         } else {
-                            statsValue = Long.MAX_VALUE;
+                            maxStatsValue = new Long(Math.min(Long.parseLong(statsValueList[i]), maxStatsValue.longValue()));
                         }
+                        // save name/value back into mbeanMap
+                        mbeanMap.put(statsName, maxStatsValue);
                     }
-                    if(isMax) {
-                        statsValue = new Long(Math.max(Long.parseLong(snapshotData.getString(STATSVALUE)), statsValue.longValue()));
-                    } else {
-                        statsValue = new Long(Math.min(Long.parseLong(snapshotData.getString(STATSVALUE)), statsValue.longValue()));
-                    }
-                    // relax
-                    mbeanMap.put(statsName, statsValue);
                     // save mbeanMap back into stats
                     stats.put(mbean, mbeanMap);
                 }
@@ -176,22 +183,33 @@
      */
     public static boolean addSnapshotToDB(HashMap<String, HashMap<String, Long>> aggregateStats) {
         boolean success = true;
-        // get the current date
-        Calendar cal = Calendar.getInstance();
-        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
-        String currDate = sdf.format(cal.getTime());
-        
         // get the current time from 1970
         String currTime = "";
         currTime += (new Date()).getTime();
         try {
             // for each mbean
             for(Iterator itt = aggregateStats.keySet().iterator(); itt.hasNext(); ) {
+                String mbean = (String)itt.next();
+                // prepare the statsNameList and statsValueList beforehand
+                String statsNameList = "", statsValueList = "";
+                for(Iterator<String> it = aggregateStats.get(mbean).keySet().iterator(); it.hasNext(); ) {
+                    String statsName = it.next();
+                    Long statsValue = aggregateStats.get(mbean).get(statsName);
+                    if(statsNameList.length() == 0 || statsValueList.length() == 0) {
+                        // do not add a comma because this is the first occurrence
+                        statsValueList += statsValue.toString();
+                        statsNameList += statsName;
+                    } else {
+                        // add a comma
+                        statsValueList += "," + statsValue.toString();
+                        statsNameList += "," + statsName;
+                    }
+                }
+                
+                // start talking to DB
                 openActiveConnection();
                 Statement stmt = conn.createStatement();
-                String mbean = (String)itt.next();
                 HashMap stats = aggregateStats.get(mbean);
-                System.out.println(mbean);
                 //--------Ensure MBeans are in place
                 int mbeanId = getMBeanId(mbean); 
                 if(mbeanId != -1) {
@@ -199,26 +217,12 @@
                 } else {
                     // doesn't exist in the db so add it
                     // add mbean record to the db
-                    stmt.executeUpdate("INSERT INTO MBeans (mbeanName) VALUES ("+ surroundWithQuotes(mbean) + ")");
+                    stmt.executeUpdate("INSERT INTO MBeans (mbeanName, statsNameList) VALUES ("+ surroundWithQuotes(mbean) + "," + surroundWithQuotes(statsNameList) + ")");
                     mbeanId = getMBeanId(mbean);
                 }
-                //--------Ensure Snapshots are in place
-                int snapshotId = getSnapshotId(currTime);
-                if(snapshotId != -1) {
-                    // snapshot already exists in the db
-                } else {
-                    // doesn't exist in the db
-                    // add snapshot time record to the db
-                    stmt.executeUpdate("INSERT INTO Snapshots (snapshot_time, snapshot_date) VALUES (" + currTime + ", " + surroundWithQuotes(currDate) +")");
-                    snapshotId = getSnapshotId(currTime);
-                }
-                // for each stat within an mbean
-                for(Iterator it = stats.keySet().iterator(); it.hasNext(); ) {
-                    String key = (String)it.next();
-                    Long value = (Long)stats.get(key);
-                    //--------Ensure Statistics are in place
-                    stmt.executeUpdate( prepareInsertStatement(key, value, snapshotId, mbeanId) );
-                }
+                
+                // insert the statistics into Statistics table
+                stmt.executeUpdate( prepareInsertSnapshotStatement(currTime, statsValueList, mbeanId) );
                 closeConnection();
             }
         } catch(Exception  e){
@@ -236,7 +240,6 @@
         } catch(Exception e) {
             System.out.println("[WARN] Cannot archive snapshots because attribute 'retention' is not present in snapshot-config.xml.");
         }
-        
         return success;
     }
     
@@ -271,10 +274,9 @@
                 while(rsSnapshotData.next()) {
                     // extract values from sql table
                     String mbeanName = rsSnapshotData.getString(MBEANNAME);
-                    String statsName = rsSnapshotData.getString(STATSNAME);
-                    Long statsValue = rsSnapshotData.getLong(STATSVALUE);
+                    String statsNameList = rsSnapshotData.getString(STATSNAMELIST);
+                    String statsValueList = rsSnapshotData.getString(STATSVALUELIST);
                     Long snapshot_time = rsSnapshotData.getLong(SNAPSHOT_TIME);
-                    String snapshot_date = rsSnapshotData.getString(SNAPSHOT_DATE);
                     // get a connection to the archive db too
                     Connection archiveConn = archiveDS.getConnection();
                     Statement archiveStmt = archiveConn.createStatement();
@@ -285,21 +287,11 @@
                     } else {
                         // doesn't exist in the db so add it
                         // add mbean record to the db
-                        archiveStmt.executeUpdate("INSERT INTO MBeans (mbeanName) VALUES ("+ surroundWithQuotes(mbeanName) + ")");
+                        archiveStmt.executeUpdate("INSERT INTO MBeans (mbeanName, statsNameList) VALUES ("+ surroundWithQuotes(mbeanName) + ", " + surroundWithQuotes(statsNameList) + ")");
                         mbeanId = getMBeanIdFromArchive(mbeanName);
                     }
-                    //--------Ensure Snapshots are in place
-                    int snapshotId = getSnapshotIdFromArchive(snapshot_time + "");
-                    if(snapshotId != -1) {
-                        // snapshot already exists in the db
-                    } else {
-                        // doesn't exist in the db
-                        // add snapshot time record to the db
-                        snapshotsOver += archiveStmt.executeUpdate("INSERT INTO Snapshots (snapshot_time, snapshot_date) VALUES (" + snapshot_time + ", " + surroundWithQuotes(snapshot_date) +")");
-                        snapshotId = getSnapshotIdFromArchive(snapshot_time + "");
-                    }
                     // ensure Statistics table has record of mbeanId, snapshotId, statsValue, statsName
-                    String updateStr = prepareInsertStatement(statsName, statsValue, snapshotId, mbeanId);
+                    String updateStr = prepareInsertSnapshotStatement(snapshot_time + "", statsValueList, mbeanId);
                     statisticsOver += archiveStmt.executeUpdate( updateStr );
                     // close connection to archiveDB
                     archiveConn.close();
@@ -313,11 +305,8 @@
                 openActiveConnection();
                 Statement stmt = conn.createStatement();
                 // remove from Statistics table
-                String statisticsUpdate = "DELETE FROM Statistics WHERE snapshotId=" + getSnapshotId(snapshotTime + "");
+                String statisticsUpdate = "DELETE FROM Statistics WHERE snapshot_time=" + snapshotTime;
                 statisticsOver -= stmt.executeUpdate(statisticsUpdate);
-                // remove from Snapshots Table
-                String snapshotUpdate = "DELETE FROM Snapshots WHERE snapshot_time=" + snapshotTime;
-                snapshotsOver -= stmt.executeUpdate(snapshotUpdate);
                 closeConnection();
             }
         } catch(Exception e) {
@@ -342,7 +331,7 @@
     private static ResultSet getOverDueSnapshotTimes(long cutOffTime) {
         try {
             Statement stmt = conn.createStatement();
-            String query = "SELECT snapshot_time FROM Snapshots WHERE snapshot_time < " + cutOffTime;
+            String query = "SELECT DISTINCT snapshot_time FROM Statistics WHERE snapshot_time < " + cutOffTime;
             return stmt.executeQuery(query);
         } catch(Exception e) {
             e.printStackTrace();
@@ -351,40 +340,6 @@
     }
     
     /**
-     * @param snapshot_time
-     * @return The snapshot id of the snapshot time from table ActiveDB.Snapshots. Returns -1 if record does not exist.
-     */    
-    private static int getSnapshotId(String snapshot_time) throws Exception {
-        int retval = -1;
-        Connection conn = activeDS.getConnection();
-        Statement stmt = conn.createStatement();
-        ResultSet rs = stmt.executeQuery("SELECT id FROM Snapshots WHERE snapshot_time=" + snapshot_time);
-        if(rs.next()) {
-            retval = rs.getInt("id");
-        }
-        stmt.close();
-        conn.close();
-        return retval;
-    }
-    
-    /**
-     * @param snapshot_time
-     * @return The snapshot id of the snapshot time from table ArchiveDB.Snapshots. Returns -1 if record does not exist.
-     */    
-    private static int getSnapshotIdFromArchive(String snapshot_time) throws Exception {
-        int retval = -1;
-        Connection archiveConn = archiveDS.getConnection();
-        Statement stmt = archiveConn.createStatement();
-        ResultSet rs = stmt.executeQuery("SELECT id FROM Snapshots WHERE snapshot_time=" + snapshot_time);
-        if(rs.next()) {
-            retval = rs.getInt("id");
-        }
-        stmt.close();
-        archiveConn.close();
-        return retval;
-    }
-
-    /**
      * @param mbean
      * @return The mbean id of the mbean from table ArchiveDB.MBean. Returns -1 if record does not exist.
      */
@@ -419,20 +374,16 @@
     }
     
     /**
-     * @param statsName
-     * @param statsValue
-     * @param currDate
-     * @param currTime
-     * @param mbean
+     * @param snapshot_time
+     * @param statsValueList
+     * @param mbeanId
      * @return Returns an SQL insert statement for one statistic given the correct information.
      */
-    public static String prepareInsertStatement(String statsName, Long statsValue, int snapshotId, int mbeanId) {
-        String retval = "INSERT INTO Statistics (statsName, statsValue, snapshotId, mbeanId) VALUES (";
-        retval += surroundWithQuotes(statsName);
+    public static String prepareInsertSnapshotStatement(String snapshot_time, String statsValueList, int mbeanId) {
+        String retval = "INSERT INTO Statistics (snapshot_time, statsValueList, mbeanId) VALUES (";
+        retval += snapshot_time;
         retval += ",";
-        retval += statsValue;
-        retval += ",";
-        retval += snapshotId;
+        retval += surroundWithQuotes(statsValueList);
         retval += ",";
         retval += mbeanId;
         retval += ")";
@@ -502,7 +453,6 @@
         HashMap<String, HashMap<String, Object>> snapshotPkg = new HashMap<String, HashMap<String, Object>>();
         openActiveConnection();
         ResultSet snapshotData = fetchSnapshotDataFromDB(snapshotTime);
-        String snapshotDate = null;
         try {
             // for each record save it somewhere in the snapshotPkg
             while(snapshotData.next()) {
@@ -512,14 +462,19 @@
                 if(mbeanInfo == null) {
                     mbeanInfo = new HashMap<String, Object>();
                 }
-                // save the statistic name and value into a hashmap
-                mbeanInfo.put(snapshotData.getString(STATSNAME), snapshotData.getLong(STATSVALUE));
+                // get statistics from resultset
+                String statsValueStr = snapshotData.getString(STATSVALUELIST);
+                String statsNameStr = snapshotData.getString(STATSNAMELIST);
+                String[] statsValueList = statsValueStr.split(",");
+                String[] statsNameList = statsNameStr.split(",");
+                assert(statsValueList.length == statsNameList.length);
+                // for each statsValue/statsName, save it
+                for(int i = 0 ; i < statsValueList.length; i++) {
+                    long statValue = Long.parseLong(statsValueList[i]);
+                    mbeanInfo.put(statsNameList[i], new Long(statValue));
+                }
                 // save the hashmap into the snapshotpkg
                 snapshotPkg.put(currMBean, mbeanInfo);
-                // save the snapshotDate
-                if(snapshotDate == null) {
-                    snapshotDate = snapshotData.getString(SNAPSHOT_DATE);
-                }
             }
         } catch(Exception e) {
             e.printStackTrace();
@@ -529,7 +484,6 @@
         // add the time and date
         HashMap<String, Object> timeMap = new HashMap<String, Object>();
         timeMap.put(SNAPSHOT_TIME, snapshotTime);
-        timeMap.put(SNAPSHOT_DATE, snapshotDate);
         snapshotPkg.put("times", timeMap);
         
         return snapshotPkg;
@@ -540,8 +494,8 @@
      * @return Returns a ResultSet with all statistic information that matches the snapshot_time.
      */
     private static ResultSet fetchSnapshotDataFromDB(Long snapshotTime) {
-        String query = "SELECT S.statsValue AS statsValue, S.statsName AS statsName, SN.snapshot_time AS snapshot_time, SN.snapshot_date AS snapshot_date, M.mbeanName AS mbeanName FROM Statistics S, Snapshots SN, MBeans M WHERE SN.snapshot_time=" + snapshotTime;
-        query += " AND S.snapshotId=SN.id AND S.mbeanId=M.id";
+        String query = "SELECT S.statsValueList AS statsValueList, M.statsNameList AS statsNameList, S.snapshot_time AS snapshot_time, M.mbeanName AS mbeanName FROM Statistics S, MBeans M WHERE S.snapshot_time=" + snapshotTime;
+        query += " AND S.mbeanId=M.id";
         ResultSet retval = null;
         try {
             if(conn.isClosed()) {
@@ -559,7 +513,7 @@
      * @return Returns a ResultSet with one column (snapshot_time) sorted in descending order
      */
     private static ResultSet fetchSnapshotTimesFromDB() {
-        String query = "SELECT DISTINCT snapshot_time FROM Snapshots ORDER BY snapshot_time DESC";
+        String query = "SELECT DISTINCT snapshot_time FROM Statistics ORDER BY snapshot_time DESC";
         ResultSet retval = null;
         try {
             if(conn.isClosed()) {
@@ -624,15 +578,31 @@
             if(mbeanId == -1) {
                 System.out.println("[ERROR] " + mbeanName + " does not exist in the database.");
             } else {
-                String query = "SELECT DISTINCT SN.snapshot_time AS snapshot_time, S.statsValue AS statsValue FROM Snapshots SN, Statistics S WHERE S.mbeanId=" + mbeanId + " AND S.snapshotId=SN.id AND S.statsName=" + surroundWithQuotes(statsName) + " ORDER BY SN.snapshot_time DESC";
+                String query = "SELECT DISTINCT snapshot_time, statsValueList, statsNameList FROM Statistics, MBeans M WHERE mbeanId=" + mbeanId + " AND mbeanId=M.id ORDER BY snapshot_time DESC";
                 ResultSet rs = stmt.executeQuery(query);
                 int nthSnapshot = 0;
-                // iterator through the table paying attention to those at everyNthSnapshot-th position
+                // iterate through the table paying attention to those at everyNthSnapshot-th position
                 while(rs.next()) {
                     // every nth snapshot I save the information into my returning hashmap
                     if(nthSnapshot % everyNthSnapshot == 0) {
-                        stats.put(rs.getLong(SNAPSHOT_TIME), rs.getLong(STATSVALUE));
-                        numberOfSnapshots--;
+                        String[] statsValueList = rs.getString(STATSVALUELIST).split(",");
+                        String[] statsNameList = rs.getString(STATSNAMELIST).split(",");
+                        assert(statsValueList.length == statsNameList.length);
+                        Long statsValue = null;
+                        for(int i = 0 ; i < statsNameList.length; i++) {
+                            if(statsNameList[i].equals(statsName)) {
+                                long value = Long.parseLong(statsValueList[i]);
+                                statsValue = new Long(value);
+                            }
+                        }
+                        // exit function after error
+                        if(statsValue == null) {
+                            System.out.println("[WARN] Statistics name '" + statsName + "' does not exist");
+                            return stats;
+                        } else {
+                            stats.put(rs.getLong(SNAPSHOT_TIME), statsValue);
+                            numberOfSnapshots--;
+                        }
                     }
                     // update counter
                     nthSnapshot++;