import java.util.HashMap;
import java.util.Map;
import java.util.Properties;
-import java.util.TreeMap;
import javax.sql.DataSource;
import org.hibernate.SessionFactory;
-import org.springframework.core.io.ClassPathResource;
+import org.hibernate.dialect.DerbyDialect;
+import org.hibernate.dialect.MySQLInnoDBDialect;
import org.springframework.orm.hibernate3.HibernateTemplate;
import org.springframework.transaction.PlatformTransactionManager;
import org.wamblee.persistence.hibernate.HibernateMappingFiles;
+import org.wamblee.system.components.ORMappingConfig;
+import org.wamblee.system.components.ORMappingConfig.DatabaseType;
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.SpringComponent;
public class HibernateComponent extends SpringComponent {
- private static final String HIBERNATE_PROPERTIES = "properties/org.wamblee.system.spring.component.hibernate.properties";
+ private static final String HIBERNATE_DIALECT_PROP = "hibernate.dialect";
+ private static final String HIBERNATE_SCHEMAUPDATE_PROP = "hibernate.schemaupdate";
+ private static final String HIBERNATE_PROPS_KEY = "hibernateProperties";
private static final String HIBERNATE_SPRING_CONFIG = "spring/org.wamblee.system.spring.component.hibernate.xml";
+
+ private final RequiredInterface CONFIG = new DefaultRequiredInterface("config", ORMappingConfig.class);
public HibernateComponent(String aName) throws IOException {
super(aName, new String[] { HIBERNATE_SPRING_CONFIG},
createProvided(), createRequired());
Properties props = new Properties();
- props.load(new ClassPathResource(HIBERNATE_PROPERTIES).getInputStream());
- addProperties(props);
+ addProperties(HIBERNATE_PROPS_KEY, props);
+
+ addRequiredInterface(CONFIG);
+ }
+
+ @Override
+ protected Scope doStart(Scope aExternalScope) {
+
+ ORMappingConfig config = aExternalScope.getInterfaceImplementation(CONFIG.getProvider(), ORMappingConfig.class);
+ setProperty(HIBERNATE_SCHEMAUPDATE_PROP, "" + config.isSchemaUpdate());
+
+ DatabaseType db = config.getType();
+ String dialect = db.handleCases(new DatabaseType.Switch<String>() {
+ @Override
+ public String handleMySqlInnoDb() {
+ return MySQLInnoDBDialect.class.getName();
+ }
+ @Override
+ public String handleDerby() {
+ return DerbyDialect.class.getName();
+ }
+ });
+ getHibernateProperties().put(HIBERNATE_DIALECT_PROP, MySQLInnoDBDialect.class.getName());
+
+
+ return super.doStart(aExternalScope);
+ }
+
+ private Properties getHibernateProperties() {
+ return getProperties(HIBERNATE_PROPS_KEY);
}
private static Map<RequiredInterface, String> createRequired() {