mirror of https://github.com/apache/openjpa.git
OPENJPA-1578: Set CacheMode properties properly
git-svn-id: https://svn.apache.org/repos/asf/openjpa/trunk@923755 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
parent
8a1e0307f2
commit
845f9b5018
|
@ -78,6 +78,7 @@ import org.apache.openjpa.meta.FieldMetaData;
|
||||||
import org.apache.openjpa.meta.JavaTypes;
|
import org.apache.openjpa.meta.JavaTypes;
|
||||||
import org.apache.openjpa.meta.ValueStrategies;
|
import org.apache.openjpa.meta.ValueStrategies;
|
||||||
import org.apache.openjpa.util.ApplicationIds;
|
import org.apache.openjpa.util.ApplicationIds;
|
||||||
|
import org.apache.openjpa.util.Exceptions;
|
||||||
import org.apache.openjpa.util.Id;
|
import org.apache.openjpa.util.Id;
|
||||||
import org.apache.openjpa.util.ImplHelper;
|
import org.apache.openjpa.util.ImplHelper;
|
||||||
import org.apache.openjpa.util.InvalidStateException;
|
import org.apache.openjpa.util.InvalidStateException;
|
||||||
|
@ -328,7 +329,8 @@ public class JDBCStoreManager
|
||||||
} catch (ClassNotFoundException cnfe) {
|
} catch (ClassNotFoundException cnfe) {
|
||||||
throw new UserException(cnfe);
|
throw new UserException(cnfe);
|
||||||
} catch (SQLException se) {
|
} catch (SQLException se) {
|
||||||
throw SQLExceptions.getStore(se, _dict, fetch.getReadLockLevel());
|
throw SQLExceptions.getStore(se, Exceptions.toString(sm.getPersistenceCapable()),
|
||||||
|
_dict, fetch.getReadLockLevel());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -228,6 +228,8 @@ public class FetchConfigurationImpl
|
||||||
addFetchGroups(fetch.getFetchGroups());
|
addFetchGroups(fetch.getFetchGroups());
|
||||||
clearFields();
|
clearFields();
|
||||||
copyHints(fetch);
|
copyHints(fetch);
|
||||||
|
setCacheRetrieveMode(fetch.getCacheRetrieveMode());
|
||||||
|
setCacheStoreMode(fetch.getCacheStoreMode());
|
||||||
addFields(fetch.getFields());
|
addFields(fetch.getFields());
|
||||||
|
|
||||||
// don't use setters because require active transaction
|
// don't use setters because require active transaction
|
||||||
|
|
|
@ -482,6 +482,7 @@ public class EntityManagerImpl
|
||||||
@SuppressWarnings("unchecked")
|
@SuppressWarnings("unchecked")
|
||||||
public <T> T find(Class<T> cls, Object oid, LockModeType mode, Map<String, Object> properties) {
|
public <T> T find(Class<T> cls, Object oid, LockModeType mode, Map<String, Object> properties) {
|
||||||
assertNotCloseInvoked();
|
assertNotCloseInvoked();
|
||||||
|
configureCurrentCacheModes(getFetchPlan(), properties);
|
||||||
configureCurrentFetchPlan(pushFetchPlan(), properties, mode, true);
|
configureCurrentFetchPlan(pushFetchPlan(), properties, mode, true);
|
||||||
try {
|
try {
|
||||||
oid = _broker.newObjectId(cls, oid);
|
oid = _broker.newObjectId(cls, oid);
|
||||||
|
@ -1174,7 +1175,7 @@ public class EntityManagerImpl
|
||||||
assertNotCloseInvoked();
|
assertNotCloseInvoked();
|
||||||
assertValidAttchedEntity("lock", entity);
|
assertValidAttchedEntity("lock", entity);
|
||||||
_broker.assertActiveTransaction();
|
_broker.assertActiveTransaction();
|
||||||
|
configureCurrentCacheModes(getFetchPlan(), properties);
|
||||||
configureCurrentFetchPlan(pushFetchPlan(), properties, mode, false);
|
configureCurrentFetchPlan(pushFetchPlan(), properties, mode, false);
|
||||||
try {
|
try {
|
||||||
_broker.lock(entity, MixedLockLevelsHelper.toLockLevel(mode),
|
_broker.lock(entity, MixedLockLevelsHelper.toLockLevel(mode),
|
||||||
|
@ -1663,7 +1664,6 @@ public class EntityManagerImpl
|
||||||
private void configureCurrentFetchPlan(FetchPlan fetch, Map<String, Object> properties,
|
private void configureCurrentFetchPlan(FetchPlan fetch, Map<String, Object> properties,
|
||||||
LockModeType lock, boolean requiresTxn) {
|
LockModeType lock, boolean requiresTxn) {
|
||||||
// handle properties in map first
|
// handle properties in map first
|
||||||
configureCurrentCacheModes(fetch, properties);
|
|
||||||
if (properties != null) {
|
if (properties != null) {
|
||||||
for (Map.Entry<String, Object> entry : properties.entrySet())
|
for (Map.Entry<String, Object> entry : properties.entrySet())
|
||||||
fetch.setHint(entry.getKey(), entry.getValue());
|
fetch.setHint(entry.getKey(), entry.getValue());
|
||||||
|
@ -1680,6 +1680,16 @@ public class EntityManagerImpl
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Populate the fetch configuration with specified cache mode properties.
|
||||||
|
* The cache mode properties modify the fetch configuration and remove those
|
||||||
|
* properties. This method should be called <em>before</em> the fetch configuration of the current
|
||||||
|
* context has been pushed.
|
||||||
|
* @param fetch the fetch configuration of the current context. Not the
|
||||||
|
* new configuration pushed (and later popped) during a single operation.
|
||||||
|
*
|
||||||
|
* @param properties
|
||||||
|
*/
|
||||||
private void configureCurrentCacheModes(FetchPlan fetch, Map<String, Object> properties) {
|
private void configureCurrentCacheModes(FetchPlan fetch, Map<String, Object> properties) {
|
||||||
if (properties == null)
|
if (properties == null)
|
||||||
return;
|
return;
|
||||||
|
|
Loading…
Reference in New Issue