You are viewing a plain text version of this content. The canonical link for it is here.
Posted to scm@geronimo.apache.org by gd...@apache.org on 2008/11/08 01:37:36 UTC

svn commit: r712325 [2/2] - in /geronimo/server/trunk: buildsupport/car-maven-plugin/src/main/java/org/apache/geronimo/mavenplugins/car/ framework/configs/j2ee-system/ framework/configs/j2ee-system/src/main/history/ framework/configs/j2ee-system/src/ma...

Modified: geronimo/server/trunk/framework/modules/geronimo-system/src/main/java/org/apache/geronimo/system/configuration/RepositoryConfigurationStore.java
URL: http://svn.apache.org/viewvc/geronimo/server/trunk/framework/modules/geronimo-system/src/main/java/org/apache/geronimo/system/configuration/RepositoryConfigurationStore.java?rev=712325&r1=712324&r2=712325&view=diff
==============================================================================
--- geronimo/server/trunk/framework/modules/geronimo-system/src/main/java/org/apache/geronimo/system/configuration/RepositoryConfigurationStore.java (original)
+++ geronimo/server/trunk/framework/modules/geronimo-system/src/main/java/org/apache/geronimo/system/configuration/RepositoryConfigurationStore.java Fri Nov  7 16:37:34 2008
@@ -26,26 +26,31 @@
 import java.util.ArrayList;
 import java.util.Iterator;
 import java.util.List;
-import java.util.SortedSet;
 import java.util.Set;
+import java.util.SortedSet;
 import java.util.jar.JarFile;
 import java.util.zip.ZipEntry;
 import java.util.zip.ZipOutputStream;
+
 import javax.management.ObjectName;
 
 import org.apache.geronimo.gbean.AbstractName;
-import org.apache.geronimo.gbean.GBeanInfo;
-import org.apache.geronimo.gbean.GBeanInfoBuilder;
+import org.apache.geronimo.gbean.annotation.GBean;
+import org.apache.geronimo.gbean.annotation.ParamReference;
+import org.apache.geronimo.gbean.annotation.ParamSpecial;
+import org.apache.geronimo.gbean.annotation.SpecialAttributeType;
 import org.apache.geronimo.kernel.Kernel;
 import org.apache.geronimo.kernel.ObjectNameUtil;
 import org.apache.geronimo.kernel.config.ConfigurationAlreadyExistsException;
 import org.apache.geronimo.kernel.config.ConfigurationData;
+import org.apache.geronimo.kernel.config.ConfigurationDataTransformer;
 import org.apache.geronimo.kernel.config.ConfigurationInfo;
 import org.apache.geronimo.kernel.config.ConfigurationStore;
 import org.apache.geronimo.kernel.config.ConfigurationUtil;
+import org.apache.geronimo.kernel.config.IOUtil;
 import org.apache.geronimo.kernel.config.InvalidConfigException;
+import org.apache.geronimo.kernel.config.NoOConfigurationDataTransformer;
 import org.apache.geronimo.kernel.config.NoSuchConfigException;
-import org.apache.geronimo.kernel.config.IOUtil;
 import org.apache.geronimo.kernel.repository.Artifact;
 import org.apache.geronimo.kernel.repository.WritableListableRepository;
 import org.slf4j.Logger;
@@ -57,6 +62,7 @@
  *
  * @version $Rev$ $Date$
  */
