ace-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From br...@apache.org
Subject svn commit: r1510418 - in /ace/trunk: org.apache.ace.repository.itest/src/org/apache/ace/it/repository/ org.apache.ace.repository/src/org/apache/ace/repository/ext/impl/ org.apache.ace.repository/src/org/apache/ace/repository/impl/ org.apache.ace.repos...
Date Mon, 05 Aug 2013 10:22:46 GMT
Author: bramk
Date: Mon Aug  5 10:22:45 2013
New Revision: 1510418

URL: http://svn.apache.org/r1510418
Log:
ACE-391 Added optional basedir and filextension params for repositories

Modified:
    ace/trunk/org.apache.ace.repository.itest/src/org/apache/ace/it/repository/RepositoryTest.java
    ace/trunk/org.apache.ace.repository/src/org/apache/ace/repository/ext/impl/FilebasedBackupRepository.java
    ace/trunk/org.apache.ace.repository/src/org/apache/ace/repository/impl/RepositoryFactory.java
    ace/trunk/org.apache.ace.repository/src/org/apache/ace/repository/impl/RepositoryImpl.java
    ace/trunk/org.apache.ace.repository/src/org/apache/ace/repository/impl/constants/RepositoryConstants.java
    ace/trunk/org.apache.ace.repository/src/org/apache/ace/repository/servlet/RepositoryServletBase.java
    ace/trunk/org.apache.ace.repository/test/org/apache/ace/repository/impl/RepositoryImplTest.java
    ace/trunk/run-server-allinone/conf/org.apache.ace.server.repository.factory/ace-shop.cfg

Modified: ace/trunk/org.apache.ace.repository.itest/src/org/apache/ace/it/repository/RepositoryTest.java
URL: http://svn.apache.org/viewvc/ace/trunk/org.apache.ace.repository.itest/src/org/apache/ace/it/repository/RepositoryTest.java?rev=1510418&r1=1510417&r2=1510418&view=diff
==============================================================================
--- ace/trunk/org.apache.ace.repository.itest/src/org/apache/ace/it/repository/RepositoryTest.java (original)
+++ ace/trunk/org.apache.ace.repository.itest/src/org/apache/ace/it/repository/RepositoryTest.java Mon Aug  5 10:22:45 2013
@@ -24,11 +24,10 @@ import static org.apache.ace.it.reposito
 
 import java.io.ByteArrayInputStream;
 import java.io.ByteArrayOutputStream;
+import java.io.File;
 import java.io.IOException;
-import java.net.ConnectException;
 import java.net.HttpURLConnection;
 import java.net.URL;
-import java.util.Arrays;
 import java.util.Properties;
 import java.util.concurrent.Semaphore;
 import java.util.concurrent.TimeUnit;
@@ -51,10 +50,10 @@ import org.osgi.util.tracker.ServiceTrac
  */
 public class RepositoryTest extends IntegrationTestBase {
 
-	private volatile ConfigurationAdmin m_configAdmin;
-	
+    private volatile ConfigurationAdmin m_configAdmin;
+
     private URL m_host;
-    
+
     public void testBadRequests() throws Exception {
         addRepository("testInstance", "apache", "test", false);
 
@@ -99,7 +98,7 @@ public class RepositoryTest extends Inte
         ByteArrayOutputStream out = new ByteArrayOutputStream();
         int responseCode = query(m_host, "replication/query", null, null, out);
         assertResponseCode(HttpURLConnection.HTTP_OK, responseCode);
-        
+
         assertEquals("Expected one repository without any versions as query result instead of : " + out.toString(), "apache,test,\n", out.toString());
 
         addRepository("testInstance2", "apache", "test2", true);
@@ -107,8 +106,8 @@ public class RepositoryTest extends Inte
         out.reset();
         responseCode = query(m_host, "replication/query", null, null, out);
         assertResponseCode(HttpURLConnection.HTTP_OK, responseCode);
-        assertTrue("Expected two repositories without any versions as query result instead of : " + out.toString(), 
-        	"apache,test,\napache,test2,\n".equals(out.toString()) || "apache,test2,\napache,test,\n".equals(out.toString()));
+        assertTrue("Expected two repositories without any versions as query result instead of : " + out.toString(),
+            "apache,test,\napache,test2,\n".equals(out.toString()) || "apache,test2,\napache,test,\n".equals(out.toString()));
 
         removeRepository("testInstance2");
 
@@ -139,14 +138,38 @@ public class RepositoryTest extends Inte
         out.reset();
         responseCode = get(m_host, "replication/get", "apache", "test", "1", out);
         assertResponseCode(HttpURLConnection.HTTP_OK, responseCode);
+
+        assertEquals("test", out.toString());
+
+        removeRepository("testInstance");
+    }
+
+    public void testGetAndPutWithCustomBasedirAndFileExtenions() throws Exception {
         
+        File tmpFile = File.createTempFile("repo", "");
+        tmpFile.delete();
+        tmpFile.mkdir();
+        addRepository("testInstance", "apache", "test", tmpFile.getAbsolutePath(), ".gz", null, true);
+
+        ByteArrayOutputStream out = new ByteArrayOutputStream();
+        int responseCode = get(m_host, "replication/get", "apache", "test", "1", out);
+        assertResponseCode(HttpURLConnection.HTTP_NOT_FOUND, responseCode);
+
+        ByteArrayInputStream byteArrayInputStream = new ByteArrayInputStream("test".getBytes());
+        responseCode = put(m_host, "replication/put", "apache", "test", "1", byteArrayInputStream);
+        assertResponseCode(HttpURLConnection.HTTP_OK, responseCode);
+
+        out.reset();
+        responseCode = get(m_host, "replication/get", "apache", "test", "1", out);
+        assertResponseCode(HttpURLConnection.HTTP_OK, responseCode);
+
         assertEquals("test", out.toString());
 
         removeRepository("testInstance");
     }
 
     public void testInitialContent() throws Exception {
-        addRepository("testInstance", "apache", "test", "somecontent", true);
+        addRepository("testInstance", "apache", "test", null, null, "somecontent", true);
 
         ByteArrayOutputStream out = new ByteArrayOutputStream();
 
@@ -167,7 +190,7 @@ public class RepositoryTest extends Inte
         assertResponseCode(HttpURLConnection.HTTP_OK, responseCode);
 
         byteArrayInputStream.reset();
-        
+
         responseCode = put(m_host, "repository/commit", "apache", "test", "0", byteArrayInputStream);
         assertResponseCode(HttpURLConnection.HTTP_INTERNAL_ERROR, responseCode);
 
@@ -175,12 +198,12 @@ public class RepositoryTest extends Inte
     }
 
     protected void configureProvisionedServices() throws IOException {
-		m_host = new URL("http://localhost:" + TestConstants.PORT);
+        m_host = new URL("http://localhost:" + TestConstants.PORT);
 
         configure("org.apache.ace.repository.servlet.RepositoryReplicationServlet",
-                HttpConstants.ENDPOINT, "/replication", "authentication.enabled", "false");
+            HttpConstants.ENDPOINT, "/replication", "authentication.enabled", "false");
         configure("org.apache.ace.repository.servlet.RepositoryServlet",
-                HttpConstants.ENDPOINT, "/repository", "authentication.enabled", "false");
+            HttpConstants.ENDPOINT, "/repository", "authentication.enabled", "false");
 
         Utils.waitForWebserver(m_host);
     }
