From d809ea34f7e22c62c11add16b1216be48c921754 Mon Sep 17 00:00:00 2001 From: "m.doering" Date: Tue, 4 Mar 2008 15:07:06 +0000 Subject: [PATCH] --- .gitattributes | 1 + .../api/application/CdmApplicationUtils.java | 12 -- .../etaxonomy/cdm/database/CdmDataSource.java | 130 ++++++++---------- .../eu/etaxonomy/cdm/database/HBM2DDL.java | 20 +++ .../eu/etaxonomy/cdm/persistence.xml | 1 - 5 files changed, 78 insertions(+), 86 deletions(-) create mode 100644 cdmlib-persistence/src/main/java/eu/etaxonomy/cdm/database/HBM2DDL.java diff --git a/.gitattributes b/.gitattributes index 106d7f13e7..abf1ce9753 100644 --- a/.gitattributes +++ b/.gitattributes @@ -242,6 +242,7 @@ cdmlib-persistence/src/main/java/eu/etaxonomy/cdm/database/CdmDataSource.java -t cdmlib-persistence/src/main/java/eu/etaxonomy/cdm/database/CdmTermInitializer.java -text cdmlib-persistence/src/main/java/eu/etaxonomy/cdm/database/DataSourceNotFoundException.java -text cdmlib-persistence/src/main/java/eu/etaxonomy/cdm/database/DatabaseTypeEnum.java -text +cdmlib-persistence/src/main/java/eu/etaxonomy/cdm/database/HBM2DDL.java -text cdmlib-persistence/src/main/java/eu/etaxonomy/cdm/database/LocalHsqldb.java -text cdmlib-persistence/src/main/java/eu/etaxonomy/cdm/database/VocabularyStoreImpl.java -text cdmlib-persistence/src/main/java/eu/etaxonomy/cdm/database/types/AbstractDatabaseType.java -text diff --git a/cdmlib-persistence/src/main/java/eu/etaxonomy/cdm/api/application/CdmApplicationUtils.java b/cdmlib-persistence/src/main/java/eu/etaxonomy/cdm/api/application/CdmApplicationUtils.java index cb25d4e9dd..f545f1b7a3 100644 --- a/cdmlib-persistence/src/main/java/eu/etaxonomy/cdm/api/application/CdmApplicationUtils.java +++ b/cdmlib-persistence/src/main/java/eu/etaxonomy/cdm/api/application/CdmApplicationUtils.java @@ -53,8 +53,6 @@ public class CdmApplicationUtils { static private void copyResources(File directory){ copyResource(directory, CdmDataSource.DATASOURCE_FILE_NAME); - copyResource(directory, CdmDataSource.SESSION_FACTORY_FILE); - copyResource(directory, CdmDataSource.APPLICATION_CONTEXT_FILE_NAME); } @@ -75,15 +73,5 @@ public class CdmApplicationUtils { } } - - /** - * Returns the string to the applicationContext.xml to be used. - * @return - */ - public static String getApplicationContextString(){ - String result = "file:" + CdmApplicationUtils.getWritableResourceDir() + File.separator + CdmDataSource.APPLICATION_CONTEXT_FILE_NAME; - return result; - } - } diff --git a/cdmlib-persistence/src/main/java/eu/etaxonomy/cdm/database/CdmDataSource.java b/cdmlib-persistence/src/main/java/eu/etaxonomy/cdm/database/CdmDataSource.java index 44ea56fd91..b0913e045c 100644 --- a/cdmlib-persistence/src/main/java/eu/etaxonomy/cdm/database/CdmDataSource.java +++ b/cdmlib-persistence/src/main/java/eu/etaxonomy/cdm/database/CdmDataSource.java @@ -6,13 +6,21 @@ import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.FilenameFilter; import java.util.ArrayList; +import java.util.HashMap; import java.util.List; +import java.util.Map; +import java.util.Properties; import org.apache.log4j.Logger; import org.jdom.Attribute; import org.jdom.Document; import org.jdom.Element; import org.jdom.output.Format; +import org.springframework.beans.MutablePropertyValues; +import org.springframework.beans.factory.config.BeanDefinition; +import org.springframework.beans.factory.config.PropertiesFactoryBean; +import org.springframework.beans.factory.support.AbstractBeanDefinition; +import org.springframework.beans.factory.support.RootBeanDefinition; import org.springframework.jdbc.datasource.DriverManagerDataSource; import eu.etaxonomy.cdm.api.application.CdmApplicationUtils; @@ -35,9 +43,7 @@ public class CdmDataSource { private static final Logger logger = Logger.getLogger(CdmDataSource.class); public static final String DATASOURCE_BEAN_POSTFIX = "DataSource"; - public static final String SESSION_FACTORY_FILE = "sessionfactory.xml"; public final static String DATASOURCE_FILE_NAME = "cdm.datasource.xml"; - public final static String APPLICATION_CONTEXT_FILE_NAME = "applicationContext.xml"; private final static Format format = Format.getPrettyFormat(); //name @@ -112,57 +118,6 @@ public class CdmDataSource { - /** - * Updates the session factory config file for using this database. - * Writes the datasource property and the dialect property into the session factory. - * @param hibernateHbm2ddlAuto value for the hibernate property hibernate.hbm2dll.auto . If null the properties is not changed. Possible values are 'validate', 'create', 'update' and 'create-drop'. - * @return true if successful. - */ - public boolean updateSessionFactory(String hibernateHbm2ddlAuto){ - Element root = getRoot(getSessionFactoryInputStream()); - if (root == null){ - return false; - } - //get sessionFactory bean - Element sessionFactoryBean = getFirstAttributedChild(root, "bean", "id", "sessionFactory"); - //sessionFactory must exist - if (sessionFactoryBean == null){ - return false; - } - - //set dataSource property - Element dataSourceProperty = getFirstAttributedChild(sessionFactoryBean, "property", "name", "dataSource"); - if (dataSourceProperty == null){ - dataSourceProperty = insertXmlRefProperty(sessionFactoryBean, "dataSource", getBeanName(this.dataSourceName)); - } - Attribute attrRef = dataSourceProperty.getAttribute("ref"); - if (attrRef == null){ - dataSourceProperty.setAttribute("ref", getBeanName(this.dataSourceName)); - }else{ - attrRef.setValue(getBeanName(this.dataSourceName)); - } - - //set dialect - Element elHibernateProperties = getOrAddChild(sessionFactoryBean, "property", "name", "hibernateProperties"); - Element props = getOrAddChild(elHibernateProperties, "props", null, null); - Element elDialectProp = getOrAddChild(props, "prop", "key", "hibernate.dialect"); - elDialectProp.setText(this.getDatabaseType().getHibernateDialect()); - - //set hibernateHbm2ddlAuto - if (hibernateHbm2ddlAuto != null){ - if (hibernateHbm2ddlAuto != "validate" && hibernateHbm2ddlAuto != "create" && hibernateHbm2ddlAuto != "update " && hibernateHbm2ddlAuto != "create-drop" ){ - logger.warn("Invalid value " + hibernateHbm2ddlAuto + " for property hibernate.hbm2ddl.auto"); - } - Element elHbm2ddlAutoProp = getOrAddChild(props, "prop", "key", "hibernate.hbm2ddl.auto"); - elHbm2ddlAutoProp.setText(hibernateHbm2ddlAuto); - } - - //save - saveToXml(root.getDocument(), getSessionFactoryOutputStream() , format ); - return true; - } - - /** * Returns the database type of the data source. * @return the database type of the data source. Null if the bean or the driver class property does not exist or the driver class is unknown. @@ -184,6 +139,35 @@ public class CdmDataSource { } } + public BeanDefinition getDatasourceBean(){ + AbstractBeanDefinition bd = new RootBeanDefinition(DriverManagerDataSource.class); + DatabaseTypeEnum dbtype = getDatabaseType(); + //TODO: read real values + MutablePropertyValues props = new MutablePropertyValues(); + props.addPropertyValue("driverClassName", dbtype.getDriverClassName()); + props.addPropertyValue("url", "jdbc:mysql://192.168.2.10/cdm_build"); + props.addPropertyValue("username", "edit"); + props.addPropertyValue("password", "wp5"); + bd.setPropertyValues(props); + return bd; + } + public BeanDefinition getHibernatePropertiesBean(HBM2DDL hbm2dll, boolean showSql){ + DatabaseTypeEnum dbtype = getDatabaseType(); + AbstractBeanDefinition bd = new RootBeanDefinition(PropertiesFactoryBean.class); + MutablePropertyValues hibernateProps = new MutablePropertyValues(); + + Properties props = new Properties(); + props.setProperty("hibernate.hbm2ddl.auto", hbm2dll.getHibernateString()); + props.setProperty("hibernate.dialect", dbtype.getHibernateDialect()); + props.setProperty("hibernate.cache.provider_class", "org.hibernate.cache.NoCacheProvider"); + props.setProperty("hibernate.show_sql", String.valueOf(showSql)); + props.setProperty("hibernate.format_sql", String.valueOf(false)); + + hibernateProps.addPropertyValue("properties",props); + bd.setPropertyValues(hibernateProps); + return bd; + } + /** * Tests existing of the datsource in the according config file. * @return true if a datasource with the given name exists in the according datasource config file. @@ -382,26 +366,26 @@ public class CdmDataSource { return f.getPath(); } - /** - * Returns the session factory config file input stream. - * @return session factory config file - */ - private FileInputStream getSessionFactoryInputStream(){ - String dir = getResourceDirectory(); - File file = new File(dir + File.separator + SESSION_FACTORY_FILE); - return fileInputStream(file); - } - - /** - * Returns the session factory output stream. - * @return - */ - private FileOutputStream getSessionFactoryOutputStream(){ - String dir = getResourceDirectory(); - File file = new File(dir + File.separator + SESSION_FACTORY_FILE); - return fileOutputStream(file); - } - +// /** +// * Returns the session factory config file input stream. +// * @return session factory config file +// */ +// private FileInputStream get22SessionFactoryInputStream(){ +// String dir = getResourceDirectory(); +// File file = new File(dir + File.separator + SESSION_FACTORY_FILE); +// return fileInputStream(file); +// } +// +// /** +// * Returns the session factory output stream. +// * @return +// */ +// private FileOutputStream get22SessionFactoryOutputStream(){ +// String dir = getResourceDirectory(); +// File file = new File(dir + File.separator + SESSION_FACTORY_FILE); +// return fileOutputStream(file); +// } +// static private FileInputStream fileInputStream(File file){ try { diff --git a/cdmlib-persistence/src/main/java/eu/etaxonomy/cdm/database/HBM2DDL.java b/cdmlib-persistence/src/main/java/eu/etaxonomy/cdm/database/HBM2DDL.java new file mode 100644 index 0000000000..a517be2d25 --- /dev/null +++ b/cdmlib-persistence/src/main/java/eu/etaxonomy/cdm/database/HBM2DDL.java @@ -0,0 +1,20 @@ +package eu.etaxonomy.cdm.database; + +public enum HBM2DDL{ + VALIDATE, + UPDATE, + CREATE; + + public String getHibernateString(){ + switch (this){ + case VALIDATE: + return "validate"; + case UPDATE: + return "update"; + case CREATE: + return "create"; + default: + throw new IllegalArgumentException( "Unknown enumeration type" ); + } + } +} \ No newline at end of file diff --git a/cdmlib-persistence/src/main/resources/eu/etaxonomy/cdm/persistence.xml b/cdmlib-persistence/src/main/resources/eu/etaxonomy/cdm/persistence.xml index c9c2368f6d..c2dcdea41d 100644 --- a/cdmlib-persistence/src/main/resources/eu/etaxonomy/cdm/persistence.xml +++ b/cdmlib-persistence/src/main/resources/eu/etaxonomy/cdm/persistence.xml @@ -19,7 +19,6 @@ -- 2.34.1