/********************************************************* begin of preamble
**
** Copyright (C) 2003-2010 Software- und Organisations-Service GmbH.
** All rights reserved.
**
** This file may be used under the terms of either the
**
** GNU General Public License version 2.0 (GPL)
**
** as published by the Free Software Foundation
** http://www.gnu.org/licenses/gpl-2.0.txt and appearing in the file
** LICENSE.GPL included in the packaging of this file.
**
** or the
**
** Agreement for Purchase and Licensing
**
** as offered by Software- und Organisations-Service GmbH
** in the respective terms of supply that ship with this file.
**
** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
** IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
** THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
** PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
** BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
** CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
** SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
** INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
** CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
** ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
** POSSIBILITY OF SUCH DAMAGE.
********************************************************** end of preamble*/
package com.sos.scheduler.engine.kernel.database;
import com.sos.scheduler.engine.cplusplus.runtime.annotation.ForCpp;
import com.sos.scheduler.engine.kernel.Subsystem;
import com.sos.scheduler.engine.kernel.VariableSet;
import com.sos.scheduler.engine.kernel.cppproxy.DatabaseC;
import java.util.HashMap;
import java.util.Map;
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;
@ForCpp
public class DatabaseSubsystem implements Subsystem {
public static final String emptyIdinDatabase = "-";
private static final String persistenceUnitName = "schedulerEngine";
private EntityManagerFactory entityManagerFactory = null;
private EntityManager entityManager = null;
private final DatabaseC cppProxy;
// private final DatabaseConfiguration config;
public DatabaseSubsystem(DatabaseC cppProxy) {
this.cppProxy = cppProxy;
// this.config = config(getProperties());
}
// private static DatabaseConfiguration config(VariableSet p) {
// return new DatabaseConfiguration(); // Ist noch leer
// String jdbcDriverClassName = p.getStrictly("jdbc.driver");
// String url = p.getStrictly("path");
// String userName = p.getStrictly("userName");
// String password = p.getStrictly("password");
// return new DatabaseConfiguration(jdbcDriverClassName, url, userName, password);
// }
public final void close() {
if (entityManagerFactory != null)
entityManagerFactory.close(); // Schließt auch EntityManager
// try {
// if (connection != null)
// connection.close();
// } catch (SQLException x) { throw new SchedulerException(x); }
}
public final EntityManager getEntityManager() {
if (entityManagerFactory == null)
entityManagerFactory = Persistence.createEntityManagerFactory(persistenceUnitName, entityManagerProperties());
if (entityManager == null)
entityManager = entityManagerFactory.createEntityManager();
return entityManager;
}
private Map<String,String> entityManagerProperties() {
Map<String,String> result = new HashMap<String,String>();
VariableSet p = getProperties();
result.put("javax.persistence.jdbc.driver", p.getStrictly("jdbc.driverClass"));
result.put("javax.persistence.jdbc.url", p.getStrictly("path"));
result.put("javax.persistence.jdbc.user", p.getStrictly("user"));
result.put("javax.persistence.jdbc.password", p.getStrictly("password"));
return result;
}
/** Liefert auch "password" */
public final VariableSet getProperties() {
return cppProxy.properties().getSister();
}
public static String idForDatabase(String id) {
return id.isEmpty()? emptyIdinDatabase : id;
}
// public final Connection getConnection() {
// if (connection != null) connection = openConnection();
// return connection;
// }
//
//
// private Connection openConnection() {
// try {
// return DriverManager.getConnection(config.getUrl(), config.getUserName(), config.getPassword());
// } catch (SQLException x) { throw new SchedulerException(x); }
// }
// public final DatabaseConfiguration getConfiguration() {
// return config;
// }
}