Package mondrian.util

Class MemoryMonitorFactory


public final class MemoryMonitorFactory extends ObjectFactory.Singleton<MemoryMonitor>
The MemoryMonitorFactory is used to get the application's MemoryMonitor. The MemoryMonitorFactory is based upon the ObjectFactory.Singleton generic. The MemoryMonitorFactory implementation has a single, default MemoryMonitor per JVM instance which can be overridden using the provided ThreadLocal variable. Normally, this ThreadLocal override should only be used during JUnit testing. The JUnit test, set the ThreadLocal variable to the name of its own implementation of the MemoryMonitor interface and then calls the ObjectFactory getObject method. After doing the test, the ThreadLocal variable should be cleared.

The ObjectFactory.Singleton permits the use of System properties to provide a class name to the factory. This can be used to create a MemoryMonitor that is not the default one. The property name is the MemoryMonitor class name, "mondrian.util.MemoryMonitor".

Since:
Feb 03 2007
Author:
Richard M. Emberson
  • Method Details

    • getMemoryMonitor

      public static MemoryMonitor getMemoryMonitor()
      Access the MemoryMonitorFactory instance.
      Returns:
      the MemoryMonitor.
    • setThreadLocalClassName

      public static void setThreadLocalClassName(String className)
      Sets the class name of a MemoryMonitor implementation. This should be called (obviously) before calling the MemoryMonitorFactory getMemoryMonitor method to get the MemoryMonitor implementation. Generally, this is only used for testing.
      Parameters:
      className - Class name
    • clearThreadLocalClassName

      public static void clearThreadLocalClassName()
      Clears the class name (regardless of whether a class name was set). When a class name is set using setThreadLocalClassName, the setting whould be done in a try-block and a call to this clear method should be in the finally-clause of that try-block.
    • enabled

      protected boolean enabled()
      Returns whether the use of a MemoryMonitor is enabled.
      Returns:
      true if enabled and false otherwise.
    • getClassName

      protected String getClassName()
      Get the class name set in the ThreadLocal or null.
      Overrides:
      getClassName in class ObjectFactory<MemoryMonitor>
      Returns:
      class name or null.
    • getStringProperty

      protected org.eigenbase.util.property.StringProperty getStringProperty()
      Return the MemoryMonitorFactory</code property name.
      Specified by:
      getStringProperty in class ObjectFactory<MemoryMonitor>
      Returns:
      MemoryMonitorFactory property name
    • getDefault

      protected MemoryMonitor getDefault(Class[] parameterTypes, Object[] parameterValues) throws CreationException
      The MemoryMonitorFactory's implementation of the ObjectFactory's abstract method which returns the default MemoryMonitor instance. For Java4 or if the MemoryMonitorFactory is not enabled then this method returns the "faux" MemoryMonitor implementation, it does nothing. When enabled and for Java5 and above JVMs, and instance of the NotificationMemoryMonitor is returned.
      Specified by:
      getDefault in class ObjectFactory<MemoryMonitor>
      Parameters:
      parameterTypes - not used
      parameterValues - not used
      Returns:
      MemoryMonitor instance
      Throws:
      CreationException - if the MemoryMonitor can not be created.