blob: 477d8e96f2295aa5e07cedd097dc2cce70ceeef2 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 1998, 2013 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 v1.0 and Eclipse Distribution License v. 1.0
* which accompanies this distribution.
* The Eclipse Public License is available at http://www.eclipse.org/legal/epl-v10.html
* and the Eclipse Distribution License is available at
* http://www.eclipse.org/org/documents/edl-v10.php.
*
* Contributors:
* Oracle - initial API and implementation from Oracle TopLink
******************************************************************************/
package org.eclipse.persistence.testing.tests.failover;
import java.util.Vector;
import org.eclipse.persistence.exceptions.DatabaseException;
import org.eclipse.persistence.internal.sessions.DatabaseSessionImpl;
import org.eclipse.persistence.queries.ReadObjectQuery;
import org.eclipse.persistence.sessions.DatabaseLogin;
import org.eclipse.persistence.sessions.DatabaseSession;
import org.eclipse.persistence.sessions.Project;
import org.eclipse.persistence.testing.framework.TestCase;
import org.eclipse.persistence.testing.framework.TestErrorException;
import org.eclipse.persistence.testing.models.employee.domain.Address;
import org.eclipse.persistence.testing.tests.failover.emulateddriver.EmulatedConnection;
import org.eclipse.persistence.testing.tests.failover.emulateddriver.EmulatedDriver;
public class SingleConnectionFailureTest extends TestCase {
protected DatabaseSession databaseSession ;
protected void setup() {
if (getSession().getPlatform().isSymfoware()) {
throwWarning("Test SingleConnectionFailureTest is not supported on Symfoware, "
+ "failover has not been implemented on this platform. (bug 304908)");
}
Project project = (Project)getSession().getProject().clone();
DatabaseLogin login = (DatabaseLogin)project.getLogin().clone();
login.useDirectDriverConnect();
login.setDriverClass(EmulatedDriver.class);
login.setConnectionString("jdbc:emulateddriver");
project.setLogin(login);
this.databaseSession = project.createDatabaseSession();
databaseSession.setSessionLog(getSession().getSessionLog());
databaseSession.login();
String sql = getSession().getPlatform().getPingSQL();
Vector rows = getSession().executeSQL(sql);
//this will actually store the results on the driver for subsequent connections.
((EmulatedConnection)((DatabaseSessionImpl)databaseSession).getAccessor().getConnection()).putRows(sql, rows);
ReadObjectQuery query = new ReadObjectQuery(Address.class);
getSession().executeQuery(query);
sql = query.getSQLString();
rows = getSession().executeSQL(sql);
((EmulatedConnection)((DatabaseSessionImpl)databaseSession).getAccessor().getConnection()).putRows(sql, rows);
((EmulatedConnection)((DatabaseSessionImpl)databaseSession).getAccessor().getConnection()).causeCommError();
}
protected void test() {
try{
this.databaseSession.readObject(Address.class);
}catch (DatabaseException ex){
throw new TestErrorException("Should have reconnected and not thrown exception.");
}
}
public void reset() {
if(this.databaseSession != null) {
if(this.databaseSession.isConnected()) {
this.databaseSession.logout();
}
this.databaseSession = null;
}
}
}