| /* |
| * Copyright (c) 2016, 2020 Oracle and/or its affiliates. All rights reserved. |
| * |
| * This program and the accompanying materials are made available under the |
| * terms of the Eclipse Public License v. 2.0 which is available at |
| * http://www.eclipse.org/legal/epl-2.0, |
| * or the Eclipse Distribution License v. 1.0 which is available at |
| * http://www.eclipse.org/org/documents/edl-v10.php. |
| * |
| * SPDX-License-Identifier: EPL-2.0 OR BSD-3-Clause |
| */ |
| |
| // Contributors: |
| // 03/30/2016-2.7 Tomas Kraus |
| // - 490677: Initial API and implementation. |
| package org.eclipse.persistence.testing.tests.nosql; |
| |
| import java.util.Map; |
| |
| import org.eclipse.persistence.exceptions.DatabaseException; |
| import org.eclipse.persistence.logging.AbstractSessionLog; |
| import org.eclipse.persistence.logging.SessionLog; |
| import org.eclipse.persistence.queries.SQLCall; |
| import org.eclipse.persistence.sessions.DatabaseLogin; |
| import org.eclipse.persistence.sessions.DatabaseSession; |
| import org.eclipse.persistence.sessions.DatasourceLogin; |
| import org.eclipse.persistence.sessions.Project; |
| import org.eclipse.persistence.sessions.factories.XMLProjectReader; |
| import org.eclipse.persistence.sessions.server.Server; |
| import org.eclipse.persistence.testing.framework.TestProblemException; |
| |
| /** |
| * Session initialization helper methods. |
| * Keeps database configuration properties in static context. |
| */ |
| public class SessionHelper { |
| |
| /** Logger. */ |
| private static final SessionLog LOG = AbstractSessionLog.getLog(); |
| |
| /** |
| * Creates {@link DatabaseLogin} with relational database connection specifications. |
| * This method is based on {@link org.eclipse.persistence.testing.framework.TestSystem#loadLoginFromProperties()} |
| * but uses local properties {@link Map} with NoSQL extensions. |
| * @return {@link DatabaseLogin} with relational database connection specifications. |
| */ |
| public static DatabaseLogin createDatabaseLogin() { |
| final DatabaseLogin login = new DatabaseLogin(); |
| login.setDriverClassName(NoSQLProperties.getDBDriver()); |
| login.setConnectionString(NoSQLProperties.getDBURL()); |
| login.setUserName(NoSQLProperties.getDBUserName()); |
| // This avoids encrypting the password, as some tests require it non-encrypted. |
| login.setEncryptedPassword(NoSQLProperties.getDBPassword()); |
| final String platform = NoSQLProperties.getDBPlatform(); |
| if (platform != null) { |
| login.setPlatformClassName(platform); |
| } |
| return login; |
| } |
| |
| /** |
| * Creates EclipseLink configuration {@link Project} without testing model and with provided connection |
| * specifications. |
| * @param login Database connection specifications. |
| * @param loaderClass Class used to retrieve {@link ClassLoader}. |
| */ |
| public static Project createProject(final DatasourceLogin login, final Class<?> loaderClass) { |
| return new Project(login); |
| } |
| |
| /** |
| * Creates EclipseLink configuration {@link Project} with testing model and provided connection specifications. |
| * @param login Database connection specifications. |
| * @param loaderClass Class used to retrieve {@link ClassLoader}. |
| */ |
| public static Project createModelProject(final DatasourceLogin login, final Class<?> loaderClass) { |
| final Project project = XMLProjectReader.read(ModelHelper.MODEL_FILE, loaderClass.getClassLoader()); |
| project.setLogin(login); |
| return project; |
| } |
| |
| /** |
| * Creates {@link DatabaseSession} from project and connect it to database. |
| * {@link DatabaseSession#logout()} must be called before session instance is disposed. |
| */ |
| public static DatabaseSession createDatabaseSession(final Project project) { |
| DatabaseSession session = project.createDatabaseSession(); |
| session.setSessionLog(LOG); |
| try { |
| session.login(); |
| } catch (Exception ex) { |
| throw new TestProblemException( |
| "Database needs to be setup for AQ, with the user " + NoSQLProperties.getDBUserName(), ex); |
| } |
| return session; |
| } |
| |
| /** |
| * Creates {@link DatabaseSession} from project and connect it to database. |
| * {@link DatabaseSession#logout()} must be called before session instance is disposed. |
| */ |
| public static Server createServerSession(final Project project) { |
| Server session = project.createServerSession(); |
| session.setSessionLog(LOG); |
| try { |
| session.login(); |
| } catch (Exception ex) { |
| throw new TestProblemException( |
| "Database needs to be setup for AQ, with the user " + NoSQLProperties.getDBUserName(), ex); |
| } |
| return session; |
| } |
| |
| /** |
| * Execute statement in provided database session. |
| * @param session Database session used to execute statement. |
| * @param statement Statement to be executed. |
| */ |
| public static void executeStatement(final DatabaseSession session, final String statement) { |
| try { |
| session.executeNonSelectingCall(new SQLCall(statement)); |
| } catch (DatabaseException de) { |
| session.getSessionLog().log(SessionLog.INFO, String.format("Error executing: %s", statement)); |
| } catch (Exception ex) { |
| session.getSessionLog().log(SessionLog.WARNING, String.format("Error executing: %s", statement)); |
| } |
| } |
| |
| } |