blob: e8ed73842b069fe007cd57735e92f46bc05f08d9 [file] [log] [blame]
/*
* Copyright (c) 1998, 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:
// Oracle - initial API and implementation from Oracle TopLink
// 04/01/2016-2.7 Tomas Kraus
// - 490677: Database connection properties made configurable in test.properties
package org.eclipse.persistence.testing.tests.eis.aq;
import static org.junit.Assert.assertNotNull;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import org.eclipse.persistence.logging.AbstractSessionLog;
import org.eclipse.persistence.logging.SessionLog;
import org.eclipse.persistence.sessions.DatabaseSession;
import org.eclipse.persistence.testing.framework.junit.LogTestExecution;
import org.eclipse.persistence.testing.tests.nosql.ModelHelper;
import org.eclipse.persistence.testing.tests.nosql.NoSQLProperties;
import org.eclipse.persistence.testing.tests.nosql.SessionHelper;
import org.junit.Rule;
import org.junit.Test;
import oracle.AQ.AQDequeueOption;
import oracle.AQ.AQDriverManager;
import oracle.AQ.AQEnqueueOption;
import oracle.AQ.AQMessage;
import oracle.AQ.AQQueue;
import oracle.AQ.AQRawPayload;
import oracle.AQ.AQSession;
/**
* Test direct interactions through the AQ Java driver. Requires AQ installed on this database.
*/
public class JavaDirectInteractionTest {
/** Log the test being currently executed. */
@Rule public LogTestExecution logExecution = new LogTestExecution();
/** Logger. */
private static final SessionLog LOG = AbstractSessionLog.getLog();
/**
* Creates an instance of the test class.
*/
public JavaDirectInteractionTest() {
}
/**
* Attempts to connect to the database using build properties.
* @return Database connection.
* @throws SQLException when database connection problem occurs.
*/
private static Connection getConnection() throws SQLException {
return DriverManager.getConnection(
NoSQLProperties.getDBURL(), NoSQLProperties.getDBUserName(), NoSQLProperties.getDBPassword());
}
/**
* Test direct connection using AQ Java driver.
*/
@Test
public void testDirectConnect() throws Exception {
Connection connection = null;
AQSession session = null;
try {
final Class<?> driver = Class.forName("oracle.AQ.AQOracleDriver");
assertNotNull("Driver class oracle.AQ.AQOracleDriver was not found", driver);
connection = getConnection();
connection.setAutoCommit(false);
session = AQDriverManager.createAQSession(connection);
} finally {
if (session != null) {
session.close();
}
if (connection != null) {
connection.close();
}
}
}
/**
* Test AQ Java driver direct interactions.
*/
@Test
public void testDirectInteraction() throws Exception {
// Only this test uses "raw_order_queue" in this class so relational database session is local.
final DatabaseSession rDBSession = SessionHelper.createDatabaseSession(
SessionHelper.createModelProject(SessionHelper.createDatabaseLogin(), JavaDirectInteractionTest.class));
ModelHelper.setupRawOrderQueue(rDBSession);
Connection connection = null;
AQSession session = null;
try {
connection = getConnection();
connection.setAutoCommit(false);
Class.forName("oracle.AQ.AQOracleDriver");
session = AQDriverManager.createAQSession(connection);
AQQueue queue = session.getQueue(NoSQLProperties.getDBUserName(), "raw_order_queue");
LOG.log(SessionLog.FINEST, queue.toString());
AQMessage message = queue.createMessage();
LOG.log(SessionLog.FINEST, message.toString());
AQRawPayload payload = message.getRawPayload();
byte[] bytes = "hello".getBytes();
payload.setStream(bytes, bytes.length);
AQEnqueueOption enqueueOption = new AQEnqueueOption();
queue.enqueue(enqueueOption, message);
connection.commit();
AQDequeueOption dequeueOption = new AQDequeueOption();
message = queue.dequeue(dequeueOption);
LOG.log(SessionLog.FINEST, message != null ? message.toString() : null);
LOG.log(SessionLog.FINEST, message != null ? new String(message.getRawPayload().getBytes()) : null);
connection.commit();
} finally {
if (session != null) {
session.close();
}
if (connection != null) {
connection.close();
}
ModelHelper.resetRawOrderQueue(rDBSession);
rDBSession.logout();
}
}
}