ORMappingConfig is now provided by the datasource component.
[utils] / system / spring / src / main / java / org / wamblee / system / spring / component / HibernateComponent.java
index 364b250f1b82b9b30fce55cadd3320fe2e320842..56fda2f0396e7a93fd9c6e6c3940a92e3cfa738a 100644 (file)
@@ -23,6 +23,7 @@ import java.util.Properties;
 import javax.sql.DataSource;
 
 import org.hibernate.SessionFactory;
+import org.hibernate.dialect.DerbyDialect;
 import org.hibernate.dialect.MySQLInnoDBDialect;
 import org.springframework.orm.hibernate3.HibernateTemplate;
 import org.springframework.transaction.PlatformTransactionManager;
@@ -31,12 +32,18 @@ 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;
+import org.wamblee.system.spring.component.ORMappingConfig.DatabaseType;
 
 public class HibernateComponent extends SpringComponent {
 
+    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}, 
@@ -45,8 +52,30 @@ public class HibernateComponent extends SpringComponent {
         Properties props = new Properties(); 
         addProperties(HIBERNATE_PROPS_KEY, props);
    
-        props.put("hibernate.dialect", MySQLInnoDBDialect.class.getName());
-        setProperty("hibernate.schemaupdate", "true");
+        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() {