Index: java/engine/org/apache/derby/impl/io/VFMemoryStorageFactory.java
===================================================================
--- java/engine/org/apache/derby/impl/io/VFMemoryStorageFactory.java	(revision 752412)
+++ java/engine/org/apache/derby/impl/io/VFMemoryStorageFactory.java	(working copy)
@@ -25,8 +25,13 @@
 import java.io.IOException;
 import java.io.OutputStream;
 import java.util.HashMap;
+import java.util.Iterator;
 import java.util.Map;
 
+import org.apache.derby.iapi.error.StandardException;
+import org.apache.derby.iapi.reference.Module;
+import org.apache.derby.iapi.services.jmx.ManagementService;
+import org.apache.derby.iapi.services.monitor.Monitor;
 import org.apache.derby.impl.io.vfmem.PathUtil;
 import org.apache.derby.impl.io.vfmem.DataStore;
 import org.apache.derby.impl.io.vfmem.VirtualFile;
@@ -34,6 +39,7 @@
 import org.apache.derby.io.StorageFactory;
 import org.apache.derby.io.StorageFile;
 import org.apache.derby.io.WritableStorageFactory;
+import org.apache.derby.mbeans.MemoryStorageFactoryMBean;
 
 /**
  * A storage factory for virtual files, where the contents of the files are
@@ -45,7 +51,52 @@
     /** References to the databases created / existing. */
     //@GuardedBy("DATABASES")
     private static final Map DATABASES = new HashMap();
+    static {
+        // Initialize and register the JMX bean.
+        ManagementService mgmtService = ((ManagementService)
+                Monitor.getSystemModule(Module.JMX));
+        try {
+            final Object memSFMBean = mgmtService.registerMBean(
+                            new MemoryStorageFactoryMBeanImpl(),
+                            MemoryStorageFactoryMBean.class,
+                            "type=MemoryStorageFactory");
+        } catch (StandardException se) {
+            // Ignore...
+            se.printStackTrace(System.out);
+        }
 
+    }
+
+    static String[] getDatabases() {
+        synchronized (DATABASES) {
+            String[] dbs = new String[DATABASES.size()];
+            return (String[])DATABASES.keySet().toArray(dbs);
+        }
+    }
+
+    static long estimateMemoryUsage(String db) {
+        long sizeEstimate = 0;
+        DataStore store;
+        synchronized (DATABASES) {
+            if (db == null) {
+                // Look at all databases.
+                Iterator databases = DATABASES.values().iterator();
+                while (databases.hasNext()) {
+                    store = (DataStore)databases.next();
+                    sizeEstimate += store.getTotalSize();
+                }
+            } else {
+                store = (DataStore)DATABASES.get(db);
+                if (store == null) {
+                    // Database doesn't exist.
+                    sizeEstimate = -1;
+                } else {
+                    sizeEstimate = store.getTotalSize();
+                }
+            }
+        }
+        return sizeEstimate;
+    }
     /**
      * Deletes the database if it exists.
      *
Index: java/engine/org/apache/derby/impl/io/vfmem/DataStore.java
===================================================================
--- java/engine/org/apache/derby/impl/io/vfmem/DataStore.java	(revision 752412)
+++ java/engine/org/apache/derby/impl/io/vfmem/DataStore.java	(working copy)
@@ -210,6 +210,21 @@
         }
     }
 
+    public long getTotalSize() {
+        long totalSize = 0;
+        // NOTE: We lock the whole database here, and block all activity
+        synchronized (LOCK) {
+            Iterator entries = files.values().iterator();
+            while (entries.hasNext()) {
+                DataStoreEntry entry = (DataStoreEntry)entries.next();
+                if (!entry.isDirectory()) {
+                    totalSize += entry.length();
+                }
+            }
+        }
+        return totalSize;
+    }
+
     /**
      * Lists the childen of the specified path.
      *
Index: java/engine/org/apache/derby/mbeans/MemoryStorageFactoryMBean.java
===================================================================
--- java/engine/org/apache/derby/mbeans/MemoryStorageFactoryMBean.java	(revision 0)
+++ java/engine/org/apache/derby/mbeans/MemoryStorageFactoryMBean.java	(revision 0)
@@ -0,0 +1,11 @@
+package org.apache.derby.mbeans;
+
+/**
+ *
+ */
+public interface MemoryStorageFactoryMBean {
+
+    String[] getDatabases();
+    long getMemoryUsageEstimation();
+    long getMemoryUsageEstimation(String database);
+}

Property changes on: java/engine/org/apache/derby/mbeans/MemoryStorageFactoryMBean.java
___________________________________________________________________
Name: svn:eol-style
   + native

