/******************************************************************************* | |
* 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.queries; | |
import java.util.*; | |
import org.eclipse.persistence.sessions.server.*; | |
import org.eclipse.persistence.descriptors.ClassDescriptor; | |
import org.eclipse.persistence.testing.models.employee.domain.*; | |
/** | |
* We have added support so that there can be multiple queries | |
* with the same name (each with different argument sets) cached | |
* on DescriptorQueryManager. | |
* This test verifies that by adding (using, and removing) more | |
* than one named query (with the same name but with different | |
* argument sets) to Descriptor Query Manager. | |
* | |
* Separate test case exists for ClientSession - NamedQueriesClientSessionTest | |
* Class created on Mar 12/2002; CR#3716 in StarTeam; Predrag | |
*/ | |
public class NamedQueriesDescriptorQueryManagerTest extends MultiNameQueriesTestCase { | |
protected Server serverSession; | |
protected ClientSession clientSession; | |
protected Exception caughtException; | |
protected ClassDescriptor descriptor; | |
/** | |
* Employee.class used to add two identically named NamedQueries | |
*/ | |
public NamedQueriesDescriptorQueryManagerTest() { | |
setDescription("Verifies if a Named Query with different argument sets" + " can be cached on DescriptorQueryManager"); | |
} | |
public void reset() { | |
// do not want to keep named queries on employee descriptor | |
descriptor.getQueryManager().removeQuery("namedQuerySameName"); | |
this.clientSession.release(); | |
this.serverSession.logout(); | |
getSession().getIdentityMapAccessor().initializeAllIdentityMaps(); | |
} | |
// end of reset() | |
public void setup() { | |
org.eclipse.persistence.sessions.Project proj = new org.eclipse.persistence.testing.models.employee.relational.EmployeeProject(); | |
proj.setDatasourceLogin(getSession().getDatasourceLogin().clone()); | |
this.serverSession = proj.createServerSession(1, 1); | |
this.serverSession.useReadConnectionPool(1, 1); | |
this.serverSession.setSessionLog(getSession().getSessionLog()); | |
this.serverSession.login(); | |
this.clientSession = this.serverSession.acquireClientSession(); | |
setDescriptorNamedQueries(Employee.class); | |
addNamedQueryFirstName(); | |
addNamedQueryFirstAndLastName(); | |
serverSession.getIdentityMapAccessor().initializeIdentityMaps(); | |
} | |
// end of setup() | |
public ClassDescriptor getDescriptorNamedQueries() { | |
return descriptor; | |
} | |
// end of getDescriptorNamedQuery | |
public void setDescriptorNamedQueries(Class cls) { | |
this.descriptor = serverSession.getClassDescriptor(cls); | |
} | |
// end of setDescriptorNamedQuery | |
public void useNamedQueryFirstName() { | |
// do not use the following session's API, | |
// public Object executeQuery(queryName, argumentValues) | |
// since it looks for query in ClientSession, not in DescriptorQueryManager | |
Vector empsByFirstName = (Vector)clientSession.executeQuery("namedQuerySameName", Employee.class, new String("Jill")); | |
} | |
// end of useNamedQueryFirstName | |
public void useNamedQueryFirstAndLastName() { | |
Vector empsByFirstAndLastName = (Vector)clientSession.executeQuery("namedQuerySameName", Employee.class, new String("Jill"), new String("May")); | |
} | |
// end of useNamedQueryFirstAndLastName | |
public void addNamedQueryFirstName() { | |
descriptor.getQueryManager().addQuery("namedQuerySameName", getNamedQueryFirstName()); | |
} | |
// end of addNamedQueryFirstName | |
public void addNamedQueryFirstAndLastName() { | |
descriptor.getQueryManager().addQuery("namedQuerySameName", getNamedQueryFirstAndLastName()); | |
} | |
// end of addNamedQueryFirstAndLastName | |
public void test() { | |
// Can more than one named query co-exist with the same name? | |
// Same name "namedQuerySameName" added twice to the very same | |
// descriptor - Employee.class, with different argument sets | |
try { | |
useNamedQueryFirstName(); | |
useNamedQueryFirstAndLastName(); | |
} catch (ClassCastException e) { | |
caughtException = e; | |
} | |
} | |
// end of test() | |
public void verify() { | |
if (caughtException != null) { | |
throw new org.eclipse.persistence.testing.framework.TestErrorException("Multiple queries with the same named cached on the DescriptorQueryManager.\n" + "Each with different argument sets.\n" + "This exception thrown while testing test case.\n" + "----- NamedQueriesDescriptorQueryManagerTest() -----\n"); | |
} | |
} | |
// end of verify() | |
}// end of public class NamedQueriesDescriptorQueryManagerTest |