You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jackrabbit.apache.org by dp...@apache.org on 2008/09/16 13:56:09 UTC

svn commit: r695821 - in /jackrabbit/trunk/jackrabbit-core/src: main/java/org/apache/jackrabbit/core/ main/java/org/apache/jackrabbit/core/cluster/ main/java/org/apache/jackrabbit/core/config/ test/java/org/apache/jackrabbit/core/cluster/

Author: dpfister
Date: Tue Sep 16 04:56:08 2008
New Revision: 695821

URL: http://svn.apache.org/viewvc?rev=695821&view=rev
Log:
JCR-1734 - Generated cluster node id should be persisted

Added:
    jackrabbit/trunk/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/cluster/
    jackrabbit/trunk/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/cluster/ClusterTest.java   (with props)
    jackrabbit/trunk/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/cluster/MemoryJournal.java   (with props)
    jackrabbit/trunk/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/cluster/MemoryRevision.java   (with props)
    jackrabbit/trunk/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/cluster/SimpleClusterContext.java   (with props)
    jackrabbit/trunk/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/cluster/TestAll.java   (with props)
Modified:
    jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/RepositoryImpl.java
    jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/cluster/ClusterContext.java
    jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/cluster/ClusterNode.java
    jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/config/RepositoryConfigurationParser.java

Modified: jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/RepositoryImpl.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/RepositoryImpl.java?rev=695821&r1=695820&r2=695821&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/RepositoryImpl.java (original)
+++ jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/RepositoryImpl.java Tue Sep 16 04:56:08 2008
@@ -381,6 +381,16 @@
     }
 
     /**
+     * Get the cluster node. Returns <code>null</code> if this repository
+     * is not running clustered.
+     *
+     * @return cluster node
+     */
+    public ClusterNode getClusterNode() {
+        return clusterNode;
+    }
+
+    /**
      * Returns the {@link org.apache.jackrabbit.core.security.JackrabbitSecurityManager SecurityManager}
      * of this <code>Repository</code>
      *
@@ -2148,6 +2158,13 @@
         /**
          * {@inheritDoc}
          */
+        public File getRepositoryHome() {
+            return new File(getConfig().getHomeDir());
+        }
+
+        /**
+         * {@inheritDoc}
+         */
         public NamespaceResolver getNamespaceResolver() {
             return new RegistryNamespaceResolver(getNamespaceRegistry());
         }

Modified: jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/cluster/ClusterContext.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/cluster/ClusterContext.java?rev=695821&r1=695820&r2=695821&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/cluster/ClusterContext.java (original)
+++ jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/cluster/ClusterContext.java Tue Sep 16 04:56:08 2008
@@ -16,6 +16,8 @@
  */
 package org.apache.jackrabbit.core.cluster;
 
+import java.io.File;
+
 import org.apache.jackrabbit.core.config.ClusterConfig;
 import org.apache.jackrabbit.spi.commons.namespace.NamespaceResolver;
 
@@ -34,6 +36,13 @@
     ClusterConfig getClusterConfig();
 
     /**
+     * Return the repository home directory.
+     *
+     * @return repository home directory
+     */
+    File getRepositoryHome();
+
+    /**
      * Return a namespace resolver to map prefixes to URIs and vice-versa
      *
      * @return namespace resolver

Modified: jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/cluster/ClusterNode.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/cluster/ClusterNode.java?rev=695821&r1=695820&r2=695821&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/cluster/ClusterNode.java (original)
+++ jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/cluster/ClusterNode.java Tue Sep 16 04:56:08 2008
@@ -37,11 +37,19 @@
 import org.apache.jackrabbit.core.state.PropertyState;
 import org.apache.jackrabbit.spi.Name;
 import org.apache.jackrabbit.spi.Path;
+import org.apache.jackrabbit.uuid.UUID;
+
 import EDU.oswego.cs.dl.util.concurrent.Mutex;
 
 import javax.jcr.RepositoryException;
 import javax.jcr.Session;
 import javax.jcr.observation.Event;
+
+import java.io.BufferedReader;
+import java.io.File;
+import java.io.FileReader;
+import java.io.FileWriter;
+import java.io.IOException;
 import java.util.List;
 import java.util.ArrayList;
 import java.util.HashMap;
@@ -62,6 +70,9 @@
      */
     public static final String SYSTEM_PROPERTY_NODE_ID = "org.apache.jackrabbit.core.cluster.node_id";
 
