[jboss-cvs] JBossAS SVN: r76501 - projects/jboss-man/trunk/metatype/src/main/org/jboss/metatype/plugins/values.

jboss-cvs-commits at lists.jboss.org jboss-cvs-commits at lists.jboss.org
Thu Jul 31 00:49:01 EDT 2008


Author: scott.stark at jboss.org
Date: 2008-07-31 00:49:00 -0400 (Thu, 31 Jul 2008)
New Revision: 76501

Modified:
   projects/jboss-man/trunk/metatype/src/main/org/jboss/metatype/plugins/values/MetaValueFactoryBuilder.java
Log:
JBMAN-2, externalize the MetaValueFactory implementation using the org.jboss.metatype.api.values.MetaValueFactory system property.

Modified: projects/jboss-man/trunk/metatype/src/main/org/jboss/metatype/plugins/values/MetaValueFactoryBuilder.java
===================================================================
--- projects/jboss-man/trunk/metatype/src/main/org/jboss/metatype/plugins/values/MetaValueFactoryBuilder.java	2008-07-31 04:31:39 UTC (rev 76500)
+++ projects/jboss-man/trunk/metatype/src/main/org/jboss/metatype/plugins/values/MetaValueFactoryBuilder.java	2008-07-31 04:49:00 UTC (rev 76501)
@@ -21,20 +21,70 @@
 */
 package org.jboss.metatype.plugins.values;
 
+import java.security.AccessController;
+import java.security.PrivilegedAction;
+
 import org.jboss.metatype.api.values.MetaValueFactory;
 
 /**
  * MetaValueFactoryBuilder.
  * 
- * TODO this class only creates a singleton fixed implementation for now
+ * TODO this class only creates a singleton implementation for now, configurable
+ * via the org.jboss.metatype.api.values.MetaValueFactory system property.
  * @author <a href="adrian at jboss.com">Adrian Brock</a>
- * @version $Revision: 1.1 $
+ * @author Scott.Stark at jboss.org
+ * @version $Revision$
  */
 public class MetaValueFactoryBuilder
 {
    /** The singleton */
-   private static final MetaValueFactory singleton = new DefaultMetaValueFactory();
-   
+   private static final MetaValueFactory singleton;
+
+   static
+   {
+      singleton = AccessController.doPrivileged(new PrivilegedAction<MetaValueFactory>()
+         {
+            public MetaValueFactory run()
+            {
+               MetaValueFactory mvf = null;
+               String defaultMVF = DefaultMetaValueFactory.class.getName();
+               // The system property for the MetaValueFactory class to use
+               String className = System.getProperty(MetaValueFactory.class.getName(), defaultMVF);
+               try
+               {
+                  Class<?> clazz;
+                  try
+                  {
+                     clazz = Thread.currentThread().getContextClassLoader().loadClass(className);
+                  }
+                  catch (ClassNotFoundException e)
+                  {
+                     try
+                     {
+                        clazz = getClass().getClassLoader().loadClass(className);
+                     }
+                     catch (ClassNotFoundException ignored)
+                     {
+                        throw e;
+                     }
+                  }
+                  Object result = clazz.newInstance();
+                  mvf = MetaValueFactory.class.cast(result);
+               }
+               catch (RuntimeException e)
+               {
+                  throw e;
+               }
+               catch (Exception e)
+               {
+                  throw new Error("Unexpected error loading MetaValueFactory " + className, e);
+               }
+
+               return mvf;
+            }
+         });
+   }
+
    /**
     * Create the factory
     * 


Property changes on: projects/jboss-man/trunk/metatype/src/main/org/jboss/metatype/plugins/values/MetaValueFactoryBuilder.java
___________________________________________________________________
Name: svn:keywords
   + Id Revision




More information about the jboss-cvs-commits mailing list