Index: jackrabbit-core/src/test/java/org/apache/jackrabbit/core/config/DataSourceConfigTest.java =================================================================== --- jackrabbit-core/src/test/java/org/apache/jackrabbit/core/config/DataSourceConfigTest.java (revision 887673) +++ jackrabbit-core/src/test/java/org/apache/jackrabbit/core/config/DataSourceConfigTest.java (working copy) @@ -34,12 +34,10 @@ public void setUp() { cfg = new DataSourceConfig(); minimalProps = new Properties(); - minimalProps.put(DataSourceConfig.LOGICAL_NAME, "ds"); minimalProps.put(DataSourceConfig.DRIVER, "org.apache.derby.jdbc.EmbeddedDriver"); minimalProps.put(DataSourceConfig.URL, "url"); minimalProps.put(DataSourceConfig.DB_TYPE, "dbType"); minimalProps2 = new Properties(); - minimalProps2.put(DataSourceConfig.LOGICAL_NAME, "ds2"); minimalProps2.put(DataSourceConfig.DRIVER, "org.apache.derby.jdbc.EmbeddedDriver"); minimalProps2.put(DataSourceConfig.URL, "url2"); minimalProps2.put(DataSourceConfig.DB_TYPE, "dbType2"); @@ -50,7 +48,7 @@ } public void testMinimalRegularConfig() throws ConfigurationException { - cfg.addDataSourceDefinition(minimalProps); + cfg.addDataSourceDefinition("ds", minimalProps); DataSourceDefinition def = cfg.getDefinitions().get(0); assertEquals("ds", def.getLogicalName()); assertEquals("org.apache.derby.jdbc.EmbeddedDriver", def.getDriver()); @@ -64,15 +62,15 @@ } public void testMultipleDefs() throws ConfigurationException { - cfg.addDataSourceDefinition(minimalProps); - cfg.addDataSourceDefinition(minimalProps2); + cfg.addDataSourceDefinition("ds1", minimalProps); + cfg.addDataSourceDefinition("ds2", minimalProps2); assertEquals(2, cfg.getDefinitions().size()); } public void testTooMinimalConfig() { try { minimalProps.remove(DataSourceConfig.URL); - cfg.addDataSourceDefinition(minimalProps); + cfg.addDataSourceDefinition("ds", minimalProps); fail(); } catch (ConfigurationException e) { // expected @@ -82,7 +80,7 @@ public void testInvalidProperty() { try { minimalProps.put("unknown property", "value"); - cfg.addDataSourceDefinition(minimalProps); + cfg.addDataSourceDefinition("ds", minimalProps); fail(); } catch (ConfigurationException e) { // expected @@ -92,7 +90,7 @@ public void testUnparseableProperty() { try { minimalProps.put(DataSourceConfig.MAX_POOL_SIZE, "no int"); - cfg.addDataSourceDefinition(minimalProps); + cfg.addDataSourceDefinition("ds", minimalProps); fail(); } catch (ConfigurationException e) { // expected @@ -100,16 +98,33 @@ } public void testDuplicateLogicalName() throws ConfigurationException { - cfg.addDataSourceDefinition(minimalProps); - minimalProps2.put(DataSourceConfig.LOGICAL_NAME, "ds"); + cfg.addDataSourceDefinition("ds", minimalProps); try { - cfg.addDataSourceDefinition(minimalProps2); + cfg.addDataSourceDefinition("ds", minimalProps2); fail(); } catch (ConfigurationException e) { // expected } } - + + public void testEmptyLogicalName() throws ConfigurationException { + try { + cfg.addDataSourceDefinition(" ", minimalProps); + fail(); + } catch (ConfigurationException e) { + // expected + } + } + + public void testNullLogicalName() throws ConfigurationException { + try { + cfg.addDataSourceDefinition(null, minimalProps); + fail(); + } catch (ConfigurationException e) { + // expected + } + } + /** * It only makes sense to configure driver, url, username, password and dbType for * a DataSource which is to be obtained from JNDI. @@ -120,7 +135,7 @@ minimalProps.put(DataSourceConfig.DRIVER, "javax.naming.InitialContext"); minimalProps.put(DataSourceConfig.MAX_POOL_SIZE, "10"); try { - cfg.addDataSourceDefinition(minimalProps); + cfg.addDataSourceDefinition("ds", minimalProps); fail(); } catch (ConfigurationException e) { // expected Index: jackrabbit-core/src/test/java/org/apache/jackrabbit/core/util/db/ConnectionFactoryTest.java =================================================================== --- jackrabbit-core/src/test/java/org/apache/jackrabbit/core/util/db/ConnectionFactoryTest.java (revision 887673) +++ jackrabbit-core/src/test/java/org/apache/jackrabbit/core/util/db/ConnectionFactoryTest.java (working copy) @@ -168,13 +168,12 @@ final String name = "some random name to not interfere with integration tests..."; DataSourceConfig dsc = new DataSourceConfig(); Properties props = new Properties(); - props.put(DataSourceConfig.LOGICAL_NAME, name); props.put(DataSourceConfig.DRIVER, DRIVER); props.put(DataSourceConfig.URL, url); props.put(DataSourceConfig.DB_TYPE, "dbType"); props.put(DataSourceConfig.MAX_POOL_SIZE, Integer.toString(maxCons)); props.put(DataSourceConfig.VALIDATION_QUERY, validationQuery); - dsc.addDataSourceDefinition(props); + dsc.addDataSourceDefinition(name, props); connectionFactory.registerDataSources(dsc); return name; } Index: jackrabbit-core/src/test/repository-descriptor-overlay/repository.xml =================================================================== --- jackrabbit-core/src/test/repository-descriptor-overlay/repository.xml (revision 887673) +++ jackrabbit-core/src/test/repository-descriptor-overlay/repository.xml (working copy) @@ -15,14 +15,13 @@ See the License for the specific language governing permissions and limitations under the License. --> - + - - + Index: jackrabbit-core/src/main/java/org/apache/jackrabbit/core/config/DataSourceConfig.java =================================================================== --- jackrabbit-core/src/main/java/org/apache/jackrabbit/core/config/DataSourceConfig.java (revision 887673) +++ jackrabbit-core/src/main/java/org/apache/jackrabbit/core/config/DataSourceConfig.java (working copy) @@ -29,8 +29,6 @@ */ public class DataSourceConfig { - public static final String LOGICAL_NAME = "logicalName"; - public static final String DRIVER = "driver"; public static final String URL = "url"; @@ -53,8 +51,8 @@ * @param props the properties (key and values must be strings) * @throws ConfigurationException on error */ - public void addDataSourceDefinition(Properties props) throws ConfigurationException { - DataSourceDefinition def = new DataSourceDefinition(props); + public void addDataSourceDefinition(String name, Properties props) throws ConfigurationException { + DataSourceDefinition def = new DataSourceDefinition(name, props); for (DataSourceDefinition existing : defs) { if (existing.getLogicalName().equals(def.getLogicalName())) { throw new ConfigurationException("Duplicate logicalName for a DataSource: " @@ -77,11 +75,10 @@ public static final class DataSourceDefinition { private static final List allPropNames = - Arrays - .asList(LOGICAL_NAME, DRIVER, URL, USER, PASSWORD, DB_TYPE, VALIDATION_QUERY, MAX_POOL_SIZE); + Arrays.asList(DRIVER, URL, USER, PASSWORD, DB_TYPE, VALIDATION_QUERY, MAX_POOL_SIZE); private static final List allJndiPropNames = - Arrays.asList(LOGICAL_NAME, DRIVER, URL, USER, PASSWORD, DB_TYPE); + Arrays.asList(DRIVER, URL, USER, PASSWORD, DB_TYPE); private final String logicalName; @@ -104,11 +101,12 @@ * throws a {@link ConfigurationException} when the set of properties does not * satisfy some validity constraints. * + * @param name the logical name of the data source * @param props the properties (string keys and values) * @throws ConfigurationException on error */ - public DataSourceDefinition(Properties props) throws ConfigurationException { - this.logicalName = (String) props.getProperty(LOGICAL_NAME); + public DataSourceDefinition(String name, Properties props) throws ConfigurationException { + this.logicalName = name; this.driver = (String) props.getProperty(DRIVER); this.url = (String) props.getProperty(URL); this.user = (String) props.getProperty(USER); @@ -126,7 +124,7 @@ private void verify(Properties props) throws ConfigurationException { // Check required properties - if (logicalName == null || "".equals(logicalName)) { + if (logicalName == null || "".equals(logicalName.trim())) { throw new ConfigurationException("DataSource logical name must not be null or empty"); } if (driver == null || "".equals(driver)) { Index: jackrabbit-core/src/main/java/org/apache/jackrabbit/core/config/RepositoryConfigurationParser.java =================================================================== --- jackrabbit-core/src/main/java/org/apache/jackrabbit/core/config/RepositoryConfigurationParser.java (revision 887673) +++ jackrabbit-core/src/main/java/org/apache/jackrabbit/core/config/RepositoryConfigurationParser.java (working copy) @@ -916,8 +916,9 @@ if (child2.getNodeType() == Node.ELEMENT_NODE && DATASOURCE_ELEMENT.equals(child2.getNodeName())) { Element dsdef = (Element) child2; + String logicalName = getAttribute(dsdef, "name"); Properties props = parseParameters(dsdef); - dsc.addDataSourceDefinition(props); + dsc.addDataSourceDefinition(logicalName, props); } } } Index: jackrabbit-core/src/main/resources/org/apache/jackrabbit/core/config/repository-2.0-elements.dtd =================================================================== --- jackrabbit-core/src/main/resources/org/apache/jackrabbit/core/config/repository-2.0-elements.dtd (revision 887673) +++ jackrabbit-core/src/main/resources/org/apache/jackrabbit/core/config/repository-2.0-elements.dtd (working copy) @@ -16,9 +16,16 @@ --> + "DataSources|Cluster|FileSystem|DataStore|Security|Workspaces|Workspace|Versioning|SearchIndex|RepositoryLockMechanism"> + + + + +