import org.wamblee.system.spring.component.DatabaseTesterComponent;
 import org.wamblee.usermgt.UserAccessor;
 import org.wamblee.usermgt.hibernate.AuthorizationComponent;
-import org.wamblee.usermgt.hibernate.ExternalDatasourceComponent;
+import org.wamblee.usermgt.hibernate.DatabaseComponentFactory;
+import org.wamblee.usermgt.hibernate.DatasourceComponent;
 import org.wamblee.usermgt.hibernate.HibernateUserAdministrationTest;
 import org.wamblee.usermgt.hibernate.UserAdministrationComponent;
 
     protected void setUp() throws Exception {
 
         _container = new DefaultContainer("top");
-        _container.addComponent(new ExternalDatasourceComponent("datasource"));
+        DatabaseComponentFactory.addDatabaseConfig(_container);
+        _container.addComponent(new DatasourceComponent("datasource"));
         _container.addComponent("userAccessor", TestUserAccessor.class);
         _container.addComponent(new AuthorizationComponent("authorization",
                 true));
 
--- /dev/null
+/*
+ * Copyright 2008 the original author or authors.
+ * 
+ * Licensed 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.wamblee.usermgt.hibernate;
+
+import org.wamblee.io.ClassPathResource;
+import org.wamblee.system.components.PropertyComponent;
+import org.wamblee.system.core.Container;
+
+public class DatabaseComponentFactory {
+
+    public static void addDatabaseConfig(Container aContainer) {
+        try {
+            aContainer
+                    .addComponent(new PropertyComponent(
+                            "dbProps",
+                            new ClassPathResource(
+                                    "properties/test.org.wamblee.security.database.properties")));
+        } catch (Exception e) {
+            throw new RuntimeException("Could not add database configuration",
+                    e);
+        }
+    }
+
+}
 
 import org.springframework.jdbc.datasource.DriverManagerDataSource;
 import org.wamblee.system.core.AbstractComponent;
 import org.wamblee.system.core.DefaultProvidedInterface;
+import org.wamblee.system.core.DefaultRequiredInterface;
 import org.wamblee.system.core.ProvidedInterface;
 import org.wamblee.system.core.RequiredInterface;
 import org.wamblee.system.core.Scope;
 import org.wamblee.system.spring.component.ORMappingConfig;
 import org.wamblee.system.spring.component.ORMappingConfig.DatabaseType;
 
-public class ExternalDatasourceComponent extends AbstractComponent<DataSource> {
+public class DatasourceComponent extends AbstractComponent<DataSource> {
 
-    private static final String DATABASE_PROPERTIES = "properties/test.org.wamblee.security.database.properties";
-   
+    private static RequiredInterface PROPS = new DefaultRequiredInterface("dbprops", Properties.class);
     private static ProvidedInterface DATASOURCE =  new DefaultProvidedInterface("datasource",
             DataSource.class);
     private static ProvidedInterface ORM_CONFIG = new DefaultProvidedInterface("ormconfig",
             ORMappingConfig.class);
-
-    private Properties _dbProps;
    
-    public ExternalDatasourceComponent(String aName) throws IOException {
-        this(aName, loadProperties());
-    }
-
-    private static Properties loadProperties() throws IOException {
-        Properties dbProps = new Properties();
-        dbProps.load(new ClassPathResource(DATABASE_PROPERTIES)
-                .getInputStream());
-        return dbProps;
-    }
-    
-    public ExternalDatasourceComponent(String aName, Properties aProps) throws IOException {
-        super(aName);
-        _dbProps = aProps;
+    public DatasourceComponent(String aName) throws IOException {
+        super(aName); 
         
+        addRequiredInterface(PROPS);
         addProvidedInterface(DATASOURCE);
         addProvidedInterface(ORM_CONFIG);
     }
 
     @Override
     protected DataSource doStart(Scope aScope) {
+        Properties dbProps = aScope.getInterfaceImplementation(
+                PROPS.getProvider(), Properties.class);
         DriverManagerDataSource ds = new DriverManagerDataSource(
-                _dbProps.getProperty("database.driver"),
-                _dbProps.getProperty("database.url"), 
-                _dbProps.getProperty("database.username"),
-                _dbProps.getProperty("database.password"));
+                dbProps.getProperty("database.driver"),
+                dbProps.getProperty("database.url"), 
+                dbProps.getProperty("database.username"),
+                dbProps.getProperty("database.password"));
        addInterface(DATASOURCE, ds, aScope);
-       DatabaseType type = DatabaseType.valueOf(_dbProps.getProperty("database.type"));
+       DatabaseType type = DatabaseType.valueOf(dbProps.getProperty("database.type"));
        
        ORMappingConfig config = new ORMappingConfig(true, type);
        
 
     protected void setUp() throws Exception {
         
         _container = new DefaultContainer("top");
-        _container.addComponent(new ExternalDatasourceComponent("datasource"));
+        DatabaseComponentFactory.addDatabaseConfig(_container);
+        _container.addComponent(new DatasourceComponent("datasource"));
         _container.addComponent(new UserAdministrationComponent("admin", true));
         
         _container.addComponent("databaseTester", DatabaseTesterComponent.class);
 
  * 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.wamblee.usermgt.hibernate;
 
 import java.io.IOException;
 
+import org.wamblee.io.ClassPathResource;
 import org.wamblee.system.adapters.DefaultContainer;
+import org.wamblee.system.components.PropertyComponent;
 import org.wamblee.system.spring.component.DatabaseTesterComponent;
 import org.wamblee.system.spring.component.HibernateComponent;
 import org.wamblee.usermgt.UserGroupRepositoryComponent;
 
 /**
  * 
- * Test container for repository tests of user management.  
+ * Test container for repository tests of user management.
  * 
  * @author Erik Brakkee
  */
 public class UserMgtRepositoryTestContainer extends DefaultContainer {
 
-    public UserMgtRepositoryTestContainer(String aName) throws IOException { 
-        super(aName); 
-        addComponent(new ExternalDatasourceComponent("datasource"));
-        addComponent("mappingFiles",
-                new UsermgtHibernateMappingFiles());
+    public UserMgtRepositoryTestContainer(String aName) throws IOException {
+        super(aName);
+        DatabaseComponentFactory.addDatabaseConfig(this);
+        addComponent(new DatasourceComponent("datasource"));
+        addComponent("mappingFiles", new UsermgtHibernateMappingFiles());
         addComponent(new HibernateComponent("hibernate"));
         addComponent(new UserGroupRepositoryComponent("usersgroups"));
         addComponent("databaseTester", DatabaseTesterComponent.class);
 
     }
-    
+
 }