2 * Copyright (C) 2007 EDIT
3 * European Distributed Institute of Taxonomy
4 * http://www.e-taxonomy.eu
6 * The contents of this file are subject to the Mozilla Public License Version 1.1
7 * See LICENSE.TXT at the top of this package for the full license terms.
10 package eu
.etaxonomy
.cdm
.database
;
12 import java
.util
.Enumeration
;
13 import java
.util
.Properties
;
15 import org
.hibernate
.cache
.CacheProvider
;
16 import org
.hibernate
.cache
.NoCacheProvider
;
17 import org
.springframework
.beans
.MutablePropertyValues
;
18 import org
.springframework
.beans
.factory
.config
.BeanDefinition
;
19 import org
.springframework
.beans
.factory
.config
.PropertiesFactoryBean
;
20 import org
.springframework
.beans
.factory
.support
.AbstractBeanDefinition
;
21 import org
.springframework
.beans
.factory
.support
.RootBeanDefinition
;
23 import eu
.etaxonomy
.cdm
.database
.DatabaseTypeEnum
;
24 import eu
.etaxonomy
.cdm
.database
.DbSchemaValidation
;
30 public class CdmDataSource
implements ICdmDataSource
{
32 private DatabaseTypeEnum dbType
;
33 private String server
;
34 private String database
;
35 private int port
= -1;
36 private String username
;
37 private String password
;
38 private boolean isLazy
= true;
39 private String initMethodName
= null;
40 private String destroyMethodName
= null;
41 private DbSchemaValidation hbm2dll
= DbSchemaValidation
.VALIDATE
;
42 private boolean showSql
= false;
43 private boolean formatSql
= false;
44 private Class
<?
extends CacheProvider
> cacheProviderClass
= NoCacheProvider
.class;;
46 static public CdmDataSource
NewMySqlInstance(String server
, String database
, String username
, String password
){
47 return new CdmDataSource(DatabaseTypeEnum
.MySQL
, server
, database
, -1, username
, password
);
50 static public CdmDataSource
NewMySqlInstance(String server
, String database
, int port
, String username
, String password
){
51 return new CdmDataSource(DatabaseTypeEnum
.MySQL
, server
, database
, port
, username
, password
);
54 static public CdmDataSource
NewSqlServer2005Instance(String server
, String database
, String username
, String password
){
55 return new CdmDataSource(DatabaseTypeEnum
.SqlServer2005
, server
, database
, -1, username
, password
);
58 static public CdmDataSource
NewSqlServer2005Instance(String server
, String database
, int port
, String username
, String password
){
59 return new CdmDataSource(DatabaseTypeEnum
.SqlServer2005
, server
, database
, port
, username
, password
);
69 private CdmDataSource(DatabaseTypeEnum dbType
, String server
, String database
, int port
, String username
, String password
) {
73 this.database
= database
;
75 this.username
= username
;
76 this.password
= password
;
81 * @see eu.etaxonomy.cdm.database.ICdmDataSource#getName()
83 public String
getName() {
88 * @see eu.etaxonomy.cdm.api.application.ICdmDataSource#getDatasourceBean()
90 public BeanDefinition
getDatasourceBean(){
91 AbstractBeanDefinition bd
= new RootBeanDefinition(dbType
.getDriverManagerDataSourceClass());
93 bd
.setLazyInit(isLazy
);
94 if (initMethodName
!= null && ! initMethodName
.trim().equals("") ){
95 bd
.setInitMethodName(initMethodName
);
97 if (destroyMethodName
!= null && ! destroyMethodName
.trim().equals("") ){
98 bd
.setInitMethodName(destroyMethodName
);
102 MutablePropertyValues props
= new MutablePropertyValues();
103 Properties persistentProperties
= getDatasourceProperties();
104 Enumeration
<String
> keys
= (Enumeration
)persistentProperties
.keys();
105 while (keys
.hasMoreElements()){
106 String key
= (String
)keys
.nextElement();
107 props
.addPropertyValue(key
, persistentProperties
.getProperty(key
));
110 bd
.setPropertyValues(props
);
115 * Returns the list of properties that are defined in the datasource
118 private Properties
getDatasourceProperties(){
119 Properties result
= new Properties();
120 result
.put("driverClassName", dbType
.getDriverClassName());
121 String connectionString
= ( port
> 1 ? dbType
.getConnectionString(server
, database
, port
) : dbType
.getConnectionString(server
, database
));
122 result
.put("url", connectionString
);
123 result
.put("username", username
);
124 result
.put("password", password
);
130 * @see eu.etaxonomy.cdm.api.application.ICdmDataSource#getHibernatePropertiesBean(eu.etaxonomy.cdm.database.CdmPersistentDataSource.HBM2DDL)
132 public BeanDefinition
getHibernatePropertiesBean(DbSchemaValidation hbm2dll
){
133 boolean showSql
= false;
134 boolean formatSql
= false;
135 Class
<?
extends CacheProvider
> cacheProviderClass
= NoCacheProvider
.class;
136 return getHibernatePropertiesBean(hbm2dll
, showSql
, formatSql
, cacheProviderClass
);
140 * @see eu.etaxonomy.cdm.api.application.ICdmDataSource#getHibernatePropertiesBean(eu.etaxonomy.cdm.database.CdmPersistentDataSource.HBM2DDL, java.lang.Boolean, java.lang.Boolean, java.lang.Class)
142 public BeanDefinition
getHibernatePropertiesBean(DbSchemaValidation hbm2dll
, Boolean showSql
, Boolean formatSql
, Class
<?
extends CacheProvider
> cacheProviderClass
){
143 //Hibernate default values
144 if (hbm2dll
== null){
145 hbm2dll
= this.hbm2dll
;
147 if (showSql
== null){
148 showSql
= this.showSql
;
150 if (formatSql
== null){
151 formatSql
= this.formatSql
;
153 if (cacheProviderClass
== null){
154 cacheProviderClass
= this.cacheProviderClass
;
157 DatabaseTypeEnum dbtype
= dbType
;
158 AbstractBeanDefinition bd
= new RootBeanDefinition(PropertiesFactoryBean
.class);
159 MutablePropertyValues hibernateProps
= new MutablePropertyValues();
161 Properties props
= new Properties();
162 props
.setProperty("hibernate.hbm2ddl.auto", hbm2dll
.toString());
163 props
.setProperty("hibernate.dialect", dbtype
.getHibernateDialect());
164 props
.setProperty("hibernate.cache.provider_class", cacheProviderClass
.getName());
165 props
.setProperty("hibernate.show_sql", String
.valueOf(showSql
));
166 props
.setProperty("hibernate.format_sql", String
.valueOf(formatSql
));
168 hibernateProps
.addPropertyValue("properties",props
);
169 bd
.setPropertyValues(hibernateProps
);