@@ -199,15 +222,17 @@ public class RepositoryTest extends Inte
     }
 
     private void addRepository(String instanceName, String customer, String name, boolean isMaster) throws IOException, InterruptedException, InvalidSyntaxException {
-        addRepository(instanceName, customer, name, null, isMaster);
+        addRepository(instanceName, customer, name, null, null, null, isMaster);
     }
 
     /* Configure a new repository instance */
-    private void addRepository(String instanceName, String customer, String name, String initial, boolean isMaster) throws IOException, InterruptedException, InvalidSyntaxException {
+    private void addRepository(String instanceName, String customer, String name, String basedir, String fileextension, String initial, boolean isMaster) throws IOException, InterruptedException, InvalidSyntaxException {
         // Publish configuration for a repository instance
         Properties props = new Properties();
         props.put(RepositoryConstants.REPOSITORY_CUSTOMER, customer);
         props.put(RepositoryConstants.REPOSITORY_NAME, name);
+        props.put(RepositoryConstants.REPOSITORY_BASE_DIR, basedir == null ? "" : basedir);
+        props.put(RepositoryConstants.REPOSITORY_FILE_EXTENSION, fileextension == null ? "" : fileextension);
         props.put(RepositoryConstants.REPOSITORY_MASTER, String.valueOf(isMaster));
         if (initial != null) {
             props.put(RepositoryConstants.REPOSITORY_INITIAL_CONTENT, initial);
@@ -282,6 +307,6 @@ public class RepositoryTest extends Inte
     }
 
     private void assertResponseCode(int expectedCode, int responseCode) {
-    	assertEquals("Unexpected response code;", expectedCode, responseCode);
+        assertEquals("Unexpected response code;", expectedCode, responseCode);
     }
 }

Modified: ace/trunk/org.apache.ace.repository/src/org/apache/ace/repository/ext/impl/FilebasedBackupRepository.java
URL: http://svn.apache.org/viewvc/ace/trunk/org.apache.ace.repository/src/org/apache/ace/repository/ext/impl/FilebasedBackupRepository.java?rev=1510418&r1=1510417&r2=1510418&view=diff
==============================================================================
--- ace/trunk/org.apache.ace.repository/src/org/apache/ace/repository/ext/impl/FilebasedBackupRepository.java (original)
+++ ace/trunk/org.apache.ace.repository/src/org/apache/ace/repository/ext/impl/FilebasedBackupRepository.java Mon Aug  5 10:22:45 2013
@@ -30,18 +30,19 @@ import java.io.OutputStream;
 import org.apache.ace.repository.ext.BackupRepository;
 
 /**
- * A file-based implementation of the Backup Repository, using two files to store the current
- * and backup version.
+ * A file-based implementation of the Backup Repository, using two files to store the current and backup version.
  */
 public class FilebasedBackupRepository implements BackupRepository {
+
     private static final int COPY_BUFFER_SIZE = 4096;
 
     private final File m_current;
     private final File m_backup;
 
     /**
-     * Creates a FilebasedBackupRepository. The file objects should point to a correct file,
-     * but the files will be created when necessary.
+     * Creates a FilebasedBackupRepository. The file objects should point to a correct file, but the files will be
+     * created when necessary.
+     * 
      * @param current A file to store the current revision in.
      * @param backup A file to store a backup version in.
      */
@@ -54,7 +55,6 @@ public class FilebasedBackupRepository i
         if (!m_current.exists()) {
             return new ByteArrayInputStream(new byte[0]);
         }
-
         try {
             return new FileInputStream(m_current);
         }
@@ -108,15 +108,17 @@ public class FilebasedBackupRepository i
             deletedBackup = m_backup.delete();
         }
         if (!(deletedCurrent && deletedBackup)) {
-            throw new IOException("Could not delete: " + (deletedCurrent ? "" : "current ") + (deletedBackup ? "" : "backup"));
+            throw new IOException("Could not delete: " + (deletedCurrent ? "" : "current " + m_current.getAbsolutePath()) +
+                (deletedBackup ? "" : "backup " + m_backup.getAbsolutePath()));
         }
     }
 
     /**
      * Helper function that writes the contents of one file to another.
+     * 
      * @param source The source file.
      * @param destination The destination file.
-     * @throws java.io.IOException Thrown when file IO goes wrong.
+     * @throws IOException Thrown when file IO goes wrong.
      */
     private static void copy(File source, File destination) throws IOException {
         if (destination.exists()) {
@@ -142,9 +144,10 @@ public class FilebasedBackupRepository i
 
     /**
      * Copies the contents of an input stream to an output stream.
+     * 
      * @param in The input stream.
      * @param out The output stream.
-     * @throws java.io.IOException Thrown when the output stream is closed unexpectedly.
+     * @throws IOException Thrown when the output stream is closed unexpectedly.
      */
     private static void copy(InputStream in, OutputStream out) throws IOException {
         byte[] buffer = new byte[COPY_BUFFER_SIZE];
@@ -160,4 +163,4 @@ public class FilebasedBackupRepository i
     public String toString() {
         return "FilebasedBackupRepository[" + m_current + "," + m_backup + "]";
     }
-}
\ No newline at end of file
+}

Modified: ace/trunk/org.apache.ace.repository/src/org/apache/ace/repository/impl/RepositoryFactory.java
URL: http://svn.apache.org/viewvc/ace/trunk/org.apache.ace.repository/src/org/apache/ace/repository/impl/RepositoryFactory.java?rev=1510418&r1=1510417&r2=1510418&view=diff
==============================================================================
--- ace/trunk/org.apache.ace.repository/src/org/apache/ace/repository/impl/RepositoryFactory.java (original)
+++ ace/trunk/org.apache.ace.repository/src/org/apache/ace/repository/impl/RepositoryFactory.java Mon Aug  5 10:22:45 2013
@@ -44,20 +44,33 @@ import org.osgi.service.prefs.Preference
  */
 public class RepositoryFactory implements ManagedServiceFactory {
 
-    private volatile LogService m_log;                     /* injected by dependency manager */
-    private volatile BundleContext m_context;              /* injected by dependency manager */
-    private volatile PreferencesService m_prefsService;    /* injected by dependency manager */
+    private final Map<String, Component> m_instances = new HashMap<String, Component>();
+    private final DependencyManager m_manager;
+
+    private volatile LogService m_log; /* injected by dependency manager */
+    private volatile BundleContext m_context; /* injected by dependency manager */
+    private volatile PreferencesService m_prefsService; /* injected by dependency manager */
 
     private File m_tempDir;
     private File m_baseDir;
     private Preferences m_prefs;
-    private final DependencyManager m_manager;
-    private final Map<String, Component> m_instances = new HashMap<String, Component>();
 
     public RepositoryFactory(DependencyManager manager) {
         m_manager = manager;
     }
 
+    @Override
+    public String getName() {
+        return "RepositoryFactory";
+    }
+
+    public synchronized void init() {
+        m_tempDir = m_context.getDataFile("tmp");
+        if ((m_tempDir != null) && !m_tempDir.isDirectory() && !m_tempDir.mkdirs()) {
+            throw new IllegalArgumentException("Unable to create temp directory (" + m_tempDir.getAbsolutePath() + ")");
+        }
+    }
+
     public synchronized void deleted(String pid) {
         // pull service
         Component service = m_instances.remove(pid);
@@ -66,6 +79,7 @@ public class RepositoryFactory implement
         }
 
         // remove persisted data
+        String name = (String) service.getServiceProperties().get(RepositoryConstants.REPOSITORY_NAME);
         File dir = new File(m_baseDir, pid);
         if (dir.isDirectory()) {
             File[] files = dir.listFiles();
@@ -85,52 +99,54 @@ public class RepositoryFactory implement
         }
     }
 
-    public String getName() {
-        return "RepositoryFactory";
-    }
-
-    public synchronized void init() {
-        m_tempDir = m_context.getDataFile("tmp");
-        if ((m_tempDir != null) && !m_tempDir.isDirectory() && !m_tempDir.mkdirs()) {
-            throw new IllegalArgumentException("Unable to create temp directory (" + m_tempDir.getAbsolutePath() + ")");
-        }
-        m_baseDir = m_context.getDataFile("repos");
-        if ((m_baseDir != null) && !m_baseDir.isDirectory() && !m_baseDir.mkdirs()) {
-            throw new IllegalArgumentException("Unable to create base directory (" + m_baseDir.getAbsolutePath() + ")");
-        }
-    }
-
     /**
      * Creates a new instance if the supplied dictionary contains a valid configuration. A configuration is valid if
-     * <code>RepositoryConstants.REPOSITORY_NAME</code> and <code>RepositoryConstants.REPOSITORY_CUSTOMER</code> properties
-     * are present, not empty and the combination of the two is unique in respect to other previously created instances.
-     * Finally a property <code>RepositoryConstants.REPOSITORY_MASTER</code> should be present and be either <code>true</code>
-     * or <code>false</code>.
-     *
+     * <code>RepositoryConstants.REPOSITORY_NAME</code> and <code>RepositoryConstants.REPOSITORY_CUSTOMER</code>
+     * properties are present, not empty and the combination of the two is unique in respect to other previously created
+     * instances. Finally a property <code>RepositoryConstants.REPOSITORY_MASTER</code> should be present and be either
+     * <code>true</code> or <code>false</code>.
+     * 
      * @param pid A unique identifier for the instance, generated by <code>ConfigurationAdmin</code> normally.
      * @param dict The configuration properties for the instance, see description above.
-     * @throws ConfigurationException If any of the above explanation fails <b>or</b>when there is an internal error creating the repository.
+     * @throws ConfigurationException If any of the above explanation fails <b>or</b>when there is an internal error
+     *             creating the repository.
      */
     @SuppressWarnings("unchecked")
     public synchronized void updated(String pid, Dictionary dict) throws ConfigurationException {
-        String name = (String) dict.get(RepositoryConstants.REPOSITORY_NAME);
-        if ((name == null) || "".equals(name)) {
-            throw new ConfigurationException(RepositoryConstants.REPOSITORY_NAME, "Repository name has to be specified.");
-        }
 
         String customer = (String) dict.get(RepositoryConstants.REPOSITORY_CUSTOMER);
         if ((customer == null) || "".equals(customer)) {
             throw new ConfigurationException(RepositoryConstants.REPOSITORY_CUSTOMER, "Repository customer has to be specified.");
         }
 
+        String name = (String) dict.get(RepositoryConstants.REPOSITORY_NAME);
+        if ((name == null) || "".equals(name)) {
+            throw new ConfigurationException(RepositoryConstants.REPOSITORY_NAME, "Repository name has to be specified.");
+        }
+
         String master = (String) dict.get(RepositoryConstants.REPOSITORY_MASTER);
         if (!("false".equalsIgnoreCase(master.trim()) || "true".equalsIgnoreCase(master.trim()))) {
             throw new ConfigurationException(RepositoryConstants.REPOSITORY_MASTER, "Have to specify whether the repository is the master or a slave.");
         }
         boolean isMaster = Boolean.parseBoolean(master);
 
-        String initialContents = (String) dict.get(RepositoryConstants.REPOSITORY_INITIAL_CONTENT);
+        String fileExtension = (String) dict.get(RepositoryConstants.REPOSITORY_FILE_EXTENSION);
+        if ((fileExtension == null) || "".equals(fileExtension.trim())) {
+            fileExtension = "";
+        }
+
+        String baseDir = (String) dict.get(RepositoryConstants.REPOSITORY_BASE_DIR);
+        if (baseDir == null || baseDir.trim().length() == 0) {
+            m_baseDir = m_context.getDataFile("repos");
+        }
+        else {
+            m_baseDir = new File(baseDir);
+        }
+        if ((m_baseDir != null) && !m_baseDir.isDirectory() && !m_baseDir.mkdirs()) {
+            throw new IllegalArgumentException("Unable to create base directory (" + m_baseDir.getAbsolutePath() + ")");
+        }
 
+        String initialContents = (String) dict.get(RepositoryConstants.REPOSITORY_INITIAL_CONTENT);
         if (m_prefs == null) {
             m_prefs = m_prefsService.getSystemPreferences();
         }
@@ -157,7 +173,7 @@ public class RepositoryFactory implement
         if (service == null) {
             // new instance
             File dir = new File(m_baseDir, pid);
-            RepositoryImpl store = new RepositoryImpl(dir, m_tempDir, isMaster);
+            RepositoryImpl store = new RepositoryImpl(dir, m_tempDir, fileExtension, isMaster);
             if ((initialContents != null) && isMaster) {
                 try {
                     store.commit(new ByteArrayInputStream(initialContents.getBytes()), 0);
@@ -167,15 +183,16 @@ public class RepositoryFactory implement
                 }
             }
             service = m_manager.createComponent()
-                .setInterface(new String[] {RepositoryReplication.class.getName(), Repository.class.getName()}, dict)
+                .setInterface(new String[] { RepositoryReplication.class.getName(), Repository.class.getName() }, dict)
                 .setImplementation(store)
                 .add(m_manager.createServiceDependency().setService(LogService.class).setRequired(false));
             m_manager.add(service);
             m_instances.put(pid, service);
-        } else {
+        }
+        else {
             // update existing instance
             RepositoryImpl store = (RepositoryImpl) service.getService();
             store.updated(isMaster);
         }
     }
-}
\ No newline at end of file
+}