+@GBean(j2eeType= "ConfigurationStore")
 public class RepositoryConfigurationStore implements ConfigurationStore {
     private static final Logger log = LoggerFactory.getLogger(RepositoryConfigurationStore.class);
     private final Kernel kernel;
@@ -64,16 +70,33 @@
     private final AbstractName abstractName;
     protected final WritableListableRepository repository;
     private final InPlaceConfigurationUtil inPlaceConfUtil;
+    private final ConfigurationDataTransformer transformer;
 
     public RepositoryConfigurationStore(WritableListableRepository repository) {
-        this(null, null, null, repository);
+        this(null, null, null, repository, NoOConfigurationDataTransformer.SINGLETON);
     }
 
-    public RepositoryConfigurationStore(Kernel kernel, String objectName, AbstractName abstractName, WritableListableRepository repository) {
+    public RepositoryConfigurationStore(Kernel kernel,
+            String objectName,
+            AbstractName abstractName,
+            WritableListableRepository repository) {
+        this(kernel, objectName, abstractName, repository, NoOConfigurationDataTransformer.SINGLETON);
+    }
+    
+    public RepositoryConfigurationStore(@ParamSpecial(type=SpecialAttributeType.kernel) Kernel kernel,
+            @ParamSpecial(type=SpecialAttributeType.objectName) String objectName,
+            @ParamSpecial(type=SpecialAttributeType.abstractName) AbstractName abstractName,
+            @ParamReference(name=GBEAN_REF_REPOSITORY, namingType=GBEAN_REF_REPOSITORY) WritableListableRepository repository,
+            @ParamReference(name=GBEAN_REF_CONFIG_DATA_TRANSFORMER) ConfigurationDataTransformer transformer) {
         this.kernel = kernel;
         this.objectName = objectName == null ? null : ObjectNameUtil.getObjectName(objectName);
         this.abstractName = abstractName;
         this.repository = repository;
+        if (null == transformer) {
+            this.transformer = NoOConfigurationDataTransformer.SINGLETON;
+        } else {
+            this.transformer = transformer;
+        }
 
         inPlaceConfUtil = new InPlaceConfigurationUtil();
     }
@@ -138,6 +161,8 @@
             configurationData.setNaming(kernel.getNaming());
         }
 
+        transformer.transformDependencies(configurationData);
+        
         return configurationData;
     }
 
@@ -394,6 +419,8 @@
                 throw ioException;
             }
         }
+        
+        transformer.remove(configId);
     }
 
     public List<ConfigurationInfo> listConfigurations() {
@@ -529,19 +556,7 @@
 //        }
 //    }
 //
-    public static final GBeanInfo GBEAN_INFO;
 
-    public static GBeanInfo getGBeanInfo() {
-        return GBEAN_INFO;
-    }
-
-    static {
-        GBeanInfoBuilder builder = GBeanInfoBuilder.createStatic(RepositoryConfigurationStore.class, "ConfigurationStore");
-        builder.addAttribute("kernel", Kernel.class, false);
-        builder.addAttribute("objectName", String.class, false);
-        builder.addAttribute("abstractName", AbstractName.class, false);
-        builder.addReference("Repository", WritableListableRepository.class, "Repository");
-        builder.setConstructor(new String[]{"kernel", "objectName", "abstractName", "Repository"});
-        GBEAN_INFO = builder.getBeanInfo();
-    }
+    public static final String GBEAN_REF_REPOSITORY = "Repository";
+    public static final String GBEAN_REF_CONFIG_DATA_TRANSFORMER = "ConfigurationDataTransformer";
 }

Modified: geronimo/server/trunk/framework/modules/pom.xml
URL: http://svn.apache.org/viewvc/geronimo/server/trunk/framework/modules/pom.xml?rev=712325&r1=712324&r2=712325&view=diff
==============================================================================
--- geronimo/server/trunk/framework/modules/pom.xml (original)
+++ geronimo/server/trunk/framework/modules/pom.xml Fri Nov  7 16:37:34 2008
@@ -61,6 +61,7 @@
         <module>geronimo-jdbc</module>
         <module>geronimo-jmx-remoting</module>
         <module>geronimo-kernel</module>
+        <module>geronimo-config-groovy-transformer</module>
         <module>geronimo-management</module>
         <module>geronimo-naming</module>
         <module>geronimo-security</module>

