You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@openjpa.apache.org by pp...@apache.org on 2010/05/11 23:09:18 UTC
svn commit: r943294 - in /openjpa/trunk:
openjpa-kernel/src/main/java/org/apache/openjpa/meta/
openjpa-persistence/src/main/java/org/apache/openjpa/persistence/
openjpa-project/src/doc/manual/
openjpa-slice/src/main/java/org/apache/openjpa/slice/ openj...
Author: ppoddar
Date: Tue May 11 21:09:17 2010
New Revision: 943294
URL: http://svn.apache.org/viewvc?rev=943294&view=rev
Log:
OPENJPA-1662: Remove usage of @Replicated annotation. Replace with openjpa.slice.ReplicatedTypes plug-in.
Removed:
openjpa/trunk/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/Replicated.java
Modified:
openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/meta/ClassMetaData.java
openjpa/trunk/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/AnnotationPersistenceMetaDataParser.java
openjpa/trunk/openjpa-project/src/doc/manual/ref_guide_slice.xml
openjpa/trunk/openjpa-slice/src/main/java/org/apache/openjpa/slice/DistributedConfiguration.java
openjpa/trunk/openjpa-slice/src/main/java/org/apache/openjpa/slice/DistributedQueryImpl.java
openjpa/trunk/openjpa-slice/src/main/java/org/apache/openjpa/slice/ReentrantSliceLock.java
openjpa/trunk/openjpa-slice/src/main/java/org/apache/openjpa/slice/ReplicationPolicy.java
openjpa/trunk/openjpa-slice/src/main/java/org/apache/openjpa/slice/SliceImplHelper.java
openjpa/trunk/openjpa-slice/src/main/java/org/apache/openjpa/slice/SliceInfo.java
openjpa/trunk/openjpa-slice/src/main/java/org/apache/openjpa/slice/jdbc/DistributedJDBCConfiguration.java
openjpa/trunk/openjpa-slice/src/main/java/org/apache/openjpa/slice/jdbc/DistributedJDBCConfigurationImpl.java
openjpa/trunk/openjpa-slice/src/main/java/org/apache/openjpa/slice/jdbc/DistributedJDBCStoreManager.java
openjpa/trunk/openjpa-slice/src/main/java/org/apache/openjpa/slice/jdbc/DistributedStoreQuery.java
openjpa/trunk/openjpa-slice/src/test/java/org/apache/openjpa/slice/Country.java
openjpa/trunk/openjpa-slice/src/test/java/org/apache/openjpa/slice/ReplicatedChild.java
openjpa/trunk/openjpa-slice/src/test/java/org/apache/openjpa/slice/ReplicatedParent.java
openjpa/trunk/openjpa-slice/src/test/java/org/apache/openjpa/slice/TestReplication.java
openjpa/trunk/openjpa-slice/src/test/resources/META-INF/persistence.xml
Modified: openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/meta/ClassMetaData.java
URL: http://svn.apache.org/viewvc/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/meta/ClassMetaData.java?rev=943294&r1=943293&r2=943294&view=diff
==============================================================================
--- openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/meta/ClassMetaData.java (original)
+++ openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/meta/ClassMetaData.java Tue May 11 21:09:17 2010
@@ -23,14 +23,11 @@ import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.lang.reflect.Modifier;
import java.security.AccessController;
-import java.sql.Timestamp;
import java.util.ArrayList;
import java.util.Arrays;
-import java.util.Calendar;
import java.util.Collection;
import java.util.Collections;
import java.util.Comparator;
-import java.util.Date;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Iterator;
@@ -41,6 +38,7 @@ import java.util.TreeMap;
import org.apache.commons.lang.StringUtils;
import org.apache.openjpa.conf.OpenJPAConfiguration;
+import org.apache.openjpa.datacache.CacheDistributionPolicy;
import org.apache.openjpa.datacache.DataCache;
import org.apache.openjpa.enhance.PCRegistry;
import org.apache.openjpa.enhance.PersistenceCapable;
@@ -67,7 +65,6 @@ import org.apache.openjpa.util.LongId;
import org.apache.openjpa.util.MetaDataException;
import org.apache.openjpa.util.ObjectId;
import org.apache.openjpa.util.OpenJPAId;
-import org.apache.openjpa.util.Proxy;
import org.apache.openjpa.util.ShortId;
import org.apache.openjpa.util.StringId;
import org.apache.openjpa.util.UnsupportedException;
@@ -182,7 +179,6 @@ public class ClassMetaData
private int _identity = ID_UNKNOWN;
private int _idStrategy = ValueStrategies.NONE;
private int _accessType = AccessCode.UNKNOWN;
- private boolean _replicated = false;
private String _seqName = DEFAULT_STRING;
private SequenceMetaData _seqMeta = null;
@@ -2646,21 +2642,6 @@ public class ClassMetaData
return result.toArray(new String[result.size()]);
}
- /**
- * Affirms the persistence instances of this receiver is replicated across
- * multiple databases.
- */
- public boolean isReplicated() {
- return _replicated;
- }
-
- /**
- * Sets the persistence instances of this receiver to be replicated across
- * multiple databases.
- */
- public void setReplicated(boolean flag) {
- _replicated = flag;
- }
public boolean isAbstract() {
return _abstract;
Modified: openjpa/trunk/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/AnnotationPersistenceMetaDataParser.java
URL: http://svn.apache.org/viewvc/openjpa/trunk/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/AnnotationPersistenceMetaDataParser.java?rev=943294&r1=943293&r2=943294&view=diff
==============================================================================
--- openjpa/trunk/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/AnnotationPersistenceMetaDataParser.java (original)
+++ openjpa/trunk/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/AnnotationPersistenceMetaDataParser.java Tue May 11 21:09:17 2010
@@ -235,7 +235,6 @@ public class AnnotationPersistenceMetaDa
_tags.put(ManagedInterface.class, MANAGED_INTERFACE);
_tags.put(ReadOnly.class, READ_ONLY);
_tags.put(Type.class, TYPE);
- _tags.put(Replicated.class, REPLICATED);
}
private final OpenJPAConfiguration _conf;
@@ -647,9 +646,6 @@ public class AnnotationPersistenceMetaDa
if (isMetaDataMode())
parseManagedInterface(meta, (ManagedInterface) anno);
break;
- case REPLICATED:
- meta.setReplicated(true);
- break;
case ACCESS:
if (isMetaDataMode())
parseAccess(meta, (Access)anno);
Modified: openjpa/trunk/openjpa-project/src/doc/manual/ref_guide_slice.xml
URL: http://svn.apache.org/viewvc/openjpa/trunk/openjpa-project/src/doc/manual/ref_guide_slice.xml?rev=943294&r1=943293&r2=943294&view=diff
==============================================================================
--- openjpa/trunk/openjpa-project/src/doc/manual/ref_guide_slice.xml (original)
+++ openjpa/trunk/openjpa-project/src/doc/manual/ref_guide_slice.xml Tue May 11 21:09:17 2010
@@ -217,9 +217,9 @@
same slice, there can be data elements that are commonly referred by
many instances such as Country or Currency code. Such quasi-static
master data can be stored as identical copies in multiple slices.
- The user application needs to annotate such entity with
- <classname>@Replicated</classname> annotation and implement
- a <classname>org.apache.openjpa.slice.ReplicationPolicy</classname>
+ The user application must enumerate the replicated entity type names in
+ <classname>openjpa.slice.ReplicatedTypes</classname> as a comma-separated list
+ and implement a <classname>org.apache.openjpa.slice.ReplicationPolicy</classname>
interface. The <classname>ReplicationPolicy</classname> interface
is quite similar to <classname>DistributionPolicy</classname>
interface except it returns an array of target slice names instead
Modified: openjpa/trunk/openjpa-slice/src/main/java/org/apache/openjpa/slice/DistributedConfiguration.java
URL: http://svn.apache.org/viewvc/openjpa/trunk/openjpa-slice/src/main/java/org/apache/openjpa/slice/DistributedConfiguration.java?rev=943294&r1=943293&r2=943294&view=diff
==============================================================================
--- openjpa/trunk/openjpa-slice/src/main/java/org/apache/openjpa/slice/DistributedConfiguration.java (original)
+++ openjpa/trunk/openjpa-slice/src/main/java/org/apache/openjpa/slice/DistributedConfiguration.java Tue May 11 21:09:17 2010
@@ -117,4 +117,6 @@ public interface DistributedConfiguratio
* replicated instances will be replicated across the available slices.
*/
void setReplicationPolicy(String policy);
+
+ boolean isReplicated(Class<?> type);
}
Modified: openjpa/trunk/openjpa-slice/src/main/java/org/apache/openjpa/slice/DistributedQueryImpl.java
URL: http://svn.apache.org/viewvc/openjpa/trunk/openjpa-slice/src/main/java/org/apache/openjpa/slice/DistributedQueryImpl.java?rev=943294&r1=943293&r2=943294&view=diff
==============================================================================
--- openjpa/trunk/openjpa-slice/src/main/java/org/apache/openjpa/slice/DistributedQueryImpl.java (original)
+++ openjpa/trunk/openjpa-slice/src/main/java/org/apache/openjpa/slice/DistributedQueryImpl.java Tue May 11 21:09:17 2010
@@ -28,10 +28,10 @@ import org.apache.openjpa.kernel.StoreQu
* @author Pinaki Poddar
*
*/
+@SuppressWarnings("serial")
public class DistributedQueryImpl extends QueryImpl {
private final ReentrantSliceLock _lock;
- public DistributedQueryImpl(Broker broker, String language,
- StoreQuery storeQuery) {
+ public DistributedQueryImpl(Broker broker, String language, StoreQuery storeQuery) {
super(broker, language, storeQuery);
_lock = new ReentrantSliceLock();
}
Modified: openjpa/trunk/openjpa-slice/src/main/java/org/apache/openjpa/slice/ReentrantSliceLock.java
URL: http://svn.apache.org/viewvc/openjpa/trunk/openjpa-slice/src/main/java/org/apache/openjpa/slice/ReentrantSliceLock.java?rev=943294&r1=943293&r2=943294&view=diff
==============================================================================
--- openjpa/trunk/openjpa-slice/src/main/java/org/apache/openjpa/slice/ReentrantSliceLock.java (original)
+++ openjpa/trunk/openjpa-slice/src/main/java/org/apache/openjpa/slice/ReentrantSliceLock.java Tue May 11 21:09:17 2010
@@ -26,6 +26,7 @@ import java.util.concurrent.locks.Reentr
* @author Pinaki Poddar
*
*/
+@SuppressWarnings("serial")
public class ReentrantSliceLock extends ReentrantLock {
public ReentrantSliceLock() {
Modified: openjpa/trunk/openjpa-slice/src/main/java/org/apache/openjpa/slice/ReplicationPolicy.java
URL: http://svn.apache.org/viewvc/openjpa/trunk/openjpa-slice/src/main/java/org/apache/openjpa/slice/ReplicationPolicy.java?rev=943294&r1=943293&r2=943294&view=diff
==============================================================================
--- openjpa/trunk/openjpa-slice/src/main/java/org/apache/openjpa/slice/ReplicationPolicy.java (original)
+++ openjpa/trunk/openjpa-slice/src/main/java/org/apache/openjpa/slice/ReplicationPolicy.java Tue May 11 21:09:17 2010
@@ -24,12 +24,11 @@ import java.util.List;
* Policy to select one or more of the physical databases referred as
* <em>slice</em> in which a given persistent instance will be persisted.
*
- * This interface is invoked for entity types annotated as @Replicated
+ * This interface is invoked for entity types that are specified as ReplicatedTypes in the configuration.
*
* @author Pinaki Poddar
*
* @see DistributionPolicy
- * @see Replicated
*
*/
public interface ReplicationPolicy {
Modified: openjpa/trunk/openjpa-slice/src/main/java/org/apache/openjpa/slice/SliceImplHelper.java
URL: http://svn.apache.org/viewvc/openjpa/trunk/openjpa-slice/src/main/java/org/apache/openjpa/slice/SliceImplHelper.java?rev=943294&r1=943293&r2=943294&view=diff
==============================================================================
--- openjpa/trunk/openjpa-slice/src/main/java/org/apache/openjpa/slice/SliceImplHelper.java (original)
+++ openjpa/trunk/openjpa-slice/src/main/java/org/apache/openjpa/slice/SliceImplHelper.java Tue May 11 21:09:17 2010
@@ -40,7 +40,7 @@ public class SliceImplHelper {
/**
* Gets the target slices by calling user-specified
* {@link DistributionPolicy} or {@link ReplicationPolicy}
- * depending on whether the given instance is {@link Replicated replicated}.
+ * depending on whether the given instance is {@link DistributedConfiguration#isReplicated(Class) replicated}.
*/
public static SliceInfo getSlicesByPolicy(Object pc,
DistributedConfiguration conf, Object ctx) {
@@ -84,22 +84,19 @@ public class SliceImplHelper {
/**
* Affirms if the given instance be replicated to multiple slices.
*/
- public static boolean isReplicated(Object pc, OpenJPAConfiguration conf) {
- if (pc == null)
- return false;
- ClassMetaData meta = conf.getMetaDataRepositoryInstance()
- .getMetaData(pc.getClass(), null, false);
- return (meta == null) ? false : meta.isReplicated();
+ public static boolean isReplicated(Object pc, DistributedConfiguration conf) {
+ return pc == null ? false : conf.isReplicated(pc.getClass());
}
/**
* Affirms if the given instance be replicated to multiple slices.
*/
- public static boolean isReplicated(OpenJPAStateManager sm) {
- if (sm == null)
- return false;
- return sm.getMetaData().isReplicated();
- }
+// public static boolean isReplicated(OpenJPAStateManager sm) {
+// return sm == null ? false :
+// if (sm == null)
+// return false;
+// return sm.getMetaData().isReplicated();
+// }
/**
* Affirms if the given StateManager has an assigned slice.
Modified: openjpa/trunk/openjpa-slice/src/main/java/org/apache/openjpa/slice/SliceInfo.java
URL: http://svn.apache.org/viewvc/openjpa/trunk/openjpa-slice/src/main/java/org/apache/openjpa/slice/SliceInfo.java?rev=943294&r1=943293&r2=943294&view=diff
==============================================================================
--- openjpa/trunk/openjpa-slice/src/main/java/org/apache/openjpa/slice/SliceInfo.java (original)
+++ openjpa/trunk/openjpa-slice/src/main/java/org/apache/openjpa/slice/SliceInfo.java Tue May 11 21:09:17 2010
@@ -37,8 +37,7 @@ public class SliceInfo implements Serial
private final boolean _isReplicated;
private String[] _slices;
- private static transient Localizer _loc =
- Localizer.forPackage(SliceInfo.class);
+ private static transient Localizer _loc = Localizer.forPackage(SliceInfo.class);
/**
* Generic constructor given one or more slice names.
@@ -105,8 +104,6 @@ public class SliceInfo implements Serial
public SliceInfo setInto(OpenJPAStateManager sm) {
if (sm == null)
throw new NullPointerException();
- if (SliceImplHelper.isReplicated(sm) != isReplicated())
- throw new InternalException();
Object previous = sm.setImplData(this, true);
if (previous == null || previous instanceof SliceInfo)
return (SliceInfo)previous;
Modified: openjpa/trunk/openjpa-slice/src/main/java/org/apache/openjpa/slice/jdbc/DistributedJDBCConfiguration.java
URL: http://svn.apache.org/viewvc/openjpa/trunk/openjpa-slice/src/main/java/org/apache/openjpa/slice/jdbc/DistributedJDBCConfiguration.java?rev=943294&r1=943293&r2=943294&view=diff
==============================================================================
--- openjpa/trunk/openjpa-slice/src/main/java/org/apache/openjpa/slice/jdbc/DistributedJDBCConfiguration.java (original)
+++ openjpa/trunk/openjpa-slice/src/main/java/org/apache/openjpa/slice/jdbc/DistributedJDBCConfiguration.java Tue May 11 21:09:17 2010
@@ -35,5 +35,5 @@ public interface DistributedJDBCConfigur
* Gets the master slice.
*/
Slice getMasterSlice();
-
+
}
Modified: openjpa/trunk/openjpa-slice/src/main/java/org/apache/openjpa/slice/jdbc/DistributedJDBCConfigurationImpl.java
URL: http://svn.apache.org/viewvc/openjpa/trunk/openjpa-slice/src/main/java/org/apache/openjpa/slice/jdbc/DistributedJDBCConfigurationImpl.java?rev=943294&r1=943293&r2=943294&view=diff
==============================================================================
--- openjpa/trunk/openjpa-slice/src/main/java/org/apache/openjpa/slice/jdbc/DistributedJDBCConfigurationImpl.java (original)
+++ openjpa/trunk/openjpa-slice/src/main/java/org/apache/openjpa/slice/jdbc/DistributedJDBCConfigurationImpl.java Tue May 11 21:09:17 2010
@@ -21,10 +21,13 @@ package org.apache.openjpa.slice.jdbc;
import java.sql.Connection;
import java.sql.SQLException;
import java.util.ArrayList;
+import java.util.Arrays;
import java.util.Collections;
+import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Properties;
+import java.util.Set;
import javax.sql.DataSource;
import javax.sql.XADataSource;
@@ -44,6 +47,8 @@ import org.apache.openjpa.lib.log.Log;
import org.apache.openjpa.lib.log.LogFactory;
import org.apache.openjpa.lib.log.LogFactoryImpl;
import org.apache.openjpa.lib.util.Localizer;
+import org.apache.openjpa.meta.ClassMetaData;
+import org.apache.openjpa.meta.MetaDataRepository;
import org.apache.openjpa.slice.DistributedBrokerImpl;
import org.apache.openjpa.slice.DistributionPolicy;
import org.apache.openjpa.slice.ProductDerivation;
@@ -72,13 +77,16 @@ public class DistributedJDBCConfiguratio
protected StringListValue namesPlugin;
public PluginValue distributionPolicyPlugin;
public PluginValue replicationPolicyPlugin;
+ public StringListValue replicatedTypesPlugin;
+
+ private ReplicatedTypeRepository _replicationRepos;
public static final String DOT = ".";
public static final String REGEX_DOT = "\\.";
public static final String PREFIX_SLICE = ProductDerivation.PREFIX_SLICE + DOT;
public static final String PREFIX_OPENJPA = "openjpa.";
private static Localizer _loc = Localizer.forPackage(DistributedJDBCConfigurationImpl.class);
-
+
/**
* Create a configuration and declare the plug-ins.
*/
@@ -99,6 +107,9 @@ public class DistributedJDBCConfiguratio
replicationPolicyPlugin.setString("all");
replicationPolicyPlugin.setDynamic(true);
+ replicatedTypesPlugin = new StringListValue(PREFIX_SLICE + "ReplicatedTypes");
+ addValue(replicatedTypesPlugin);
+
lenientPlugin = addBoolean(PREFIX_SLICE + "Lenient");
lenientPlugin.setDefault("true");
@@ -552,4 +563,51 @@ public class DistributedJDBCConfiguratio
}
return virtualDataSource;
}
+
+ public boolean isReplicated(Class<?> cls) {
+ if (_replicationRepos == null) {
+ _replicationRepos = new ReplicatedTypeRepository(getMetaDataRepositoryInstance(),
+ Arrays.asList(replicatedTypesPlugin.get()));
+ }
+ return _replicationRepos.contains(cls);
+ }
+
+ /**
+ * A private repository of replicated types.
+ *
+ * @author Pinaki Poddar
+ *
+ */
+ private static class ReplicatedTypeRepository {
+ private Set<Class<?>> _replicatedTypes = new HashSet<Class<?>>();
+ private Set<Class<?>> _nonreplicatedTypes = new HashSet<Class<?>>();
+
+
+ List<String> names;
+ MetaDataRepository repos;
+
+ ReplicatedTypeRepository(MetaDataRepository repos, List<String> given) {
+ names = given;
+ this.repos = repos;
+ }
+
+ boolean contains(Class<?> cls) {
+ if (_replicatedTypes.contains(cls))
+ return true;
+ if (_nonreplicatedTypes.contains(cls))
+ return false;
+ ClassMetaData meta = repos.getMetaData(cls, null, false);
+ if (meta == null) {
+ _nonreplicatedTypes.add(cls);
+ return false;
+ }
+ boolean replicated = names.contains(meta.getDescribedType().getName());
+ if (replicated) {
+ _replicatedTypes.add(cls);
+ } else {
+ _nonreplicatedTypes.add(cls);
+ }
+ return replicated;
+ }
+ }
}
Modified: openjpa/trunk/openjpa-slice/src/main/java/org/apache/openjpa/slice/jdbc/DistributedJDBCStoreManager.java
URL: http://svn.apache.org/viewvc/openjpa/trunk/openjpa-slice/src/main/java/org/apache/openjpa/slice/jdbc/DistributedJDBCStoreManager.java?rev=943294&r1=943293&r2=943294&view=diff
==============================================================================
--- openjpa/trunk/openjpa-slice/src/main/java/org/apache/openjpa/slice/jdbc/DistributedJDBCStoreManager.java (original)
+++ openjpa/trunk/openjpa-slice/src/main/java/org/apache/openjpa/slice/jdbc/DistributedJDBCStoreManager.java Tue May 11 21:09:17 2010
@@ -56,6 +56,7 @@ import org.apache.openjpa.lib.util.Concr
import org.apache.openjpa.lib.util.Localizer;
import org.apache.openjpa.meta.ClassMetaData;
import org.apache.openjpa.meta.FieldMetaData;
+import org.apache.openjpa.slice.DistributedConfiguration;
import org.apache.openjpa.slice.DistributedStoreManager;
import org.apache.openjpa.slice.ProductDerivation;
import org.apache.openjpa.slice.Slice;
@@ -145,7 +146,7 @@ class DistributedJDBCStoreManager extend
SliceInfo result = null;
PersistenceCapable pc = sm.getPersistenceCapable();
Object ctx = getContext();
- if (SliceImplHelper.isReplicated(sm)) {
+ if (_conf.isReplicated(sm.getMetaData().getDescribedType())) {
result = SliceImplHelper.getSlicesByPolicy(pc, _conf, ctx);
} else {
String origin = estimateSlice(sm, edata);
@@ -159,7 +160,7 @@ class DistributedJDBCStoreManager extend
}
private void assignSlice(OpenJPAStateManager sm, String hint) {
- if (SliceImplHelper.isReplicated(sm)) {
+ if (_conf.isReplicated(sm.getMetaData().getDescribedType())) {
SliceImplHelper.getSlicesByPolicy(sm, _conf, getContext())
.setInto(sm);
return;
@@ -349,10 +350,10 @@ class DistributedJDBCStoreManager extend
* by the associated slice identifier of each StateManager.
*/
private Map<String, StateManagerSet> bin(Collection sms, Object edata) {
- Map<String, StateManagerSet> subsets =
- new HashMap<String, StateManagerSet>();
- for (SliceStoreManager slice : _slices)
- subsets.put(slice.getName(), new StateManagerSet());
+ Map<String, StateManagerSet> subsets = new HashMap<String, StateManagerSet>();
+ for (SliceStoreManager slice : _slices) {
+ subsets.put(slice.getName(), new StateManagerSet(_conf));
+ }
for (Object x : sms) {
OpenJPAStateManager sm = (OpenJPAStateManager) x;
String[] targets = findSliceNames(sm, edata).getSlices();
@@ -498,7 +499,7 @@ class DistributedJDBCStoreManager extend
if (targetNames.contains(slice.getName()))
targets.add(slice);
}
- if (targets.isEmpty())
+ if (targets.isEmpty())
return _slices;
return targets;
}
@@ -523,11 +524,15 @@ class DistributedJDBCStoreManager extend
*
*/
private static class StateManagerSet extends HashSet<OpenJPAStateManager> {
+ private final DistributedConfiguration conf;
List<OpenJPAStateManager> replicated;
+ StateManagerSet(DistributedConfiguration conf) {
+ this.conf = conf;
+ }
@Override
public boolean add(OpenJPAStateManager sm) {
- boolean isReplicated = sm.getMetaData().isReplicated();
+ boolean isReplicated = conf.isReplicated(sm.getMetaData().getDescribedType());
if (isReplicated) {
if (replicated == null)
replicated = new ArrayList<OpenJPAStateManager>();
Modified: openjpa/trunk/openjpa-slice/src/main/java/org/apache/openjpa/slice/jdbc/DistributedStoreQuery.java
URL: http://svn.apache.org/viewvc/openjpa/trunk/openjpa-slice/src/main/java/org/apache/openjpa/slice/jdbc/DistributedStoreQuery.java?rev=943294&r1=943293&r2=943294&view=diff
==============================================================================
--- openjpa/trunk/openjpa-slice/src/main/java/org/apache/openjpa/slice/jdbc/DistributedStoreQuery.java (original)
+++ openjpa/trunk/openjpa-slice/src/main/java/org/apache/openjpa/slice/jdbc/DistributedStoreQuery.java Tue May 11 21:09:17 2010
@@ -45,6 +45,7 @@ import org.apache.openjpa.lib.rop.Merged
import org.apache.openjpa.lib.rop.RangeResultObjectProvider;
import org.apache.openjpa.lib.rop.ResultObjectProvider;
import org.apache.openjpa.meta.ClassMetaData;
+import org.apache.openjpa.slice.DistributedConfiguration;
import org.apache.openjpa.slice.SliceThread;
import org.apache.openjpa.util.StoreException;
@@ -184,19 +185,17 @@ class DistributedStoreQuery extends JDBC
* Scans metadata to find out if a replicated class is the candidate.
*/
boolean containsReplicated(QueryContext query) {
- Class candidate = query.getCandidateType();
+ Class<?> candidate = query.getCandidateType();
+ DistributedConfiguration conf = (DistributedConfiguration)query.getStoreContext()
+ .getConfiguration();
if (candidate != null) {
- ClassMetaData meta = query.getStoreContext().getConfiguration()
- .getMetaDataRepositoryInstance().getMetaData(candidate,
- null, true);
- if (meta != null && meta.isReplicated())
- return true;
+ return conf.isReplicated(candidate);
}
ClassMetaData[] metas = query.getAccessPathMetaDatas();
if (metas == null || metas.length < 1)
return false;
- for (ClassMetaData type : metas)
- if (type.isReplicated())
+ for (ClassMetaData meta : metas)
+ if (conf.isReplicated(meta.getDescribedType()))
return true;
return false;
}
Modified: openjpa/trunk/openjpa-slice/src/test/java/org/apache/openjpa/slice/Country.java
URL: http://svn.apache.org/viewvc/openjpa/trunk/openjpa-slice/src/test/java/org/apache/openjpa/slice/Country.java?rev=943294&r1=943293&r2=943294&view=diff
==============================================================================
--- openjpa/trunk/openjpa-slice/src/test/java/org/apache/openjpa/slice/Country.java (original)
+++ openjpa/trunk/openjpa-slice/src/test/java/org/apache/openjpa/slice/Country.java Tue May 11 21:09:17 2010
@@ -22,8 +22,6 @@ import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.Version;
-import org.apache.openjpa.persistence.Replicated;
-
/**
* A persistence entity to be replicated across multiple databases. A
* non-replicated entity can refer to a replicated entity.
@@ -32,7 +30,6 @@ import org.apache.openjpa.persistence.Re
*
*/
@Entity
-@Replicated
public class Country {
@Id
private String name;
Modified: openjpa/trunk/openjpa-slice/src/test/java/org/apache/openjpa/slice/ReplicatedChild.java
URL: http://svn.apache.org/viewvc/openjpa/trunk/openjpa-slice/src/test/java/org/apache/openjpa/slice/ReplicatedChild.java?rev=943294&r1=943293&r2=943294&view=diff
==============================================================================
--- openjpa/trunk/openjpa-slice/src/test/java/org/apache/openjpa/slice/ReplicatedChild.java (original)
+++ openjpa/trunk/openjpa-slice/src/test/java/org/apache/openjpa/slice/ReplicatedChild.java Tue May 11 21:09:17 2010
@@ -22,10 +22,7 @@ import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.ManyToOne;
-import org.apache.openjpa.persistence.Replicated;
-
@Entity
-@Replicated
public class ReplicatedChild {
@Id
private String name;
Modified: openjpa/trunk/openjpa-slice/src/test/java/org/apache/openjpa/slice/ReplicatedParent.java
URL: http://svn.apache.org/viewvc/openjpa/trunk/openjpa-slice/src/test/java/org/apache/openjpa/slice/ReplicatedParent.java?rev=943294&r1=943293&r2=943294&view=diff
==============================================================================
--- openjpa/trunk/openjpa-slice/src/test/java/org/apache/openjpa/slice/ReplicatedParent.java (original)
+++ openjpa/trunk/openjpa-slice/src/test/java/org/apache/openjpa/slice/ReplicatedParent.java Tue May 11 21:09:17 2010
@@ -23,10 +23,7 @@ import java.util.Set;
import javax.persistence.*;
-import org.apache.openjpa.persistence.Replicated;
-
@Entity
-@Replicated
public class ReplicatedParent {
@Id
private String name;
Modified: openjpa/trunk/openjpa-slice/src/test/java/org/apache/openjpa/slice/TestReplication.java
URL: http://svn.apache.org/viewvc/openjpa/trunk/openjpa-slice/src/test/java/org/apache/openjpa/slice/TestReplication.java?rev=943294&r1=943293&r2=943294&view=diff
==============================================================================
--- openjpa/trunk/openjpa-slice/src/test/java/org/apache/openjpa/slice/TestReplication.java (original)
+++ openjpa/trunk/openjpa-slice/src/test/java/org/apache/openjpa/slice/TestReplication.java Tue May 11 21:09:17 2010
@@ -23,7 +23,7 @@ import java.util.Set;
import javax.persistence.EntityManager;
/**
- * Tests that parent-child relation both @Repliated are stored in all replicated
+ * Tests that parent-child relation both replicated are stored in all replicated
* slices.
*
* <A HREF="https://issues.apache.org/jira/browse/OPENJPA-981">OPENJPA-981</A>
Modified: openjpa/trunk/openjpa-slice/src/test/resources/META-INF/persistence.xml
URL: http://svn.apache.org/viewvc/openjpa/trunk/openjpa-slice/src/test/resources/META-INF/persistence.xml?rev=943294&r1=943293&r2=943294&view=diff
==============================================================================
--- openjpa/trunk/openjpa-slice/src/test/resources/META-INF/persistence.xml (original)
+++ openjpa/trunk/openjpa-slice/src/test/resources/META-INF/persistence.xml Tue May 11 21:09:17 2010
@@ -101,6 +101,8 @@
<property name="openjpa.QueryCompilationCache" value="false"/>
<property name="openjpa.jdbc.MappingDefaults" value="DefaultMissingInfo=true"/>
+ <property name="openjpa.slice.ReplicatedTypes" value="org.apache.openjpa.slice.Country"/>
+
<property name="openjpa.RuntimeUnenhancedClasses" value="unsupported"/>
<property name="openjpa.DynamicEnhancementAgent" value="false"/>
</properties>
@@ -171,12 +173,13 @@
<property name="openjpa.slice.One.ConnectionURL" value="jdbc:derby:target/database/openjpa-slice1;create=true"/>
<property name="openjpa.slice.Two.ConnectionURL" value="jdbc:derby:target/database/openjpa-slice2;create=true"/>
+ <property name="openjpa.slice.ReplicatedTypes" value="org.apache.openjpa.slice.ReplicatedParent,org.apache.openjpa.slice.ReplicatedChild"/>
<property name="openjpa.Multithreaded" value="false"/>
<property name="openjpa.Log" value="DefaultLevel=INFO, Enhance=TRACE, SQL=TRACE"/>
<property name="openjpa.jdbc.SynchronizeMappings" value="refresh"/>
<property name="openjpa.jdbc.MappingDefaults" value="DefaultMissingInfo=true"/>
- <property name="openjpa.RuntimeUnenhancedClasses" value="unsupported"/>
- <property name="openjpa.DynamicEnhancementAgent" value="false"/>
+ <property name="openjpa.RuntimeUnenhancedClasses" value="unsupported"/>
+ <property name="openjpa.DynamicEnhancementAgent" value="false"/>
</properties>
</persistence-unit>
@@ -228,5 +231,50 @@
</properties>
</persistence-unit>
-
+ <persistence-unit name="perf.mysql.slice">
+ <class>org.apache.openjpa.slice.Person</class>
+ <class>org.apache.openjpa.slice.Address</class>
+ <class>org.apache.openjpa.slice.Country</class>
+
+ <properties>
+ <property name="openjpa.BrokerFactory" value="slice"/>
+ <property name="openjpa.ConnectionDriverName" value="org.apache.commons.dbcp.BasicDataSource"/>
+
+ <property name="openjpa.slice.Names" value="S1,S2,S3,S4"/>
+
+ <property name="openjpa.ConnectionUserName" value="root"/>
+ <property name="openjpa.ConnectionPassword" value=""/>
+ <property name="openjpa.slice.S1.ConnectionProperties" value="DriverClassName=com.mysql.jdbc.Driver,Url=jdbc:mysql://localhost/S1,MaxActive=4"/>
+ <property name="openjpa.slice.S2.ConnectionProperties" value="DriverClassName=com.mysql.jdbc.Driver,Url=jdbc:mysql://localhost/S2,MaxActive=4"/>
+ <property name="openjpa.slice.S3.ConnectionProperties" value="DriverClassName=com.mysql.jdbc.Driver,Url=jdbc:mysql://localhost/S3,MaxActive=4"/>
+ <property name="openjpa.slice.S4.ConnectionProperties" value="DriverClassName=com.mysql.jdbc.Driver,Url=jdbc:mysql://localhost/S4,MaxActive=4"/>
+
+ <property name="openjpa.jdbc.DBDictionary" value="mysql"/>
+ <property name="openjpa.Multithreaded" value="false"/>
+ <property name="openjpa.jdbc.SynchronizeMappings" value="refresh"/>
+ <property name="openjpa.jdbc.MappingDefaults" value="DefaultMissingInfo=true"/>
+ <property name="openjpa.RuntimeUnenhancedClasses" value="unsupported"/>
+ <property name="openjpa.DynamicEnhancementAgent" value="false"/>
+ </properties>
+ </persistence-unit>
+ <persistence-unit name="perf.mysql.mono">
+ <class>org.apache.openjpa.slice.Person</class>
+ <class>org.apache.openjpa.slice.Address</class>
+ <class>org.apache.openjpa.slice.Country</class>
+
+ <properties>
+ <property name="openjpa.ConnectionDriverName" value="org.apache.commons.dbcp.BasicDataSource"/>
+
+ <property name="openjpa.ConnectionUserName" value="root"/>
+ <property name="openjpa.ConnectionPassword" value=""/>
+ <property name="openjpa.ConnectionProperties" value="DriverClassName=com.mysql.jdbc.Driver,Url=jdbc:mysql://localhost/S,MaxActive=4"/>
+
+ <property name="openjpa.jdbc.DBDictionary" value="mysql"/>
+ <property name="openjpa.Multithreaded" value="false"/>
+ <property name="openjpa.jdbc.SynchronizeMappings" value="refresh"/>
+ <property name="openjpa.jdbc.MappingDefaults" value="DefaultMissingInfo=true"/>
+ <property name="openjpa.RuntimeUnenhancedClasses" value="unsupported"/>
+ <property name="openjpa.DynamicEnhancementAgent" value="false"/>
+ </properties>
+ </persistence-unit>
</persistence>