Modified: ace/trunk/org.apache.ace.repository/src/org/apache/ace/repository/impl/RepositoryImpl.java
URL: http://svn.apache.org/viewvc/ace/trunk/org.apache.ace.repository/src/org/apache/ace/repository/impl/RepositoryImpl.java?rev=1510418&r1=1510417&r2=1510418&view=diff
==============================================================================
--- ace/trunk/org.apache.ace.repository/src/org/apache/ace/repository/impl/RepositoryImpl.java (original)
+++ ace/trunk/org.apache.ace.repository/src/org/apache/ace/repository/impl/RepositoryImpl.java Mon Aug  5 10:22:45 2013
@@ -35,13 +35,15 @@ import org.osgi.service.cm.Configuration
 import org.osgi.service.log.LogService;
 
 /**
- * Implementation of an object repository. The object repository holds (big) chunks of data identified by
- * a version. To interact with the repository two interfaces are implemented:
+ * Implementation of an object repository. The object repository holds (big) chunks of data identified by a version. To
+ * interact with the repository two interfaces are implemented:
  * <ul>
- *   <li><code>Repository</code> - a read-write interface to the repository, you can commit and checkout versions</li>
- *   <li><code>RepositoryReplication</code> - interface used only for replication of the repository, you can get and put versions</li>
+ * <li><code>Repository</code> - a read-write interface to the repository, you can commit and checkout versions</li>
+ * <li><code>RepositoryReplication</code> - interface used only for replication of the repository, you can get and put
+ * versions</li>
  * </ul>
- * A repository can be either a master or a slave repository. Committing a new version is only possible on a master repository.
+ * A repository can be either a master or a slave repository. Committing a new version is only possible on a master
+ * repository.
  */
 public class RepositoryImpl implements RepositoryReplication, Repository {
 
@@ -50,16 +52,32 @@ public class RepositoryImpl implements R
 
     private final File m_tempDir;
     private final File m_dir;
+    private final String m_fileExtension;
 
     /**
      * Creates a new repository.
-     *
+     * 
      * @param dir Directory to be used for storage of the repository data, will be created if needed.
      * @param temp Directory to be used as temp directory, will be created if needed.
      * @param isMaster True if this repository is a master repository, false otherwise.
-     * @throws IllegalArgumentException If <code>dir</code> and/or <code>temp</code> could not be created or is not a directory.
+     * @throws IllegalArgumentException If <code>dir</code> and/or <code>temp</code> could not be created or is not a
+     *             directory.
      */
     public RepositoryImpl(File dir, File temp, boolean isMaster) {
+        this(dir, temp, "", isMaster);
+    }
+
+    /**
+     * Creates a new repository.
+     * 
+     * @param dir Directory to be used for storage of the repository data, will be created if needed.
+     * @param temp Directory to be used as temp directory, will be created if needed.
+     * @param fileExtension Extension to be used for repository files.
+     * @param isMaster True if this repository is a master repository, false otherwise.
+     * @throws IllegalArgumentException If <code>dir</code> and/or <code>temp</code> could not be created or is not a
+     *             directory.
+     */
+    public RepositoryImpl(File dir, File temp, String fileExtension, boolean isMaster) {
         m_isMaster = isMaster;
         if (!dir.isDirectory() && !dir.mkdirs()) {
             throw new IllegalArgumentException("Repository location is not a valid directory (" + dir.getAbsolutePath() + ")");
@@ -67,8 +85,12 @@ public class RepositoryImpl implements R
         if (!temp.isDirectory() && !temp.mkdirs()) {
             throw new IllegalArgumentException("Temp location is not a valid directory (" + temp.getAbsolutePath() + ")");
         }
+        if (fileExtension == null) {
+            throw new IllegalArgumentException("File extension must not be null");
+        }
         m_tempDir = temp;
         m_dir = dir;
+        m_fileExtension = fileExtension;
     }
 
     public InputStream get(long version) throws IOException, IllegalArgumentException {
@@ -79,7 +101,7 @@ public class RepositoryImpl implements R
         if (version <= 0) {
             throw new IllegalArgumentException("Version must be greater than 0.");
         }
-        File file = new File(m_dir, Long.toString(version));
+        File file = new File(m_dir, Long.toString(version) + m_fileExtension);
         if (file.exists()) {
             return false;
         }
@@ -87,11 +109,13 @@ public class RepositoryImpl implements R
         // store stream in temp file
         File tempFile = File.createTempFile("repository", null, m_tempDir);
         OutputStream fileStream = null;
+
         try {
             fileStream = new FileOutputStream(tempFile);
-            
+
             byte[] buffer = new byte[1024];
             int bytes;
+
             while ((bytes = data.read(buffer)) >= 0) {
                 fileStream.write(buffer, 0, bytes);
             }
@@ -125,7 +149,7 @@ public class RepositoryImpl implements R
         if (version <= 0) {
             throw new IllegalArgumentException("Version must be greater than 0.");
         }
-        File file = new File(m_dir, String.valueOf(version));
+        File file = new File(m_dir, String.valueOf(version) + m_fileExtension);
         return (file.isFile()) ? new FileInputStream(file) : null;
     }
 
@@ -138,12 +162,13 @@ public class RepositoryImpl implements R
         }
 
         long[] versions = getVersions();
-
         if (versions.length == 0) {
             if (fromVersion == 0) {
                 put(data, 1);
+
                 return true;
-            } else {
+            }
+            else {
                 return false;
             }
         }
@@ -171,7 +196,8 @@ public class RepositoryImpl implements R
         long[] results = new long[versions.length];
         for (int i = 0; i < versions.length; i++) {
             String name = versions[i].getName();
-			try {
+            name = name.substring(0, name.length() - m_fileExtension.length());
+            try {
                 results[i] = Long.parseLong(name);
             }
             catch (NumberFormatException nfe) {
@@ -184,9 +210,8 @@ public class RepositoryImpl implements R
 
     /**
      * Updates the repository configuration.
-     *
+     * 
      * @param isMaster True if the repository is a master repository, false otherwise.
-     *
      * @throws ConfigurationException If it was impossible to use the new configuration.
      */
     public void updated(boolean isMaster) throws ConfigurationException {
@@ -197,9 +222,8 @@ public class RepositoryImpl implements R
      * Renames a given source file to a new destination file.
      * <p>
      * This avoids the problem mentioned in ACE-155.<br/>
-     * The moveFile method from Commons-IO is not used, as it would mean that
-     * we need to include this JAR in several placed for only a few lines of
-     * code.
+     * The moveFile method from Commons-IO is not used, as it would mean that we need to include this JAR in several
+     * placed for only a few lines of code.
      * </p>
      * 
      * @param source the file to rename;
@@ -243,7 +267,7 @@ public class RepositoryImpl implements R
         FileOutputStream fos = null;
         FileChannel input = null;
         FileChannel output = null;
-        
+
         try {
             fis = new FileInputStream(source);
             input = fis.getChannel();
@@ -269,7 +293,6 @@ public class RepositoryImpl implements R
         }
 
         dest.setLastModified(source.lastModified());
-
         if (!source.delete()) {
             dest.delete();
             throw new IOException("Failed to move file! Source file (" + source + ") locked?");
@@ -293,4 +316,4 @@ public class RepositoryImpl implements R
             // Ignored...
         }
     }
-}
\ No newline at end of file
+}

Modified: ace/trunk/org.apache.ace.repository/src/org/apache/ace/repository/impl/constants/RepositoryConstants.java
URL: http://svn.apache.org/viewvc/ace/trunk/org.apache.ace.repository/src/org/apache/ace/repository/impl/constants/RepositoryConstants.java?rev=1510418&r1=1510417&r2=1510418&view=diff
==============================================================================
--- ace/trunk/org.apache.ace.repository/src/org/apache/ace/repository/impl/constants/RepositoryConstants.java (original)
+++ ace/trunk/org.apache.ace.repository/src/org/apache/ace/repository/impl/constants/RepositoryConstants.java Mon Aug  5 10:22:45 2013
@@ -24,4 +24,6 @@ public interface RepositoryConstants
     public static final String REPOSITORY_CUSTOMER = "customer";
     public static final String REPOSITORY_MASTER = "master";
     public static final String REPOSITORY_INITIAL_CONTENT = "initial";
-}
\ No newline at end of file
+    public static final String REPOSITORY_BASE_DIR = "basedir";
+    public static final String REPOSITORY_FILE_EXTENSION = "fileextension";
+}

Modified: ace/trunk/org.apache.ace.repository/src/org/apache/ace/repository/servlet/RepositoryServletBase.java
URL: http://svn.apache.org/viewvc/ace/trunk/org.apache.ace.repository/src/org/apache/ace/repository/servlet/RepositoryServletBase.java?rev=1510418&r1=1510417&r2=1510418&view=diff
==============================================================================
--- ace/trunk/org.apache.ace.repository/src/org/apache/ace/repository/servlet/RepositoryServletBase.java (original)
+++ ace/trunk/org.apache.ace.repository/src/org/apache/ace/repository/servlet/RepositoryServletBase.java Mon Aug  5 10:22:45 2013
@@ -43,28 +43,21 @@ import org.osgi.service.log.LogService;
 import org.osgi.service.useradmin.User;
 
 /**
- * Base class for the repository servlets. Both the repository and the repository replication
- * servlets work in a similar way, so the specifics were factored out of this base class and
- * put in two subclasses.
+ * Base class for the repository servlets. Both the repository and the repository replication servlets work in a similar
+ * way, so the specifics were factored out of this base class and put in two subclasses.
  */
 public abstract class RepositoryServletBase extends HttpServlet implements ManagedService {
-
     /** A boolean denoting whether or not authentication is enabled. */
     private static final String KEY_USE_AUTHENTICATION = "authentication.enabled";
-
     private static final int COPY_BUFFER_SIZE = 1024;
-    
     private static final String QUERY = "/query";
-    
     protected static final String TEXT_MIMETYPE = "text/plain";
     protected static final String BINARY_MIMETYPE = "application/octet-stream";
 
     // injected by Dependency Manager
-    private volatile DependencyManager m_dm; 
+    private volatile DependencyManager m_dm;
     private volatile AuthenticationService m_authService;
-
     private volatile boolean m_useAuth = false;
-    
     protected volatile BundleContext m_context;
     protected volatile LogService m_log;
 
@@ -83,7 +76,8 @@ public abstract class RepositoryServletB
                     handleQuery(filter, response);
                 }
                 else {
-                    response.sendError(HttpServletResponse.SC_BAD_REQUEST, "Specify either a filter or customer and/or name, but not both.");
+                    response.sendError(HttpServletResponse.SC_BAD_REQUEST,
+                        "Specify either a filter or customer and/or name, but not both.");
                 }
             }
             else {
@@ -130,7 +124,8 @@ public abstract class RepositoryServletB
                 handleCommit(customer, name, Long.parseLong(version), request.getInputStream(), response);
             }
             else {
-                response.sendError(HttpServletResponse.SC_BAD_REQUEST, "Name, customer and version should all be specified.");
+                response.sendError(HttpServletResponse.SC_BAD_REQUEST,
+                    "Name, customer and version should all be specified.");
             }
         }
         else {
@@ -150,6 +145,7 @@ public abstract class RepositoryServletB
         try {
             ServiceReference[] refs = getRepositories(filter);
             StringBuffer result = new StringBuffer();
+
             if (refs != null) {
                 for (ServiceReference ref : refs) {
                     result.append((String) ref.getProperty("customer"));
@@ -160,32 +156,35 @@ public abstract class RepositoryServletB
                     result.append('\n');
                 }
             }
+
             response.setContentType(TEXT_MIMETYPE);
             response.getWriter().print(result.toString());
         }
         catch (IOException e) {
-            response.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR, "Could not retrieve version range for repository: " + e.getMessage());
+            response.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR,
+                "Could not retrieve version range for repository: " + e.getMessage());
         }
         catch (InvalidSyntaxException e) {
-            response.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR, "Invalid filter syntax: " + e.getMessage());
+            response.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR,
+                "Invalid filter syntax: " + e.getMessage());
         }
     }
 
     /**
      * Implement this by asking the right repository for a range of available versions.
-     *
-     * @param ref reference to the repository service you need to dereference
+     * 
+     * @param ref Reference to the repository service you need to dereference
      * @return a sorted range set
-     * @throws java.io.IOException if the range cannot be obtained
+     * @throws IOException If the range cannot be obtained
      */
     protected abstract SortedRangeSet getRange(ServiceReference ref) throws IOException;
 
     /**
      * Returns a list of repositories that match the specified filter condition.
-     *
-     * @param filter the filter condition
-     * @return an array of service references
-     * @throws InvalidSyntaxException if the filter condition is invalid
+     * 
+     * @param filter The filter condition
+     * @return An array of service references
+     * @throws InvalidSyntaxException If the filter condition is invalid
      */
     protected abstract ServiceReference[] getRepositories(String filter) throws InvalidSyntaxException;
 