Added: geronimo/server/trunk/testsupport/testsupport-common/src/main/java/org/apache/geronimo/testsupport/RMockTestSupport.java
URL: http://svn.apache.org/viewvc/geronimo/server/trunk/testsupport/testsupport-common/src/main/java/org/apache/geronimo/testsupport/RMockTestSupport.java?rev=712325&view=auto
==============================================================================
--- geronimo/server/trunk/testsupport/testsupport-common/src/main/java/org/apache/geronimo/testsupport/RMockTestSupport.java (added)
+++ geronimo/server/trunk/testsupport/testsupport-common/src/main/java/org/apache/geronimo/testsupport/RMockTestSupport.java Fri Nov  7 16:37:34 2008
@@ -0,0 +1,105 @@
+/**
+ *  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.
+ */
+
+package org.apache.geronimo.testsupport;
+
+import java.io.File;
+
+import org.slf4j.Logger;
+
+import com.agical.rmock.extension.junit.RMockTestCase;
+
+/**
+ * Provides support for tests.
+ *
+ * @version $Rev: 653782 $ $Date: 2008-05-07 00:10:14 +1000 (Wed, 07 May 2008) $
+ */
+public abstract class RMockTestSupport
+    extends RMockTestCase
+{
+
+    private final TestUtil testUtil;
+    
+    /**
+     * The base-directory which tests should be run from.
+     */
+    protected final File BASEDIR;
+    
+    /**
+     * Instance logger which tests should use to produce tracing information.
+     *
+     * <p>
+     * Unless you have a really good reason to, do not change this field from your sub-class.
+     * And if you do, please document why you have done so.
+     */
+    protected final Logger log;
+
+    
+    /**
+     * Constructor for tests that specify a specific test name.
+     *
+     * @see #TestSupport()  This is the prefered constructor for sub-classes to use.
+     */
+    protected RMockTestSupport(final String name) {
+        super(name);
+        
+        testUtil = new TestUtil(getClass());
+        
+        BASEDIR = testUtil.getBaseDir();
+        log = testUtil.getLog();
+        
+        log.info("Initialized");
+    }
+    
+    /**
+     * Default constructor.
+     */
+    protected RMockTestSupport() {
+        super();
+
+        testUtil = new TestUtil(getClass());
+        
+        BASEDIR = testUtil.getBaseDir();
+        log = testUtil.getLog();
+
+        log.info("Initialized");
+    }
+    
+    /**
+     * Resolve the given path to a file rooted to {@link #BASEDIR}.
+     *
+     * @param path  The path to resolve.
+     * @return      The resolved file for the given path.
+     */
+    protected final File resolveFile(final String path) {
+        return testUtil.resolveFile(path);
+    }
+    
+    /**
+     * Resolve the given path to a path rooted to {@link #BASEDIR}.
+     *
+     * @param path  The path to resolve.
+     * @return      The resolved path for the given path.
+     *
+     * @see #resolveFile(String)
+     */
+    protected final String resolvePath(final String path) {
+        return testUtil.resolvePath(path);
+    }
+}

Modified: geronimo/server/trunk/testsupport/testsupport-common/src/main/java/org/apache/geronimo/testsupport/TestSupport.java
URL: http://svn.apache.org/viewvc/geronimo/server/trunk/testsupport/testsupport-common/src/main/java/org/apache/geronimo/testsupport/TestSupport.java?rev=712325&r1=712324&r2=712325&view=diff
==============================================================================
--- geronimo/server/trunk/testsupport/testsupport-common/src/main/java/org/apache/geronimo/testsupport/TestSupport.java (original)
+++ geronimo/server/trunk/testsupport/testsupport-common/src/main/java/org/apache/geronimo/testsupport/TestSupport.java Fri Nov  7 16:37:34 2008
@@ -24,7 +24,6 @@
 import junit.framework.TestCase;
 
 import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
 
 /**
  * Provides support for tests.
@@ -34,17 +33,13 @@
 public abstract class TestSupport
     extends TestCase
 {
+
+    private final TestUtil testUtil;
+    
     /**
      * The base-directory which tests should be run from.
-     *
-     * @see #getBaseDir()   This field is initialized from the return of this method on instance construction.
      */
