blob: e8fef75483ef55811c12064dd1e44118c75aeda4 [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
package org.apache.openjpa.persistence.lockmgr;
import java.sql.Connection;
import java.sql.ResultSet;
import javax.persistence.EntityManager;
import javax.persistence.LockModeType;
import javax.persistence.Query;
import org.apache.openjpa.conf.OpenJPAConfiguration;
import org.apache.openjpa.jdbc.conf.JDBCConfiguration;
import org.apache.openjpa.jdbc.kernel.EagerFetchModes;
import org.apache.openjpa.jdbc.kernel.JDBCFetchConfigurationImpl;
import org.apache.openjpa.jdbc.kernel.LRSSizes;
import org.apache.openjpa.jdbc.sql.JoinSyntaxes;
import org.apache.openjpa.kernel.FetchConfiguration;
import org.apache.openjpa.kernel.LockLevels;
import org.apache.openjpa.kernel.MixedLockLevels;
import org.apache.openjpa.kernel.QueryFlushModes;
import org.apache.openjpa.persistence.EntityManagerImpl;
import org.apache.openjpa.persistence.OpenJPAEntityManager;
import org.apache.openjpa.persistence.jdbc.FetchDirection;
import org.apache.openjpa.persistence.jdbc.FetchMode;
import org.apache.openjpa.persistence.jdbc.IsolationLevel;
import org.apache.openjpa.persistence.jdbc.JDBCFetchPlan;
import org.apache.openjpa.persistence.jdbc.JoinSyntax;
import org.apache.openjpa.persistence.jdbc.LRSSizeAlgorithm;
import org.apache.openjpa.persistence.jdbc.ResultSetType;
/**
* Test FetchPlan and FetchConfiguration hints processing for use in
* JPA 2.0 em.find/refresh/lock(... Map) and query.X(... Map) methods.
*
* Supported hints:
* javax.persistence.lock.timeout
* javax.persistence.query.timeout
* openjpa.ExtendedPathLookup (?)
* openjpa.FetchBatchSize
* openjpa.FetchPlan.EagerFetchMode
* openjpa.FetchPlan.ExtendedPathLookup (?)
* openjpa.FetchPlan.FetchBatchSize
* openjpa.FetchPlan.FetchDirection
* openjpa.FetchPlan.Isolation
* openjpa.FetchPlan.JoinSyntax
* openjpa.FetchPlan.LRSSize
* openjpa.FetchPlan.LRSSizeAlgorithm
* openjpa.FetchPlan.LockTimeout
* openjpa.FetchPlan.MaxFetchDepth
* openjpa.FetchPlan.QueryTimeout
* openjpa.FetchPlan.ReadLockMode
* openjpa.FetchPlan.ResultSetType
* openjpa.FetchPlan.SubclassFetchMode
* openjpa.FetchPlan.WriteLockMode
* openjpa.FlushBeforeQueries
* openjpa.LockTimeout
* openjpa.MaxFetchDepth
* openjpa.QueryTimeout
* openjpa.ReadLockLevel
* openjpa.WriteLockLevel
* openjpa.jdbc.EagerFetchMode
* openjpa.jdbc.FetchDirection
* openjpa.jdbc.JoinSyntax
* openjpa.jdbc.LRSSize
* openjpa.jdbc.ResultSetType
* openjpa.jdbc.SubclassFetchMode
* openjpa.jdbc.TransactionIsolation
*/
public class TestFetchHints extends SequencedActionsTest {
@Override
public void setUp() {
setUp(LockEmployee.class
, "openjpa.LockManager", "mixed"
);
commonSetUp();
}
/* Good
* Test "openjpa.FetchBatchSize" hint
*/
public void testFetchBatchSizeHint() {
String hintName = "openjpa.FetchBatchSize";
EntityManager em = emf.createEntityManager();
OpenJPAEntityManager oem = (OpenJPAEntityManager)em.getDelegate();
JDBCFetchPlan fPlan = (JDBCFetchPlan) oem.getFetchPlan();
JDBCFetchConfigurationImpl fConfig = (JDBCFetchConfigurationImpl)
((EntityManagerImpl) oem).getBroker().getFetchConfiguration();
fetchBatchSizeHintTest(fPlan, fConfig, hintName, "-1", -1);
fetchBatchSizeHintTest(fPlan, fConfig, hintName, -1, -1);
fetchBatchSizeHintTest(fPlan, fConfig, hintName, "100", 100);
fetchBatchSizeHintTest(fPlan, fConfig, hintName, 100, 100);
try {
fPlan.setHint(hintName, "xxxxx");
fPlan.setHint(hintName, "xxxxx");
fail("Expecting a IllegalArgumentException.");
} catch (Exception e) {
assertTrue("Caught expected exception",
IllegalArgumentException.class.isAssignableFrom(e.getClass()));
}
try {
fPlan.setFetchBatchSize(999);
fPlan.setHint(hintName, FetchConfiguration.DEFAULT);
assertEquals(fPlan.getFetchBatchSize(), -1);
} catch (Exception e) {
fail("Unexpected " + e.getClass().getName());
}
em.close();
}
/* Good
* Test "openjpa.FetchPlan.FetchBatchSize" hint
*/
public void testFetchPlanFetchBatchSizeHint() {
String hintName = "openjpa.FetchPlan.FetchBatchSize";
EntityManager em = emf.createEntityManager();
OpenJPAEntityManager oem = (OpenJPAEntityManager)em.getDelegate();
JDBCFetchPlan fPlan = (JDBCFetchPlan) oem.getFetchPlan();
JDBCFetchConfigurationImpl fConfig = (JDBCFetchConfigurationImpl)
((EntityManagerImpl) oem).getBroker().getFetchConfiguration();
fetchBatchSizeHintTest(fPlan, fConfig, hintName, "0", 0);
fetchBatchSizeHintTest(fPlan, fConfig, hintName, 0, 0);
fetchBatchSizeHintTest(fPlan, fConfig, hintName, "500", 500);
fetchBatchSizeHintTest(fPlan, fConfig, hintName, 500, 500);
try {
fPlan.setHint(hintName, "xxxxx");
fPlan.setHint(hintName, "yyyyy");
fail("Expecting a IllegalArgumentException.");
} catch (Exception e) {
assertTrue("Caught expected exception",
IllegalArgumentException.class.isAssignableFrom(e.getClass()));
}
try {
fPlan.setFetchBatchSize(999);
fPlan.setHint(hintName, FetchConfiguration.DEFAULT);
assertEquals(fPlan.getFetchBatchSize(), -1);
} catch (Exception e) {
fail("Unexpected " + e.getClass().getName());
}
em.close();
}
private void fetchBatchSizeHintTest(JDBCFetchPlan fPlan,
JDBCFetchConfigurationImpl fConfig, String hint, Object value,
int expected) {
fConfig.setFetchBatchSize(999);
fPlan.setHint(hint, value);
Object getValue = fPlan.getHint(hint);
assertEquals(value.getClass(), getValue.getClass());
assertEquals(value, getValue);
assertEquals(expected, fPlan.getFetchBatchSize());
assertEquals(expected, fConfig.getFetchBatchSize());
}
/* Good
* Test "openjpa.FetchPlan.EagerFetchMode" hint
*/
public void testFetchPlanEagerFetchModeHint() {
String hintName = "openjpa.FetchPlan.EagerFetchMode";
EntityManager em = emf.createEntityManager();
OpenJPAEntityManager oem = (OpenJPAEntityManager) em.getDelegate();
JDBCFetchPlan fPlan = (JDBCFetchPlan) oem.getFetchPlan();
JDBCFetchConfigurationImpl fConfig = (JDBCFetchConfigurationImpl)
((EntityManagerImpl) oem).getBroker().getFetchConfiguration();
eagerFetchModeHintTest(fPlan, fConfig, hintName, "none",
FetchMode.NONE, EagerFetchModes.EAGER_NONE);
eagerFetchModeHintTest(fPlan, fConfig, hintName, FetchMode.NONE.name(),
FetchMode.NONE, EagerFetchModes.EAGER_NONE);
eagerFetchModeHintTest(fPlan, fConfig, hintName, FetchMode.NONE,
FetchMode.NONE, EagerFetchModes.EAGER_NONE);
eagerFetchModeHintTest(fPlan, fConfig, hintName, "parallel",
FetchMode.PARALLEL, EagerFetchModes.EAGER_PARALLEL);
eagerFetchModeHintTest(fPlan, fConfig, hintName, FetchMode.PARALLEL
.name(), FetchMode.PARALLEL, EagerFetchModes.EAGER_PARALLEL);
eagerFetchModeHintTest(fPlan, fConfig, hintName, FetchMode.PARALLEL,
FetchMode.PARALLEL, EagerFetchModes.EAGER_PARALLEL);
eagerFetchModeHintTest(fPlan, fConfig, hintName, "join",
FetchMode.JOIN, EagerFetchModes.EAGER_JOIN);
eagerFetchModeHintTest(fPlan, fConfig, hintName, FetchMode.JOIN.name(),
FetchMode.JOIN, EagerFetchModes.EAGER_JOIN);
eagerFetchModeHintTest(fPlan, fConfig, hintName, FetchMode.JOIN,
FetchMode.JOIN, EagerFetchModes.EAGER_JOIN);
try {
fPlan.setHint(hintName, "xxxxx");
fPlan.setHint(hintName, "yyyyy");
fail("Expecting a IllegalArgumentException.");
} catch (Exception e) {
assertTrue("Caught expected exception",
IllegalArgumentException.class.isAssignableFrom(e.getClass()));
}
try {
fPlan.setHint(hintName, "12345");
fPlan.setHint(hintName, "67890");
fail("Expecting a IllegalArgumentException.");
} catch (Exception e) {
assertTrue("Caught expected exception",
IllegalArgumentException.class.isAssignableFrom(e.getClass()));
}
try {
fPlan.setHint(hintName, -2);
fPlan.setHint(hintName, -3);
fail("Expecting a IllegalArgumentException.");
} catch (Exception e) {
assertTrue("Caught expected exception",
IllegalArgumentException.class.isAssignableFrom(e.getClass()));
}
em.close();
}
/* Good
* Test "openjpa.jdbc.EagerFetchMode" hint
*/
public void testJdbcEagerFetchModeHint() {
String hintName = "openjpa.jdbc.EagerFetchMode";
EntityManager em = emf.createEntityManager();
OpenJPAEntityManager oem = (OpenJPAEntityManager) em.getDelegate();
JDBCFetchPlan fPlan = (JDBCFetchPlan) oem.getFetchPlan();
JDBCFetchConfigurationImpl fConfig = (JDBCFetchConfigurationImpl)
((EntityManagerImpl) oem).getBroker().getFetchConfiguration();
eagerFetchModeHintTest(fPlan, fConfig, hintName, String
.valueOf(EagerFetchModes.EAGER_NONE), FetchMode.NONE,
EagerFetchModes.EAGER_NONE);
eagerFetchModeHintTest(fPlan, fConfig, hintName,
EagerFetchModes.EAGER_NONE, FetchMode.NONE,
EagerFetchModes.EAGER_NONE);
eagerFetchModeHintTest(fPlan, fConfig, hintName,
EagerFetchModes.EAGER_PARALLEL, FetchMode.PARALLEL,
EagerFetchModes.EAGER_PARALLEL);
eagerFetchModeHintTest(fPlan, fConfig, hintName, String
.valueOf(EagerFetchModes.EAGER_PARALLEL), FetchMode.PARALLEL,
EagerFetchModes.EAGER_PARALLEL);
eagerFetchModeHintTest(fPlan, fConfig, hintName, String
.valueOf(EagerFetchModes.EAGER_JOIN), FetchMode.JOIN,
EagerFetchModes.EAGER_JOIN);
eagerFetchModeHintTest(fPlan, fConfig, hintName,
EagerFetchModes.EAGER_JOIN, FetchMode.JOIN,
EagerFetchModes.EAGER_JOIN);
try {
fPlan.setHint(hintName, "xxxxx");
fPlan.setHint(hintName, "yyyyy");
fail("Expecting a IllegalArgumentException.");
} catch (Exception e) {
assertTrue("Caught expected exception",
IllegalArgumentException.class.isAssignableFrom(e.getClass()));
}
try {
fPlan.setHint(hintName, "12345");
fPlan.setHint(hintName, "67890");
fail("Expecting a IllegalArgumentException.");
} catch (Exception e) {
assertTrue("Caught expected exception",
IllegalArgumentException.class.isAssignableFrom(e.getClass()));
}
try {
fPlan.setHint(hintName, -1);
fPlan.setHint(hintName, -2);
fail("Expecting a IllegalArgumentException.");
} catch (Exception e) {
assertTrue("Caught expected exception",
IllegalArgumentException.class.isAssignableFrom(e.getClass()));
}
try {
fPlan.setHint(hintName, FetchConfiguration.DEFAULT);
assertEquals(fPlan.getEagerFetchMode(), FetchMode.PARALLEL);
} catch (Exception e) {
fail("Unexpected " + e.getClass().getName());
}
em.close();
}
private void eagerFetchModeHintTest(JDBCFetchPlan fPlan,
JDBCFetchConfigurationImpl fConfig, String hint, Object value,
Object expectedValue, int expected) {
fPlan.setHint(hint, value);
Object getValue = fPlan.getHint(hint);
assertEquals(value.getClass(), getValue.getClass());
assertEquals(value, getValue);
assertEquals(expectedValue, fPlan.getEagerFetchMode());
assertEquals(expected, fConfig.getEagerFetchMode());
}
/* Good
* Test "openjpa.FetchPlan.JoinSyntax" hint
*/
public void testFetchPlanJoinSyntaxHint() {
String hintName = "openjpa.FetchPlan.JoinSyntax";
EntityManager em = emf.createEntityManager();
OpenJPAEntityManager oem = (OpenJPAEntityManager)em.getDelegate();
JDBCFetchPlan fPlan = (JDBCFetchPlan) oem.getFetchPlan();
JDBCFetchConfigurationImpl fConfig = (JDBCFetchConfigurationImpl)
((EntityManagerImpl) oem).getBroker().getFetchConfiguration();
joinSyntaxHintTest(fPlan, fConfig, hintName, "sql92",
JoinSyntax.SQL92, JoinSyntaxes.SYNTAX_SQL92);
joinSyntaxHintTest(fPlan, fConfig, hintName, JoinSyntax.SQL92.name(),
JoinSyntax.SQL92, JoinSyntaxes.SYNTAX_SQL92);
joinSyntaxHintTest(fPlan, fConfig, hintName, JoinSyntax.SQL92,
JoinSyntax.SQL92, JoinSyntaxes.SYNTAX_SQL92);
joinSyntaxHintTest(fPlan, fConfig, hintName, "traditional",
JoinSyntax.TRADITIONAL, JoinSyntaxes.SYNTAX_TRADITIONAL);
joinSyntaxHintTest(fPlan, fConfig, hintName, JoinSyntax.TRADITIONAL
.name(), JoinSyntax.TRADITIONAL, JoinSyntaxes.SYNTAX_TRADITIONAL);
joinSyntaxHintTest(fPlan, fConfig, hintName, JoinSyntax.TRADITIONAL,
JoinSyntax.TRADITIONAL, JoinSyntaxes.SYNTAX_TRADITIONAL);
joinSyntaxHintTest(fPlan, fConfig, hintName, "database",
JoinSyntax.DATABASE, JoinSyntaxes.SYNTAX_DATABASE);
joinSyntaxHintTest(fPlan, fConfig, hintName,
JoinSyntax.DATABASE.name(), JoinSyntax.DATABASE,
JoinSyntaxes.SYNTAX_DATABASE);
joinSyntaxHintTest(fPlan, fConfig, hintName, JoinSyntax.DATABASE,
JoinSyntax.DATABASE, JoinSyntaxes.SYNTAX_DATABASE);
try {
fPlan.setHint(hintName, "xxxxx");
fPlan.setHint(hintName, "yyyyy");
fail("Expecting a IllegalArgumentException.");
} catch (Exception e) {
assertTrue("Caught expected exception",
IllegalArgumentException.class.isAssignableFrom(e.getClass()));
}
try {
fPlan.setHint(hintName, "12345");
fPlan.setHint(hintName, "67890");
fail("Expecting a IllegalArgumentException.");
} catch (Exception e) {
assertTrue("Caught expected exception",
IllegalArgumentException.class.isAssignableFrom(e.getClass()));
}
try {
fPlan.setHint(hintName, -1);
fPlan.setHint(hintName, -2);
fail("Expecting a IllegalArgumentException.");
} catch (Exception e) {
assertTrue("Caught expected exception",
IllegalArgumentException.class.isAssignableFrom(e.getClass()));
}
em.close();
}
/* Good
* Test "openjpa.jdbc.JoinSyntax" hint
*/
public void testJdbcJoinSyntaxHint() {
String hintName = "openjpa.jdbc.JoinSyntax";
EntityManager em = emf.createEntityManager();
OpenJPAEntityManager oem = (OpenJPAEntityManager) em.getDelegate();
JDBCFetchPlan fPlan = (JDBCFetchPlan) oem.getFetchPlan();
JDBCFetchConfigurationImpl fConfig = (JDBCFetchConfigurationImpl)
((EntityManagerImpl) oem).getBroker().getFetchConfiguration();
joinSyntaxHintTest(fPlan, fConfig, hintName, String
.valueOf(JoinSyntaxes.SYNTAX_SQL92), JoinSyntax.SQL92,
JoinSyntaxes.SYNTAX_SQL92);
joinSyntaxHintTest(fPlan, fConfig, hintName, JoinSyntaxes.SYNTAX_SQL92,
JoinSyntax.SQL92, JoinSyntaxes.SYNTAX_SQL92);
joinSyntaxHintTest(fPlan, fConfig, hintName, String
.valueOf(JoinSyntaxes.SYNTAX_TRADITIONAL), JoinSyntax.TRADITIONAL,
JoinSyntaxes.SYNTAX_TRADITIONAL);
joinSyntaxHintTest(fPlan, fConfig, hintName,
JoinSyntaxes.SYNTAX_TRADITIONAL, JoinSyntax.TRADITIONAL,
JoinSyntaxes.SYNTAX_TRADITIONAL);
joinSyntaxHintTest(fPlan, fConfig, hintName, String
.valueOf(JoinSyntaxes.SYNTAX_DATABASE), JoinSyntax.DATABASE,
JoinSyntaxes.SYNTAX_DATABASE);
joinSyntaxHintTest(fPlan, fConfig, hintName,
JoinSyntaxes.SYNTAX_DATABASE, JoinSyntax.DATABASE,
JoinSyntaxes.SYNTAX_DATABASE);
try {
fPlan.setHint(hintName, "xxxxx");
fPlan.setHint(hintName, "yyyyy");
fail("Expecting a IllegalArgumentException.");
} catch (Exception e) {
assertTrue("Caught expected exception",
IllegalArgumentException.class.isAssignableFrom(e.getClass()));
}
try {
fPlan.setHint(hintName, "12345");
fPlan.setHint(hintName, "67890");
fail("Expecting a IllegalArgumentException.");
} catch (Exception e) {
assertTrue("Caught expected exception",
IllegalArgumentException.class.isAssignableFrom(e.getClass()));
}
try {
fPlan.setHint(hintName, -1);
fPlan.setHint(hintName, -2);
fail("Expecting a IllegalArgumentException.");
} catch (Exception e) {
assertTrue("Caught expected exception",
IllegalArgumentException.class.isAssignableFrom(e.getClass()));
}
try {
fPlan.setHint(hintName, FetchConfiguration.DEFAULT);
assertEquals(fConfig.getJoinSyntax(),
((JDBCConfiguration) fConfig.getContext().getConfiguration())
.getDBDictionaryInstance().joinSyntax);
} catch (Exception e) {
fail("Unexpected " + e.getClass().getName());
}
em.close();
}
private void joinSyntaxHintTest(JDBCFetchPlan fPlan,
JDBCFetchConfigurationImpl fConfig, String hint, Object value,
Object expectedValue, int expected) {
fPlan.setHint(hint, value);
Object getValue = fPlan.getHint(hint);
assertEquals(value.getClass(), getValue.getClass());
assertEquals(value, getValue);
assertEquals(expectedValue, fPlan.getJoinSyntax());
assertEquals(expected, fConfig.getJoinSyntax());
}
/* Good
* Test "openjpa.FetchPlan.FetchDirection" hint
*/
public void testFetchPlanFetchDirectionHint() {
String hintName = "openjpa.FetchPlan.FetchDirection";
EntityManager em = emf.createEntityManager();
OpenJPAEntityManager oem = (OpenJPAEntityManager) em.getDelegate();
JDBCFetchPlan fPlan = (JDBCFetchPlan) oem.getFetchPlan();
JDBCFetchConfigurationImpl fConfig = (JDBCFetchConfigurationImpl)
((EntityManagerImpl) oem).getBroker().getFetchConfiguration();
fetchDirectionHintTest(fPlan, fConfig, hintName, "forward",
FetchDirection.FORWARD, ResultSet.FETCH_FORWARD);
fetchDirectionHintTest(fPlan, fConfig, hintName, FetchDirection.FORWARD
.name(), FetchDirection.FORWARD, ResultSet.FETCH_FORWARD);
fetchDirectionHintTest(fPlan, fConfig, hintName,
FetchDirection.FORWARD, FetchDirection.FORWARD,
ResultSet.FETCH_FORWARD);
fetchDirectionHintTest(fPlan, fConfig, hintName, "reverse",
FetchDirection.REVERSE, ResultSet.FETCH_REVERSE);
fetchDirectionHintTest(fPlan, fConfig, hintName, FetchDirection.REVERSE
.name(), FetchDirection.REVERSE, ResultSet.FETCH_REVERSE);
fetchDirectionHintTest(fPlan, fConfig, hintName,
FetchDirection.REVERSE, FetchDirection.REVERSE,
ResultSet.FETCH_REVERSE);
fetchDirectionHintTest(fPlan, fConfig, hintName, "unknown",
FetchDirection.UNKNOWN, ResultSet.FETCH_UNKNOWN);
fetchDirectionHintTest(fPlan, fConfig, hintName, FetchDirection.UNKNOWN
.name(), FetchDirection.UNKNOWN, ResultSet.FETCH_UNKNOWN);
fetchDirectionHintTest(fPlan, fConfig, hintName,
FetchDirection.UNKNOWN, FetchDirection.UNKNOWN,
ResultSet.FETCH_UNKNOWN);
try {
fPlan.setHint(hintName, "xxxxx");
fPlan.setHint(hintName, "yyyyy");
fail("Expecting a IllegalArgumentException.");
} catch (Exception e) {
assertTrue("Caught expected exception",
IllegalArgumentException.class.isAssignableFrom(e.getClass()));
}
try {
fPlan.setHint(hintName, "12345");
fPlan.setHint(hintName, "67890");
fail("Expecting a IllegalArgumentException.");
} catch (Exception e) {
assertTrue("Caught expected exception",
IllegalArgumentException.class.isAssignableFrom(e.getClass()));
}
try {
fPlan.setHint(hintName, -1);
fPlan.setHint(hintName, -2);
fail("Expecting a IllegalArgumentException.");
} catch (Exception e) {
assertTrue("Caught expected exception",
IllegalArgumentException.class.isAssignableFrom(e.getClass()));
}
em.close();
}
/* Good
* Test "openjpa.jdbc.FetchDirection" hint
*/
public void testJdbcFetchDirectionHint() {
String hintName = "openjpa.jdbc.FetchDirection";
EntityManager em = emf.createEntityManager();
OpenJPAEntityManager oem = (OpenJPAEntityManager) em.getDelegate();
JDBCFetchPlan fPlan = (JDBCFetchPlan) oem.getFetchPlan();
JDBCFetchConfigurationImpl fConfig = (JDBCFetchConfigurationImpl)
((EntityManagerImpl) oem).getBroker().getFetchConfiguration();
fetchDirectionHintTest(fPlan, fConfig, hintName, String
.valueOf(ResultSet.FETCH_FORWARD), FetchDirection.FORWARD,
ResultSet.FETCH_FORWARD);
fetchDirectionHintTest(fPlan, fConfig, hintName,
ResultSet.FETCH_FORWARD, FetchDirection.FORWARD,
ResultSet.FETCH_FORWARD);
fetchDirectionHintTest(fPlan, fConfig, hintName, String
.valueOf(ResultSet.FETCH_REVERSE), FetchDirection.REVERSE,
ResultSet.FETCH_REVERSE);
fetchDirectionHintTest(fPlan, fConfig, hintName,
ResultSet.FETCH_REVERSE, FetchDirection.REVERSE,
ResultSet.FETCH_REVERSE);
fetchDirectionHintTest(fPlan, fConfig, hintName, String
.valueOf(ResultSet.FETCH_UNKNOWN), FetchDirection.UNKNOWN,
ResultSet.FETCH_UNKNOWN);
fetchDirectionHintTest(fPlan, fConfig, hintName,
ResultSet.FETCH_UNKNOWN, FetchDirection.UNKNOWN,
ResultSet.FETCH_UNKNOWN);
try {
fPlan.setHint(hintName, "xxxxx");
fPlan.setHint(hintName, "yyyyy");
fail("Expecting a IllegalArgumentException.");
} catch (Exception e) {
assertTrue("Caught expected exception",
IllegalArgumentException.class.isAssignableFrom(e.getClass()));
}
try {
fPlan.setHint(hintName, "12345");
fPlan.setHint(hintName, "67890");
fail("Expecting a IllegalArgumentException.");
} catch (Exception e) {
assertTrue("Caught expected exception",
IllegalArgumentException.class.isAssignableFrom(e.getClass()));
}
try {
fPlan.setHint(hintName, -1);
fPlan.setHint(hintName, -2);
fail("Expecting a IllegalArgumentException.");
} catch (Exception e) {
assertTrue("Caught expected exception",
IllegalArgumentException.class.isAssignableFrom(e.getClass()));
}
try {
fPlan.setHint(hintName, FetchConfiguration.DEFAULT);
assertEquals(fConfig.getFetchDirection(), ResultSet.FETCH_FORWARD);
} catch (Exception e) {
fail("Unexpected " + e.getClass().getName());
}
em.close();
}
private void fetchDirectionHintTest(JDBCFetchPlan fPlan,
JDBCFetchConfigurationImpl fConfig, String hint, Object value,
Object expectedValue, int expected) {
fPlan.setHint(hint, value);
Object getValue = fPlan.getHint(hint);
assertEquals(value.getClass(), getValue.getClass());
assertEquals(value, getValue);
assertEquals(expectedValue, fPlan.getFetchDirection());
assertEquals(expected, fConfig.getFetchDirection());
}
/* Good
* Test "openjpa.FetchPlan.Isolation" hint
*/
public void testFetchPlanIsolationHint() {
String hintName = "openjpa.FetchPlan.Isolation";
EntityManager em = emf.createEntityManager();
OpenJPAEntityManager oem = (OpenJPAEntityManager) em.getDelegate();
JDBCFetchPlan fPlan = (JDBCFetchPlan) oem.getFetchPlan();
JDBCFetchConfigurationImpl fConfig = (JDBCFetchConfigurationImpl)
((EntityManagerImpl) oem).getBroker().getFetchConfiguration();
isolationHintTest(oem, fPlan, fConfig, hintName, "default",
IsolationLevel.DEFAULT, -1);
isolationHintTest(oem, fPlan, fConfig, hintName, "DEFAULT",
IsolationLevel.DEFAULT, -1);
isolationHintTest(oem, fPlan, fConfig, hintName,
IsolationLevel.DEFAULT, IsolationLevel.DEFAULT, -1);
boolean supportIsolationForUpdate = ((JDBCConfiguration) fConfig
.getContext().getConfiguration()).getDBDictionaryInstance()
.supportsIsolationForUpdate();
if (supportIsolationForUpdate) {
isolationHintTest(oem, fPlan, fConfig, hintName, "none",
IsolationLevel.NONE, Connection.TRANSACTION_NONE);
isolationHintTest(oem, fPlan, fConfig, hintName, "NONE",
IsolationLevel.NONE, Connection.TRANSACTION_NONE);
isolationHintTest(oem, fPlan, fConfig, hintName,
IsolationLevel.NONE, IsolationLevel.NONE,
Connection.TRANSACTION_NONE);
isolationHintTest(oem, fPlan, fConfig, hintName,
"read-uncommitted", IsolationLevel.READ_UNCOMMITTED,
Connection.TRANSACTION_READ_UNCOMMITTED);
isolationHintTest(oem, fPlan, fConfig, hintName,
"READ_UNCOMMITTED", IsolationLevel.READ_UNCOMMITTED,
Connection.TRANSACTION_READ_UNCOMMITTED);
isolationHintTest(oem, fPlan, fConfig, hintName,
IsolationLevel.READ_UNCOMMITTED,
IsolationLevel.READ_UNCOMMITTED,
Connection.TRANSACTION_READ_UNCOMMITTED);
isolationHintTest(oem, fPlan, fConfig, hintName, "read-committed",
IsolationLevel.READ_COMMITTED,
Connection.TRANSACTION_READ_COMMITTED);
isolationHintTest(oem, fPlan, fConfig, hintName, "READ_COMMITTED",
IsolationLevel.READ_COMMITTED,
Connection.TRANSACTION_READ_COMMITTED);
isolationHintTest(oem, fPlan, fConfig, hintName,
IsolationLevel.READ_COMMITTED, IsolationLevel.READ_COMMITTED,
Connection.TRANSACTION_READ_COMMITTED);
isolationHintTest(oem, fPlan, fConfig, hintName, "repeatable-read",
IsolationLevel.REPEATABLE_READ,
Connection.TRANSACTION_REPEATABLE_READ);
isolationHintTest(oem, fPlan, fConfig, hintName, "REPEATABLE_READ",
IsolationLevel.REPEATABLE_READ,
Connection.TRANSACTION_REPEATABLE_READ);
isolationHintTest(oem, fPlan, fConfig, hintName,
IsolationLevel.REPEATABLE_READ, IsolationLevel.REPEATABLE_READ,
Connection.TRANSACTION_REPEATABLE_READ);
isolationHintTest(oem, fPlan, fConfig, hintName, "serializable",
IsolationLevel.SERIALIZABLE,
Connection.TRANSACTION_SERIALIZABLE);
isolationHintTest(oem, fPlan, fConfig, hintName, "SERIALIZABLE",
IsolationLevel.SERIALIZABLE,
Connection.TRANSACTION_SERIALIZABLE);
isolationHintTest(oem, fPlan, fConfig, hintName,
IsolationLevel.SERIALIZABLE, IsolationLevel.SERIALIZABLE,
Connection.TRANSACTION_SERIALIZABLE);
}
try {
fPlan.setHint(hintName, "xxxxx");
fPlan.setHint(hintName, "yyyyy");
fail("Expecting a IllegalArgumentException.");
} catch (Exception e) {
assertTrue("Caught expected exception",
IllegalArgumentException.class.isAssignableFrom(e.getClass()));
}
try {
fPlan.setHint(hintName, "12345");
fPlan.setHint(hintName, "67890");
fail("Expecting a a IllegalArgumentException.");
} catch (Exception e) {
assertTrue("Caught expected exception",
IllegalArgumentException.class.isAssignableFrom(e.getClass()));
}
// Is not -1 is valid value for transaction isolation level?
// try {
// fPlan.setHint(hintName, -1);
// fPlan.setHint(hintName, -1);
// fail("Expecting a a IllegalArgumentException.");
// } catch (Exception e) {
// assertTrue("Caught expected exception",
// IllegalArgumentException.class.isAssignableFrom(e.getClass()));
// }
em.close();
}
/* Good
* Test "openjpa.jdbc.TransactionIsolation" hint
*/
public void testJdbcTransactionIsolationHint() {
String hintName = "openjpa.jdbc.TransactionIsolation";
EntityManager em = emf.createEntityManager();
OpenJPAEntityManager oem = (OpenJPAEntityManager) em.getDelegate();
JDBCFetchPlan fPlan = (JDBCFetchPlan) oem.getFetchPlan();
JDBCFetchConfigurationImpl fConfig = (JDBCFetchConfigurationImpl)
((EntityManagerImpl) oem).getBroker().getFetchConfiguration();
isolationHintTest(oem, fPlan, fConfig, hintName, "-1",
IsolationLevel.DEFAULT, -1);
isolationHintTest(oem, fPlan, fConfig, hintName, -1,
IsolationLevel.DEFAULT, -1);
boolean supportIsolationForUpdate = ((JDBCConfiguration) fConfig
.getContext().getConfiguration()).getDBDictionaryInstance()
.supportsIsolationForUpdate();
if (supportIsolationForUpdate) {
isolationHintTest(oem, fPlan, fConfig, hintName, String
.valueOf(Connection.TRANSACTION_NONE), IsolationLevel.NONE,
Connection.TRANSACTION_NONE);
isolationHintTest(oem, fPlan, fConfig, hintName,
Connection.TRANSACTION_NONE, IsolationLevel.NONE,
Connection.TRANSACTION_NONE);
isolationHintTest(oem, fPlan, fConfig, hintName, String
.valueOf(Connection.TRANSACTION_READ_UNCOMMITTED),
IsolationLevel.READ_UNCOMMITTED,
Connection.TRANSACTION_READ_UNCOMMITTED);
isolationHintTest(oem, fPlan, fConfig, hintName,
Connection.TRANSACTION_READ_UNCOMMITTED,
IsolationLevel.READ_UNCOMMITTED,
Connection.TRANSACTION_READ_UNCOMMITTED);
isolationHintTest(oem, fPlan, fConfig, hintName, String
.valueOf(Connection.TRANSACTION_READ_COMMITTED),
IsolationLevel.READ_COMMITTED,
Connection.TRANSACTION_READ_COMMITTED);
isolationHintTest(oem, fPlan, fConfig, hintName,
Connection.TRANSACTION_READ_COMMITTED,
IsolationLevel.READ_COMMITTED,
Connection.TRANSACTION_READ_COMMITTED);
isolationHintTest(oem, fPlan, fConfig, hintName, String
.valueOf(Connection.TRANSACTION_REPEATABLE_READ),
IsolationLevel.REPEATABLE_READ,
Connection.TRANSACTION_REPEATABLE_READ);
isolationHintTest(oem, fPlan, fConfig, hintName,
Connection.TRANSACTION_REPEATABLE_READ,
IsolationLevel.REPEATABLE_READ,
Connection.TRANSACTION_REPEATABLE_READ);
isolationHintTest(oem, fPlan, fConfig, hintName, String
.valueOf(Connection.TRANSACTION_SERIALIZABLE),
IsolationLevel.SERIALIZABLE,
Connection.TRANSACTION_SERIALIZABLE);
isolationHintTest(oem, fPlan, fConfig, hintName,
Connection.TRANSACTION_SERIALIZABLE,
IsolationLevel.SERIALIZABLE,
Connection.TRANSACTION_SERIALIZABLE);
}
try {
fPlan.setHint(hintName, "xxxxx");
fPlan.setHint(hintName, "yyyyy");
fail("Expecting a IllegalArgumentException.");
} catch (Exception e) {
assertTrue("Caught expected exception",
IllegalArgumentException.class.isAssignableFrom(e.getClass()));
}
try {
fPlan.setHint(hintName, "12345");
fPlan.setHint(hintName, "67890");
fail("Expecting a a IllegalArgumentException.");
} catch (Exception e) {
assertTrue("Caught expected exception",
IllegalArgumentException.class.isAssignableFrom(e.getClass()));
}
try {
fPlan.setHint(hintName, -2);
fPlan.setHint(hintName, -3);
fail("Expecting a a IllegalArgumentException.");
} catch (Exception e) {
assertTrue("Caught expected exception",
IllegalArgumentException.class.isAssignableFrom(e.getClass()));
}
try {
fPlan.setHint(hintName, FetchConfiguration.DEFAULT);
assertEquals(IsolationLevel.DEFAULT, fPlan.getIsolation());
assertEquals(-1, fConfig.getIsolation());
} catch (Exception e) {
fail("Unexpected " + e.getClass().getName());
}
em.close();
}
@SuppressWarnings("deprecation")
private void isolationHintTest(OpenJPAEntityManager oem,
JDBCFetchPlan fPlan, JDBCFetchConfigurationImpl fConfig, String hint,
Object value, Object expectedValue, int expected) {
fPlan.setHint(hint, value);
Object getValue = fPlan.getHint(hint);
assertEquals(value.getClass(), getValue.getClass());
assertEquals(value, getValue);
assertEquals(expectedValue, fPlan.getIsolation());
assertEquals(expected, fConfig.getIsolation());
}
/* Good
* Test "openjpa.FetchPlan.LRSSizeAlgorithm" hint
*/
public void testFetchPlanLRSSizeAlgorithmHint() {
String hintName = "openjpa.FetchPlan.LRSSizeAlgorithm";
EntityManager em = emf.createEntityManager();
OpenJPAEntityManager oem = (OpenJPAEntityManager) em.getDelegate();
JDBCFetchPlan fPlan = (JDBCFetchPlan) oem.getFetchPlan();
JDBCFetchConfigurationImpl fConfig = (JDBCFetchConfigurationImpl)
((EntityManagerImpl) oem).getBroker().getFetchConfiguration();
lrsSizeHintTest(fPlan, fConfig, hintName, "query",
LRSSizeAlgorithm.QUERY, LRSSizes.SIZE_QUERY);
lrsSizeHintTest(fPlan, fConfig, hintName, LRSSizeAlgorithm.QUERY.name(),
LRSSizeAlgorithm.QUERY, LRSSizes.SIZE_QUERY);
lrsSizeHintTest(fPlan, fConfig, hintName, LRSSizeAlgorithm.QUERY,
LRSSizeAlgorithm.QUERY, LRSSizes.SIZE_QUERY);
lrsSizeHintTest(fPlan, fConfig, hintName, "last",
LRSSizeAlgorithm.LAST, LRSSizes.SIZE_LAST);
lrsSizeHintTest(fPlan, fConfig, hintName, LRSSizeAlgorithm.LAST.name(),
LRSSizeAlgorithm.LAST, LRSSizes.SIZE_LAST);
lrsSizeHintTest(fPlan, fConfig, hintName, LRSSizeAlgorithm.LAST,
LRSSizeAlgorithm.LAST, LRSSizes.SIZE_LAST);
lrsSizeHintTest(fPlan, fConfig, hintName, "unknown",
LRSSizeAlgorithm.UNKNOWN, LRSSizes.SIZE_UNKNOWN);
lrsSizeHintTest(fPlan, fConfig, hintName, LRSSizeAlgorithm.UNKNOWN
.name(), LRSSizeAlgorithm.UNKNOWN, LRSSizes.SIZE_UNKNOWN);
lrsSizeHintTest(fPlan, fConfig, hintName, LRSSizeAlgorithm.UNKNOWN,
LRSSizeAlgorithm.UNKNOWN, LRSSizes.SIZE_UNKNOWN);
try {
fPlan.setHint(hintName, "xxxxx");
fPlan.setHint(hintName, "yyyyy");
fail("Expecting a a IllegalArgumentException.");
} catch (Exception e) {
assertTrue("Caught expected exception",
IllegalArgumentException.class.isAssignableFrom(e.getClass()));
}
try {
fPlan.setHint(hintName, "12345");
fPlan.setHint(hintName, "67890");
fail("Expecting a a IllegalArgumentException.");
} catch (Exception e) {
assertTrue("Caught expected exception",
IllegalArgumentException.class.isAssignableFrom(e.getClass()));
}
try {
fPlan.setHint(hintName, -1);
fPlan.setHint(hintName, -2);
fail("Expecting a a IllegalArgumentException.");
} catch (Exception e) {
assertTrue("Caught unexpected exception " + e,
IllegalArgumentException.class.isAssignableFrom(e.getClass()));
}
em.close();
}
/* Good
* Test "openjpa.FetchPlan.LRSSize" hint
*/
@SuppressWarnings("deprecation")
public void testFetchPlanLRSSizeHint() {
String hintName = "openjpa.FetchPlan.LRSSize";
EntityManager em = emf.createEntityManager();
OpenJPAEntityManager oem = (OpenJPAEntityManager) em.getDelegate();
JDBCFetchPlan fPlan = (JDBCFetchPlan) oem.getFetchPlan();
JDBCFetchConfigurationImpl fConfig = (JDBCFetchConfigurationImpl)
((EntityManagerImpl) oem).getBroker().getFetchConfiguration();
lrsSizeHintTest(fPlan, fConfig, hintName, String
.valueOf(LRSSizes.SIZE_QUERY), LRSSizeAlgorithm.QUERY,
LRSSizes.SIZE_QUERY);
lrsSizeHintTest(fPlan, fConfig, hintName, LRSSizes.SIZE_QUERY,
LRSSizeAlgorithm.QUERY, LRSSizes.SIZE_QUERY);
lrsSizeHintTest(fPlan, fConfig, hintName, String
.valueOf(LRSSizes.SIZE_LAST), LRSSizeAlgorithm.LAST,
LRSSizes.SIZE_LAST);
lrsSizeHintTest(fPlan, fConfig, hintName, LRSSizes.SIZE_LAST,
LRSSizeAlgorithm.LAST, LRSSizes.SIZE_LAST);
lrsSizeHintTest(fPlan, fConfig, hintName, String
.valueOf(LRSSizes.SIZE_UNKNOWN), LRSSizeAlgorithm.UNKNOWN,
LRSSizes.SIZE_UNKNOWN);
lrsSizeHintTest(fPlan, fConfig, hintName, LRSSizes.SIZE_UNKNOWN,
LRSSizeAlgorithm.UNKNOWN, LRSSizes.SIZE_UNKNOWN);
try {
fPlan.setHint(hintName, "xxxxx");
fPlan.setHint(hintName, "yyyyy");
fail("Expecting a a IllegalArgumentException.");
} catch (Exception e) {
assertTrue("Caught expected exception",
IllegalArgumentException.class.isAssignableFrom(e.getClass()));
}
try {
fPlan.setHint(hintName, "12345");
fPlan.setHint(hintName, "67890");
fail("Expecting a a IllegalArgumentException.");
} catch (Exception e) {
assertTrue("Caught expected exception",
IllegalArgumentException.class.isAssignableFrom(e.getClass()));
}
try {
fPlan.setHint(hintName, -1);
fPlan.setHint(hintName, -2);
fail("Expecting a a IllegalArgumentException.");
} catch (Exception e) {
assertTrue("Caught expected exception",
IllegalArgumentException.class.isAssignableFrom(e.getClass()));
}
try {
fPlan.setHint(hintName, FetchConfiguration.DEFAULT);
assertEquals(LRSSizeAlgorithm.QUERY, fPlan.getLRSSizeAlgorithm());
assertEquals(LRSSizes.SIZE_QUERY, fPlan.getLRSSize());
assertEquals(LRSSizes.SIZE_QUERY, fConfig.getLRSSize());
} catch (Exception e) {
e.printStackTrace();
fail("Unexpected " + e.getClass().getName());
}
em.close();
}
/* Good
* Test "openjpa.jdbc.LRSSize" hint
*/
@SuppressWarnings("deprecation")
public void testJdbcLRSSizeHint() {
String hintName = "openjpa.jdbc.LRSSize";
EntityManager em = emf.createEntityManager();
OpenJPAEntityManager oem = (OpenJPAEntityManager) em.getDelegate();
JDBCFetchPlan fPlan = (JDBCFetchPlan) oem.getFetchPlan();
JDBCFetchConfigurationImpl fConfig = (JDBCFetchConfigurationImpl)
((EntityManagerImpl) oem).getBroker().getFetchConfiguration();
lrsSizeHintTest(fPlan, fConfig, hintName, String
.valueOf(LRSSizes.SIZE_QUERY), LRSSizeAlgorithm.QUERY,
LRSSizes.SIZE_QUERY);
lrsSizeHintTest(fPlan, fConfig, hintName, LRSSizes.SIZE_QUERY,
LRSSizeAlgorithm.QUERY, LRSSizes.SIZE_QUERY);
lrsSizeHintTest(fPlan, fConfig, hintName, String
.valueOf(LRSSizes.SIZE_LAST), LRSSizeAlgorithm.LAST,
LRSSizes.SIZE_LAST);
lrsSizeHintTest(fPlan, fConfig, hintName, LRSSizes.SIZE_LAST,
LRSSizeAlgorithm.LAST, LRSSizes.SIZE_LAST);
lrsSizeHintTest(fPlan, fConfig, hintName, String
.valueOf(LRSSizes.SIZE_UNKNOWN), LRSSizeAlgorithm.UNKNOWN,
LRSSizes.SIZE_UNKNOWN);
lrsSizeHintTest(fPlan, fConfig, hintName, LRSSizes.SIZE_UNKNOWN,
LRSSizeAlgorithm.UNKNOWN, LRSSizes.SIZE_UNKNOWN);
try {
fPlan.setHint(hintName, "xxxxx");
fPlan.setHint(hintName, "yyyyy");
fail("Expecting a a IllegalArgumentException.");
} catch (Exception e) {
assertTrue("Caught expected exception",
IllegalArgumentException.class.isAssignableFrom(e.getClass()));
}
try {
fPlan.setHint(hintName, "12345");
fPlan.setHint(hintName, "67890");
fail("Expecting a a IllegalArgumentException.");
} catch (Exception e) {
assertTrue("Caught expected exception",
IllegalArgumentException.class.isAssignableFrom(e.getClass()));
}
try {
fPlan.setHint(hintName, -1);
fPlan.setHint(hintName, -2);
fail("Expecting a a IllegalArgumentException.");
} catch (Exception e) {
assertTrue("Caught expected exception",
IllegalArgumentException.class.isAssignableFrom(e.getClass()));
}
try {
fPlan.setHint(hintName, FetchConfiguration.DEFAULT);
assertEquals(LRSSizeAlgorithm.QUERY, fPlan.getLRSSizeAlgorithm());
assertEquals(LRSSizes.SIZE_QUERY, fPlan.getLRSSize());
assertEquals(LRSSizes.SIZE_QUERY, fConfig.getLRSSize());
} catch (Exception e) {
e.printStackTrace();
fail("Unexpected " + e.getClass().getName());
}
em.close();
}
@SuppressWarnings("deprecation")
private void lrsSizeHintTest(JDBCFetchPlan fPlan,
JDBCFetchConfigurationImpl fConfig, String hint, Object value,
Object expectedValue, int expected) {
fPlan.setHint(hint, value);
Object getValue = fPlan.getHint(hint);
assertEquals(value.getClass(), getValue.getClass());
assertEquals(value, getValue);
assertEquals(expectedValue, fPlan.getLRSSizeAlgorithm());
assertEquals(expected, fPlan.getLRSSize());
assertEquals(expected, fConfig.getLRSSize());
}
/* Good
* Test "openjpa.FetchPlan.MaxFetchDepth" hint
*/
public void testFetchPlanMaxFetchDepthHint() {
String hintName = "openjpa.FetchPlan.MaxFetchDepth";
EntityManager em = emf.createEntityManager();
OpenJPAEntityManager oem = (OpenJPAEntityManager)em.getDelegate();
JDBCFetchPlan fPlan = (JDBCFetchPlan) oem.getFetchPlan();
JDBCFetchConfigurationImpl fConfig = (JDBCFetchConfigurationImpl)
((EntityManagerImpl) oem).getBroker().getFetchConfiguration();
maxFetchDepthHintTest(fPlan, fConfig, hintName, "-1", -1);
maxFetchDepthHintTest(fPlan, fConfig, hintName, -1, -1);
maxFetchDepthHintTest(fPlan, fConfig, hintName, "500", 500);
maxFetchDepthHintTest(fPlan, fConfig, hintName, 500, 500);
try {
fPlan.setHint(hintName, "xxxxx");
fPlan.setHint(hintName, "yyyyy");
fail("Expecting a a IllegalArgumentException.");
} catch (Exception e) {
assertTrue("Caught expected exception",
IllegalArgumentException.class.isAssignableFrom(e.getClass()));
}
try {
fPlan.setHint(hintName, FetchConfiguration.DEFAULT);
assertEquals(-1, fPlan.getMaxFetchDepth());
assertEquals(-1, fConfig.getMaxFetchDepth());
} catch (IllegalArgumentException e) {
fail("Unexpected IllegalArgumentException.");
}
em.close();
}
/* Good
* Test "openjpa.MaxFetchDepth" hint
*/
public void testMaxFetchDepthHint() {
String hintName = "openjpa.MaxFetchDepth";
EntityManager em = emf.createEntityManager();
OpenJPAEntityManager oem = (OpenJPAEntityManager)em.getDelegate();
JDBCFetchPlan fPlan = (JDBCFetchPlan) oem.getFetchPlan();
JDBCFetchConfigurationImpl fConfig = (JDBCFetchConfigurationImpl)
((EntityManagerImpl) oem).getBroker().getFetchConfiguration();
maxFetchDepthHintTest(fPlan, fConfig, hintName, "-1", -1);
maxFetchDepthHintTest(fPlan, fConfig, hintName, -1, -1);
maxFetchDepthHintTest(fPlan, fConfig, hintName, "100", 100);
maxFetchDepthHintTest(fPlan, fConfig, hintName, 100, 100);
try {
fPlan.setHint(hintName, "xxxxx");
fPlan.setHint(hintName, "yyyyy");
fail("Expecting a a IllegalArgumentException.");
} catch (Exception e) {
assertTrue("Caught expected exception",
IllegalArgumentException.class.isAssignableFrom(e.getClass()));
}
try {
fPlan.setHint(hintName, FetchConfiguration.DEFAULT);
assertEquals(-1, fPlan.getMaxFetchDepth());
assertEquals(-1, fConfig.getMaxFetchDepth());
} catch (Exception e) {
fail("Unexpected " + e.getClass().getName());
}
em.close();
}
private void maxFetchDepthHintTest(JDBCFetchPlan fPlan,
JDBCFetchConfigurationImpl fConfig, String hint, Object value,
int expected) {
fPlan.setHint(hint, value);
Object getValue = fPlan.getHint(hint);
assertEquals(value.getClass(), getValue.getClass());
assertEquals(value, getValue);
assertEquals(expected, fPlan.getMaxFetchDepth());
assertEquals(expected, fConfig.getMaxFetchDepth());
}
/* Good
* Test "openjpa.LockTimeout" hint
*/
public void testLockTimeoutHint() {
String hintName = "openjpa.LockTimeout";
EntityManager em = emf.createEntityManager();
OpenJPAEntityManager oem = (OpenJPAEntityManager)em.getDelegate();
JDBCFetchPlan fPlan = (JDBCFetchPlan) oem.getFetchPlan();
JDBCFetchConfigurationImpl fConfig = (JDBCFetchConfigurationImpl)
((EntityManagerImpl) oem).getBroker().getFetchConfiguration();
lockTimeoutHintTest(fPlan, fConfig, hintName, "-1", -1);
lockTimeoutHintTest(fPlan, fConfig, hintName, -1, -1);
lockTimeoutHintTest(fPlan, fConfig, hintName, "0", 0);
lockTimeoutHintTest(fPlan, fConfig, hintName, 0, 0);
lockTimeoutHintTest(fPlan, fConfig, hintName, "100", 100);
lockTimeoutHintTest(fPlan, fConfig, hintName, 100, 100);
try {
fPlan.setHint(hintName, "xxxxx");
fPlan.setHint(hintName, "yyyyy");
fail("Expecting a a IllegalArgumentException.");
} catch (Exception e) {
assertTrue("Caught expected exception",
IllegalArgumentException.class.isAssignableFrom(e.getClass()));
}
try {
fPlan.setHint(hintName, -2);
fPlan.setHint(hintName, -3);
fail("Expecting a a IllegalArgumentException.");
} catch (Exception e) {
assertTrue("Caught expected exception",
IllegalArgumentException.class.isAssignableFrom(e.getClass()));
}
try {
fPlan.setHint(hintName, FetchConfiguration.DEFAULT);
int defTimeout = fConfig.getContext().getConfiguration()
.getLockTimeout();
assertEquals(defTimeout, fPlan.getLockTimeout());
assertEquals(defTimeout, fConfig.getLockTimeout());
} catch (Exception e) {
fail("Unexpected " + e.getClass().getName());
}
em.close();
}
/* Good
* Test "openjpa.FetchPlan.LockTimeout" hint
*/
public void testFetchPlanLockTimeoutHint() {
String hintName = "openjpa.FetchPlan.LockTimeout";
EntityManager em = emf.createEntityManager();
OpenJPAEntityManager oem = (OpenJPAEntityManager)em.getDelegate();
JDBCFetchPlan fPlan = (JDBCFetchPlan) oem.getFetchPlan();
JDBCFetchConfigurationImpl fConfig = (JDBCFetchConfigurationImpl)
((EntityManagerImpl) oem).getBroker().getFetchConfiguration();
lockTimeoutHintTest(fPlan, fConfig, hintName, "-1", -1);
lockTimeoutHintTest(fPlan, fConfig, hintName, -1, -1);
lockTimeoutHintTest(fPlan, fConfig, hintName, "0", 0);
lockTimeoutHintTest(fPlan, fConfig, hintName, 0, 0);
lockTimeoutHintTest(fPlan, fConfig, hintName, "1500", 1500);
lockTimeoutHintTest(fPlan, fConfig, hintName, 1500, 1500);
try {
fPlan.setHint(hintName, "xxxxx");
fPlan.setHint(hintName, "yyyyy");
fail("Expecting a a IllegalArgumentException.");
} catch (Exception e) {
assertTrue("Caught expected exception",
IllegalArgumentException.class.isAssignableFrom(e.getClass()));
}
try {
fPlan.setHint(hintName, -2);
fPlan.setHint(hintName, -3);
fail("Expecting a a IllegalArgumentException.");
} catch (Exception e) {
assertTrue("Caught expected exception",
IllegalArgumentException.class.isAssignableFrom(e.getClass()));
}
try {
fPlan.setHint(hintName, FetchConfiguration.DEFAULT);
int defTimeout = fConfig.getContext().getConfiguration()
.getLockTimeout();
assertEquals(defTimeout, fPlan.getLockTimeout());
assertEquals(defTimeout, fConfig.getLockTimeout());
} catch (Exception e) {
fail("Unexpected " + e.getClass().getName());
}
em.close();
}
/* Good
* Test "javax.persistence.lock.timeout" hint
*/
public void testJavaxLockTimeoutHint() {
String hintName = "javax.persistence.lock.timeout";
EntityManager em = emf.createEntityManager();
OpenJPAEntityManager oem = (OpenJPAEntityManager)em.getDelegate();
JDBCFetchPlan fPlan = (JDBCFetchPlan) oem.getFetchPlan();
JDBCFetchConfigurationImpl fConfig = (JDBCFetchConfigurationImpl)
((EntityManagerImpl) oem).getBroker().getFetchConfiguration();
lockTimeoutHintTest(fPlan, fConfig, hintName, "-1", -1);
lockTimeoutHintTest(fPlan, fConfig, hintName, -1, -1);
lockTimeoutHintTest(fPlan, fConfig, hintName, "0", 0);
lockTimeoutHintTest(fPlan, fConfig, hintName, 0, 0);
lockTimeoutHintTest(fPlan, fConfig, hintName, "2000", 2000);
lockTimeoutHintTest(fPlan, fConfig, hintName, 2000, 2000);
try {
fPlan.setHint(hintName, "xxxxx");
fPlan.setHint(hintName, "yyyyy");
fail("Expecting a a IllegalArgumentException.");
} catch (Exception e) {
assertTrue("Caught expected exception",
IllegalArgumentException.class.isAssignableFrom(e.getClass()));
}
try {
fPlan.setHint(hintName, -2);
fPlan.setHint(hintName, -3);
fail("Expecting a a IllegalArgumentException.");
} catch (Exception e) {
assertTrue("Caught expected exception",
IllegalArgumentException.class.isAssignableFrom(e.getClass()));
}
try {
fPlan.setHint(hintName, FetchConfiguration.DEFAULT);
int defTimeout = fConfig.getContext().getConfiguration()
.getLockTimeout();
assertEquals(defTimeout, fPlan.getLockTimeout());
assertEquals(defTimeout, fConfig.getLockTimeout());
} catch (Exception e) {
fail("Unexpected " + e.getClass().getName());
}
em.close();
}
private void lockTimeoutHintTest(JDBCFetchPlan fPlan,
JDBCFetchConfigurationImpl fConfig, String hint, Object value,
int expected) {
fPlan.setHint(hint, value);
Object getValue = fPlan.getHint(hint);
assertEquals(value.getClass(), getValue.getClass());
assertEquals(value, getValue);
assertEquals(expected, fPlan.getLockTimeout());
assertEquals(expected, fConfig.getLockTimeout());
}
/* Good
* Test "openjpa.QueryTimeout" hint
*/
public void testQueryTimeoutHint() {
String hintName = "openjpa.QueryTimeout";
EntityManager em = emf.createEntityManager();
OpenJPAEntityManager oem = (OpenJPAEntityManager)em.getDelegate();
JDBCFetchPlan fPlan = (JDBCFetchPlan) oem.getFetchPlan();
JDBCFetchConfigurationImpl fConfig = (JDBCFetchConfigurationImpl)
((EntityManagerImpl) oem).getBroker().getFetchConfiguration();
queryTimeoutHintTest(fPlan, fConfig, hintName, "-1", -1);
queryTimeoutHintTest(fPlan, fConfig, hintName, -1, -1);
queryTimeoutHintTest(fPlan, fConfig, hintName, "0", 0);
queryTimeoutHintTest(fPlan, fConfig, hintName, 0, 0);
queryTimeoutHintTest(fPlan, fConfig, hintName, "100", 100);
queryTimeoutHintTest(fPlan, fConfig, hintName, 100, 100);
try {
fPlan.setHint(hintName, "xxxxx");
fPlan.setHint(hintName, "yyyyy");
fail("Expecting a a IllegalArgumentException.");
} catch (Exception e) {
assertTrue("Caught expected exception",
IllegalArgumentException.class.isAssignableFrom(e.getClass()));
}
try {
fPlan.setHint(hintName, -2);
fPlan.setHint(hintName, -3);
fail("Expecting a a IllegalArgumentException.");
} catch (Exception e) {
assertTrue("Caught expected exception",
IllegalArgumentException.class.isAssignableFrom(e.getClass()));
}
try {
fPlan.setHint(hintName, FetchConfiguration.DEFAULT);
int defTimeout = fConfig.getContext().getConfiguration()
.getQueryTimeout();
assertEquals(defTimeout, fPlan.getQueryTimeout());
assertEquals(defTimeout, fConfig.getQueryTimeout());
} catch (Exception e) {
fail("Unexpected " + e.getClass().getName());
}
em.close();
}
/* Good
* Test "openjpa.FetchPlan.QueryTimeout" hint
*/
public void testFetchPlanQueryTimeoutHint() {
String hintName = "openjpa.FetchPlan.QueryTimeout";
EntityManager em = emf.createEntityManager();
OpenJPAEntityManager oem = (OpenJPAEntityManager)em.getDelegate();
JDBCFetchPlan fPlan = (JDBCFetchPlan) oem.getFetchPlan();
JDBCFetchConfigurationImpl fConfig = (JDBCFetchConfigurationImpl)
((EntityManagerImpl) oem).getBroker().getFetchConfiguration();
queryTimeoutHintTest(fPlan, fConfig, hintName, "-1", -1);
queryTimeoutHintTest(fPlan, fConfig, hintName, -1, -1);
queryTimeoutHintTest(fPlan, fConfig, hintName, "0", 0);
queryTimeoutHintTest(fPlan, fConfig, hintName, 0, 0);
queryTimeoutHintTest(fPlan, fConfig, hintName, "1500", 1500);
queryTimeoutHintTest(fPlan, fConfig, hintName, 1500, 1500);
try {
fPlan.setHint(hintName, "xxxxx");
fPlan.setHint(hintName, "yyyyy");
fail("Expecting a a IllegalArgumentException.");
} catch (Exception e) {
assertTrue("Caught expected exception",
IllegalArgumentException.class.isAssignableFrom(e.getClass()));
}
try {
fPlan.setHint(hintName, -2);
fPlan.setHint(hintName, -3);
fail("Expecting a a IllegalArgumentException.");
} catch (Exception e) {
assertTrue("Caught expected exception",
IllegalArgumentException.class.isAssignableFrom(e.getClass()));
}
try {
fPlan.setHint(hintName, FetchConfiguration.DEFAULT);
int defTimeout = fConfig.getContext().getConfiguration()
.getQueryTimeout();
assertEquals(defTimeout, fPlan.getQueryTimeout());
assertEquals(defTimeout, fConfig.getQueryTimeout());
} catch (Exception e) {
fail("Unexpected " + e.getClass().getName());
}
em.close();
}
/* Good
* Test "javax.persistence.query.timeout" hint
*/
public void testJavaxQueryTimeoutHint() {
String hintName = "javax.persistence.query.timeout";
EntityManager em = emf.createEntityManager();
OpenJPAEntityManager oem = (OpenJPAEntityManager)em.getDelegate();
JDBCFetchPlan fPlan = (JDBCFetchPlan) oem.getFetchPlan();
JDBCFetchConfigurationImpl fConfig = (JDBCFetchConfigurationImpl)
((EntityManagerImpl) oem).getBroker().getFetchConfiguration();
queryTimeoutHintTest(fPlan, fConfig, hintName, "-1", -1);
queryTimeoutHintTest(fPlan, fConfig, hintName, -1, -1);
queryTimeoutHintTest(fPlan, fConfig, hintName, "0", 0);
queryTimeoutHintTest(fPlan, fConfig, hintName, 0, 0);
queryTimeoutHintTest(fPlan, fConfig, hintName, "2000", 2000);
queryTimeoutHintTest(fPlan, fConfig, hintName, 2000, 2000);
try {
fPlan.setHint(hintName, "xxxxx");
fPlan.setHint(hintName, "yyyyy");
fail("Expecting a a IllegalArgumentException.");
} catch (Exception e) {
assertTrue("Caught expected exception",
IllegalArgumentException.class.isAssignableFrom(e.getClass()));
}
try {
fPlan.setHint(hintName, -2);
fPlan.setHint(hintName, -3);
fail("Expecting a a IllegalArgumentException.");
} catch (Exception e) {
assertTrue("Caught expected exception",
IllegalArgumentException.class.isAssignableFrom(e.getClass()));
}
try {
fPlan.setHint(hintName, FetchConfiguration.DEFAULT);
int defTimeout = fConfig.getContext().getConfiguration()
.getQueryTimeout();
assertEquals(defTimeout, fPlan.getQueryTimeout());
assertEquals(defTimeout, fConfig.getQueryTimeout());
} catch (Exception e) {
fail("Unexpected " + e.getClass().getName());
}
em.close();
}
private void queryTimeoutHintTest(JDBCFetchPlan fPlan,
JDBCFetchConfigurationImpl fConfig, String hint, Object value,
int expected) {
fPlan.setHint(hint, value);
Object getValue = fPlan.getHint(hint);
assertEquals(value.getClass(), getValue.getClass());
assertEquals(value, getValue);
assertEquals(expected, fPlan.getQueryTimeout());
assertEquals(expected, fConfig.getQueryTimeout());
}
/* Good
* Test "openjpa.FetchPlan.ResultSetType" hint
*/
public void testFetchPlanResultSetTypeHint() {
String hintName = "openjpa.FetchPlan.ResultSetType";
EntityManager em = emf.createEntityManager();
OpenJPAEntityManager oem = (OpenJPAEntityManager)em.getDelegate();
JDBCFetchPlan fPlan = (JDBCFetchPlan) oem.getFetchPlan();
JDBCFetchConfigurationImpl fConfig = (JDBCFetchConfigurationImpl)
((EntityManagerImpl) oem).getBroker().getFetchConfiguration();
resultSetTypeHintTest(fPlan, fConfig, hintName,
ResultSetType.FORWARD_ONLY.name(), ResultSetType.FORWARD_ONLY,
ResultSet.TYPE_FORWARD_ONLY);
resultSetTypeHintTest(fPlan, fConfig, hintName,
ResultSetType.FORWARD_ONLY, ResultSetType.FORWARD_ONLY,
ResultSet.TYPE_FORWARD_ONLY);
resultSetTypeHintTest(fPlan, fConfig, hintName,
ResultSetType.SCROLL_SENSITIVE.name(),
ResultSetType.SCROLL_SENSITIVE, ResultSet.TYPE_SCROLL_SENSITIVE);
resultSetTypeHintTest(fPlan, fConfig, hintName,
ResultSetType.SCROLL_SENSITIVE, ResultSetType.SCROLL_SENSITIVE,
ResultSet.TYPE_SCROLL_SENSITIVE);
resultSetTypeHintTest(fPlan, fConfig, hintName,
ResultSetType.SCROLL_INSENSITIVE.name(),
ResultSetType.SCROLL_INSENSITIVE,
ResultSet.TYPE_SCROLL_INSENSITIVE);
resultSetTypeHintTest(fPlan, fConfig, hintName,
ResultSetType.SCROLL_INSENSITIVE, ResultSetType.SCROLL_INSENSITIVE,
ResultSet.TYPE_SCROLL_INSENSITIVE);
try {
fPlan.setHint(hintName, "xxxxx");
fPlan.setHint(hintName, "yyyyy");
fail("Expecting a a IllegalArgumentException.");
} catch (Exception e) {
assertTrue("Caught expected exception",
IllegalArgumentException.class.isAssignableFrom(e.getClass()));
}
try {
fPlan.setHint(hintName, "12345");
fPlan.setHint(hintName, "67890");
fail("Expecting a a IllegalArgumentException.");
} catch (Exception e) {
assertTrue("Caught expected exception",
IllegalArgumentException.class.isAssignableFrom(e.getClass()));
}
try {
fPlan.setHint(hintName, -1);
fPlan.setHint(hintName, -2);
fail("Expecting a a IllegalArgumentException.");
} catch (Exception e) {
assertTrue("Caught unexpected exception " + e,
IllegalArgumentException.class.isAssignableFrom(e.getClass()));
}
em.close();
}
/* Good
* Test "openjpa.jdbc.ResultSetType" hint
*/
public void testJdbcResultSetTypeHint() {
String hintName = "openjpa.jdbc.ResultSetType";
EntityManager em = emf.createEntityManager();
OpenJPAEntityManager oem = (OpenJPAEntityManager) em.getDelegate();
JDBCFetchPlan fPlan = (JDBCFetchPlan) oem.getFetchPlan();
JDBCFetchConfigurationImpl fConfig = (JDBCFetchConfigurationImpl)
((EntityManagerImpl) oem).getBroker().getFetchConfiguration();
resultSetTypeHintTest(fPlan, fConfig, hintName, String
.valueOf(ResultSet.TYPE_FORWARD_ONLY), ResultSetType.FORWARD_ONLY,
ResultSet.TYPE_FORWARD_ONLY);
resultSetTypeHintTest(fPlan, fConfig, hintName,
ResultSet.TYPE_FORWARD_ONLY, ResultSetType.FORWARD_ONLY,
ResultSet.TYPE_FORWARD_ONLY);
resultSetTypeHintTest(fPlan, fConfig, hintName, String
.valueOf(ResultSet.TYPE_SCROLL_SENSITIVE),
ResultSetType.SCROLL_SENSITIVE, ResultSet.TYPE_SCROLL_SENSITIVE);
resultSetTypeHintTest(fPlan, fConfig, hintName,
ResultSet.TYPE_SCROLL_SENSITIVE, ResultSetType.SCROLL_SENSITIVE,
ResultSet.TYPE_SCROLL_SENSITIVE);
resultSetTypeHintTest(fPlan, fConfig, hintName, String
.valueOf(ResultSet.TYPE_SCROLL_INSENSITIVE),
ResultSetType.SCROLL_INSENSITIVE,
ResultSet.TYPE_SCROLL_INSENSITIVE);
resultSetTypeHintTest(fPlan, fConfig, hintName,
ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSetType.SCROLL_INSENSITIVE,
ResultSet.TYPE_SCROLL_INSENSITIVE);
try {
fPlan.setHint(hintName, "xxxxx");
fPlan.setHint(hintName, "yyyyy");
fail("Expecting a a IllegalArgumentException.");
} catch (Exception e) {
assertTrue("Caught expected exception",
IllegalArgumentException.class.isAssignableFrom(e.getClass()));
}
try {
fPlan.setHint(hintName, "12345");
fPlan.setHint(hintName, "67890");
fail("Expecting a a IllegalArgumentException.");
} catch (Exception e) {
assertTrue("Caught expected exception",
IllegalArgumentException.class.isAssignableFrom(e.getClass()));
}
try {
fPlan.setHint(hintName, -1);
fPlan.setHint(hintName, -2);
fail("Expecting a a IllegalArgumentException.");
} catch (Exception e) {
assertTrue("Caught expected exception",
IllegalArgumentException.class.isAssignableFrom(e.getClass()));
}
try {
fPlan.setHint(hintName, FetchConfiguration.DEFAULT);
assertEquals(ResultSet.TYPE_FORWARD_ONLY, fConfig
.getResultSetType());
} catch (Exception e) {
fail("Unexpected " + e.getClass().getName());
}
em.close();
}
private void resultSetTypeHintTest(JDBCFetchPlan fPlan,
JDBCFetchConfigurationImpl fConfig, String hint, Object value,
Object expectedValue, int expected) {
fPlan.setHint(hint, value);
Object getValue = fPlan.getHint(hint);
assertEquals(value.getClass(), getValue.getClass());
assertEquals(value, getValue);
assertEquals(expectedValue, fPlan.getResultSetType());
assertEquals(expected, fConfig.getResultSetType());
}
/* Good
* Test "openjpa.FetchPlan.SubclassFetchMode" hint
*/
public void testFetchPlanSubclassFetchModeHint() {
String hintName = "openjpa.FetchPlan.SubclassFetchMode";
EntityManager em = emf.createEntityManager();
OpenJPAEntityManager oem = (OpenJPAEntityManager)em.getDelegate();
JDBCFetchPlan fPlan = (JDBCFetchPlan) oem.getFetchPlan();
JDBCFetchConfigurationImpl fConfig = (JDBCFetchConfigurationImpl)
((EntityManagerImpl) oem).getBroker().getFetchConfiguration();
subclassFetchModeHintTest(fPlan, fConfig, hintName, "none",
FetchMode.NONE, EagerFetchModes.EAGER_NONE);
subclassFetchModeHintTest(fPlan, fConfig, hintName, FetchMode.NONE
.name(), FetchMode.NONE, EagerFetchModes.EAGER_NONE);
subclassFetchModeHintTest(fPlan, fConfig, hintName, FetchMode.NONE,
FetchMode.NONE, EagerFetchModes.EAGER_NONE);
subclassFetchModeHintTest(fPlan, fConfig, hintName, "parallel",
FetchMode.PARALLEL, EagerFetchModes.EAGER_PARALLEL);
subclassFetchModeHintTest(fPlan, fConfig, hintName, FetchMode.PARALLEL
.name(), FetchMode.PARALLEL, EagerFetchModes.EAGER_PARALLEL);
subclassFetchModeHintTest(fPlan, fConfig, hintName, FetchMode.PARALLEL,
FetchMode.PARALLEL, EagerFetchModes.EAGER_PARALLEL);
subclassFetchModeHintTest(fPlan, fConfig, hintName, "join",
FetchMode.JOIN, EagerFetchModes.EAGER_JOIN);
subclassFetchModeHintTest(fPlan, fConfig, hintName, FetchMode.JOIN
.name(), FetchMode.JOIN, EagerFetchModes.EAGER_JOIN);
subclassFetchModeHintTest(fPlan, fConfig, hintName, FetchMode.JOIN,
FetchMode.JOIN, EagerFetchModes.EAGER_JOIN);
try {
fPlan.setHint(hintName, "xxxxx");
fPlan.setHint(hintName, "yyyyy");
fail("Expecting a a IllegalArgumentException.");
} catch (Exception e) {
assertTrue("Caught expected exception",
IllegalArgumentException.class.isAssignableFrom(e.getClass()));
}
try {
fPlan.setHint(hintName, "12345");
fPlan.setHint(hintName, "67890");
fail("Expecting a a IllegalArgumentException.");
} catch (Exception e) {
assertTrue("Caught expected exception",
IllegalArgumentException.class.isAssignableFrom(e.getClass()));
}
try {
fPlan.setHint(hintName, -1);
fPlan.setHint(hintName, -2);
fail("Expecting a a IllegalArgumentException.");
} catch (Exception e) {
assertTrue("Caught expected exception",
IllegalArgumentException.class.isAssignableFrom(e.getClass()));
}
em.close();
}
/* Good
* Test "openjpa.jdbc.SubclassFetchMode" hint
*/
public void testJdbcSubclassFetchModeHint() {
String hintName = "openjpa.jdbc.SubclassFetchMode";
EntityManager em = emf.createEntityManager();
OpenJPAEntityManager oem = (OpenJPAEntityManager) em.getDelegate();
JDBCFetchPlan fPlan = (JDBCFetchPlan) oem.getFetchPlan();
JDBCFetchConfigurationImpl fConfig = (JDBCFetchConfigurationImpl)
((EntityManagerImpl) oem).getBroker().getFetchConfiguration();
subclassFetchModeHintTest(fPlan, fConfig, hintName, String
.valueOf(EagerFetchModes.EAGER_NONE), FetchMode.NONE,
EagerFetchModes.EAGER_NONE);
subclassFetchModeHintTest(fPlan, fConfig, hintName,
EagerFetchModes.EAGER_NONE, FetchMode.NONE,
EagerFetchModes.EAGER_NONE);
subclassFetchModeHintTest(fPlan, fConfig, hintName, String
.valueOf(EagerFetchModes.EAGER_PARALLEL), FetchMode.PARALLEL,
EagerFetchModes.EAGER_PARALLEL);
subclassFetchModeHintTest(fPlan, fConfig, hintName,
EagerFetchModes.EAGER_PARALLEL, FetchMode.PARALLEL,
EagerFetchModes.EAGER_PARALLEL);
subclassFetchModeHintTest(fPlan, fConfig, hintName, String
.valueOf(EagerFetchModes.EAGER_JOIN), FetchMode.JOIN,
EagerFetchModes.EAGER_JOIN);
subclassFetchModeHintTest(fPlan, fConfig, hintName,
EagerFetchModes.EAGER_JOIN, FetchMode.JOIN,
EagerFetchModes.EAGER_JOIN);
try {
fPlan.setHint(hintName, "xxxxx");
fPlan.setHint(hintName, "yyyyy");
fail("Expecting a a IllegalArgumentException.");
} catch (Exception e) {
assertTrue("Caught expected exception",
IllegalArgumentException.class.isAssignableFrom(e.getClass()));
}
try {
fPlan.setHint(hintName, "12345");
fPlan.setHint(hintName, "67890");
fail("Expecting a a IllegalArgumentException.");
} catch (Exception e) {
assertTrue("Caught expected exception",
IllegalArgumentException.class.isAssignableFrom(e.getClass()));
}
try {
fPlan.setHint(hintName, -1);
fPlan.setHint(hintName, -2);
fail("Expecting a a IllegalArgumentException.");
} catch (Exception e) {
assertTrue("Caught expected exception",
IllegalArgumentException.class.isAssignableFrom(e.getClass()));
}
try {
fPlan.setHint(hintName, FetchConfiguration.DEFAULT);
assertEquals(EagerFetchModes.EAGER_JOIN, fConfig
.getSubclassFetchMode());
} catch (Exception e) {
fail("Unexpected " + e.getClass().getName());
}
em.close();
}
private void subclassFetchModeHintTest(JDBCFetchPlan fPlan,
JDBCFetchConfigurationImpl fConfig, String hint, Object value,
Object expectedValue, int expected) {
fPlan.setHint(hint, value);
Object getValue = fPlan.getHint(hint);
assertEquals(value.getClass(), getValue.getClass());
assertEquals(value, getValue);
assertEquals(expectedValue, fPlan.getSubclassFetchMode());
assertEquals(expected, fConfig.getSubclassFetchMode());
}
/* Good
* Test "openjpa.FlushBeforeQueries" hint
*/
public void testFlushBeforeQueriesHint() {
String hintName = "openjpa.FlushBeforeQueries";
EntityManager em = emf.createEntityManager();
OpenJPAEntityManager oem = (OpenJPAEntityManager) em.getDelegate();
JDBCFetchPlan fPlan = (JDBCFetchPlan) oem.getFetchPlan();
JDBCFetchConfigurationImpl fConfig = (JDBCFetchConfigurationImpl)
((EntityManagerImpl) oem).getBroker().getFetchConfiguration();
flushBeforeQueriesHintTest(fPlan, fConfig, hintName, String
.valueOf(QueryFlushModes.FLUSH_TRUE), QueryFlushModes.FLUSH_TRUE);
flushBeforeQueriesHintTest(fPlan, fConfig, hintName,
QueryFlushModes.FLUSH_TRUE, QueryFlushModes.FLUSH_TRUE);
flushBeforeQueriesHintTest(fPlan, fConfig, hintName, String
.valueOf(QueryFlushModes.FLUSH_FALSE), QueryFlushModes.FLUSH_FALSE);
flushBeforeQueriesHintTest(fPlan, fConfig, hintName,
QueryFlushModes.FLUSH_FALSE, QueryFlushModes.FLUSH_FALSE);
flushBeforeQueriesHintTest(fPlan, fConfig, hintName, String
.valueOf(QueryFlushModes.FLUSH_WITH_CONNECTION),
QueryFlushModes.FLUSH_WITH_CONNECTION);
flushBeforeQueriesHintTest(fPlan, fConfig, hintName,
QueryFlushModes.FLUSH_WITH_CONNECTION,
QueryFlushModes.FLUSH_WITH_CONNECTION);
try {
fPlan.setHint(hintName, "xxxxx");
fPlan.setHint(hintName, "yyyyy");
fail("Expecting a a IllegalArgumentException.");
} catch (Exception e) {
assertTrue("Caught expected exception",
IllegalArgumentException.class.isAssignableFrom(e.getClass()));
}
try {
fPlan.setHint(hintName, "12345");
fPlan.setHint(hintName, "67890");
fail("Expecting a a IllegalArgumentException.");
} catch (Exception e) {
assertTrue("Caught expected exception",
IllegalArgumentException.class.isAssignableFrom(e.getClass()));
}
try {
fPlan.setHint(hintName, -1);
fPlan.setHint(hintName, -2);
fail("Expecting a a IllegalArgumentException.");
} catch (Exception e) {
assertTrue("Caught expected exception",
IllegalArgumentException.class.isAssignableFrom(e.getClass()));
}
try {
fPlan.setHint(hintName, FetchConfiguration.DEFAULT);
fConfig.getFlushBeforeQueries();
assertEquals(QueryFlushModes.FLUSH_TRUE, fConfig
.getFlushBeforeQueries());
} catch (Exception e) {
fail("Unexpected " + e.getClass().getName());
}
em.close();
}
private void flushBeforeQueriesHintTest(JDBCFetchPlan fPlan,
JDBCFetchConfigurationImpl fConfig, String hint, Object value,
int expected) {
fPlan.setHint(hint, value);
Object getValue = fPlan.getHint(hint);
assertEquals(value.getClass(), getValue.getClass());
assertEquals(value, getValue);
assertEquals(expected, fConfig.getFlushBeforeQueries());
}
/* Good
* Test "openjpa.ReadLockLevel" hint
*/
public void testReadLockLevelHint() {
String hintName = "openjpa.ReadLockLevel";
EntityManager em = emf.createEntityManager();
OpenJPAEntityManager oem = (OpenJPAEntityManager)em.getDelegate();
JDBCFetchPlan fPlan = (JDBCFetchPlan) oem.getFetchPlan();
JDBCFetchConfigurationImpl fConfig = (JDBCFetchConfigurationImpl)
((EntityManagerImpl) oem).getBroker().getFetchConfiguration();
em.getTransaction().begin();
readLockLevelHintTest(fPlan, fConfig, hintName, String
.valueOf(LockLevels.LOCK_NONE), LockModeType.NONE,
LockLevels.LOCK_NONE);
readLockLevelHintTest(fPlan, fConfig, hintName,
LockLevels.LOCK_NONE, LockModeType.NONE,
LockLevels.LOCK_NONE);
readLockLevelHintTest(fPlan, fConfig, hintName, String
.valueOf(LockLevels.LOCK_READ), LockModeType.READ,
LockLevels.LOCK_READ);
readLockLevelHintTest(fPlan, fConfig, hintName,
LockLevels.LOCK_READ, LockModeType.READ,
LockLevels.LOCK_READ);
readLockLevelHintTest(fPlan, fConfig, hintName, String
.valueOf(LockLevels.LOCK_WRITE), LockModeType.WRITE,
LockLevels.LOCK_WRITE);
readLockLevelHintTest(fPlan, fConfig, hintName,
LockLevels.LOCK_WRITE, LockModeType.WRITE,
LockLevels.LOCK_WRITE);
readLockLevelHintTest(fPlan, fConfig, hintName, String
.valueOf(MixedLockLevels.LOCK_OPTIMISTIC), LockModeType.OPTIMISTIC,
MixedLockLevels.LOCK_OPTIMISTIC);
readLockLevelHintTest(fPlan, fConfig, hintName,
MixedLockLevels.LOCK_OPTIMISTIC, LockModeType.OPTIMISTIC,
MixedLockLevels.LOCK_OPTIMISTIC);
readLockLevelHintTest(fPlan, fConfig, hintName, String
.valueOf(MixedLockLevels.LOCK_OPTIMISTIC_FORCE_INCREMENT),
LockModeType.OPTIMISTIC_FORCE_INCREMENT,
MixedLockLevels.LOCK_OPTIMISTIC_FORCE_INCREMENT);
readLockLevelHintTest(fPlan, fConfig, hintName,
MixedLockLevels.LOCK_OPTIMISTIC_FORCE_INCREMENT,
LockModeType.OPTIMISTIC_FORCE_INCREMENT,
MixedLockLevels.LOCK_OPTIMISTIC_FORCE_INCREMENT);
readLockLevelHintTest(fPlan, fConfig, hintName,
String.valueOf(MixedLockLevels.LOCK_PESSIMISTIC_READ),
LockModeType.PESSIMISTIC_READ,
MixedLockLevels.LOCK_PESSIMISTIC_READ);
readLockLevelHintTest(fPlan, fConfig, hintName,
MixedLockLevels.LOCK_PESSIMISTIC_READ,
LockModeType.PESSIMISTIC_READ,
MixedLockLevels.LOCK_PESSIMISTIC_READ);
readLockLevelHintTest(fPlan, fConfig, hintName,
String.valueOf(MixedLockLevels.LOCK_PESSIMISTIC_WRITE),
LockModeType.PESSIMISTIC_WRITE,
MixedLockLevels.LOCK_PESSIMISTIC_WRITE);
readLockLevelHintTest(fPlan, fConfig, hintName,
MixedLockLevels.LOCK_PESSIMISTIC_WRITE,
LockModeType.PESSIMISTIC_WRITE,
MixedLockLevels.LOCK_PESSIMISTIC_WRITE);
readLockLevelHintTest(fPlan, fConfig, hintName, String
.valueOf(MixedLockLevels.LOCK_PESSIMISTIC_FORCE_INCREMENT),
LockModeType.PESSIMISTIC_FORCE_INCREMENT,
MixedLockLevels.LOCK_PESSIMISTIC_FORCE_INCREMENT);
readLockLevelHintTest(fPlan, fConfig, hintName,
MixedLockLevels.LOCK_PESSIMISTIC_FORCE_INCREMENT,
LockModeType.PESSIMISTIC_FORCE_INCREMENT,
MixedLockLevels.LOCK_PESSIMISTIC_FORCE_INCREMENT);
try {
fPlan.setHint(hintName, "xxxxx");
fPlan.setHint(hintName, "yyyyy");
fail("Expecting a a IllegalArgumentException.");
} catch (Exception e) {
assertTrue("Caught expected exception",
IllegalArgumentException.class.isAssignableFrom(e.getClass()));
}
try {
fPlan.setHint(hintName, "12345");
fPlan.setHint(hintName, "67890");
fail("Expecting a a IllegalArgumentException.");
} catch (Exception e) {
assertTrue("Caught expected exception",
IllegalArgumentException.class.isAssignableFrom(e.getClass()));
}
try {
fPlan.setHint(hintName, -1);
fPlan.setHint(hintName, -2);
fail("Expecting a a IllegalArgumentException.");
} catch (Exception e) {
assertTrue("Caught expected exception",
IllegalArgumentException.class.isAssignableFrom(e.getClass()));
}
try {
fPlan.setHint(hintName, FetchConfiguration.DEFAULT);
assertEquals(LockLevels.LOCK_READ, fConfig.getReadLockLevel());
} catch (Exception e) {
fail("Unexpected " + e.getClass().getName());
}
em.getTransaction().rollback();
em.close();
}
private void readLockLevelHintTest(JDBCFetchPlan fPlan,
JDBCFetchConfigurationImpl fConfig, String hint, Object value,
Object expectedMode, int expectedLevel) {
fPlan.setHint(hint, value);
Object getValue = fPlan.getHint(hint);
assertEquals(value.getClass(), getValue.getClass());
assertEquals(value, getValue);
assertEquals(expectedMode, fPlan.getReadLockMode());
assertEquals(expectedLevel, fConfig.getReadLockLevel());
}
/* Good
* Test "openjpa.WriteLockLevel" hint
*/
public void testWriteLockLevelHint() {
String hintName = "openjpa.WriteLockLevel";
EntityManager em = emf.createEntityManager();
OpenJPAEntityManager oem = (OpenJPAEntityManager)em.getDelegate();
JDBCFetchPlan fPlan = (JDBCFetchPlan) oem.getFetchPlan();
JDBCFetchConfigurationImpl fConfig = (JDBCFetchConfigurationImpl)
((EntityManagerImpl) oem).getBroker().getFetchConfiguration();
em.getTransaction().begin();
writeLockLevelHintTest(fPlan, fConfig, hintName, String
.valueOf(LockLevels.LOCK_NONE), LockModeType.NONE,
LockLevels.LOCK_NONE);
writeLockLevelHintTest(fPlan, fConfig, hintName,
LockLevels.LOCK_NONE, LockModeType.NONE,
LockLevels.LOCK_NONE);
writeLockLevelHintTest(fPlan, fConfig, hintName, String
.valueOf(LockLevels.LOCK_READ), LockModeType.READ,
LockLevels.LOCK_READ);
writeLockLevelHintTest(fPlan, fConfig, hintName,
LockLevels.LOCK_READ, LockModeType.READ,
LockLevels.LOCK_READ);
writeLockLevelHintTest(fPlan, fConfig, hintName, String
.valueOf(LockLevels.LOCK_WRITE), LockModeType.WRITE,
LockLevels.LOCK_WRITE);
writeLockLevelHintTest(fPlan, fConfig, hintName,
LockLevels.LOCK_WRITE, LockModeType.WRITE,
LockLevels.LOCK_WRITE);
writeLockLevelHintTest(fPlan, fConfig, hintName, String
.valueOf(MixedLockLevels.LOCK_OPTIMISTIC), LockModeType.OPTIMISTIC,
MixedLockLevels.LOCK_OPTIMISTIC);
writeLockLevelHintTest(fPlan, fConfig, hintName,
MixedLockLevels.LOCK_OPTIMISTIC, LockModeType.OPTIMISTIC,
MixedLockLevels.LOCK_OPTIMISTIC);
writeLockLevelHintTest(fPlan, fConfig, hintName, String
.valueOf(MixedLockLevels.LOCK_OPTIMISTIC_FORCE_INCREMENT),
LockModeType.OPTIMISTIC_FORCE_INCREMENT,
MixedLockLevels.LOCK_OPTIMISTIC_FORCE_INCREMENT);
writeLockLevelHintTest(fPlan, fConfig, hintName,
MixedLockLevels.LOCK_OPTIMISTIC_FORCE_INCREMENT,
LockModeType.OPTIMISTIC_FORCE_INCREMENT,
MixedLockLevels.LOCK_OPTIMISTIC_FORCE_INCREMENT);
writeLockLevelHintTest(fPlan, fConfig, hintName,
String.valueOf(MixedLockLevels.LOCK_PESSIMISTIC_READ),
LockModeType.PESSIMISTIC_READ,
MixedLockLevels.LOCK_PESSIMISTIC_READ);
writeLockLevelHintTest(fPlan, fConfig, hintName,
MixedLockLevels.LOCK_PESSIMISTIC_READ,
LockModeType.PESSIMISTIC_READ,
MixedLockLevels.LOCK_PESSIMISTIC_READ);
writeLockLevelHintTest(fPlan, fConfig, hintName,
String.valueOf(MixedLockLevels.LOCK_PESSIMISTIC_WRITE),
LockModeType.PESSIMISTIC_WRITE,
MixedLockLevels.LOCK_PESSIMISTIC_WRITE);
writeLockLevelHintTest(fPlan, fConfig, hintName,
MixedLockLevels.LOCK_PESSIMISTIC_WRITE,
LockModeType.PESSIMISTIC_WRITE,
MixedLockLevels.LOCK_PESSIMISTIC_WRITE);
writeLockLevelHintTest(fPlan, fConfig, hintName, String
.valueOf(MixedLockLevels.LOCK_PESSIMISTIC_FORCE_INCREMENT),
LockModeType.PESSIMISTIC_FORCE_INCREMENT,
MixedLockLevels.LOCK_PESSIMISTIC_FORCE_INCREMENT);
writeLockLevelHintTest(fPlan, fConfig, hintName,
MixedLockLevels.LOCK_PESSIMISTIC_FORCE_INCREMENT,
LockModeType.PESSIMISTIC_FORCE_INCREMENT,
MixedLockLevels.LOCK_PESSIMISTIC_FORCE_INCREMENT);
try {
fPlan.setHint(hintName, "xxxxx");
fPlan.setHint(hintName, "yyyyy");
fail("Expecting a a IllegalArgumentException.");
} catch (Exception e) {
assertTrue("Caught expected exception",
IllegalArgumentException.class.isAssignableFrom(e.getClass()));
}
try {
fPlan.setHint(hintName, "12345");
fPlan.setHint(hintName, "67890");
fail("Expecting a a IllegalArgumentException.");
} catch (Exception e) {
assertTrue("Caught expected exception",
IllegalArgumentException.class.isAssignableFrom(e.getClass()));
}
try {
fPlan.setHint(hintName, -1);
fPlan.setHint(hintName, -2);
fail("Expecting a a IllegalArgumentException.");
} catch (Exception e) {
assertTrue("Caught expected exception",
IllegalArgumentException.class.isAssignableFrom(e.getClass()));
}
try {
fPlan.setHint(hintName, FetchConfiguration.DEFAULT);
assertEquals(LockLevels.LOCK_WRITE, fConfig
.getWriteLockLevel());
} catch (Exception e) {
fail("Unexpected " + e.getClass().getName());
}
em.getTransaction().rollback();
em.close();
}
private void writeLockLevelHintTest(JDBCFetchPlan fPlan,
JDBCFetchConfigurationImpl fConfig, String hint, Object value,
Object expectedMode, int expectedLevel) {
fPlan.setHint(hint, value);
Object getValue = fPlan.getHint(hint);
assertEquals(value.getClass(), getValue.getClass());
assertEquals(value, getValue);
assertEquals(expectedMode, fPlan.getWriteLockMode());
assertEquals(expectedLevel, fConfig.getWriteLockLevel());
}
/* Good
* Test "openjpa.FetchPlan.ReadLockMode" hint
*/
public void testFetchPlanReadLockModeHintInTx() {
fetchPlanReadLockModeHint(true);
}
public void testFetchPlanReadLockModeHintNotInTx() {
fetchPlanReadLockModeHint(false);
}
private void fetchPlanReadLockModeHint(boolean inTransaction) {
String hintName = "openjpa.FetchPlan.ReadLockMode";
EntityManager em = emf.createEntityManager();
OpenJPAEntityManager oem = (OpenJPAEntityManager) em.getDelegate();
JDBCFetchPlan fPlan = (JDBCFetchPlan) oem.getFetchPlan();
JDBCFetchConfigurationImpl fConfig = (JDBCFetchConfigurationImpl)
((EntityManagerImpl) oem).getBroker().getFetchConfiguration();
if(inTransaction)
em.getTransaction().begin();
readLockModeHintTest(fPlan, fConfig, hintName, "none",
LockModeType.NONE, LockLevels.LOCK_NONE);
readLockModeHintTest(fPlan, fConfig, hintName, LockModeType.NONE,
LockModeType.NONE, LockLevels.LOCK_NONE);
readLockModeHintTest(fPlan, fConfig, hintName,
LockModeType.NONE.name(), LockModeType.NONE,
LockLevels.LOCK_NONE);
readLockModeHintTest(fPlan, fConfig, hintName, "read",
LockModeType.READ, LockLevels.LOCK_READ);
readLockModeHintTest(fPlan, fConfig, hintName, LockModeType.READ,
LockModeType.READ, LockLevels.LOCK_READ);
readLockModeHintTest(fPlan, fConfig, hintName,
LockModeType.READ.name(), LockModeType.READ,
LockLevels.LOCK_READ);
readLockModeHintTest(fPlan, fConfig, hintName, "write",
LockModeType.WRITE, LockLevels.LOCK_WRITE);
readLockModeHintTest(fPlan, fConfig, hintName, LockModeType.WRITE,
LockModeType.WRITE, LockLevels.LOCK_WRITE);
readLockModeHintTest(fPlan, fConfig, hintName, LockModeType.WRITE
.name(), LockModeType.WRITE, LockLevels.LOCK_WRITE);
readLockModeHintTest(fPlan, fConfig, hintName, "optimistic",
LockModeType.OPTIMISTIC, MixedLockLevels.LOCK_OPTIMISTIC);
readLockModeHintTest(fPlan, fConfig, hintName, LockModeType.OPTIMISTIC,
LockModeType.OPTIMISTIC, MixedLockLevels.LOCK_OPTIMISTIC);
readLockModeHintTest(fPlan, fConfig, hintName, LockModeType.OPTIMISTIC
.name(), LockModeType.OPTIMISTIC, MixedLockLevels.LOCK_OPTIMISTIC);
readLockModeHintTest(fPlan, fConfig, hintName,
"optimistic-force-increment",
LockModeType.OPTIMISTIC_FORCE_INCREMENT,
MixedLockLevels.LOCK_OPTIMISTIC_FORCE_INCREMENT);
readLockModeHintTest(fPlan, fConfig, hintName,
LockModeType.OPTIMISTIC_FORCE_INCREMENT,
LockModeType.OPTIMISTIC_FORCE_INCREMENT,
MixedLockLevels.LOCK_OPTIMISTIC_FORCE_INCREMENT);
readLockModeHintTest(fPlan, fConfig, hintName,
LockModeType.OPTIMISTIC_FORCE_INCREMENT.name(),
LockModeType.OPTIMISTIC_FORCE_INCREMENT,
MixedLockLevels.LOCK_OPTIMISTIC_FORCE_INCREMENT);
readLockModeHintTest(fPlan, fConfig, hintName,
"pessimistic-read", LockModeType.PESSIMISTIC_READ,
MixedLockLevels.LOCK_PESSIMISTIC_READ);
readLockModeHintTest(fPlan, fConfig, hintName,
LockModeType.PESSIMISTIC_READ, LockModeType.PESSIMISTIC_READ,
MixedLockLevels.LOCK_PESSIMISTIC_READ);
readLockModeHintTest(fPlan, fConfig, hintName,
LockModeType.PESSIMISTIC_READ.name(),
LockModeType.PESSIMISTIC_READ,
MixedLockLevels.LOCK_PESSIMISTIC_READ);
readLockModeHintTest(fPlan, fConfig, hintName,
"pessimistic-write", LockModeType.PESSIMISTIC_WRITE,
MixedLockLevels.LOCK_PESSIMISTIC_WRITE);
readLockModeHintTest(fPlan, fConfig, hintName,
LockModeType.PESSIMISTIC_WRITE, LockModeType.PESSIMISTIC_WRITE,
MixedLockLevels.LOCK_PESSIMISTIC_WRITE);
readLockModeHintTest(fPlan, fConfig, hintName,
LockModeType.PESSIMISTIC_WRITE.name(),
LockModeType.PESSIMISTIC_WRITE,
MixedLockLevels.LOCK_PESSIMISTIC_WRITE);
readLockModeHintTest(fPlan, fConfig, hintName,
"pessimistic-force-increment",
LockModeType.PESSIMISTIC_FORCE_INCREMENT,
MixedLockLevels.LOCK_PESSIMISTIC_FORCE_INCREMENT);
readLockModeHintTest(fPlan, fConfig, hintName,
LockModeType.PESSIMISTIC_FORCE_INCREMENT,
LockModeType.PESSIMISTIC_FORCE_INCREMENT,
MixedLockLevels.LOCK_PESSIMISTIC_FORCE_INCREMENT);
readLockModeHintTest(fPlan, fConfig, hintName,
LockModeType.PESSIMISTIC_FORCE_INCREMENT.name(),
LockModeType.PESSIMISTIC_FORCE_INCREMENT,
MixedLockLevels.LOCK_PESSIMISTIC_FORCE_INCREMENT);
try {
fPlan.setHint(hintName, "xxxxx");
fPlan.setHint(hintName, "yyyyy");
fail("Expecting a a IllegalArgumentException.");
} catch (Exception e) {
assertTrue("Caught expected exception",
IllegalArgumentException.class.isAssignableFrom(e.getClass()));
}
try {
fPlan.setHint(hintName, "12345");
fPlan.setHint(hintName, "67890");
fail("Expecting a a IllegalArgumentException.");
} catch (Exception e) {
assertTrue("Caught expected exception",
IllegalArgumentException.class.isAssignableFrom(e.getClass()));
}
try {
fPlan.setHint(hintName, -1);
fPlan.setHint(hintName, -2);
fail("Expecting a a IllegalArgumentException.");
} catch (Exception e) {
assertTrue("Caught expected exception",
IllegalArgumentException.class.isAssignableFrom(e.getClass()));
}
if(inTransaction)
em.getTransaction().rollback();
em.close();
}
private void readLockModeHintTest(JDBCFetchPlan fPlan,
JDBCFetchConfigurationImpl fConfig, String hint, Object value,
Object expectedMode, int expectedLevel) {
fPlan.setHint(hint, value);
Object getValue = fPlan.getHint(hint);
assertEquals(value.getClass(), getValue.getClass());
assertEquals(value, getValue);
assertEquals(expectedMode, fPlan.getReadLockMode());
assertEquals(expectedLevel, fConfig.getReadLockLevel());
}
/* Good
* Test "openjpa.FetchPlan.WriteLockMode" hint
*/
public void testFetchPlanWriteLockModeHintInTx() {
fetchPlanWriteLockModeHint(true);
}
public void testFetchPlanWriteLockModeHintNotInTx() {
fetchPlanWriteLockModeHint(false);
}
private void fetchPlanWriteLockModeHint(boolean inTransaction) {
String hintName = "openjpa.FetchPlan.WriteLockMode";
EntityManager em = emf.createEntityManager();
OpenJPAEntityManager oem = (OpenJPAEntityManager)em.getDelegate();
JDBCFetchPlan fPlan = (JDBCFetchPlan) oem.getFetchPlan();
JDBCFetchConfigurationImpl fConfig = (JDBCFetchConfigurationImpl)
((EntityManagerImpl) oem).getBroker().getFetchConfiguration();
if(inTransaction)
em.getTransaction().begin();
writeLockModeHintTest(fPlan, fConfig, hintName, "none",
LockModeType.NONE, LockLevels.LOCK_NONE);
writeLockModeHintTest(fPlan, fConfig, hintName, LockModeType.NONE,
LockModeType.NONE, LockLevels.LOCK_NONE);
writeLockModeHintTest(fPlan, fConfig, hintName, LockModeType.NONE
.name(), LockModeType.NONE, LockLevels.LOCK_NONE);
writeLockModeHintTest(fPlan, fConfig, hintName, "read",
LockModeType.READ, LockLevels.LOCK_READ);
writeLockModeHintTest(fPlan, fConfig, hintName, LockModeType.READ,
LockModeType.READ, LockLevels.LOCK_READ);
writeLockModeHintTest(fPlan, fConfig, hintName, LockModeType.READ
.name(), LockModeType.READ, LockLevels.LOCK_READ);
writeLockModeHintTest(fPlan, fConfig, hintName, "write",
LockModeType.WRITE, LockLevels.LOCK_WRITE);
writeLockModeHintTest(fPlan, fConfig, hintName, LockModeType.WRITE,
LockModeType.WRITE, LockLevels.LOCK_WRITE);
writeLockModeHintTest(fPlan, fConfig, hintName, LockModeType.WRITE
.name(), LockModeType.WRITE, LockLevels.LOCK_WRITE);
writeLockModeHintTest(fPlan, fConfig, hintName,
"optimistic", LockModeType.OPTIMISTIC,
MixedLockLevels.LOCK_OPTIMISTIC);
writeLockModeHintTest(fPlan, fConfig, hintName,
LockModeType.OPTIMISTIC, LockModeType.OPTIMISTIC,
MixedLockLevels.LOCK_OPTIMISTIC);
writeLockModeHintTest(fPlan, fConfig, hintName, LockModeType.OPTIMISTIC
.name(), LockModeType.OPTIMISTIC, MixedLockLevels.LOCK_OPTIMISTIC);
writeLockModeHintTest(fPlan, fConfig, hintName,
"optimistic-force-increment",
LockModeType.OPTIMISTIC_FORCE_INCREMENT,
MixedLockLevels.LOCK_OPTIMISTIC_FORCE_INCREMENT);
writeLockModeHintTest(fPlan, fConfig, hintName,
LockModeType.OPTIMISTIC_FORCE_INCREMENT,
LockModeType.OPTIMISTIC_FORCE_INCREMENT,
MixedLockLevels.LOCK_OPTIMISTIC_FORCE_INCREMENT);
writeLockModeHintTest(fPlan, fConfig, hintName,
LockModeType.OPTIMISTIC_FORCE_INCREMENT.name(),
LockModeType.OPTIMISTIC_FORCE_INCREMENT,
MixedLockLevels.LOCK_OPTIMISTIC_FORCE_INCREMENT);
writeLockModeHintTest(fPlan, fConfig, hintName,
"pessimistic-read", LockModeType.PESSIMISTIC_READ,
MixedLockLevels.LOCK_PESSIMISTIC_READ);
writeLockModeHintTest(fPlan, fConfig, hintName,
LockModeType.PESSIMISTIC_READ, LockModeType.PESSIMISTIC_READ,
MixedLockLevels.LOCK_PESSIMISTIC_READ);
writeLockModeHintTest(fPlan, fConfig, hintName,
LockModeType.PESSIMISTIC_READ.name(),
LockModeType.PESSIMISTIC_READ,
MixedLockLevels.LOCK_PESSIMISTIC_READ);
writeLockModeHintTest(fPlan, fConfig, hintName,
"pessimistic-write", LockModeType.PESSIMISTIC_WRITE,
MixedLockLevels.LOCK_PESSIMISTIC_WRITE);
writeLockModeHintTest(fPlan, fConfig, hintName,
LockModeType.PESSIMISTIC_WRITE, LockModeType.PESSIMISTIC_WRITE,
MixedLockLevels.LOCK_PESSIMISTIC_WRITE);
writeLockModeHintTest(fPlan, fConfig, hintName,
LockModeType.PESSIMISTIC_WRITE.name(),
LockModeType.PESSIMISTIC_WRITE,
MixedLockLevels.LOCK_PESSIMISTIC_WRITE);
writeLockModeHintTest(fPlan, fConfig, hintName,
"pessimistic-force-increment",
LockModeType.PESSIMISTIC_FORCE_INCREMENT,
MixedLockLevels.LOCK_PESSIMISTIC_FORCE_INCREMENT);
writeLockModeHintTest(fPlan, fConfig, hintName,
LockModeType.PESSIMISTIC_FORCE_INCREMENT,
LockModeType.PESSIMISTIC_FORCE_INCREMENT,
MixedLockLevels.LOCK_PESSIMISTIC_FORCE_INCREMENT);
writeLockModeHintTest(fPlan, fConfig, hintName,
LockModeType.PESSIMISTIC_FORCE_INCREMENT.name(),
LockModeType.PESSIMISTIC_FORCE_INCREMENT,
MixedLockLevels.LOCK_PESSIMISTIC_FORCE_INCREMENT);
try {
fPlan.setHint(hintName, "xxxxx");
fPlan.setHint(hintName, "yyyyy");
fail("Expecting a a IllegalArgumentException.");
} catch (Exception e) {
assertTrue("Caught expected exception",
IllegalArgumentException.class.isAssignableFrom(e.getClass()));
}
try {
fPlan.setHint(hintName, "12345");
fPlan.setHint(hintName, "67890");
fail("Expecting a a IllegalArgumentException.");
} catch (Exception e) {
assertTrue("Caught expected exception",
IllegalArgumentException.class.isAssignableFrom(e.getClass()));
}
try {
fPlan.setHint(hintName, -1);
fPlan.setHint(hintName, -2);
fail("Expecting a a IllegalArgumentException.");
} catch (Exception e) {
assertTrue("Caught expected exception",
IllegalArgumentException.class.isAssignableFrom(e.getClass()));
}
if(inTransaction)
em.getTransaction().rollback();
em.close();
}
private void writeLockModeHintTest(JDBCFetchPlan fPlan,
JDBCFetchConfigurationImpl fConfig, String hint, Object value,
Object expectedMode, Object expectedLevel) {
fPlan.setHint(hint, value);
Object getValue = fPlan.getHint(hint);
assertEquals(value.getClass(), getValue.getClass());
assertEquals(value, getValue);
assertEquals(expectedMode, fPlan.getWriteLockMode());
assertEquals(expectedLevel, fConfig.getWriteLockLevel());
}
/* Good
* Test precendence order of similiar/equivalent LockTimeout hints.
*/
public void testSimiliarLockTimeoutHints() {
String JavaxLockTimeout = "javax.persistence.lock.timeout";
String OpenJPALockTimeout = "openjpa.LockTimeout";
String FetchPlanLockTimeout = "openjpa.FetchPlan.LockTimeout";
EntityManager em = emf.createEntityManager();
OpenJPAEntityManager oem = (OpenJPAEntityManager)em.getDelegate();
similarLockTimeoutHintsTest(oem, JavaxLockTimeout, 333,
JavaxLockTimeout, 333,
OpenJPALockTimeout, 111,
FetchPlanLockTimeout, 222);
similarLockTimeoutHintsTest(oem, JavaxLockTimeout, 333,
OpenJPALockTimeout, 111,
FetchPlanLockTimeout, 222,
JavaxLockTimeout, 333);
similarLockTimeoutHintsTest(oem, JavaxLockTimeout, 333,
JavaxLockTimeout, 333,
FetchPlanLockTimeout, 222,
OpenJPALockTimeout, 111);
similarLockTimeoutHintsTest(oem, FetchPlanLockTimeout, 222,
OpenJPALockTimeout, 111,
FetchPlanLockTimeout, 222);
similarLockTimeoutHintsTest(oem, FetchPlanLockTimeout, 222,
FetchPlanLockTimeout, 222,
OpenJPALockTimeout, 111);
similarLockTimeoutHintsTest(oem, OpenJPALockTimeout, 111,
OpenJPALockTimeout, 111);
similarLockTimeoutHintsTest(oem, FetchPlanLockTimeout, 222,
FetchPlanLockTimeout, 222);
similarLockTimeoutHintsTest(oem, JavaxLockTimeout, 333,
JavaxLockTimeout, 333);
em.close();
}
@SuppressWarnings("deprecation")
private void similarLockTimeoutHintsTest(OpenJPAEntityManager oem, String winner,
Object expected, Object... hintNvalues) {
JDBCFetchPlan fPlan = (JDBCFetchPlan) oem.pushFetchPlan();
JDBCFetchConfigurationImpl fConfig = (JDBCFetchConfigurationImpl) fPlan
.getDelegate();
for( int i = 0 ; i < hintNvalues.length ; i += 2) {
fPlan.setHint((String)hintNvalues[i], hintNvalues[i+1]);
}
for( int i = 0 ; i < hintNvalues.length ; i += 2) {
String hintName = (String)hintNvalues[i];
Object expectedValue = hintNvalues[i+1];
Object getValue = fPlan.getHint(hintName);
if (hintName.equals(winner)) {
assertEquals(expectedValue.getClass(), getValue.getClass());
assertEquals(expectedValue, getValue);
}
}
assertEquals(expected, fPlan.getLockTimeout());
assertEquals(expected, fConfig.getLockTimeout());
oem.popFetchPlan();
}
/* Good
* Test precendence order of similiar/equivalent QueryTimeout hints.
*/
public void testSimiliarQueryTimeoutHints() {
String JavaxQueryTimeout = "javax.persistence.query.timeout";
String OpenJPAQueryTimeout = "openjpa.QueryTimeout";
String FetchPlanQueryTimeout = "openjpa.FetchPlan.QueryTimeout";
EntityManager em = emf.createEntityManager();
OpenJPAEntityManager oem = (OpenJPAEntityManager)em.getDelegate();
similarQueryTimeoutHintsTest(oem, JavaxQueryTimeout, 333,
JavaxQueryTimeout, 333,
OpenJPAQueryTimeout, 111,
FetchPlanQueryTimeout, 222);
similarQueryTimeoutHintsTest(oem, JavaxQueryTimeout, 333,
OpenJPAQueryTimeout, 111,
FetchPlanQueryTimeout, 222,
JavaxQueryTimeout, 333);
similarQueryTimeoutHintsTest(oem, JavaxQueryTimeout, 333,
JavaxQueryTimeout, 333,
FetchPlanQueryTimeout, 222,
OpenJPAQueryTimeout, 111);
similarQueryTimeoutHintsTest(oem, FetchPlanQueryTimeout, 222,
OpenJPAQueryTimeout, 111,
FetchPlanQueryTimeout, 222);
similarQueryTimeoutHintsTest(oem, FetchPlanQueryTimeout, 222,
FetchPlanQueryTimeout, 222,
OpenJPAQueryTimeout, 111);
similarQueryTimeoutHintsTest(oem, OpenJPAQueryTimeout, 111,
OpenJPAQueryTimeout, 111);
similarQueryTimeoutHintsTest(oem, FetchPlanQueryTimeout, 222,
FetchPlanQueryTimeout, 222);
similarQueryTimeoutHintsTest(oem, JavaxQueryTimeout, 333,
JavaxQueryTimeout, 333);
em.close();
}
@SuppressWarnings("deprecation")
private void similarQueryTimeoutHintsTest(OpenJPAEntityManager oem, String winner,
Object expected, Object... hintNvalues) {
JDBCFetchPlan fPlan = (JDBCFetchPlan) oem.pushFetchPlan();
JDBCFetchConfigurationImpl fConfig = (JDBCFetchConfigurationImpl) fPlan
.getDelegate();
for( int i = 0 ; i < hintNvalues.length ; i += 2) {
fPlan.setHint((String)hintNvalues[i], hintNvalues[i+1]);
}
for( int i = 0 ; i < hintNvalues.length ; i += 2) {
String hintName = (String)hintNvalues[i];
Object expectedValue = hintNvalues[i+1];
Object getValue = fPlan.getHint(hintName);
if (hintName.equals(winner)) {
assertEquals(expectedValue.getClass(), getValue.getClass());
assertEquals(expectedValue, getValue);
}
}
assertEquals(expected, fPlan.getQueryTimeout());
assertEquals(expected, fConfig.getQueryTimeout());
oem.popFetchPlan();
}
/*
* Test various forms setHint argument.
*/
@SuppressWarnings("deprecation")
public void testSetHintAddHintsArgument() {
EntityManager em = emf.createEntityManager();
OpenJPAEntityManager oem = (OpenJPAEntityManager)em.getDelegate();
JDBCFetchPlan fPlan = (JDBCFetchPlan) oem.getFetchPlan();
fPlan.setHint("unrecognized.prop.name", "unrecognized.prop.value");
assertEquals(null, fPlan.getHint("unrecognized.prop.name"));
OpenJPAConfiguration conf = oem.getConfiguration();
if (conf instanceof JDBCConfiguration
&& ((JDBCConfiguration) conf).getDBDictionaryInstance()
.supportsIsolationForUpdate()) {
try {
fPlan.setHint("openjpa.jdbc.TransactionIsolation", 9999);
fail("Expecting a a IllegalArgumentException.");
} catch (Exception e) {
assertTrue("Caught expected exception",
IllegalArgumentException.class.isAssignableFrom(e.getClass()));
}
}
try {
fPlan.setHint("openjpa.FetchPlan.Isolation", 13);
fPlan.setHint("openjpa.FetchPlan.Isolation", 14);
fail("Expecting a IllegalArgumentException.");
} catch (Exception e) {
assertTrue("Caught expected exception",
IllegalArgumentException.class.isAssignableFrom(e.getClass()));
}
em.close();
}
/*
* Test invalid hint via Query interface.
*/
public void testInvalidQuerySetHint() {
EntityManager em = emf.createEntityManager();
OpenJPAEntityManager oem = (OpenJPAEntityManager)em.getDelegate();
((EntityManagerImpl) oem).getBroker().getFetchConfiguration();
Query q = em.createQuery("select o from LockEmployee o");
try {
q.setHint("openjpa.FetchPlan.Isolation", "yyyyy");
fail("Expecting a IllegalArgumentException.");
} catch (Exception e) {
assertTrue("Caught expected exception",
IllegalArgumentException.class.isAssignableFrom(e.getClass()));
}
em.close();
}
}