@@ -197,20 +196,16 @@ public abstract class RepositoryServletB
     protected void init(Component comp) {
         comp.add(m_dm.createServiceDependency()
             .setService(AuthenticationService.class)
-            .setRequired(m_useAuth)
-            .setInstanceBound(true)
-            );
+            .setRequired(m_useAuth).setInstanceBound(true));
     }
 
-    /**
-     * {@inheritDoc}
-     */
     @Override
     protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
         if (!authenticate(req)) {
             // Authentication failed; don't proceed with the original request...
             resp.sendError(SC_UNAUTHORIZED);
-        } else {
+        }
+        else {
             // Authentication successful, proceed with original request...
             super.service(req, resp);
         }
@@ -219,17 +214,20 @@ public abstract class RepositoryServletB
     /**
      * Authenticates, if needed the user with the information from the given request.
      * 
-     * @param request the request to obtain the credentials from, cannot be <code>null</code>.
+     * @param request The request to obtain the credentials from, cannot be <code>null</code>.
      * @return <code>true</code> if the authentication was successful, <code>false</code> otherwise.
      */
     private boolean authenticate(HttpServletRequest request) {
         if (m_useAuth) {
             User user = m_authService.authenticate(request);
+
             if (user == null) {
                 m_log.log(LogService.LOG_INFO, "Authentication failure!");
             }
+
             return (user != null);
         }
+
         return true;
     }
 