-    protected final File BASEDIR = getBaseDir();
-    
-    //
-    // NOTE: Logging must be initialized after BASEDIR has been discovered, as it is used
-    //       by the log4j logging-config properties to set the target/test.log file.
-    //
+    protected final File BASEDIR;
     
     /**
      * Instance logger which tests should use to produce tracing information.
@@ -53,7 +48,8 @@
      * Unless you have a really good reason to, do not change this field from your sub-class.
      * And if you do, please document why you have done so.
      */
-    protected final Logger log = LoggerFactory.getLogger(getClass());
+    protected final Logger log;
+
     
     /**
      * Constructor for tests that specify a specific test name.
@@ -63,6 +59,11 @@
     protected TestSupport(final String name) {
         super(name);
         
+        testUtil = new TestUtil(getClass());
+        
+        BASEDIR = testUtil.getBaseDir();
+        log = testUtil.getLog();
+        
         log.info("Initialized");
     }
     
@@ -71,45 +72,17 @@
      */
     protected TestSupport() {
         super();
+
+        testUtil = new TestUtil(getClass());
         
+        BASEDIR = testUtil.getBaseDir();
+        log = testUtil.getLog();
+
         log.info("Initialized");
     }
     
-    /**
-     * Determine the value of <tt>${basedir}</tt>, which should be the base directory of
-     * the module which the concreate test class is defined in.
-     *
-     * <p>
-     * If The system property <tt>basedir</tt> is already set, then that value is used,
-     * otherwise we determine the value from the codesource of the containing concrete class
-     * and set the <tt>basedir</tt> system property to that value.
-     *
-     * @see #BASEDIR    This field is always initialized to the value which this method returns.
-     *
-     * @return  The base directory of the module which contains the concreate test class.
-     */
-    protected final File getBaseDir() {
-        File dir;
-
-        // If ${basedir} is set, then honor it
-        String tmp = System.getProperty("basedir");
-        if (tmp != null) {
-            dir = new File(tmp);
-        }
-        else {
-            // Find the directory which this class (or really the sub-class of TestSupport) is defined in.
-            String path = getClass().getProtectionDomain().getCodeSource().getLocation().getFile();
-
-            // We expect the file to be in target/test-classes, so go up 2 dirs
-            dir = new File(path).getParentFile().getParentFile();
-
-            // Set ${basedir} which is needed by logging to initialize
-            System.setProperty("basedir", dir.getPath());
-        }
-
-        // System.err.println("Base Directory: " + dir);
-
-        return dir;
+    protected File getBaseDir() {
+        return BASEDIR;
     }
     
     /**
@@ -119,19 +92,7 @@
      * @return      The resolved file for the given path.
      */
     protected final File resolveFile(final String path) {
-        assert path != null;
-        
-        File file = new File(path);
-        
-        // Complain if the file is already absolute... probably an error
-        if (file.isAbsolute()) {
-            log.warn("Given path is already absolute; nothing to resolve: {}", file);
-        }
-        else {
-            file = new File(BASEDIR, path);
-        }
-        
-        return file;
+        return testUtil.resolveFile(path);
     }
     
     /**
@@ -143,8 +104,6 @@
      * @see #resolveFile(String)
      */
     protected final String resolvePath(final String path) {
-        assert path != null;
-        
-        return resolveFile(path).getPath();
+        return testUtil.resolvePath(path);
     }
 }

