CAY-1873 final cleanup - generics in DataRowStore and related classes - rename default event bridge to NoopEventBridge and check for it in DataRowStoreFactory - return "shared cache" checkbox for DataDomain in Modeler
Closes #72 Project: http://git-wip-us.apache.org/repos/asf/cayenne/repo Commit: http://git-wip-us.apache.org/repos/asf/cayenne/commit/982b1541 Tree: http://git-wip-us.apache.org/repos/asf/cayenne/tree/982b1541 Diff: http://git-wip-us.apache.org/repos/asf/cayenne/diff/982b1541 Branch: refs/heads/master Commit: 982b1541049a479a01b480cb6c1d2ad2d65a9503 Parents: dae15ce Author: Nikita Timofeev <stari...@gmail.com> Authored: Mon Mar 13 16:42:25 2017 +0300 Committer: Nikita Timofeev <stari...@gmail.com> Committed: Mon Mar 13 16:42:25 2017 +0300 ---------------------------------------------------------------------- .../org/apache/cayenne/access/DataDomain.java | 15 ++- .../org/apache/cayenne/access/DataRowStore.java | 107 +++++++++---------- .../access/DefaultDataRowStoreFactory.java | 37 ++++--- .../access/HierarchicalObjectResolver.java | 10 +- .../cayenne/access/PrefetchProcessorNode.java | 66 +++++------- .../cayenne/access/event/SnapshotEvent.java | 40 +++---- .../configuration/server/ServerModule.java | 10 +- .../cayenne/event/EventBridgeProvider.java | 60 ----------- .../apache/cayenne/event/JMSBridgeProvider.java | 2 +- .../cayenne/event/JavaGroupsBridgeProvider.java | 2 +- .../apache/cayenne/event/NoopEventBridge.java | 43 ++++++++ .../cayenne/event/NoopEventBridgeProvider.java | 35 ++++++ .../cayenne/event/XMPPBridgeProvider.java | 2 +- .../apache/cayenne/access/DataRowStoreIT.java | 28 ++--- .../access/DefaultDataRowStoreFactoryIT.java | 4 +- .../cayenne/access/event/SnapshotEventTest.java | 10 +- .../server/DataContextFactoryTest.java | 6 +- .../server/DataDomainProviderTest.java | 4 +- .../cayenne/modeler/editor/DataDomainView.java | 20 ++++ 19 files changed, 272 insertions(+), 229 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/cayenne/blob/982b1541/cayenne-server/src/main/java/org/apache/cayenne/access/DataDomain.java ---------------------------------------------------------------------- diff --git a/cayenne-server/src/main/java/org/apache/cayenne/access/DataDomain.java b/cayenne-server/src/main/java/org/apache/cayenne/access/DataDomain.java index 73e0c02..13746f1 100644 --- a/cayenne-server/src/main/java/org/apache/cayenne/access/DataDomain.java +++ b/cayenne-server/src/main/java/org/apache/cayenne/access/DataDomain.java @@ -94,7 +94,6 @@ public class DataDomain implements QueryEngine, DataChannel { /** * @since 4.0 */ - @Inject protected DataRowStoreFactory dataRowStoreFactory; /** @@ -654,6 +653,20 @@ public class DataDomain implements QueryEngine, DataChannel { } /** + * @since 4.0 + */ + public DataRowStoreFactory getDataRowStoreFactory() { + return dataRowStoreFactory; + } + + /** + * @since 4.0 + */ + public void setDataRowStoreFactory(DataRowStoreFactory dataRowStoreFactory) { + this.dataRowStoreFactory = dataRowStoreFactory; + } + + /** * @since 3.1 */ JdbcEventLogger getJdbcEventLogger() { http://git-wip-us.apache.org/repos/asf/cayenne/blob/982b1541/cayenne-server/src/main/java/org/apache/cayenne/access/DataRowStore.java ---------------------------------------------------------------------- diff --git a/cayenne-server/src/main/java/org/apache/cayenne/access/DataRowStore.java b/cayenne-server/src/main/java/org/apache/cayenne/access/DataRowStore.java index e16d834..fcc49a8 100644 --- a/cayenne-server/src/main/java/org/apache/cayenne/access/DataRowStore.java +++ b/cayenne-server/src/main/java/org/apache/cayenne/access/DataRowStore.java @@ -40,7 +40,6 @@ import java.io.Serializable; import java.util.Collection; import java.util.Collections; import java.util.HashMap; -import java.util.Iterator; import java.util.List; import java.util.Map; import java.util.concurrent.ConcurrentMap; @@ -59,29 +58,28 @@ public class DataRowStore implements Serializable { public static final String SNAPSHOT_CACHE_SIZE_PROPERTY = "cayenne.DataRowStore.snapshot.size"; /** - * @deprecated since 4.0.M3 does nothing. Previously it used to check - * if need to create {@link EventBridge}. + * @deprecated since 4.0 does nothing. Previously it used to check if need to create {@link EventBridge}. */ @Deprecated public static final String REMOTE_NOTIFICATION_PROPERTY = "cayenne.DataRowStore.remote.notify"; /** - * @deprecated since 4.0.M3 {@link DataRowStoreFactory} establishes {@link EventBridge}. + * @deprecated since 4.0 {@link DataRowStoreFactory} establishes {@link EventBridge}. */ @Deprecated public static final String EVENT_BRIDGE_FACTORY_PROPERTY = "cayenne.DataRowStore.EventBridge.factory"; // default property values - // default expiration time is 2 hours - public static final long SNAPSHOT_EXPIRATION_DEFAULT = 2 * 60 * 60; + public static final long SNAPSHOT_EXPIRATION_DEFAULT = 2 * 60 * 60; // default expiration time is 2 hours public static final int SNAPSHOT_CACHE_SIZE_DEFAULT = 10000; @Deprecated public static final boolean REMOTE_NOTIFICATION_DEFAULT = false; - // use String for class name, since JavaGroups may not be around, - // causing CNF exceptions + /** + * @deprecated since 4.0 does nothing. + */ @Deprecated public static final String EVENT_BRIDGE_FACTORY_DEFAULT = "org.apache.cayenne.event.JavaGroupsBridgeFactory"; @@ -90,8 +88,7 @@ public class DataRowStore implements Serializable { protected ConcurrentMap<ObjectId, DataRow> snapshots; /** - * @deprecated since 4.0.M3 does nothing. Previously it used to check - * if need to create {@link EventBridge}. + * @deprecated since 4.0 does nothing. Previously it used to check if need to create {@link EventBridge}. */ @Deprecated protected boolean notifyingRemoteListeners; @@ -115,7 +112,7 @@ public class DataRowStore implements Serializable { * events. * @since 1.2 */ - public DataRowStore(String name, Map properties, EventManager eventManager) { + public DataRowStore(String name, Map<String, String> properties, EventManager eventManager) { if (name == null) { throw new IllegalArgumentException("DataRowStore name can't be null."); } @@ -130,7 +127,7 @@ public class DataRowStore implements Serializable { return EventSubject.getSubject(this.getClass(), name); } - protected void initWithProperties(Map properties) { + protected void initWithProperties(Map<String, String> properties) { ExtendedProperties propertiesWrapper = new ExtendedProperties(); if (properties != null) { @@ -175,7 +172,7 @@ public class DataRowStore implements Serializable { * * @since 1.2 */ - void snapshotsUpdatedForObjects(List objects, List snapshots, boolean refresh) { + void snapshotsUpdatedForObjects(List<Persistent> objects, List<? extends DataRow> snapshots, boolean refresh) { int size = objects.size(); @@ -189,11 +186,11 @@ public class DataRowStore implements Serializable { + snapshots.size()); } - Map modified = null; + Map<ObjectId, DataRow> modified = null; Object eventPostedBy = null; for (int i = 0; i < size; i++) { - Persistent object = (Persistent) objects.get(i); + Persistent object = objects.get(i); // skip null objects... possible since 3.0 in some EJBQL results if (object == null) { @@ -213,14 +210,13 @@ public class DataRowStore implements Serializable { DataRow cachedSnapshot = this.snapshots.get(oid); if (refresh || cachedSnapshot == null) { - DataRow newSnapshot = (DataRow) snapshots.get(i); + DataRow newSnapshot = snapshots.get(i); if (cachedSnapshot != null) { // use old snapshot if no changes occurred if (object instanceof DataObject && cachedSnapshot.equals(newSnapshot)) { - ((DataObject) object).setSnapshotVersion(cachedSnapshot - .getVersion()); + ((DataObject) object).setSnapshotVersion(cachedSnapshot.getVersion()); continue; } else { newSnapshot.setReplacesVersion(cachedSnapshot.getVersion()); @@ -228,7 +224,7 @@ public class DataRowStore implements Serializable { } if (modified == null) { - modified = new HashMap(); + modified = new HashMap<>(); eventPostedBy = object.getObjectContext().getGraphManager(); } @@ -240,9 +236,9 @@ public class DataRowStore implements Serializable { processSnapshotChanges( eventPostedBy, modified, - Collections.EMPTY_LIST, - Collections.EMPTY_LIST, - Collections.EMPTY_LIST); + Collections.<ObjectId>emptyList(), + Collections.<ObjectId>emptyList(), + Collections.<ObjectId>emptyList()); } } @@ -348,10 +344,10 @@ public class DataRowStore implements Serializable { logger.debug("remote event: " + event); } - Collection deletedSnapshotIds = event.getDeletedIds(); - Collection invalidatedSnapshotIds = event.getInvalidatedIds(); - Map diffs = event.getModifiedDiffs(); - Collection indirectlyModifiedIds = event.getIndirectlyModifiedIds(); + Collection<ObjectId> deletedSnapshotIds = event.getDeletedIds(); + Collection<ObjectId> invalidatedSnapshotIds = event.getInvalidatedIds(); + Map<ObjectId, DataRow> diffs = event.getModifiedDiffs(); + Collection<ObjectId> indirectlyModifiedIds = event.getIndirectlyModifiedIds(); if (deletedSnapshotIds.isEmpty() && invalidatedSnapshotIds.isEmpty() @@ -378,10 +374,10 @@ public class DataRowStore implements Serializable { */ public void processSnapshotChanges( Object postedBy, - Map updatedSnapshots, - Collection deletedSnapshotIds, - Collection invalidatedSnapshotIds, - Collection indirectlyModifiedIds) { + Map<ObjectId, DataRow> updatedSnapshots, + Collection<ObjectId> deletedSnapshotIds, + Collection<ObjectId> invalidatedSnapshotIds, + Collection<ObjectId> indirectlyModifiedIds) { // update the internal cache, prepare snapshot event @@ -395,7 +391,7 @@ public class DataRowStore implements Serializable { processDeletedIDs(deletedSnapshotIds); processInvalidatedIDs(invalidatedSnapshotIds); - Map diffs = processUpdatedSnapshots(updatedSnapshots); + Map<ObjectId, DataRow> diffs = processUpdatedSnapshots(updatedSnapshots); sendUpdateNotification( postedBy, diffs, @@ -404,37 +400,32 @@ public class DataRowStore implements Serializable { indirectlyModifiedIds); } - private void processDeletedIDs(Collection deletedSnapshotIDs) { + private void processDeletedIDs(Collection<ObjectId> deletedSnapshotIDs) { // DELETED: evict deleted snapshots if (!deletedSnapshotIDs.isEmpty()) { - Iterator it = deletedSnapshotIDs.iterator(); - while (it.hasNext()) { - snapshots.remove(it.next()); + for (ObjectId deletedSnapshotID : deletedSnapshotIDs) { + snapshots.remove(deletedSnapshotID); } } } - private void processInvalidatedIDs(Collection invalidatedSnapshotIds) { + private void processInvalidatedIDs(Collection<ObjectId> invalidatedSnapshotIds) { // INVALIDATED: forget snapshot, treat as expired from cache if (!invalidatedSnapshotIds.isEmpty()) { - Iterator it = invalidatedSnapshotIds.iterator(); - while (it.hasNext()) { - snapshots.remove(it.next()); + for (ObjectId invalidatedSnapshotId : invalidatedSnapshotIds) { + snapshots.remove(invalidatedSnapshotId); } } } - private Map processUpdatedSnapshots(Map updatedSnapshots) { - Map diffs = null; + private Map<ObjectId, DataRow> processUpdatedSnapshots(Map<ObjectId, DataRow> updatedSnapshots) { + Map<ObjectId, DataRow> diffs = null; // MODIFIED: replace/add snapshots, generate diffs for event if (!updatedSnapshots.isEmpty()) { - Iterator it = updatedSnapshots.entrySet().iterator(); - while (it.hasNext()) { - Map.Entry entry = (Map.Entry) it.next(); - - ObjectId key = (ObjectId) entry.getKey(); - DataRow newSnapshot = (DataRow) entry.getValue(); + for (Map.Entry<ObjectId, DataRow> entry : updatedSnapshots.entrySet()) { + ObjectId key = entry.getKey(); + DataRow newSnapshot = entry.getValue(); DataRow oldSnapshot = snapshots.put(key, newSnapshot); // generate diff for the updated event, if this not a new @@ -474,11 +465,11 @@ public class DataRowStore implements Serializable { continue; } - Map diff = oldSnapshot.createDiff(newSnapshot); + DataRow diff = oldSnapshot.createDiff(newSnapshot); if (diff != null) { if (diffs == null) { - diffs = new HashMap(); + diffs = new HashMap<>(); } diffs.put(key, diff); @@ -490,20 +481,18 @@ public class DataRowStore implements Serializable { return diffs; } - private void processUpdateDiffs(Map diffs) { + private void processUpdateDiffs(Map<ObjectId, DataRow> diffs) { // apply snapshot diffs if (!diffs.isEmpty()) { - Iterator it = diffs.entrySet().iterator(); - while (it.hasNext()) { - Map.Entry entry = (Map.Entry) it.next(); - ObjectId key = (ObjectId) entry.getKey(); + for (Map.Entry<ObjectId, DataRow> entry : diffs.entrySet()) { + ObjectId key = entry.getKey(); DataRow oldSnapshot = snapshots.remove(key); if (oldSnapshot == null) { continue; } - DataRow newSnapshot = oldSnapshot.applyDiff((DataRow) entry.getValue()); + DataRow newSnapshot = oldSnapshot.applyDiff(entry.getValue()); snapshots.put(key, newSnapshot); } } @@ -511,10 +500,10 @@ public class DataRowStore implements Serializable { private void sendUpdateNotification( Object postedBy, - Map diffs, - Collection deletedSnapshotIDs, - Collection invalidatedSnapshotIDs, - Collection indirectlyModifiedIds) { + Map<ObjectId, DataRow> diffs, + Collection<ObjectId> deletedSnapshotIDs, + Collection<ObjectId> invalidatedSnapshotIDs, + Collection<ObjectId> indirectlyModifiedIds) { // do not send bogus events... e.g. inserted objects are not counted if ((diffs != null && !diffs.isEmpty()) http://git-wip-us.apache.org/repos/asf/cayenne/blob/982b1541/cayenne-server/src/main/java/org/apache/cayenne/access/DefaultDataRowStoreFactory.java ---------------------------------------------------------------------- diff --git a/cayenne-server/src/main/java/org/apache/cayenne/access/DefaultDataRowStoreFactory.java b/cayenne-server/src/main/java/org/apache/cayenne/access/DefaultDataRowStoreFactory.java index a3397b3..787c177 100644 --- a/cayenne-server/src/main/java/org/apache/cayenne/access/DefaultDataRowStoreFactory.java +++ b/cayenne-server/src/main/java/org/apache/cayenne/access/DefaultDataRowStoreFactory.java @@ -23,9 +23,9 @@ import org.apache.cayenne.CayenneRuntimeException; import org.apache.cayenne.configuration.Constants; import org.apache.cayenne.di.DIRuntimeException; import org.apache.cayenne.di.Inject; -import org.apache.cayenne.di.Injector; import org.apache.cayenne.event.EventBridge; import org.apache.cayenne.event.EventManager; +import org.apache.cayenne.event.NoopEventBridge; import java.util.Map; @@ -36,30 +36,39 @@ import java.util.Map; */ public class DefaultDataRowStoreFactory implements DataRowStoreFactory { - @Inject - protected Injector injector; + EventBridge eventBridge; - @Inject - protected EventManager eventManager; + EventManager eventManager; - @Inject(Constants.DATA_ROW_STORE_PROPERTIES_MAP) Map<String, String> properties; + boolean isNoopEventBridge; + + public DefaultDataRowStoreFactory(@Inject EventBridge eventBridge, + @Inject EventManager eventManager, + @Inject(Constants.DATA_ROW_STORE_PROPERTIES_MAP) Map<String, String> properties) { + this.eventBridge = eventBridge; + this.eventManager = eventManager; + this.properties = properties; + isNoopEventBridge = eventBridge instanceof NoopEventBridge; + } + @Override public DataRowStore createDataRowStore(String name) throws DIRuntimeException { - DataRowStore store = new DataRowStore( - name, - properties, - eventManager); + DataRowStore store = new DataRowStore(name, properties, eventManager); + setUpEventBridge(store); + return store; + } + private void setUpEventBridge(DataRowStore store) { + if(isNoopEventBridge) { + return; + } try { - store.setEventBridge(injector.getInstance(EventBridge.class)); + store.setEventBridge(eventBridge); store.startListeners(); } catch (Exception ex) { throw new CayenneRuntimeException("Error initializing DataRowStore.", ex); } - - return store; } - } \ No newline at end of file http://git-wip-us.apache.org/repos/asf/cayenne/blob/982b1541/cayenne-server/src/main/java/org/apache/cayenne/access/HierarchicalObjectResolver.java ---------------------------------------------------------------------- diff --git a/cayenne-server/src/main/java/org/apache/cayenne/access/HierarchicalObjectResolver.java b/cayenne-server/src/main/java/org/apache/cayenne/access/HierarchicalObjectResolver.java index 613c88d..d75f232 100644 --- a/cayenne-server/src/main/java/org/apache/cayenne/access/HierarchicalObjectResolver.java +++ b/cayenne-server/src/main/java/org/apache/cayenne/access/HierarchicalObjectResolver.java @@ -209,7 +209,7 @@ class HierarchicalObjectResolver { PrefetchTreeNode jointSubtree = node.cloneJointSubtree(); - List dataRows = new ArrayList(); + List<DataRow> dataRows = new ArrayList<>(); for (PrefetchSelectQuery query : queries) { // need to pass the remaining tree to make joint prefetches work if (jointSubtree.hasChildren()) { @@ -223,7 +223,7 @@ class HierarchicalObjectResolver { query.addResultPath("db:" + relationship.getReverseDbRelationshipPath()); } - dataRows.addAll(context.performQuery(query)); + dataRows.addAll((List<DataRow>)context.performQuery(query)); } processorNode.setDataRows(dataRows); @@ -280,16 +280,16 @@ class HierarchicalObjectResolver { return false; } - List parentObjects = parent.getObjects(); + List<Persistent> parentObjects = parent.getObjects(); int size = parentRows.size(); for (int i = 0; i < size; i++) { subprocessor.setCurrentFlatRow((DataRow) parentRows.get(i)); - parent.setLastResolved((Persistent) parentObjects.get(i)); + parent.setLastResolved(parentObjects.get(i)); processorNode.traverse(subprocessor); } - List objects = processorNode.getObjects(); + List<Persistent> objects = processorNode.getObjects(); cache.snapshotsUpdatedForObjects( objects, http://git-wip-us.apache.org/repos/asf/cayenne/blob/982b1541/cayenne-server/src/main/java/org/apache/cayenne/access/PrefetchProcessorNode.java ---------------------------------------------------------------------- diff --git a/cayenne-server/src/main/java/org/apache/cayenne/access/PrefetchProcessorNode.java b/cayenne-server/src/main/java/org/apache/cayenne/access/PrefetchProcessorNode.java index 09ce0fa..1fcb363 100644 --- a/cayenne-server/src/main/java/org/apache/cayenne/access/PrefetchProcessorNode.java +++ b/cayenne-server/src/main/java/org/apache/cayenne/access/PrefetchProcessorNode.java @@ -37,13 +37,13 @@ import org.apache.cayenne.util.ToStringBuilder; */ class PrefetchProcessorNode extends PrefetchTreeNode { - List dataRows; + List<DataRow> dataRows; List<Persistent> objects; ArcProperty incoming; ObjectResolver resolver; - Map partitionByParent; + Map<Persistent, List<Persistent>> partitionByParent; boolean jointChildren; private Persistent lastResolved; @@ -58,9 +58,8 @@ class PrefetchProcessorNode extends PrefetchTreeNode { * all properties are initialized. */ void afterInit() { - if (isPartitionedByParent()) { - partitionByParent = new HashMap(); + partitionByParent = new HashMap<>(); } } @@ -76,21 +75,18 @@ class PrefetchProcessorNode extends PrefetchTreeNode { // away.... write directly to prevent changing persistence state. if (incoming instanceof ToOneProperty) { incoming.writePropertyDirectly(parent, null, object); - } - else { - - List peers = (List) partitionByParent.get(parent); + } else { + List<Persistent> peers = partitionByParent.get(parent); // wrap in a list even if relationship is to-one... will unwrap at the end // of the processing cycle. if (peers == null) { - peers = new ArrayList(); + peers = new ArrayList<>(); partitionByParent.put(parent, peers); - } - // checking for duplicates is needed in case of nested joint prefetches - // when there is more than one row with the same combination of adjacent - // parent and child... - else if (peers.contains(object)) { + } else if (peers.contains(object)) { + // checking for duplicates is needed in case of nested joint prefetches + // when there is more than one row with the same combination of adjacent + // parent and child... return; } @@ -108,17 +104,14 @@ class PrefetchProcessorNode extends PrefetchTreeNode { // use different strategy PrefetchProcessorNode parent = (PrefetchProcessorNode) getParent(); - boolean parentObjectsExist = parent.getObjects() != null - && parent.getObjects().size() > 0; + boolean parentObjectsExist = parent.getObjects() != null && parent.getObjects().size() > 0; if (incoming.getRelationship().isToMany()) { if (parentObjectsExist) { connectToNodeParents(parent.getObjects()); - } - else { + } else { connectToFaultedParents(); } - } - else { + } else { // optional to-one ... need to fill in unresolved relationships with // null... if (parentObjectsExist) { @@ -128,49 +121,40 @@ class PrefetchProcessorNode extends PrefetchTreeNode { } } - private void clearNullRelationships(List parentObjects) { - for (Object object : parentObjects) { + private void clearNullRelationships(List<Persistent> parentObjects) { + for (Persistent object : parentObjects) { if (incoming.readPropertyDirectly(object) instanceof Fault) { incoming.writePropertyDirectly(object, null, null); } } } - private void connectToNodeParents(List parentObjects) { - - for (Object parentObject : parentObjects) { - Persistent object = (Persistent) parentObject; - List related = (List) partitionByParent.get(object); - connect(object, related); + private void connectToNodeParents(List<Persistent> parentObjects) { + for (Persistent parentObject : parentObjects) { + connect(parentObject, partitionByParent.get(parentObject)); } } private void connectToFaultedParents() { - for (Object o : partitionByParent.entrySet()) { - Map.Entry entry = (Map.Entry) o; - - Persistent object = (Persistent) entry.getKey(); - List related = (List) entry.getValue(); - connect(object, related); + for (Map.Entry<Persistent, List<Persistent>> entry : partitionByParent.entrySet()) { + connect(entry.getKey(), entry.getValue()); } } - private void connect(Persistent object, List related) { + private void connect(Persistent object, List<Persistent> related) { if (incoming.getRelationship().isToMany()) { ValueHolder toManyList = (ValueHolder) incoming.readProperty(object); // TODO, Andrus 11/15/2005 - if list is modified, shouldn't we attempt to // merge the changes instead of overwriting? toManyList.setValueDirectly(related != null ? related : new ArrayList(1)); - } - else { + } else { // this should've been handled elsewhere - throw new CayenneRuntimeException( - "To-one relationship wasn't handled properly: " + incoming.getName()); + throw new CayenneRuntimeException("To-one relationship wasn't handled properly: %s", incoming.getName()); } } - List getDataRows() { + List<DataRow> getDataRows() { return dataRows; } @@ -194,7 +178,7 @@ class PrefetchProcessorNode extends PrefetchTreeNode { this.incoming = incoming; } - void setDataRows(List dataRows) { + void setDataRows(List<DataRow> dataRows) { this.dataRows = dataRows; } http://git-wip-us.apache.org/repos/asf/cayenne/blob/982b1541/cayenne-server/src/main/java/org/apache/cayenne/access/event/SnapshotEvent.java ---------------------------------------------------------------------- diff --git a/cayenne-server/src/main/java/org/apache/cayenne/access/event/SnapshotEvent.java b/cayenne-server/src/main/java/org/apache/cayenne/access/event/SnapshotEvent.java index 61c2564..72bfb4b 100644 --- a/cayenne-server/src/main/java/org/apache/cayenne/access/event/SnapshotEvent.java +++ b/cayenne-server/src/main/java/org/apache/cayenne/access/event/SnapshotEvent.java @@ -23,6 +23,8 @@ import java.util.Collection; import java.util.Collections; import java.util.Map; +import org.apache.cayenne.DataRow; +import org.apache.cayenne.ObjectId; import org.apache.cayenne.event.CayenneEvent; /** @@ -33,14 +35,14 @@ import org.apache.cayenne.event.CayenneEvent; public class SnapshotEvent extends CayenneEvent { protected long timestamp; - protected Collection deletedIds; - protected Collection invalidatedIds; - protected Map modifiedDiffs; - protected Collection indirectlyModifiedIds; + protected Collection<ObjectId> deletedIds; + protected Collection<ObjectId> invalidatedIds; + protected Map<ObjectId, DataRow> modifiedDiffs; + protected Collection<ObjectId> indirectlyModifiedIds; - public SnapshotEvent(Object source, Object postedBy, Map modifiedDiffs, - Collection deletedIds, Collection invalidatedIds, - Collection indirectlyModifiedIds) { + public SnapshotEvent(Object source, Object postedBy, Map<ObjectId, DataRow> modifiedDiffs, + Collection<ObjectId> deletedIds, Collection<ObjectId> invalidatedIds, + Collection<ObjectId> indirectlyModifiedIds) { super(source, postedBy, null); @@ -55,22 +57,22 @@ public class SnapshotEvent extends CayenneEvent { return timestamp; } - public Map getModifiedDiffs() { - return (modifiedDiffs != null) ? modifiedDiffs : Collections.EMPTY_MAP; + public Map<ObjectId, DataRow> getModifiedDiffs() { + return (modifiedDiffs != null) ? modifiedDiffs : Collections.<ObjectId, DataRow>emptyMap(); } - public Collection getDeletedIds() { - return (deletedIds != null) ? deletedIds : Collections.EMPTY_LIST; + public Collection<ObjectId> getDeletedIds() { + return (deletedIds != null) ? deletedIds : Collections.<ObjectId>emptyList(); } - public Collection getInvalidatedIds() { - return (invalidatedIds != null) ? invalidatedIds : Collections.EMPTY_LIST; + public Collection<ObjectId> getInvalidatedIds() { + return (invalidatedIds != null) ? invalidatedIds : Collections.<ObjectId>emptyList(); } - public Collection getIndirectlyModifiedIds() { + public Collection<ObjectId> getIndirectlyModifiedIds() { return (indirectlyModifiedIds != null) ? indirectlyModifiedIds - : Collections.EMPTY_LIST; + : Collections.<ObjectId>emptyList(); } @Override @@ -78,22 +80,22 @@ public class SnapshotEvent extends CayenneEvent { StringBuilder buffer = new StringBuilder(); buffer.append("[SnapshotEvent] source: ").append(getSource()); - Map modified = getModifiedDiffs(); + Map<ObjectId, DataRow> modified = getModifiedDiffs(); if (!modified.isEmpty()) { buffer.append(", modified ").append(modified.size()).append(" id(s)"); } - Collection deleted = getDeletedIds(); + Collection<ObjectId> deleted = getDeletedIds(); if (!deleted.isEmpty()) { buffer.append(", deleted ").append(deleted.size()).append(" id(s)"); } - Collection invalidated = getInvalidatedIds(); + Collection<ObjectId> invalidated = getInvalidatedIds(); if (!invalidated.isEmpty()) { buffer.append(", invalidated ").append(invalidated.size()).append(" id(s)"); } - Collection related = getIndirectlyModifiedIds(); + Collection<ObjectId> related = getIndirectlyModifiedIds(); if (!related.isEmpty()) { buffer.append(", indirectly modified ").append(related.size()).append( " id(s)"); http://git-wip-us.apache.org/repos/asf/cayenne/blob/982b1541/cayenne-server/src/main/java/org/apache/cayenne/configuration/server/ServerModule.java ---------------------------------------------------------------------- diff --git a/cayenne-server/src/main/java/org/apache/cayenne/configuration/server/ServerModule.java b/cayenne-server/src/main/java/org/apache/cayenne/configuration/server/ServerModule.java index 8e24e38..5a4bf66 100644 --- a/cayenne-server/src/main/java/org/apache/cayenne/configuration/server/ServerModule.java +++ b/cayenne-server/src/main/java/org/apache/cayenne/configuration/server/ServerModule.java @@ -43,6 +43,8 @@ import org.apache.cayenne.access.types.CalendarType; import org.apache.cayenne.access.types.CharType; import org.apache.cayenne.access.types.DateType; import org.apache.cayenne.access.types.DoubleType; +import org.apache.cayenne.access.types.ExtendedType; +import org.apache.cayenne.access.types.ExtendedTypeFactory; import org.apache.cayenne.access.types.FloatType; import org.apache.cayenne.access.types.IntegerType; import org.apache.cayenne.access.types.LongType; @@ -88,11 +90,12 @@ import org.apache.cayenne.di.Binder; import org.apache.cayenne.di.ClassLoaderManager; import org.apache.cayenne.di.Key; import org.apache.cayenne.di.ListBuilder; +import org.apache.cayenne.di.MapBuilder; import org.apache.cayenne.di.Module; import org.apache.cayenne.di.spi.DefaultAdhocObjectFactory; import org.apache.cayenne.di.spi.DefaultClassLoaderManager; import org.apache.cayenne.event.DefaultEventManager; -import org.apache.cayenne.event.EventBridgeProvider; +import org.apache.cayenne.event.NoopEventBridgeProvider; import org.apache.cayenne.event.EventBridge; import org.apache.cayenne.event.EventManager; import org.apache.cayenne.log.CommonsJdbcEventLogger; @@ -294,7 +297,10 @@ public class ServerModule implements Module { binder.bind(QueryCache.class).toProvider(MapQueryCacheProvider.class); - binder.bind(EventBridge.class).toProvider(EventBridgeProvider.class);binder.bind(DataRowStoreFactory.class).to(DefaultDataRowStoreFactory.class); + binder.bind(EventBridge.class).toProvider(NoopEventBridgeProvider.class); + + binder.bind(DataRowStoreFactory.class).to(DefaultDataRowStoreFactory.class); + binder.bindMap(Constants.DATA_ROW_STORE_PROPERTIES_MAP); // a service to provide the main stack DataDomain http://git-wip-us.apache.org/repos/asf/cayenne/blob/982b1541/cayenne-server/src/main/java/org/apache/cayenne/event/EventBridgeProvider.java ---------------------------------------------------------------------- diff --git a/cayenne-server/src/main/java/org/apache/cayenne/event/EventBridgeProvider.java b/cayenne-server/src/main/java/org/apache/cayenne/event/EventBridgeProvider.java deleted file mode 100644 index ef78fb7..0000000 --- a/cayenne-server/src/main/java/org/apache/cayenne/event/EventBridgeProvider.java +++ /dev/null @@ -1,60 +0,0 @@ -/***************************************************************** - * 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.cayenne.event; - -import org.apache.cayenne.access.DataDomain; -import org.apache.cayenne.access.DataRowStore; -import org.apache.cayenne.di.DIRuntimeException; -import org.apache.cayenne.di.Inject; -import org.apache.cayenne.di.Provider; - -import java.util.Collections; - -public class EventBridgeProvider implements Provider<EventBridge> { - - @Inject - protected DataDomain dataDomain; - - @Override - public EventBridge get() throws DIRuntimeException { - EventSubject snapshotEventSubject = EventSubject.getSubject(DataRowStore.class.getClass(), dataDomain.getName()); - - return new EventBridge( - Collections.singleton(snapshotEventSubject), - EventBridge.convertToExternalSubject(snapshotEventSubject)) { - - @Override - protected void startupExternal() throws Exception { - - } - - @Override - protected void shutdownExternal() throws Exception { - - } - - @Override - protected void sendExternalEvent(CayenneEvent localEvent) throws Exception { - - } - }; - } - -} http://git-wip-us.apache.org/repos/asf/cayenne/blob/982b1541/cayenne-server/src/main/java/org/apache/cayenne/event/JMSBridgeProvider.java ---------------------------------------------------------------------- diff --git a/cayenne-server/src/main/java/org/apache/cayenne/event/JMSBridgeProvider.java b/cayenne-server/src/main/java/org/apache/cayenne/event/JMSBridgeProvider.java index 217c5b3..fbd5468 100644 --- a/cayenne-server/src/main/java/org/apache/cayenne/event/JMSBridgeProvider.java +++ b/cayenne-server/src/main/java/org/apache/cayenne/event/JMSBridgeProvider.java @@ -39,7 +39,7 @@ public class JMSBridgeProvider implements Provider<EventBridge> { @Override public EventBridge get() throws DIRuntimeException { - EventSubject snapshotEventSubject = EventSubject.getSubject(DataRowStore.class, dataDomain.getName());; + EventSubject snapshotEventSubject = EventSubject.getSubject(DataRowStore.class, dataDomain.getName()); return new JMSBridge( Collections.singleton(snapshotEventSubject), http://git-wip-us.apache.org/repos/asf/cayenne/blob/982b1541/cayenne-server/src/main/java/org/apache/cayenne/event/JavaGroupsBridgeProvider.java ---------------------------------------------------------------------- diff --git a/cayenne-server/src/main/java/org/apache/cayenne/event/JavaGroupsBridgeProvider.java b/cayenne-server/src/main/java/org/apache/cayenne/event/JavaGroupsBridgeProvider.java index 191872d..c2e184f 100644 --- a/cayenne-server/src/main/java/org/apache/cayenne/event/JavaGroupsBridgeProvider.java +++ b/cayenne-server/src/main/java/org/apache/cayenne/event/JavaGroupsBridgeProvider.java @@ -39,7 +39,7 @@ public class JavaGroupsBridgeProvider implements Provider<EventBridge> { @Override public EventBridge get() throws DIRuntimeException { - EventSubject snapshotEventSubject = EventSubject.getSubject(DataRowStore.class, dataDomain.getName());; + EventSubject snapshotEventSubject = EventSubject.getSubject(DataRowStore.class, dataDomain.getName()); return new JavaGroupsBridge( Collections.singleton(snapshotEventSubject), http://git-wip-us.apache.org/repos/asf/cayenne/blob/982b1541/cayenne-server/src/main/java/org/apache/cayenne/event/NoopEventBridge.java ---------------------------------------------------------------------- diff --git a/cayenne-server/src/main/java/org/apache/cayenne/event/NoopEventBridge.java b/cayenne-server/src/main/java/org/apache/cayenne/event/NoopEventBridge.java new file mode 100644 index 0000000..5a4f941 --- /dev/null +++ b/cayenne-server/src/main/java/org/apache/cayenne/event/NoopEventBridge.java @@ -0,0 +1,43 @@ +/***************************************************************** + * 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.cayenne.event; + +import org.apache.cayenne.access.DataRowStore; + +/** + * @since 4.0 + */ +public class NoopEventBridge extends EventBridge { + NoopEventBridge() { + super(EventSubject.getSubject(DataRowStore.class, "noop-subject"), "noop-subject"); + } + + @Override + protected void startupExternal() throws Exception { + } + + @Override + protected void shutdownExternal() throws Exception { + } + + @Override + protected void sendExternalEvent(CayenneEvent localEvent) throws Exception { + } +} http://git-wip-us.apache.org/repos/asf/cayenne/blob/982b1541/cayenne-server/src/main/java/org/apache/cayenne/event/NoopEventBridgeProvider.java ---------------------------------------------------------------------- diff --git a/cayenne-server/src/main/java/org/apache/cayenne/event/NoopEventBridgeProvider.java b/cayenne-server/src/main/java/org/apache/cayenne/event/NoopEventBridgeProvider.java new file mode 100644 index 0000000..432b143 --- /dev/null +++ b/cayenne-server/src/main/java/org/apache/cayenne/event/NoopEventBridgeProvider.java @@ -0,0 +1,35 @@ +/***************************************************************** + * 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.cayenne.event; + +import org.apache.cayenne.di.DIRuntimeException; +import org.apache.cayenne.di.Provider; + +/** + * @since 4.0 + */ +public class NoopEventBridgeProvider implements Provider<EventBridge> { + + @Override + public EventBridge get() throws DIRuntimeException { + return new NoopEventBridge(); + } + +} http://git-wip-us.apache.org/repos/asf/cayenne/blob/982b1541/cayenne-server/src/main/java/org/apache/cayenne/event/XMPPBridgeProvider.java ---------------------------------------------------------------------- diff --git a/cayenne-server/src/main/java/org/apache/cayenne/event/XMPPBridgeProvider.java b/cayenne-server/src/main/java/org/apache/cayenne/event/XMPPBridgeProvider.java index ae577f2..2870edf 100644 --- a/cayenne-server/src/main/java/org/apache/cayenne/event/XMPPBridgeProvider.java +++ b/cayenne-server/src/main/java/org/apache/cayenne/event/XMPPBridgeProvider.java @@ -39,7 +39,7 @@ public class XMPPBridgeProvider implements Provider<EventBridge> { @Override public EventBridge get() throws DIRuntimeException { - EventSubject snapshotEventSubject = EventSubject.getSubject(DataRowStore.class.getClass(), dataDomain.getName());; + EventSubject snapshotEventSubject = EventSubject.getSubject(DataRowStore.class.getClass(), dataDomain.getName()); return new XMPPBridge( Collections.singleton(snapshotEventSubject), http://git-wip-us.apache.org/repos/asf/cayenne/blob/982b1541/cayenne-server/src/test/java/org/apache/cayenne/access/DataRowStoreIT.java ---------------------------------------------------------------------- diff --git a/cayenne-server/src/test/java/org/apache/cayenne/access/DataRowStoreIT.java b/cayenne-server/src/test/java/org/apache/cayenne/access/DataRowStoreIT.java index 879e98d..889abd8 100644 --- a/cayenne-server/src/test/java/org/apache/cayenne/access/DataRowStoreIT.java +++ b/cayenne-server/src/test/java/org/apache/cayenne/access/DataRowStoreIT.java @@ -59,7 +59,7 @@ public class DataRowStoreIT extends ServerCase { public void testDefaultConstructor() { cache = new DataRowStore( "cacheXYZ", - Collections.EMPTY_MAP, + Collections.<String, String>emptyMap(), null); assertEquals("cacheXYZ", cache.getName()); assertNotNull(cache.getSnapshotEventSubject()); @@ -71,7 +71,7 @@ public class DataRowStoreIT extends ServerCase { */ @Test public void testMaxSize() throws Exception { - Map<Object, Object> props = new HashMap<Object, Object>(); + Map<String, String> props = new HashMap<>(); props.put(DataRowStore.SNAPSHOT_CACHE_SIZE_PROPERTY, String.valueOf(2)); cache = new DataRowStore( @@ -82,40 +82,40 @@ public class DataRowStoreIT extends ServerCase { assertEquals(0, cache.size()); ObjectId key1 = new ObjectId("Artist", Artist.ARTIST_ID_PK_COLUMN, 1); - Map<Object, Object> diff1 = new HashMap<Object, Object>(); + Map<ObjectId, DataRow> diff1 = new HashMap<>(); diff1.put(key1, new DataRow(1)); ObjectId key2 = new ObjectId("Artist", Artist.ARTIST_ID_PK_COLUMN, 2); - Map<Object, Object> diff2 = new HashMap<Object, Object>(); + Map<ObjectId, DataRow> diff2 = new HashMap<>(); diff2.put(key2, new DataRow(1)); ObjectId key3 = new ObjectId("Artist", Artist.ARTIST_ID_PK_COLUMN, 3); - Map<Object, Object> diff3 = new HashMap<Object, Object>(); + Map<ObjectId, DataRow> diff3 = new HashMap<>(); diff3.put(key3, new DataRow(1)); cache.processSnapshotChanges( this, diff1, - Collections.EMPTY_LIST, - Collections.EMPTY_LIST, - Collections.EMPTY_LIST); + Collections.<ObjectId>emptyList(), + Collections.<ObjectId>emptyList(), + Collections.<ObjectId>emptyList()); assertEquals(1, cache.size()); cache.processSnapshotChanges( this, diff2, - Collections.EMPTY_LIST, - Collections.EMPTY_LIST, - Collections.EMPTY_LIST); + Collections.<ObjectId>emptyList(), + Collections.<ObjectId>emptyList(), + Collections.<ObjectId>emptyList()); assertEquals(2, cache.size()); // this addition must overflow the cache, and throw out the first item cache.processSnapshotChanges( this, diff3, - Collections.EMPTY_LIST, - Collections.EMPTY_LIST, - Collections.EMPTY_LIST); + Collections.<ObjectId>emptyList(), + Collections.<ObjectId>emptyList(), + Collections.<ObjectId>emptyList()); assertEquals(2, cache.size()); assertNotNull(cache.getCachedSnapshot(key2)); assertNotNull(cache.getCachedSnapshot(key3)); http://git-wip-us.apache.org/repos/asf/cayenne/blob/982b1541/cayenne-server/src/test/java/org/apache/cayenne/access/DefaultDataRowStoreFactoryIT.java ---------------------------------------------------------------------- diff --git a/cayenne-server/src/test/java/org/apache/cayenne/access/DefaultDataRowStoreFactoryIT.java b/cayenne-server/src/test/java/org/apache/cayenne/access/DefaultDataRowStoreFactoryIT.java index 2621443..779396a 100644 --- a/cayenne-server/src/test/java/org/apache/cayenne/access/DefaultDataRowStoreFactoryIT.java +++ b/cayenne-server/src/test/java/org/apache/cayenne/access/DefaultDataRowStoreFactoryIT.java @@ -29,7 +29,7 @@ import org.apache.cayenne.di.Injector; import org.apache.cayenne.di.Module; import org.apache.cayenne.event.DefaultEventManager; import org.apache.cayenne.event.EventBridge; -import org.apache.cayenne.event.EventBridgeProvider; +import org.apache.cayenne.event.NoopEventBridgeProvider; import org.apache.cayenne.event.EventManager; import org.apache.cayenne.event.MockEventBridge; import org.apache.cayenne.event.MockEventBridgeProvider; @@ -76,7 +76,7 @@ public class DefaultDataRowStoreFactoryIT extends ServerCase { binder.bind(TransactionFactory.class).to(DefaultTransactionFactory.class); binder.bind(JdbcEventLogger.class).to(CommonsJdbcEventLogger.class); binder.bind(RuntimeProperties.class).to(DefaultRuntimeProperties.class); - binder.bind(EventBridge.class).toProvider(EventBridgeProvider.class); + binder.bind(EventBridge.class).toProvider(NoopEventBridgeProvider.class); binder.bind(DataRowStoreFactory.class).to(DefaultDataRowStoreFactory.class); binder.bindMap(Constants.DATA_ROW_STORE_PROPERTIES_MAP) .put(DataRowStore.SNAPSHOT_CACHE_SIZE_PROPERTY, String.valueOf(CACHE_SIZE)) http://git-wip-us.apache.org/repos/asf/cayenne/blob/982b1541/cayenne-server/src/test/java/org/apache/cayenne/access/event/SnapshotEventTest.java ---------------------------------------------------------------------- diff --git a/cayenne-server/src/test/java/org/apache/cayenne/access/event/SnapshotEventTest.java b/cayenne-server/src/test/java/org/apache/cayenne/access/event/SnapshotEventTest.java index 94a49e6..e24ce2e 100644 --- a/cayenne-server/src/test/java/org/apache/cayenne/access/event/SnapshotEventTest.java +++ b/cayenne-server/src/test/java/org/apache/cayenne/access/event/SnapshotEventTest.java @@ -19,6 +19,8 @@ package org.apache.cayenne.access.event; +import org.apache.cayenne.DataRow; +import org.apache.cayenne.ObjectId; import org.junit.Test; import java.util.ArrayList; @@ -33,10 +35,10 @@ public class SnapshotEventTest { @Test public void testRootEvent() { Object source = new Object(); - Collection<?> deleted = new ArrayList<Object>(); - Collection<?> invalidated = new ArrayList<Object>(); - Map<?, ?> modified = new HashMap<Object, Object>(); - Collection<?> related = new ArrayList<Object>(); + Collection<ObjectId> deleted = new ArrayList<>(); + Collection<ObjectId> invalidated = new ArrayList<>(); + Map<ObjectId, DataRow> modified = new HashMap<>(); + Collection<ObjectId> related = new ArrayList<>(); SnapshotEvent event = new SnapshotEvent( source, http://git-wip-us.apache.org/repos/asf/cayenne/blob/982b1541/cayenne-server/src/test/java/org/apache/cayenne/configuration/server/DataContextFactoryTest.java ---------------------------------------------------------------------- diff --git a/cayenne-server/src/test/java/org/apache/cayenne/configuration/server/DataContextFactoryTest.java b/cayenne-server/src/test/java/org/apache/cayenne/configuration/server/DataContextFactoryTest.java index 32477cb..f7a362d 100644 --- a/cayenne-server/src/test/java/org/apache/cayenne/configuration/server/DataContextFactoryTest.java +++ b/cayenne-server/src/test/java/org/apache/cayenne/configuration/server/DataContextFactoryTest.java @@ -35,7 +35,7 @@ import org.apache.cayenne.di.Binder; import org.apache.cayenne.di.DIBootstrap; import org.apache.cayenne.di.Injector; import org.apache.cayenne.di.Module; -import org.apache.cayenne.event.EventBridgeProvider; +import org.apache.cayenne.event.NoopEventBridgeProvider; import org.apache.cayenne.event.EventBridge; import org.apache.cayenne.event.EventManager; import org.apache.cayenne.event.MockEventManager; @@ -80,7 +80,7 @@ public class DataContextFactoryTest { binder.bind(TransactionFactory.class).to(DefaultTransactionFactory.class); binder.bind(TransactionManager.class).to(DefaultTransactionManager.class); binder.bind(DataRowStoreFactory.class).to(DefaultDataRowStoreFactory.class); - binder.bind(EventBridge.class).toProvider(EventBridgeProvider.class); + binder.bind(EventBridge.class).toProvider(NoopEventBridgeProvider.class); binder.bind(DataRowStoreFactory.class).to(DefaultDataRowStoreFactory.class); binder.bindMap(Constants.DATA_ROW_STORE_PROPERTIES_MAP); } @@ -120,7 +120,7 @@ public class DataContextFactoryTest { binder.bind(ObjectStoreFactory.class).to(DefaultObjectStoreFactory.class); binder.bind(TransactionFactory.class).to(DefaultTransactionFactory.class); binder.bind(TransactionManager.class).to(DefaultTransactionManager.class); - binder.bind(EventBridge.class).toProvider(EventBridgeProvider.class); + binder.bind(EventBridge.class).toProvider(NoopEventBridgeProvider.class); binder.bind(DataRowStoreFactory.class).to(DefaultDataRowStoreFactory.class); binder.bindMap(Constants.DATA_ROW_STORE_PROPERTIES_MAP); } http://git-wip-us.apache.org/repos/asf/cayenne/blob/982b1541/cayenne-server/src/test/java/org/apache/cayenne/configuration/server/DataDomainProviderTest.java ---------------------------------------------------------------------- diff --git a/cayenne-server/src/test/java/org/apache/cayenne/configuration/server/DataDomainProviderTest.java b/cayenne-server/src/test/java/org/apache/cayenne/configuration/server/DataDomainProviderTest.java index 54831de..7fe4763 100644 --- a/cayenne-server/src/test/java/org/apache/cayenne/configuration/server/DataDomainProviderTest.java +++ b/cayenne-server/src/test/java/org/apache/cayenne/configuration/server/DataDomainProviderTest.java @@ -73,7 +73,7 @@ import org.apache.cayenne.di.Module; import org.apache.cayenne.di.spi.DefaultAdhocObjectFactory; import org.apache.cayenne.di.spi.DefaultClassLoaderManager; import org.apache.cayenne.event.EventBridge; -import org.apache.cayenne.event.EventBridgeProvider; +import org.apache.cayenne.event.NoopEventBridgeProvider; import org.apache.cayenne.event.EventManager; import org.apache.cayenne.event.MockEventManager; import org.apache.cayenne.log.CommonsJdbcEventLogger; @@ -197,7 +197,7 @@ public class DataDomainProviderTest { binder.bind(DataNodeFactory.class).to(DefaultDataNodeFactory.class); binder.bind(SQLTemplateProcessor.class).toInstance(mock(SQLTemplateProcessor.class)); - binder.bind(EventBridge.class).toProvider(EventBridgeProvider.class); + binder.bind(EventBridge.class).toProvider(NoopEventBridgeProvider.class); binder.bind(DataRowStoreFactory.class).to(DefaultDataRowStoreFactory.class); binder.bindMap(Constants.DATA_ROW_STORE_PROPERTIES_MAP); } http://git-wip-us.apache.org/repos/asf/cayenne/blob/982b1541/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/DataDomainView.java ---------------------------------------------------------------------- diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/DataDomainView.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/DataDomainView.java index 7f225c8..a0efc04 100644 --- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/DataDomainView.java +++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/DataDomainView.java @@ -52,6 +52,7 @@ public class DataDomainView extends JPanel implements DomainDisplayListener { protected TextAdapter name; protected JCheckBox objectValidation; + protected JCheckBox sharedCache; public DataDomainView(ProjectController projectController) { this.projectController = projectController; @@ -74,6 +75,7 @@ public class DataDomainView extends JPanel implements DomainDisplayListener { }; this.objectValidation = new JCheckBox(); + this.sharedCache = new JCheckBox(); // assemble CellConstraints cc = new CellConstraints(); @@ -91,6 +93,9 @@ public class DataDomainView extends JPanel implements DomainDisplayListener { builder.addLabel("Object Validation:", cc.xy(1, 5)); builder.add(objectValidation, cc.xy(3, 5)); + builder.addLabel("Use Shared Cache:", cc.xy(1, 7)); + builder.add(sharedCache, cc.xy(3, 7)); + this.setLayout(new BorderLayout()); this.add(builder.getPanel(), BorderLayout.CENTER); } @@ -110,6 +115,17 @@ public class DataDomainView extends JPanel implements DomainDisplayListener { } }); + sharedCache.addActionListener(new ActionListener() { + + public void actionPerformed(ActionEvent e) { + String value = sharedCache.isSelected() ? "true" : "false"; + setDomainProperty( + DataDomain.SHARED_CACHE_ENABLED_PROPERTY, + value, + Boolean.toString(DataDomain.SHARED_CACHE_ENABLED_DEFAULT)); + } + }); + } /** @@ -180,6 +196,10 @@ public class DataDomainView extends JPanel implements DomainDisplayListener { objectValidation.setSelected(getDomainBooleanProperty( DataDomain.VALIDATING_OBJECTS_ON_COMMIT_PROPERTY, Boolean.toString(DataDomain.VALIDATING_OBJECTS_ON_COMMIT_DEFAULT))); + + sharedCache.setSelected(getDomainBooleanProperty( + DataDomain.SHARED_CACHE_ENABLED_PROPERTY, + Boolean.toString(DataDomain.SHARED_CACHE_ENABLED_DEFAULT))); } void setDomainName(String newName) {