@@ -239,12 +237,14 @@ public abstract class RepositoryServletB
     private void handleCommit(String customer, String name, long version, InputStream data, HttpServletResponse response) throws IOException {
         try {
             ServiceReference[] refs = getRepositories("(&(customer=" + customer + ")(name=" + name + "))");
+
             if ((refs != null) && (refs.length == 1)) {
                 ServiceReference ref = refs[0];
                 try {
                     if (!doCommit(ref, version, data)) {
                         response.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR, "Could not commit");
-                    } else {
+                    }
+                    else {
                         response.sendError(HttpServletResponse.SC_OK);
                     }
                 }
@@ -252,7 +252,8 @@ public abstract class RepositoryServletB
                     response.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR, "Invalid version");
                 }
                 catch (IllegalStateException e) {
-                    response.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR, "Cannot commit, not the master repository");
+                    response.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR,
+                        "Cannot commit, not the master repository");
                 }
             }
         }
@@ -260,19 +261,20 @@ public abstract class RepositoryServletB
             response.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR, "I/O exception: " + e.getMessage());
         }
         catch (InvalidSyntaxException e) {
-            response.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR, "Invalid filter syntax: " + e.getMessage());
+            response.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR, "Invalid filter syntax: "
+                + e.getMessage());
         }
     }
 
     /**
      * Commit or put the data into the repository.
-     *
-     * @param ref reference to the repository service
-     * @param version the version
-     * @param data the data
+     * 
+     * @param ref Reference to the repository service
+     * @param version The version
+     * @param data The data
      * @return <code>true</code> if successful
      * @throws IllegalArgumentException
-     * @throws java.io.IOException
+     * @throws IOException
      */
     protected abstract boolean doCommit(ServiceReference ref, long version, InputStream data) throws IllegalArgumentException, IOException;
 