Added: geronimo/server/trunk/testsupport/testsupport-common/src/main/java/org/apache/geronimo/testsupport/TestUtil.java
URL: http://svn.apache.org/viewvc/geronimo/server/trunk/testsupport/testsupport-common/src/main/java/org/apache/geronimo/testsupport/TestUtil.java?rev=712325&view=auto
==============================================================================
--- geronimo/server/trunk/testsupport/testsupport-common/src/main/java/org/apache/geronimo/testsupport/TestUtil.java (added)
+++ geronimo/server/trunk/testsupport/testsupport-common/src/main/java/org/apache/geronimo/testsupport/TestUtil.java Fri Nov  7 16:37:34 2008
@@ -0,0 +1,148 @@
+/*
+ * 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.
+ */
+
+package org.apache.geronimo.testsupport;
+
+import java.io.File;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ *
+ * @version $Rev:$ $Date:$
+ */
+public class TestUtil {
+
+    private final Class owningClass;
+
+    /**
+     * The base-directory which tests should be run from.
+     *
+     * @see #initBaseDir()   This field is initialized from the return of this method on instance construction.
+     */
+    protected final File baseDir;
+    
+    /**
+     * Instance logger which tests should use to produce tracing information.
+     *
+     * <p>
+     * Unless you have a really good reason to, do not change this field from your sub-class.
+     * And if you do, please document why you have done so.
+     */
+    protected final Logger log;
+
+    
+    public TestUtil(Class owningClass) {
+        if (null == owningClass) {
+            throw new IllegalArgumentException("owningClass is required");
+        }
+        this.owningClass = owningClass;
+        
+        baseDir = initBaseDir();
+
+        //
+        // NOTE: Logging must be initialized after BASEDIR has been discovered, as it is used
+        //       by the log4j logging-config properties to set the target/test.log file.
+        //
+        log = LoggerFactory.getLogger(owningClass);
+    }
+    
+    public File getBaseDir() {
+        return baseDir;
+    }
+
+    public Logger getLog() {
+        return log;
+    }
+
+    /**
+     * Determine the value of <tt>${basedir}</tt>, which should be the base directory of
+     * the module which the concreate test class is defined in.
+     *
+     * <p>
+     * If The system property <tt>basedir</tt> is already set, then that value is used,
+     * otherwise we determine the value from the codesource of the containing concrete class
+     * and set the <tt>basedir</tt> system property to that value.
+     *
+     * @see #baseDir    This field is always initialized to the value which this method returns.
+     *
+     * @return  The base directory of the module which contains the concreate test class.
+     */
+    protected final File initBaseDir() {
+        File dir;
+
+        // If ${basedir} is set, then honor it
+        String tmp = System.getProperty("basedir");
+        if (tmp != null) {
+            dir = new File(tmp);
+        }
+        else {
+            // Find the directory which this class (or really the sub-class of TestSupport) is defined in.
+            String path = owningClass.getProtectionDomain().getCodeSource().getLocation().getFile();
+
+            // We expect the file to be in target/test-classes, so go up 2 dirs
+            dir = new File(path).getParentFile().getParentFile();
+
+            // Set ${basedir} which is needed by logging to initialize
+            System.setProperty("basedir", dir.getPath());
+        }
+
+        // System.err.println("Base Directory: " + dir);
+
+        return dir;
+    }
+    
+    /**
+     * Resolve the given path to a file rooted to {@link #baseDir}.
+     *
+     * @param path  The path to resolve.
+     * @return      The resolved file for the given path.
+     */
+    public final File resolveFile(final String path) {
+        assert path != null;
+        
+        File file = new File(path);
+        
+        // Complain if the file is already absolute... probably an error
+        if (file.isAbsolute()) {
+            log.warn("Given path is already absolute; nothing to resolve: {}", file);
+        }
+        else {
+            file = new File(baseDir, path);
+        }
+        
+        return file;
+    }
+    
+    /**
+     * Resolve the given path to a path rooted to {@link #baseDir}.
+     *
+     * @param path  The path to resolve.
+     * @return      The resolved path for the given path.
+     *
+     * @see #resolveFile(String)
+     */
+    public final String resolvePath(final String path) {
+        assert path != null;
+        
+        return resolveFile(path).getPath();
+    }
+
+}