![JAR search and dependency download from the Maven repository](/logo.png)
org.jivesoftware.database.EmbeddedConnectionProvider Maven / Gradle / Ivy
The newest version!
/*
* Copyright (C) 2004-2008 Jive Software. 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 org.jivesoftware.database;
import org.jivesoftware.util.JiveGlobals;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.io.File;
import java.io.IOException;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.sql.DriverManager;
import java.util.Properties;
/**
* A connection provider for the embedded hsqlDB database. The database file is stored at
* home/database. The log file for this connection provider is stored at
* [home]/logs/EmbeddedConnectionProvider.log, so you should ensure
* that the [home]/logs directory exists.
*
* @author Matt Tucker
*/
public class EmbeddedConnectionProvider implements ConnectionProvider {
private static final Logger Log = LoggerFactory.getLogger(EmbeddedConnectionProvider.class);
private Properties settings;
private String serverURL;
private String driver = "org.hsqldb.jdbcDriver";
private String proxoolURL;
public EmbeddedConnectionProvider() {
}
@Override
public boolean isPooled() {
return true;
}
@Override
public Connection getConnection() throws SQLException {
try {
Class.forName("org.logicalcobwebs.proxool.ProxoolDriver");
return DriverManager.getConnection(proxoolURL, settings);
}
catch (ClassNotFoundException e) {
throw new SQLException("EmbeddedConnectionProvider: Unable to find driver: "+e);
}
}
@Override
public void start() {
File databaseDir = new File(JiveGlobals.getHomeDirectory(), File.separator + "embedded-db");
// If the database doesn't exist, create it.
if (!databaseDir.exists()) {
databaseDir.mkdirs();
}
try {
serverURL = "jdbc:hsqldb:" + databaseDir.getCanonicalPath() + File.separator + "openfire";
}
catch (IOException ioe) {
Log.error("EmbeddedConnectionProvider: Error starting connection pool: ", ioe);
}
proxoolURL = "proxool.openfire:"+driver+":"+serverURL;
settings = new Properties();
settings.setProperty("proxool.maximum-connection-count", "25");
settings.setProperty("proxool.minimum-connection-count", "3");
settings.setProperty("proxool.maximum-connection-lifetime", Integer.toString((int)(86400000 * 0.5)));
settings.setProperty("user", "sa");
settings.setProperty("password", "");
}
@Override
public void restart() {
// Kill off pool.
destroy();
// Start a new pool.
start();
}
@Override
public void destroy() {
// Shutdown the database.
Connection con = null;
PreparedStatement pstmt = null;
try {
con = getConnection();
pstmt = con.prepareStatement("SHUTDOWN");
pstmt.execute();
}
catch (SQLException sqle) {
Log.error(sqle.getMessage(), sqle);
}
finally {
DbConnectionManager.closeConnection(pstmt, con);
}
// Blank out the settings
settings = null;
}
@Override
public void finalize() throws Throwable {
super.finalize();
destroy();
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy