3 * Copyright (C) 2007 EDIT
4 * European Distributed Institute of Taxonomy
5 * http://www.e-taxonomy.eu
7 * The contents of this file are subject to the Mozilla Public License Version 1.1
8 * See LICENSE.TXT at the top of this package for the full license terms.
11 package eu
.etaxonomy
.cdm
.api
.service
;
13 import org
.apache
.log4j
.Logger
;
14 import org
.hibernate
.SessionFactory
;
15 import org
.springframework
.beans
.BeansException
;
16 import org
.springframework
.beans
.factory
.annotation
.Autowired
;
17 import org
.springframework
.context
.ApplicationContext
;
18 import org
.springframework
.context
.ApplicationContextAware
;
19 import org
.springframework
.jdbc
.datasource
.AbstractDriverBasedDataSource
;
20 import org
.springframework
.orm
.hibernate3
.SessionFactoryUtils
;
21 import org
.springframework
.stereotype
.Service
;
22 import org
.springframework
.transaction
.annotation
.Propagation
;
23 import org
.springframework
.transaction
.annotation
.Transactional
;
25 import eu
.etaxonomy
.cdm
.api
.application
.CdmApplicationController
;
26 import eu
.etaxonomy
.cdm
.database
.CdmDataSource
;
27 import eu
.etaxonomy
.cdm
.database
.CdmPersistentDataSource
;
28 import eu
.etaxonomy
.cdm
.database
.DataSourceNotFoundException
;
29 import eu
.etaxonomy
.cdm
.database
.DatabaseTypeEnum
;
30 import eu
.etaxonomy
.cdm
.database
.H2Mode
;
31 import eu
.etaxonomy
.cdm
.database
.ICdmDataSource
;
32 import eu
.etaxonomy
.cdm
.model
.common
.init
.TermNotFoundException
;
33 import eu
.etaxonomy
.cdm
.model
.name
.NomenclaturalCode
;
42 @Transactional(propagation
= Propagation
.SUPPORTS
, readOnly
= true)
43 public class DatabaseServiceHibernateImpl
implements IDatabaseService
, ApplicationContextAware
{
44 private static final Logger logger
= Logger
.getLogger(DatabaseServiceHibernateImpl
.class);
46 private static final String TMP_DATASOURCE
= "tmp";
49 private SessionFactory factory
;
52 protected ApplicationContext appContext
;
54 private CdmApplicationController application
;
55 public void setApplicationController(CdmApplicationController cdmApplicationController
){
56 this.application
= cdmApplicationController
;
61 * @see eu.etaxonomy.cdm.api.service.IDatabaseService#connectToDatasource(eu.etaxonomy.cdm.database.CdmDataSource)
63 public boolean connectToDatasource(CdmPersistentDataSource dataSource
) throws TermNotFoundException
{
64 this.application
.changeDataSource(dataSource
);
65 logger
.debug("DataSource changed to " + dataSource
.getName());
70 * @see eu.etaxonomy.cdm.api.service.IDatabaseService#connectToDatabase(eu.etaxonomy.cdm.database.DatabaseTypeEnum, java.lang.String, java.lang.String, java.lang.String, java.lang.String, int)
72 public boolean connectToDatabase(DatabaseTypeEnum databaseTypeEnum
, String server
,
73 String database
, String username
, String password
, int port
, String filePath
, H2Mode mode
, NomenclaturalCode code
) throws TermNotFoundException
{
74 ICdmDataSource dataSource
= CdmDataSource
.NewInstance(databaseTypeEnum
, server
, database
, port
, username
, password
, code
);
75 CdmPersistentDataSource tmpDataSource
= saveDataSource(TMP_DATASOURCE
, dataSource
);
76 boolean result
= connectToDatasource(tmpDataSource
);
77 CdmPersistentDataSource
.delete(tmpDataSource
);
83 * @see eu.etaxonomy.cdm.api.service.IDatabaseService#connectToDatabase(eu.etaxonomy.cdm.database.DatabaseTypeEnum, java.lang.String, java.lang.String, java.lang.String, java.lang.String)
85 public boolean connectToDatabase(DatabaseTypeEnum databaseTypeEnum
, String server
,
86 String database
, String username
, String password
) throws TermNotFoundException
{
87 return connectToDatabase(databaseTypeEnum
, server
, database
, username
, password
, databaseTypeEnum
.getDefaultPort(), null, null, null) ;
91 * @see eu.etaxonomy.cdm.api.service.IDatabaseService#saveDataSource(java.lang.String, eu.etaxonomy.cdm.database.ICdmDataSource)
93 public CdmPersistentDataSource
saveDataSource(String strDataSourceName
,
94 ICdmDataSource dataSource
) {
95 return CdmPersistentDataSource
.save(strDataSourceName
, dataSource
);
99 * @see eu.etaxonomy.cdm.api.service.IDatabaseService#updateDataSource(java.lang.String, eu.etaxonomy.cdm.database.CdmPersistentDataSource)
101 public CdmPersistentDataSource
updateDataSource(String strDataSourceName
,
102 CdmPersistentDataSource dataSource
) throws DataSourceNotFoundException
{
103 return CdmPersistentDataSource
.update(strDataSourceName
, dataSource
);
107 //TODO removed 04.02.2009 as spring 2.5.6 does not support DriverManagerDataSource.getDriverClassName anymore
108 //Let's see if this is not needed by any other application
110 // * @see eu.etaxonomy.cdm.api.service.IDatabaseService#getDatabaseTypeName()
112 // public DatabaseTypeEnum getDatabaseEnum() {
113 // return DatabaseTypeEnum.getDatabaseEnumByDriverClass(getDataSource().getDriverClassName());
117 // * @see eu.etaxonomy.cdm.api.service.IDatabaseService#getDriverClassName()
119 // public String getDriverClassName() {
120 // return ( getDataSource()).getDriverClassName();
124 * @see eu.etaxonomy.cdm.api.service.IDatabaseService#getUrl()
126 public String
getUrl() {
127 return getDataSource().getUrl();
131 * @see eu.etaxonomy.cdm.api.service.IDatabaseService#getUsername()
133 public String
getUsername() {
134 return getDataSource().getUsername();
137 // returns the AbstractDriverBasedDataSource from hibernate
138 // (generalized in order to also allow using SimpleDriverDataSource)
139 private AbstractDriverBasedDataSource
getDataSource(){
140 AbstractDriverBasedDataSource ds
= (AbstractDriverBasedDataSource
)SessionFactoryUtils
.getDataSource(factory
);
145 public void setApplicationContext(ApplicationContext applicationContext
)
146 throws BeansException
{
147 this.appContext
= applicationContext
;