You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cayenne.apache.org by ab...@apache.org on 2019/06/07 13:22:12 UTC
[cayenne] 01/02: CAY-2519 Use NoopEventManager if
SERVER_CONTEXTS_SYNC_PROPERTY is false
This is an automated email from the ASF dual-hosted git repository.
abulatski pushed a commit to branch STABLE-4.0
in repository https://gitbox.apache.org/repos/asf/cayenne.git
commit bc5cf828a853ba83468e9a6fcaf9d60433be9f11
Author: Arseni Bulatski <an...@gmail.com>
AuthorDate: Thu Feb 7 14:58:05 2019 +0300
CAY-2519 Use NoopEventManager if SERVER_CONTEXTS_SYNC_PROPERTY is false
---
RELEASE-NOTES.txt | 12 +++-
.../configuration/rop/client/ClientModule.java | 8 ++-
.../org/apache/cayenne/access/DataContext.java | 10 ++-
.../cayenne/configuration/server/ServerModule.java | 16 ++---
.../apache/cayenne/event/EventManagerProvider.java | 44 ++++++++++++
.../org/apache/cayenne/event/NoopEventManager.java | 81 ++++++++++++++++++++++
6 files changed, 157 insertions(+), 14 deletions(-)
diff --git a/RELEASE-NOTES.txt b/RELEASE-NOTES.txt
index a27c383..f462915 100644
--- a/RELEASE-NOTES.txt
+++ b/RELEASE-NOTES.txt
@@ -8,6 +8,17 @@ To browse individual bug reports check out project issue tracker:
https://issues.apache.org/jira/browse/CAY
----------------------------------
+Release: 4.0.2
+Date:
+----------------------------------
+
+=======
+Changes/New Features:
+
+CAY-2517 EventManager: optimization of adding listeners
+CAY-2519 Use NoopEventManager if SERVER_CONTEXTS_SYNC_PROPERTY is false
+
+----------------------------------
Release: 4.0.1
Date: December 20, 2018
----------------------------------
@@ -20,7 +31,6 @@ CAY-2474 Modeler: swap buttons in dialog toolbar
CAY-2475 Modeler: move inheritance icon to name column in objAttr table and objRel table
CAY-2476 Modeler: Fixed wrong behaviour of code generation dialog
CAY-2479 Modeler: update cgen dialog
-CAY-2517 EventManager: optimization of adding listeners
Bug Fixes:
diff --git a/cayenne-client/src/main/java/org/apache/cayenne/configuration/rop/client/ClientModule.java b/cayenne-client/src/main/java/org/apache/cayenne/configuration/rop/client/ClientModule.java
index 690ed2c..0a0553e 100644
--- a/cayenne-client/src/main/java/org/apache/cayenne/configuration/rop/client/ClientModule.java
+++ b/cayenne-client/src/main/java/org/apache/cayenne/configuration/rop/client/ClientModule.java
@@ -30,11 +30,13 @@ import org.apache.cayenne.configuration.server.ServerModule;
import org.apache.cayenne.di.Binder;
import org.apache.cayenne.di.MapBuilder;
import org.apache.cayenne.di.Module;
-import org.apache.cayenne.event.DefaultEventManager;
import org.apache.cayenne.event.EventManager;
+import org.apache.cayenne.event.EventManagerProvider;
import org.apache.cayenne.remote.ClientConnection;
import org.apache.cayenne.remote.RemoteService;
-import org.apache.cayenne.rop.*;
+import org.apache.cayenne.rop.HttpClientConnectionProvider;
+import org.apache.cayenne.rop.ProxyRemoteService;
+import org.apache.cayenne.rop.ROPSerializationService;
import org.apache.cayenne.rop.http.ClientHessianSerializationServiceProvider;
/**
@@ -87,7 +89,7 @@ public class ClientModule implements Module {
binder.bind(ROPSerializationService.class).toProvider(ClientHessianSerializationServiceProvider.class);
binder.bind(RemoteService.class).to(ProxyRemoteService.class);
binder.bind(ClientConnection.class).toProvider(HttpClientConnectionProvider.class);
- binder.bind(EventManager.class).to(DefaultEventManager.class);
+ binder.bind(EventManager.class).toProvider(EventManagerProvider.class);
binder.bind(RuntimeProperties.class).to(DefaultRuntimeProperties.class);
binder.bind(DataChannel.class).toProvider(ClientChannelProvider.class);
binder.bind(QueryCache.class).toProvider(MapQueryCacheProvider.class);
diff --git a/cayenne-server/src/main/java/org/apache/cayenne/access/DataContext.java b/cayenne-server/src/main/java/org/apache/cayenne/access/DataContext.java
index bc80736..d430914 100644
--- a/cayenne-server/src/main/java/org/apache/cayenne/access/DataContext.java
+++ b/cayenne-server/src/main/java/org/apache/cayenne/access/DataContext.java
@@ -44,6 +44,7 @@ import org.apache.cayenne.ResultIterator;
import org.apache.cayenne.access.util.IteratedSelectObserver;
import org.apache.cayenne.di.Injector;
import org.apache.cayenne.event.EventManager;
+import org.apache.cayenne.event.NoopEventManager;
import org.apache.cayenne.graph.ChildDiffLoader;
import org.apache.cayenne.graph.CompoundDiff;
import org.apache.cayenne.graph.GraphDiff;
@@ -53,7 +54,12 @@ import org.apache.cayenne.map.DbRelationship;
import org.apache.cayenne.map.ObjAttribute;
import org.apache.cayenne.map.ObjEntity;
import org.apache.cayenne.map.ObjRelationship;
-import org.apache.cayenne.query.*;
+import org.apache.cayenne.query.EntityResultSegment;
+import org.apache.cayenne.query.MappedExec;
+import org.apache.cayenne.query.MappedSelect;
+import org.apache.cayenne.query.Query;
+import org.apache.cayenne.query.QueryMetadata;
+import org.apache.cayenne.query.Select;
import org.apache.cayenne.reflect.AttributeProperty;
import org.apache.cayenne.reflect.ClassDescriptor;
import org.apache.cayenne.reflect.PropertyVisitor;
@@ -140,7 +146,7 @@ public class DataContext extends BaseContext {
EventManager eventManager = channel.getEventManager();
- if (eventManager != null) {
+ if (eventManager != null && !(eventManager instanceof NoopEventManager)) {
mergeHandler = new DataContextMergeHandler(this);
// listen to our channel events...
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 44b926a..ccc20ee 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
@@ -18,6 +18,9 @@
****************************************************************/
package org.apache.cayenne.configuration.server;
+import java.util.Calendar;
+import java.util.GregorianCalendar;
+
import org.apache.cayenne.DataChannel;
import org.apache.cayenne.DataChannelFilter;
import org.apache.cayenne.access.DataDomain;
@@ -55,6 +58,7 @@ import org.apache.cayenne.access.types.TimeType;
import org.apache.cayenne.access.types.TimestampType;
import org.apache.cayenne.access.types.UUIDValueType;
import org.apache.cayenne.access.types.UtilDateType;
+import org.apache.cayenne.access.types.ValueObjectType;
import org.apache.cayenne.access.types.ValueObjectTypeRegistry;
import org.apache.cayenne.access.types.VoidType;
import org.apache.cayenne.ashwood.AshwoodEntitySorter;
@@ -97,14 +101,13 @@ 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.NoopEventBridgeProvider;
import org.apache.cayenne.event.EventBridge;
import org.apache.cayenne.event.EventManager;
-import org.apache.cayenne.log.Slf4jJdbcEventLogger;
+import org.apache.cayenne.event.EventManagerProvider;
+import org.apache.cayenne.event.NoopEventBridgeProvider;
import org.apache.cayenne.log.JdbcEventLogger;
+import org.apache.cayenne.log.Slf4jJdbcEventLogger;
import org.apache.cayenne.map.EntitySorter;
-import org.apache.cayenne.access.types.ValueObjectType;
import org.apache.cayenne.resource.ClassLoaderResourceLocator;
import org.apache.cayenne.resource.ResourceLocator;
import org.apache.cayenne.tx.DefaultTransactionFactory;
@@ -114,9 +117,6 @@ import org.apache.cayenne.tx.TransactionFilter;
import org.apache.cayenne.tx.TransactionManager;
import org.apache.cayenne.velocity.VelocitySQLTemplateProcessor;
-import java.util.Calendar;
-import java.util.GregorianCalendar;
-
/**
* A DI module containing all Cayenne server runtime configuration.
*
@@ -341,7 +341,7 @@ public class ServerModule implements Module {
binder.bind(ConfigurationNameMapper.class).to(DefaultConfigurationNameMapper.class);
- binder.bind(EventManager.class).to(DefaultEventManager.class);
+ binder.bind(EventManager.class).toProvider(EventManagerProvider.class);
binder.bind(QueryCache.class).toProvider(MapQueryCacheProvider.class);
diff --git a/cayenne-server/src/main/java/org/apache/cayenne/event/EventManagerProvider.java b/cayenne-server/src/main/java/org/apache/cayenne/event/EventManagerProvider.java
new file mode 100644
index 0000000..ddf4360
--- /dev/null
+++ b/cayenne-server/src/main/java/org/apache/cayenne/event/EventManagerProvider.java
@@ -0,0 +1,44 @@
+/*****************************************************************
+ * 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.configuration.Constants;
+import org.apache.cayenne.configuration.RuntimeProperties;
+import org.apache.cayenne.di.DIRuntimeException;
+import org.apache.cayenne.di.Inject;
+import org.apache.cayenne.di.Provider;
+
+/**
+ * @since 4.0.2
+ */
+public class EventManagerProvider implements Provider<EventManager> {
+
+ protected RuntimeProperties properties;
+
+ public EventManagerProvider(@Inject RuntimeProperties properties) {
+ this.properties = properties;
+ }
+
+ @Override
+ public EventManager get() throws DIRuntimeException {
+ boolean sync = properties.getBoolean(Constants.SERVER_CONTEXTS_SYNC_PROPERTY, true);
+
+ return sync ? new DefaultEventManager() : new NoopEventManager();
+ }
+}
diff --git a/cayenne-server/src/main/java/org/apache/cayenne/event/NoopEventManager.java b/cayenne-server/src/main/java/org/apache/cayenne/event/NoopEventManager.java
new file mode 100644
index 0000000..db00c36
--- /dev/null
+++ b/cayenne-server/src/main/java/org/apache/cayenne/event/NoopEventManager.java
@@ -0,0 +1,81 @@
+/*****************************************************************
+ * 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 java.util.EventObject;
+
+/**
+ * @since 4.0.2
+ */
+public class NoopEventManager implements EventManager{
+ @Override
+ public boolean isSingleThreaded() {
+ return false;
+ }
+
+ @Override
+ public void addListener(Object listener, String methodName, Class<?> eventParameterClass, EventSubject subject) {
+
+ }
+
+ @Override
+ public void addNonBlockingListener(Object listener, String methodName, Class<?> eventParameterClass, EventSubject subject) {
+
+ }
+
+ @Override
+ public void addListener(Object listener, String methodName, Class<?> eventParameterClass, EventSubject subject, Object sender) {
+
+ }
+
+ @Override
+ public void addNonBlockingListener(Object listener, String methodName, Class<?> eventParameterClass, EventSubject subject, Object sender) {
+
+ }
+
+ @Override
+ public boolean removeListener(Object listener) {
+ return false;
+ }
+
+ @Override
+ public boolean removeAllListeners(EventSubject subject) {
+ return false;
+ }
+
+ @Override
+ public boolean removeListener(Object listener, EventSubject subject) {
+ return false;
+ }
+
+ @Override
+ public boolean removeListener(Object listener, EventSubject subject, Object sender) {
+ return false;
+ }
+
+ @Override
+ public void postEvent(EventObject event, EventSubject subject) {
+
+ }
+
+ @Override
+ public void postNonBlockingEvent(EventObject event, EventSubject subject) {
+
+ }
+}