@@ -287,13 +289,17 @@ public abstract class RepositoryServletB
                 response.setContentType(BINARY_MIMETYPE);
                 InputStream data = doCheckout(ref, version);
                 if (data == null) {
-                    response.sendError(HttpServletResponse.SC_NOT_FOUND, "Requested version does not exist: " + version);
-                } else {
-                    copy(data, response.getOutputStream());
+                    response.sendError(HttpServletResponse.SC_NOT_FOUND, "Requested version does not exist: "
+                        + version);
+                }
+                else {
+                    copy(data, response.getOutputStream(), name, version);
                 }
             }
             else {
-                response.sendError(HttpServletResponse.SC_NOT_FOUND, ((refs == null) ? "Could not find repository " : "Multiple repositories found ") + " for customer " + customer + ", name " + name);
+                response.sendError(HttpServletResponse.SC_NOT_FOUND,
+                    ((refs == null) ? "Could not find repository " : "Multiple repositories found ") + " for customer "
+                        + customer + ", name " + name);
             }
         }
         catch (IOException e) {
@@ -306,7 +312,7 @@ public abstract class RepositoryServletB
 
     /**
      * Checkout or get data from the repository.
-     *
+     * 
      * @param ref reference to the repository service
      * @param version the version
      * @return the data
@@ -317,32 +323,36 @@ public abstract class RepositoryServletB
 
     /**
      * Copies data from an input stream to an output stream.
-     * @param in the input
-     * @param out the output
-     * @throws java.io.IOException if copying fails
+     * 
+     * @param in The input
+     * @param outThe output
+     * @param version
+     * @param name
+     * @throws IOException If copying fails
      */
-    private void copy(InputStream in, OutputStream out) throws IOException {
+    private void copy(InputStream in, OutputStream out, String name, long version)
+        throws IOException {
         byte[] buffer = new byte[COPY_BUFFER_SIZE];
         int bytes = in.read(buffer);
         while (bytes != -1) {
             out.write(buffer, 0, bytes);
             bytes = in.read(buffer);
         }
+
     }
 
     public void updated(Dictionary settings) throws ConfigurationException {
         if (settings != null) {
             String useAuthString = (String) settings.get(KEY_USE_AUTHENTICATION);
-            if (useAuthString == null
-                || !("true".equalsIgnoreCase(useAuthString) || "false".equalsIgnoreCase(useAuthString))) {
+            if ((useAuthString == null) ||
+                !("true".equalsIgnoreCase(useAuthString) || "false".equalsIgnoreCase(useAuthString))) {
                 throw new ConfigurationException(KEY_USE_AUTHENTICATION, "Missing or invalid value!");
             }
             boolean useAuth = Boolean.parseBoolean(useAuthString);
-
             m_useAuth = useAuth;
         }
         else {
             m_useAuth = false;
         }
     }
-}
\ No newline at end of file
+}

Modified: ace/trunk/org.apache.ace.repository/test/org/apache/ace/repository/impl/RepositoryImplTest.java
URL: http://svn.apache.org/viewvc/ace/trunk/org.apache.ace.repository/test/org/apache/ace/repository/impl/RepositoryImplTest.java?rev=1510418&r1=1510417&r2=1510418&view=diff
==============================================================================
--- ace/trunk/org.apache.ace.repository/test/org/apache/ace/repository/impl/RepositoryImplTest.java (original)
+++ ace/trunk/org.apache.ace.repository/test/org/apache/ace/repository/impl/RepositoryImplTest.java Mon Aug  5 10:22:45 2013
@@ -33,7 +33,6 @@ import org.testng.annotations.Test;
 
 public class RepositoryImplTest {
 
-    private RepositoryImpl m_repo;
     private File m_baseDir;
 
     @BeforeMethod(alwaysRun = true)
@@ -41,92 +40,111 @@ public class RepositoryImplTest {
         m_baseDir = File.createTempFile("repo", null);
         m_baseDir.delete();
         m_baseDir.mkdirs();
-        m_repo = new RepositoryImpl(new File(m_baseDir, "data"), new File(m_baseDir, "tmp"), true);
     }
 
     @Test(groups = { UNIT })
     public void testGetAndPut() throws Exception {
+        RepositoryImpl repo = new RepositoryImpl(new File(m_baseDir, "data"), new File(m_baseDir, "tmp"), true);
         InputStream data = new ByteArrayInputStream("abc".getBytes());
-        boolean result = m_repo.put(data, 1);
+        boolean result = repo.put(data, 1);
         assert result : "Put should have succeeded.";
 
         File file = new File(m_baseDir, "data" + File.separator + "1");
         BufferedReader reader = new BufferedReader(new FileReader(file));
         assert "abc".equals(reader.readLine()) : "File " + file.getAbsolutePath() + " should have contained 'abc'.";
 
-        assert !m_repo.put(data, 1) : "Putting an existing version should return false.";
+        assert !repo.put(data, 1) : "Putting an existing version should return false.";
 
-        InputStream in = m_repo.get(1);
+        InputStream in = repo.get(1);
         reader = new BufferedReader(new InputStreamReader(in));
         assert "abc".equals(reader.readLine()) : "'get'ting version 1 should have returned an inputstream containing 'abc'";
-        assert null == m_repo.get(2) : "'get'ting a non-existing version should return null";
+        assert null == repo.get(2) : "'get'ting a non-existing version should return null";
     }
 
-    @Test(groups = { UNIT }, expectedExceptions = {IllegalArgumentException.class})
+    @Test(groups = { UNIT }, expectedExceptions = { IllegalArgumentException.class })
     public void testPutNegative() throws Exception {
-        m_repo.put(new ByteArrayInputStream("abc".getBytes()), -1);
+        RepositoryImpl repo = new RepositoryImpl(new File(m_baseDir, "data"), new File(m_baseDir, "tmp"), true);
+        repo.put(new ByteArrayInputStream("abc".getBytes()), -1);
     }
 
-    @Test(groups = { UNIT }, expectedExceptions = {IllegalArgumentException.class})
+    @Test(groups = { UNIT }, expectedExceptions = { IllegalArgumentException.class })
     public void testPutZero() throws Exception {
-        m_repo.put(new ByteArrayInputStream("abc".getBytes()), 0);
+        RepositoryImpl repo = new RepositoryImpl(new File(m_baseDir, "data"), new File(m_baseDir, "tmp"), true);
+        repo.put(new ByteArrayInputStream("abc".getBytes()), 0);
     }
 
-    @Test(groups = { UNIT }, expectedExceptions = {IllegalArgumentException.class})
+    @Test(groups = { UNIT }, expectedExceptions = { IllegalArgumentException.class })
     public void testGetNegative() throws Exception {
-        m_repo.get(-1);
+        RepositoryImpl repo = new RepositoryImpl(new File(m_baseDir, "data"), new File(m_baseDir, "tmp"), true);
+        repo.get(-1);
     }
 
-    @Test(groups = { UNIT }, expectedExceptions = {IllegalArgumentException.class})
+    @Test(groups = { UNIT }, expectedExceptions = { IllegalArgumentException.class })
     public void testGetZero() throws Exception {
-        m_repo.get(0);
+        RepositoryImpl repo = new RepositoryImpl(new File(m_baseDir, "data"), new File(m_baseDir, "tmp"), true);
+        repo.get(0);
     }
 
     @Test(groups = { UNIT })
     public void testCommitAndCheckout() throws Exception {
+        RepositoryImpl repo = new RepositoryImpl(new File(m_baseDir, "data"), new File(m_baseDir, "tmp"), true);
         InputStream data = new ByteArrayInputStream("abc".getBytes());
-        boolean result = m_repo.commit(data, 1);
+        boolean result = repo.commit(data, 1);
         assert !result : "Commit with incorrect 'base' number should have failed.";
 
-        result = m_repo.commit(data, 0);
+        result = repo.commit(data, 0);
         assert result : "Commit should have succeeded";
 
         File file = new File(m_baseDir, "data" + File.separator + "1");
         BufferedReader reader = new BufferedReader(new FileReader(file));
         assert "abc".equals(reader.readLine()) : "File " + file.getAbsolutePath() + " should have contained 'abc'.";
 
-        assert !m_repo.commit(data, 0) : "Committing an existing version should return false.";
-        assert !m_repo.commit(data, 999) : "Committing should only succeed if the base number equals the highest version inside the repository";
+        assert !repo.commit(data, 0) : "Committing an existing version should return false.";
+        assert !repo.commit(data, 999) : "Committing should only succeed if the base number equals the highest version inside the repository";
 
-        InputStream in = m_repo.checkout(1);
+        InputStream in = repo.checkout(1);
         reader = new BufferedReader(new InputStreamReader(in));
         assert "abc".equals(reader.readLine()) : "Checking out version 1 should have returned an inputstream containing 'abc'";
-        assert null == m_repo.get(2) : "Checking out a non-existing version should return null";
+        assert null == repo.get(2) : "Checking out a non-existing version should return null";
     }
 
-    @Test(groups = { UNIT }, expectedExceptions = {IllegalArgumentException.class})
+    @Test(groups = { UNIT }, expectedExceptions = { IllegalArgumentException.class })
     public void testCommitNegative() throws Exception {
-        m_repo.commit(new ByteArrayInputStream("abc".getBytes()), -1);
+        RepositoryImpl repo = new RepositoryImpl(new File(m_baseDir, "data"), new File(m_baseDir, "tmp"), true);
+        repo.commit(new ByteArrayInputStream("abc".getBytes()), -1);
     }
 
-    @Test(groups = { UNIT }, expectedExceptions = {IllegalArgumentException.class})
+    @Test(groups = { UNIT }, expectedExceptions = { IllegalArgumentException.class })
     public void testCheckoutNegative() throws Exception {
-        m_repo.checkout(-1);
+        RepositoryImpl repo = new RepositoryImpl(new File(m_baseDir, "data"), new File(m_baseDir, "tmp"), true);
+        repo.checkout(-1);
     }
 
-    @Test(groups = { UNIT }, expectedExceptions = {IllegalArgumentException.class})
+    @Test(groups = { UNIT }, expectedExceptions = { IllegalArgumentException.class })
     public void testCheckoutZero() throws Exception {
-        m_repo.checkout(0);
+        RepositoryImpl repo = new RepositoryImpl(new File(m_baseDir, "data"), new File(m_baseDir, "tmp"), true);
+        repo.checkout(0);
     }
 
-    @Test(groups = { UNIT }, expectedExceptions = {IllegalStateException.class})
+    @Test(groups = { UNIT }, expectedExceptions = { IllegalStateException.class })
     public void testUpdated() throws Exception {
-        m_repo.updated(false);
-        assert !m_repo.commit(new ByteArrayInputStream("abc".getBytes()), 0) : "Committing should not be allowed on slave repositories.";
-        assert m_repo.put(new ByteArrayInputStream("abc".getBytes()), 1) : "'put'ting a replica should be allowed on slave repositories.";
+        RepositoryImpl repo = new RepositoryImpl(new File(m_baseDir, "data"), new File(m_baseDir, "tmp"), true);
+        repo.updated(false);
+        assert !repo.commit(new ByteArrayInputStream("abc".getBytes()), 0) : "Committing should not be allowed on slave repositories.";
+        assert repo.put(new ByteArrayInputStream("abc".getBytes()), 1) : "'put'ting a replica should be allowed on slave repositories.";
         File file = new File(m_baseDir, "newLocation" + File.separator + "1");
         BufferedReader reader = new BufferedReader(new FileReader(file));
         assert "abc".equals(reader.readLine()) : "File " + file.getAbsolutePath() + " should have contained 'abc'.";
     }
 
-}
\ No newline at end of file
+    @Test(groups = { UNIT })
+    public void testFileExtension() throws Exception {
+        RepositoryImpl repo = new RepositoryImpl(new File(m_baseDir, "data"), new File(m_baseDir, "tmp"), ".gz", true);
+        InputStream data = new ByteArrayInputStream("abc".getBytes());
+        boolean result = repo.put(data, 1);
+        assert result : "Put should have succeeded.";
+        File file = new File(m_baseDir, "data" + File.separator + "1.gz");
+        BufferedReader reader = new BufferedReader(new FileReader(file));
+        assert "abc".equals(reader.readLine()) : "File " + file.getAbsolutePath() + " should have contained 'abc'.";
+    }
+}

Modified: ace/trunk/run-server-allinone/conf/org.apache.ace.server.repository.factory/ace-shop.cfg
URL: http://svn.apache.org/viewvc/ace/trunk/run-server-allinone/conf/org.apache.ace.server.repository.factory/ace-shop.cfg?rev=1510418&r1=1510417&r2=1510418&view=diff
==============================================================================
--- ace/trunk/run-server-allinone/conf/org.apache.ace.server.repository.factory/ace-shop.cfg (original)
+++ ace/trunk/run-server-allinone/conf/org.apache.ace.server.repository.factory/ace-shop.cfg Mon Aug  5 10:22:45 2013
@@ -1,3 +1,5 @@
 name=shop
 customer=apache
-master=true
\ No newline at end of file
+master=true
+basedir=/tmp/bramkbasedir
+fileextension=.gz
\ No newline at end of file



Mime
View raw message