mirror of https://github.com/apache/cloudstack.git
110 lines
4.1 KiB
Java
110 lines
4.1 KiB
Java
/*
|
|
* Copyright (C) 2011 Citrix Systems, Inc. All rights reserved.
|
|
*
|
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
* you may not use this file except in compliance with the License.
|
|
* You may obtain a copy of the License at
|
|
*
|
|
* http://www.apache.org/licenses/LICENSE-2.0
|
|
*
|
|
* Unless required by applicable law or agreed to in writing, software
|
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
* See the License for the specific language governing permissions and
|
|
* limitations under the License.
|
|
*/
|
|
package com.cloud.bridge.util;
|
|
|
|
import java.io.File;
|
|
import java.io.FileInputStream;
|
|
import java.io.FileNotFoundException;
|
|
import java.io.IOException;
|
|
import java.util.Properties;
|
|
|
|
import org.hibernate.Session;
|
|
import org.hibernate.SessionFactory;
|
|
import org.hibernate.cfg.Configuration;
|
|
import org.jasypt.encryption.pbe.StandardPBEStringEncryptor;
|
|
import org.jasypt.properties.EncryptableProperties;
|
|
import org.apache.log4j.Logger;
|
|
|
|
|
|
/**
|
|
* @author Kelven Yang
|
|
*/
|
|
public class CloudStackSessionFactory {
|
|
private static CloudStackSessionFactory instance;
|
|
public static final Logger logger = Logger.getLogger(CloudStackSessionFactory.class);
|
|
|
|
private SessionFactory factory;
|
|
|
|
private CloudStackSessionFactory() {
|
|
Configuration cfg = new Configuration();
|
|
File file = ConfigurationHelper.findConfigurationFile("CloudStack.cfg.xml");
|
|
|
|
File propertiesFile = ConfigurationHelper.findConfigurationFile("db.properties");
|
|
Properties dbProp = null;
|
|
String dbName = null;
|
|
String dbHost = null;
|
|
String dbUser = null;
|
|
String dbPassword = null;
|
|
String dbPort = null;
|
|
|
|
if (null != propertiesFile) {
|
|
|
|
if(EncryptionSecretKeyCheckerUtil.useEncryption()){
|
|
StandardPBEStringEncryptor encryptor = EncryptionSecretKeyCheckerUtil.getEncryptor();
|
|
dbProp = new EncryptableProperties(encryptor);
|
|
} else {
|
|
dbProp = new Properties();
|
|
}
|
|
|
|
try {
|
|
dbProp.load( new FileInputStream( propertiesFile ));
|
|
} catch (FileNotFoundException e) {
|
|
logger.warn("Unable to open properties file: " + propertiesFile.getAbsolutePath(), e);
|
|
} catch (IOException e) {
|
|
logger.warn("Unable to read properties file: " + propertiesFile.getAbsolutePath(), e);
|
|
}
|
|
}
|
|
|
|
|
|
//
|
|
// we are packaging hibernate mapping files along with the class files,
|
|
// make sure class loader use the same class path when initializing hibernate mapping.
|
|
// This is important when we are deploying and testing at different environment (Tomcat/JUnit test runner)
|
|
//
|
|
if(file != null && dbProp != null){
|
|
Thread.currentThread().setContextClassLoader(this.getClass().getClassLoader());
|
|
cfg.configure(file);
|
|
|
|
dbHost = dbProp.getProperty( "db.cloud.host" );
|
|
dbName = dbProp.getProperty( "db.cloud.name" );
|
|
dbUser = dbProp.getProperty( "db.cloud.username" );
|
|
dbPassword = dbProp.getProperty( "db.cloud.password" );
|
|
dbPort = dbProp.getProperty( "db.cloud.port" );
|
|
|
|
cfg.setProperty("hibernate.connection.url", "jdbc:mysql://" + dbHost + ":" + dbPort + "/" + dbName);
|
|
cfg.setProperty("hibernate.connection.username", dbUser);
|
|
cfg.setProperty("hibernate.connection.password", dbPassword);
|
|
|
|
|
|
factory = cfg.buildSessionFactory();
|
|
}else{
|
|
logger.warn("Unable to open load db configuration");
|
|
throw new RuntimeException("nable to open load db configuration");
|
|
}
|
|
}
|
|
|
|
public synchronized static CloudStackSessionFactory getInstance() {
|
|
if(instance == null) {
|
|
instance = new CloudStackSessionFactory();
|
|
}
|
|
return instance;
|
|
}
|
|
|
|
public Session openSession() {
|
|
return factory.openSession();
|
|
}
|
|
}
|