+    /** Cluster node id file. */
+    private static final String CLUSTER_NODE_ID_FILE = "cluster_node.id";
+
     /**
      * Used for padding short string representations.
      */
@@ -304,7 +315,7 @@
 
             journal.close();
             instanceRevision.close();
-            
+
             notifyAll();
         }
     }
@@ -331,7 +342,7 @@
 
     /**
      * Return the journal created by this cluster node.
-     * 
+     *
      * @return journal
      */
     public Journal getJournal() {
@@ -340,19 +351,61 @@
 
     /**
      * Return the instance id to be used for this node in the cluster.
-     * @param id configured id, <code>null</code> to take random id
+     * @param id configured id, <code>null</code> to generate a unique id
      */
-    private String getClusterNodeId(String id) {
+    private String getClusterNodeId(String id) throws ClusterException {
         if (id == null) {
             id = System.getProperty(SYSTEM_PROPERTY_NODE_ID);
             if (id == null) {
-                id = toHexString((short) (Math.random() * (Short.MAX_VALUE - Short.MIN_VALUE)));
+                try {
+                    id = getClusterNodeIdFromFile();
+                } catch (IOException e) {
+                    throw new ClusterException(e.getMessage(), e.getCause());
+                }
             }
         }
         return id;
     }
 
     /**
+     * Return a cluster node from a file, creating it if necessary.
+     *
+     * @return stored or generated cluster id
+     * @throws IOException if an I/O error occurs
+     */
+    protected String getClusterNodeIdFromFile() throws IOException {
+        String filename = clusterContext.getRepositoryHome() + File.separator + CLUSTER_NODE_ID_FILE;
+        File f = new File(filename);
+
+        if (f.exists() && f.canRead()) {
+            BufferedReader reader = null;
+
+            try {
+                reader = new BufferedReader(new FileReader(f));
+                return reader.readLine();
+            } finally {
+                if (reader != null) {
+                    reader.close();
+                }
+            }
+        }
+
+        FileWriter writer = null;
+        String id = UUID.randomUUID().toString();
+
+        try {
+            writer = new FileWriter(f);
+            writer.write(id);
+        } finally {
+            if (writer != null) {
+                writer.close();
+            }
+        }
+        return id;
+
+    }
+
+    /**
      * Return a zero-padded short string representation.
      *
      * @param n short

Modified: jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/config/RepositoryConfigurationParser.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/config/RepositoryConfigurationParser.java?rev=695821&r1=695820&r2=695821&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/config/RepositoryConfigurationParser.java (original)
+++ jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/config/RepositoryConfigurationParser.java Tue Sep 16 04:56:08 2008
@@ -628,8 +628,12 @@
                     && CLUSTER_ELEMENT.equals(child.getNodeName())) {
                 Element element = (Element) child;
 
+                String id = null;
+
                 String value = getAttribute(element, ID_ATTRIBUTE, null);
-                String id = replaceVariables(value);
+                if (value != null) {
+                    id = replaceVariables(value);
+                }
                 value = getAttribute(element, SYNC_DELAY_ATTRIBUTE, DEFAULT_SYNC_DELAY);
                 long syncDelay = Long.parseLong(replaceVariables(value));
 

Added: jackrabbit/trunk/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/cluster/ClusterTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/cluster/ClusterTest.java?rev=695821&view=auto
==============================================================================
--- jackrabbit/trunk/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/cluster/ClusterTest.java (added)
+++ jackrabbit/trunk/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/cluster/ClusterTest.java Tue Sep 16 04:56:08 2008
@@ -0,0 +1,82 @@
+/*
+ * 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.jackrabbit.core.cluster;
+
+import java.io.File;
+import java.util.Properties;
+
+import org.apache.commons.io.FileUtils;
+import org.apache.jackrabbit.core.config.BeanConfig;
+import org.apache.jackrabbit.core.config.ClusterConfig;
+import org.apache.jackrabbit.core.config.JournalConfig;
+import org.apache.jackrabbit.test.JUnitTest;
+
+/**
+ * Test cases for cluster mode.
+ */
+public class ClusterTest extends JUnitTest {
+
+    /** Repository home value. */
+    private static final String REPOSITORY_HOME = "target/repository_for_test";
+
+    /** Repository home. */
+    private File repositoryHome;
+
+    /**
+     * {@inheritDoc}
+     */
+    protected void setUp() throws Exception {
+        repositoryHome = new File(REPOSITORY_HOME);
+        repositoryHome.mkdirs();
+        FileUtils.cleanDirectory(repositoryHome);
+
+        super.setUp();
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    protected void tearDown() throws Exception {
+        if (repositoryHome != null) {
+            FileUtils.deleteDirectory(repositoryHome);
+        }
+        super.tearDown();
+    }
+
+    /**
+     * Create a cluster with no configured id. Verify that the generated id
+     * will be persisted.
+     *
+     * @throws Exception
+     */
+    public void testClusterIdGeneration() throws Exception {
+        BeanConfig bc = new BeanConfig(MemoryJournal.class.getName(), new Properties());
+        JournalConfig jc = new JournalConfig(bc);
+        ClusterConfig cc = new ClusterConfig(null, 0, jc);
+        SimpleClusterContext context = new SimpleClusterContext(cc, repositoryHome);
+
+        ClusterNode clusterNode = new ClusterNode();
+        clusterNode.init(context);
+
+        String id = ((MemoryJournal) clusterNode.getJournal()).getId();
+
+        clusterNode = new ClusterNode();
+        clusterNode.init(context);
+
+        assertEquals(id, ((MemoryJournal) clusterNode.getJournal()).getId());
+    }
+}

Propchange: jackrabbit/trunk/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/cluster/ClusterTest.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: jackrabbit/trunk/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/cluster/ClusterTest.java
------------------------------------------------------------------------------
    svn:keywords = Author Date Id Revision Rev Url

Added: jackrabbit/trunk/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/cluster/MemoryJournal.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/cluster/MemoryJournal.java?rev=695821&view=auto
==============================================================================
--- jackrabbit/trunk/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/cluster/MemoryJournal.java (added)
+++ jackrabbit/trunk/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/cluster/MemoryJournal.java Tue Sep 16 04:56:08 2008
@@ -0,0 +1,92 @@
+/*
+ * 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.jackrabbit.core.cluster;
+
+import org.apache.jackrabbit.core.journal.InstanceRevision;
+import org.apache.jackrabbit.core.journal.Journal;
+import org.apache.jackrabbit.core.journal.JournalException;
+import org.apache.jackrabbit.core.journal.RecordConsumer;
+import org.apache.jackrabbit.core.journal.RecordProducer;
+import org.apache.jackrabbit.spi.commons.namespace.NamespaceResolver;
+
+/**
+ * Memory-based journal, useful for testing purposes only.
+ */
+public class MemoryJournal implements Journal {
+
+    /** Revision. */
+    private InstanceRevision revision = new MemoryRevision();
+
+    /** Journal id. */
+    private String id;
+
+    /**
+     * Return this journal's id.
+     *
+     * @return id
+     */
+    public String getId() {
+        return id;
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    public InstanceRevision getInstanceRevision() throws JournalException {
+        return revision;
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    public RecordProducer getProducer(String identifier)
+            throws JournalException {
+
+        throw new JournalException("Not implemented");
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    public void init(String id, NamespaceResolver resolver)
+            throws JournalException {
+
+        this.id = id;
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    public void register(RecordConsumer consumer) throws JournalException {}
+
+    /**
+     * {@inheritDoc}
+     */
+    public void sync() throws JournalException {}
+
+    /**
+     * {@inheritDoc}
+     */
+    public boolean unregister(RecordConsumer consumer) {
+        return false;
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    public void close() {}
+}

Propchange: jackrabbit/trunk/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/cluster/MemoryJournal.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: jackrabbit/trunk/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/cluster/MemoryJournal.java
------------------------------------------------------------------------------
    svn:keywords = Author Date Id Revision Rev Url

Added: jackrabbit/trunk/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/cluster/MemoryRevision.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/cluster/MemoryRevision.java?rev=695821&view=auto
==============================================================================
--- jackrabbit/trunk/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/cluster/MemoryRevision.java (added)
+++ jackrabbit/trunk/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/cluster/MemoryRevision.java Tue Sep 16 04:56:08 2008
@@ -0,0 +1,48 @@
+/*
+ * 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.jackrabbit.core.cluster;
+
+import org.apache.jackrabbit.core.journal.InstanceRevision;
+import org.apache.jackrabbit.core.journal.JournalException;
+
+/**
+ * Memory-based revision, useful for testing purposes only.
+ */
+public class MemoryRevision implements InstanceRevision {
+
+    /** Revision. */
+    private long revision;
+
+    /**
+     * {@inheritDoc}
+     */
+    public long get() throws JournalException {
+        return revision;
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    public void set(long value) throws JournalException {
+        this.revision = value;
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    public void close() {}
+}

Propchange: jackrabbit/trunk/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/cluster/MemoryRevision.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: jackrabbit/trunk/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/cluster/MemoryRevision.java
------------------------------------------------------------------------------
    svn:keywords = Author Date Id Revision Rev Url

Added: jackrabbit/trunk/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/cluster/SimpleClusterContext.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/cluster/SimpleClusterContext.java?rev=695821&view=auto
==============================================================================
--- jackrabbit/trunk/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/cluster/SimpleClusterContext.java (added)
+++ jackrabbit/trunk/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/cluster/SimpleClusterContext.java Tue Sep 16 04:56:08 2008
@@ -0,0 +1,78 @@
+/*
+ * 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.jackrabbit.core.cluster;
+
+import java.io.File;
+
+import javax.jcr.RepositoryException;
+
+import org.apache.jackrabbit.core.config.ClusterConfig;
+import org.apache.jackrabbit.spi.commons.namespace.NamespaceResolver;
+
+/**
+ * Simple cluster context, providing only limited functionality.
+ */
+public class SimpleClusterContext implements ClusterContext {
+
+    /** Cluster config. */
+    private ClusterConfig cc;
+
+    /** Repository home. */
+    private File repositoryHome;
+
+    /**
+     * Create a new instance of this class.
+     *
+     * @param cc cluster config
+     * @param repHome repository home
+     */
+    public SimpleClusterContext(ClusterConfig cc, File repositoryHome) {
+        this.cc = cc;
+        this.repositoryHome = repositoryHome;
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    public ClusterConfig getClusterConfig() {
+        return cc;
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    public NamespaceResolver getNamespaceResolver() {
+        return null;
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    public File getRepositoryHome() {
+        return repositoryHome;
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    public void lockEventsReady(String workspace) throws RepositoryException {}
+
+    /**
+     * {@inheritDoc}
+     */
+    public void updateEventsReady(String workspace) throws RepositoryException {}
+}

Propchange: jackrabbit/trunk/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/cluster/SimpleClusterContext.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: jackrabbit/trunk/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/cluster/SimpleClusterContext.java
------------------------------------------------------------------------------
    svn:keywords = Author Date Id Revision Rev Url

Added: jackrabbit/trunk/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/cluster/TestAll.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/cluster/TestAll.java?rev=695821&view=auto
==============================================================================
--- jackrabbit/trunk/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/cluster/TestAll.java (added)
+++ jackrabbit/trunk/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/cluster/TestAll.java Tue Sep 16 04:56:08 2008
@@ -0,0 +1,44 @@
+/*
+ * 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.jackrabbit.core.cluster;
+
+import junit.framework.TestCase;
+import junit.framework.Test;
+import junit.framework.TestSuite;
+
+/**
+ * Collects all test classes setting up test data in the workspace. This test
+ * data is specific to Jackrabbit and will probably not work in other
+ * implementations.
+ */
+public class TestAll extends TestCase {
+
+    /**
+     * Returns a <code>Test</code> suite that executes all tests inside this
+     * package.
+     *
+     * @return a <code>Test</code> suite that executes all tests inside this
+     *         package.
+     */
+    public static Test suite() {
+        TestSuite suite = new TestSuite();
+
+        suite.addTestSuite(ClusterTest.class);
+
+        return suite;
+    }
+}

Propchange: jackrabbit/trunk/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/cluster/TestAll.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: jackrabbit/trunk/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/cluster/TestAll.java
------------------------------------------------------------------------------
    svn:keywords = Author Date Id Revision Rev Url