import javax.sql.DataSource;
-import org.hibernate.cache.EhCacheProvider;
+import org.springframework.orm.hibernate3.HibernateTemplate;
import org.springframework.transaction.PlatformTransactionManager;
+import org.wamblee.cache.EhCache;
import org.wamblee.system.adapters.DefaultContainer;
import org.wamblee.system.core.Component;
import org.wamblee.system.core.DefaultProvidedInterface;
import org.wamblee.system.core.DefaultRequiredInterface;
+import org.wamblee.system.core.ProvidedInterface;
+import org.wamblee.system.core.Scope;
import org.wamblee.usermgt.hibernate.UsermgtHibernateMappingFiles;
public class UserAdministrationComponent extends DefaultContainer {
+ private ProvidedInterface TRANSACTION_MGR = new DefaultProvidedInterface(
+ "transactionManager", PlatformTransactionManager.class);
+ private ProvidedInterface USER_CACHE = new DefaultProvidedInterface(
+ "userCache", EhCache.class);
+ private ProvidedInterface HIBERNATE_TEMPLATE = new DefaultProvidedInterface(
+ "hibernateTemplate", HibernateTemplate.class);
+ private ProvidedInterface USER_MGT = new DefaultProvidedInterface(
+ "usermgt", UserAdministration.class);
+
+ private Component<?> _hibernate;
+ private Component<?> _repository;
+ private Component<?> _usermgt;
+
+ private boolean _exposeInternals;
+
public UserAdministrationComponent(String aName, boolean aExposeInternals)
throws IOException {
super(aName);
+ _exposeInternals = aExposeInternals;
+
addComponent("mappingFiles", new UsermgtHibernateMappingFiles());
- Component<?> hibernate = new HibernateComponent("hibernate");
- addComponent(hibernate);
- Component<?> repository = new UserGroupRepositoryComponent(
- "usersgroups");
- addComponent(repository);
+ _hibernate = new HibernateComponent("hibernate");
+ addComponent(_hibernate);
+
+ _repository = new UserGroupRepositoryComponent("usersgroups");
+ addComponent(_repository);
- Component<?> usermgt = new UserAdministrationLightComponent(
- "usermgtlight");
- addComponent(usermgt);
+ _usermgt = new UserAdministrationLightComponent("usermgtlight");
+ addComponent(_usermgt);
addRequiredInterface(new DefaultRequiredInterface("datasource",
DataSource.class));
if (aExposeInternals) {
- addProvidedInterface(new DefaultProvidedInterface(
- "transactionManager", PlatformTransactionManager.class));
- addProvidedInterface(new DefaultProvidedInterface("userCache",
- EhCacheProvider.class));
+ addProvidedInterface(TRANSACTION_MGR);
+ addProvidedInterface(USER_CACHE);
+ addProvidedInterface(HIBERNATE_TEMPLATE);
+ }
+ addProvidedInterface(USER_MGT);
+ }
+
+ @Override
+ protected Scope doStart(Scope aExternalScope) {
+
+ Scope scope = super.doStart(aExternalScope);
+ if (_exposeInternals) {
+ addInterface(TRANSACTION_MGR, getInterfaceImplementation(
+ TRANSACTION_MGR, _hibernate, scope), aExternalScope);
+ addInterface(USER_CACHE, getInterfaceImplementation(USER_CACHE,
+ _repository, scope), aExternalScope);
+ addInterface(HIBERNATE_TEMPLATE, getInterfaceImplementation(
+ HIBERNATE_TEMPLATE, _hibernate, scope), aExternalScope);
}
- addProvidedInterface(new DefaultProvidedInterface("usermgt",
- UserAdministration.class));
+ addInterface(USER_MGT, getInterfaceImplementation(USER_MGT, _usermgt,
+ scope), aExternalScope);
+ return scope;
+ }
+
+ private Object getInterfaceImplementation(ProvidedInterface aInterface,
+ Component aSource, Scope aScope) {
+ for (ProvidedInterface provided : aSource.getProvidedInterfaces()) {
+ if (provided.equals(aInterface)) {
+ return aScope
+ .getInterfaceImplementation(provided, Object.class);
+ }
+ }
+ throw new IllegalArgumentException("Provided interface '" + aInterface
+ + "' not found in component '" + aSource + "'");
}
}
package org.wamblee.usermgt.hibernate;
+import java.io.Serializable;
import java.lang.reflect.Method;
import java.sql.SQLException;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.wamblee.cache.Cache;
+import org.wamblee.cache.EhCache;
import org.wamblee.general.BeanKernel;
+import org.wamblee.system.adapters.DefaultContainer;
+import org.wamblee.system.adapters.ObjectConfiguration;
+import org.wamblee.system.core.Scope;
+import org.wamblee.system.spring.DatabaseTesterComponent;
import org.wamblee.test.spring.TestTransactionCallbackWithoutResult;
import org.wamblee.usermgt.UserAdministration;
+import org.wamblee.usermgt.UserAdministrationComponent;
import org.wamblee.usermgt.UserAdministrationImplTest;
import org.wamblee.usermgt.UsermgtSpringConfigFiles;
private static final Log LOG = LogFactory.getLog(HibernateUserAdministrationTest.class);
- public HibernateUserAdministrationTest() {
- super(UsermgtSpringConfigFiles.class,
- UsermgtHibernateMappingFiles.class);
- }
+ private DefaultContainer _container;
+ private Scope _scope;
+
+ private DatabaseTesterComponent _databaseTester;
+ private EhCache<Serializable, Serializable> _userCache;
+ private UserAdministration _userAdmin;
+
/* (non-Javadoc)
* @see org.wamblee.usermgt.UserAdministrationImplTest#setUp()
*/
@Override
protected void setUp() throws Exception {
+
+ _container = new DefaultContainer("top");
+ _container.addComponent(new ExternalDatasourceComponent("datasource"));
+ _container.addComponent(new UserAdministrationComponent("admin", true));
+
+ _container.addComponent("databaseTester", DatabaseTesterComponent.class);
+
+ ObjectConfiguration config = new ObjectConfiguration(
+ HibernateUserAdministrationTest.class);
+ config.getSetterConfig().clear().add(
+ "userCache").add("databaseTester").add("userAdmin");
+ _container.addComponent("testcase", this, config);
+
+ _scope = _container.start();
+
+ _databaseTester.cleanDatabase();
+
super.setUp();
clearUserCache();
}
+
+ public void setUserCache(EhCache<Serializable, Serializable> aUserCache) {
+ _userCache = aUserCache;
+ }
+
+ public void setDatabaseTester(DatabaseTesterComponent aDatabaseTester) {
+ _databaseTester = aDatabaseTester;
+ }
+
+ public void setUserAdmin(UserAdministration aUserAdmin) {
+ _userAdmin = aUserAdmin;
+ }
/*
* (non-Javadoc)
*/
@Override
protected UserAdministration createAdmin() {
- return BeanKernel.getBeanFactory().find(UserAdministration.class);
+ return _userAdmin;
}
public void testAllTestsInASeparateTransaction() throws SQLException {
Method[] methods = UserAdministrationImplTest.class.getMethods();
for (final Method method : methods) {
if (method.getName().startsWith("test")) {
- cleanDatabase();
+ _databaseTester.cleanDatabase();
clearUserCache();
- executeTransaction(new TestTransactionCallbackWithoutResult() {
+ _databaseTester.executeTransaction(new TestTransactionCallbackWithoutResult() {
public void execute() throws Exception {
LOG.info("Running test " + method.getName());
try {
*
*/
private void clearUserCache() {
- BeanKernel.getBeanFactory().find("userCache", Cache.class).clear();
+ _userCache.clear();
}
}