001 package org.cumulus4j.store;
002
003 import javax.jdo.PersistenceManager;
004
005 /**
006 * <p>
007 * Connection to the underlying datastore(s).
008 * </p><p>
009 * Cumulus4j can be used with either one or two underlying datastores.
010 * If it is used with two datastores, the {@link #getDataPM() actual data} and the {@link #getIndexPM() index information} is
011 * stored separately. The meta-data of the persistence-capable classes is replicated (and thus present in both datastores).
012 * </p>
013 *
014 * @author Andy Jefferson
015 * @author Marco หงุ่ยตระกูล-Schulze - marco at nightlabs dot de (added javadoc)
016 */
017 public class PersistenceManagerConnection
018 {
019 /** PM for data (never null). */
020 private PersistenceManager pmData;
021 /** PM for indexes, could be null in which case use pmData */
022 private PersistenceManager pmIndex;
023
024 public PersistenceManagerConnection(PersistenceManager pmData, PersistenceManager pmIndex)
025 {
026 if (pmData == null)
027 throw new IllegalArgumentException("pmData == null");
028
029 if (pmIndex == pmData)
030 throw new IllegalArgumentException("pmIndex == pmData :: If there is no pmIndex, it should be null and not the same as pmData!");
031
032 this.pmData = pmData;
033 this.pmIndex = pmIndex;
034 }
035
036 /**
037 * Determine, if there is a separate index-PM.
038 *
039 * @return <code>true</code>, if there is a separate index-PM configured (i.e. {@link #getDataPM()} and {@link #getIndexPM()}
040 * return different objects); <code>false</code> otherwise (i.e. {@link #getDataPM()} and {@link #getIndexPM()} return the same PM).
041 */
042 public boolean indexHasOwnPM() {
043 return pmIndex != null;
044 }
045
046 /**
047 * Accessor for the PM to use for data.
048 * @return The PM to use for data
049 */
050 public PersistenceManager getDataPM() {
051 return pmData;
052 }
053
054 /**
055 * Accessor for the PM to use for indexes. This method falls back to the {@link #getDataPM() data-PM},
056 * if there is no separate index-PM. To determine, if there is a separate index-PM, it is recommended
057 * to use {@link #indexHasOwnPM()}.
058 * @return the PM to use for indexes. If there is no separate index-PM, this method returns the same
059 * as {@link #getDataPM()}.
060 */
061 public PersistenceManager getIndexPM() {
062 if (pmIndex != null) {
063 return pmIndex;
064 }
065 return pmData;
066 }
067 }