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/04/26 10:19:07 UTC

[cayenne] 01/03: CAY-2562 Make ROPServerModule autoloaded

This is an automated email from the ASF dual-hosted git repository.

abulatski pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/cayenne.git

commit c0c909c6c6ce1939b78260dbd5cc91bb1e893b2d
Author: Arseni Bulatski <an...@gmail.com>
AuthorDate: Wed Apr 10 16:38:48 2019 +0300

    CAY-2562 Make ROPServerModule autoloaded
---
 RELEASE-NOTES.txt                                  |  1 +
 .../ProtostuffServerModuleProvider.java            |  6 ++--
 .../configuration/rop/server/ROPServerModule.java  | 12 --------
 .../rop/server/ROPServerModuleProvider.java        | 21 +++++++-------
 .../java/org/apache/cayenne/rop/ROPServlet.java    | 25 ++++++++--------
 ...onfiguration.server.CayenneServerModuleProvider | 20 +++++++++++++
 .../rop/server/ROPServerModuleProviderTest.java    | 33 ++++++----------------
 .../configuration/rop/server/ROPServletTest.java   | 19 +++++++------
 .../apache/cayenne/tutorial/Http2ROPServlet.java   | 18 ++++++------
 9 files changed, 74 insertions(+), 81 deletions(-)

diff --git a/RELEASE-NOTES.txt b/RELEASE-NOTES.txt
index df5df34..7463f2b 100644
--- a/RELEASE-NOTES.txt
+++ b/RELEASE-NOTES.txt
@@ -27,6 +27,7 @@ CAY-2542 Modeler: redesign ObjRelationship editor dialog
 CAY-2543 Move ResultSetMapping generation from metadata to translator
 CAY-2549 Modeler: Redesign ObjAttribute editor dialog
 CAY-2555 Use explicit ArcId in GraphChangeHandler methods
+CAY-2562 Make ROPServerModule autoloaded
 
 Bug Fixes:
 
diff --git a/cayenne-protostuff/src/main/java/org/apache/cayenne/configuration/ProtostuffServerModuleProvider.java b/cayenne-protostuff/src/main/java/org/apache/cayenne/configuration/ProtostuffServerModuleProvider.java
index e256ae6..51e1f84 100644
--- a/cayenne-protostuff/src/main/java/org/apache/cayenne/configuration/ProtostuffServerModuleProvider.java
+++ b/cayenne-protostuff/src/main/java/org/apache/cayenne/configuration/ProtostuffServerModuleProvider.java
@@ -23,8 +23,8 @@ import java.util.Collection;
 import java.util.Collections;
 
 import org.apache.cayenne.configuration.rop.client.ProtostuffModule;
+import org.apache.cayenne.configuration.rop.server.ROPServerModule;
 import org.apache.cayenne.configuration.server.CayenneServerModuleProvider;
-import org.apache.cayenne.configuration.server.ServerModule;
 import org.apache.cayenne.di.Module;
 
 /**
@@ -42,10 +42,8 @@ public class ProtostuffServerModuleProvider implements CayenneServerModuleProvid
         return ProtostuffModule.class;
     }
 
-    @SuppressWarnings("unchecked")
     @Override
     public Collection<Class<? extends Module>> overrides() {
-        Collection modules = Collections.singletonList(ServerModule.class);
-        return modules;
+        return Collections.singletonList(ROPServerModule.class);
     }
 }
diff --git a/cayenne-rop-server/src/main/java/org/apache/cayenne/configuration/rop/server/ROPServerModule.java b/cayenne-rop-server/src/main/java/org/apache/cayenne/configuration/rop/server/ROPServerModule.java
index ad93183..f6a5dea 100644
--- a/cayenne-rop-server/src/main/java/org/apache/cayenne/configuration/rop/server/ROPServerModule.java
+++ b/cayenne-rop-server/src/main/java/org/apache/cayenne/configuration/rop/server/ROPServerModule.java
@@ -27,8 +27,6 @@ import org.apache.cayenne.rop.ROPSerializationService;
 import org.apache.cayenne.rop.ServerHessianSerializationServiceProvider;
 import org.apache.cayenne.rop.ServerHttpRemoteService;
 
-import java.util.Map;
-
 /**
  * A DI module that defines services for the server-side of an ROP application based on
  * Caucho Hessian.
@@ -37,8 +35,6 @@ import java.util.Map;
  */
 public class ROPServerModule implements Module {
 
-    protected Map<String, String> eventBridgeProperties;
-
     /**
      * @since 4.0
      */
@@ -46,15 +42,7 @@ public class ROPServerModule implements Module {
         return binder.bindMap(String.class, Constants.SERVER_ROP_EVENT_BRIDGE_PROPERTIES_MAP);
     }
 
-    public ROPServerModule(Map<String, String> eventBridgeProperties) {
-        this.eventBridgeProperties = eventBridgeProperties;
-    }
-
     public void configure(Binder binder) {
-
-        MapBuilder<String> mapBuilder = contributeROPBridgeProperties(binder);
-        mapBuilder.putAll(eventBridgeProperties);
-
         binder.bind(RemoteService.class).to(ServerHttpRemoteService.class);
 		binder.bind(ROPSerializationService.class).toProvider(ServerHessianSerializationServiceProvider.class);
     }
diff --git a/cayenne-protostuff/src/main/java/org/apache/cayenne/configuration/ProtostuffServerModuleProvider.java b/cayenne-rop-server/src/main/java/org/apache/cayenne/configuration/rop/server/ROPServerModuleProvider.java
similarity index 74%
copy from cayenne-protostuff/src/main/java/org/apache/cayenne/configuration/ProtostuffServerModuleProvider.java
copy to cayenne-rop-server/src/main/java/org/apache/cayenne/configuration/rop/server/ROPServerModuleProvider.java
index e256ae6..d844e17 100644
--- a/cayenne-protostuff/src/main/java/org/apache/cayenne/configuration/ProtostuffServerModuleProvider.java
+++ b/cayenne-rop-server/src/main/java/org/apache/cayenne/configuration/rop/server/ROPServerModuleProvider.java
@@ -16,36 +16,37 @@
  *  specific language governing permissions and limitations
  *  under the License.
  ****************************************************************/
+package org.apache.cayenne.configuration.rop.server;
 
-package org.apache.cayenne.configuration;
-
+import java.util.ArrayList;
 import java.util.Collection;
-import java.util.Collections;
+import java.util.List;
 
-import org.apache.cayenne.configuration.rop.client.ProtostuffModule;
 import org.apache.cayenne.configuration.server.CayenneServerModuleProvider;
 import org.apache.cayenne.configuration.server.ServerModule;
+import org.apache.cayenne.configuration.web.WebModule;
 import org.apache.cayenne.di.Module;
 
 /**
- * @since 4.0
+ * @since 4.2
  */
-public class ProtostuffServerModuleProvider implements CayenneServerModuleProvider {
+public class ROPServerModuleProvider implements CayenneServerModuleProvider {
 
     @Override
     public Module module() {
-        return new ProtostuffModule();
+        return new ROPServerModule();
     }
 
     @Override
     public Class<? extends Module> moduleType() {
-        return ProtostuffModule.class;
+        return ROPServerModule.class;
     }
 
-    @SuppressWarnings("unchecked")
     @Override
     public Collection<Class<? extends Module>> overrides() {
-        Collection modules = Collections.singletonList(ServerModule.class);
+        List<Class<? extends Module>> modules = new ArrayList<>();
+        modules.add(ServerModule.class);
+        modules.add(WebModule.class);
         return modules;
     }
 }
diff --git a/cayenne-rop-server/src/main/java/org/apache/cayenne/rop/ROPServlet.java b/cayenne-rop-server/src/main/java/org/apache/cayenne/rop/ROPServlet.java
index e7a0001..e93e13c 100644
--- a/cayenne-rop-server/src/main/java/org/apache/cayenne/rop/ROPServlet.java
+++ b/cayenne-rop-server/src/main/java/org/apache/cayenne/rop/ROPServlet.java
@@ -18,16 +18,6 @@
  ****************************************************************/
 package org.apache.cayenne.rop;
 
-import org.apache.cayenne.configuration.CayenneRuntime;
-import org.apache.cayenne.configuration.rop.server.ROPServerModule;
-import org.apache.cayenne.configuration.server.ServerRuntime;
-import org.apache.cayenne.configuration.web.WebConfiguration;
-import org.apache.cayenne.configuration.web.WebUtil;
-import org.apache.cayenne.di.Module;
-import org.apache.cayenne.remote.ClientMessage;
-import org.apache.cayenne.remote.RemoteService;
-import org.apache.cayenne.remote.RemoteSession;
-
 import javax.servlet.ServletConfig;
 import javax.servlet.ServletContext;
 import javax.servlet.ServletException;
@@ -38,6 +28,16 @@ import java.io.IOException;
 import java.util.Collection;
 import java.util.Map;
 
+import org.apache.cayenne.configuration.CayenneRuntime;
+import org.apache.cayenne.configuration.rop.server.ROPServerModule;
+import org.apache.cayenne.configuration.server.ServerRuntime;
+import org.apache.cayenne.configuration.web.WebConfiguration;
+import org.apache.cayenne.configuration.web.WebUtil;
+import org.apache.cayenne.di.Module;
+import org.apache.cayenne.remote.ClientMessage;
+import org.apache.cayenne.remote.RemoteService;
+import org.apache.cayenne.remote.RemoteSession;
+
 public class ROPServlet extends HttpServlet {
 
     protected ServletContext servletContext;
@@ -56,12 +56,13 @@ public class ROPServlet extends HttpServlet {
         String configurationLocation = configAdapter.getConfigurationLocation();
         Map<String, String> eventBridgeParameters = configAdapter.getOtherParameters();
 
-        Collection<Module> modules = configAdapter.createModules(new ROPServerModule(
-                eventBridgeParameters));
+        Collection<Module> modules = configAdapter.createModules();
 
         ServerRuntime runtime = ServerRuntime.builder()
                 .addConfig(configurationLocation)
                 .addModules(modules)
+                .addModule(binder ->
+                        ROPServerModule.contributeROPBridgeProperties(binder).putAll(eventBridgeParameters))
                 .build();
 
         this.remoteService = runtime.getInjector().getInstance(RemoteService.class);
diff --git a/cayenne-rop-server/src/main/resources/META-INF/services/org.apache.cayenne.configuration.server.CayenneServerModuleProvider b/cayenne-rop-server/src/main/resources/META-INF/services/org.apache.cayenne.configuration.server.CayenneServerModuleProvider
new file mode 100644
index 0000000..4ea71cd
--- /dev/null
+++ b/cayenne-rop-server/src/main/resources/META-INF/services/org.apache.cayenne.configuration.server.CayenneServerModuleProvider
@@ -0,0 +1,20 @@
+##################################################################
+#   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.
+##################################################################
+
+org.apache.cayenne.configuration.rop.server.ROPServerModuleProvider
\ No newline at end of file
diff --git a/cayenne-protostuff/src/main/java/org/apache/cayenne/configuration/ProtostuffServerModuleProvider.java b/cayenne-rop-server/src/test/java/org/apache/cayenne/configuration/rop/server/ROPServerModuleProviderTest.java
similarity index 57%
copy from cayenne-protostuff/src/main/java/org/apache/cayenne/configuration/ProtostuffServerModuleProvider.java
copy to cayenne-rop-server/src/test/java/org/apache/cayenne/configuration/rop/server/ROPServerModuleProviderTest.java
index e256ae6..f3b96a6 100644
--- a/cayenne-protostuff/src/main/java/org/apache/cayenne/configuration/ProtostuffServerModuleProvider.java
+++ b/cayenne-rop-server/src/test/java/org/apache/cayenne/configuration/rop/server/ROPServerModuleProviderTest.java
@@ -16,36 +16,19 @@
  *  specific language governing permissions and limitations
  *  under the License.
  ****************************************************************/
+package org.apache.cayenne.configuration.rop.server;
 
-package org.apache.cayenne.configuration;
-
-import java.util.Collection;
-import java.util.Collections;
-
-import org.apache.cayenne.configuration.rop.client.ProtostuffModule;
 import org.apache.cayenne.configuration.server.CayenneServerModuleProvider;
-import org.apache.cayenne.configuration.server.ServerModule;
-import org.apache.cayenne.di.Module;
+import org.apache.cayenne.unit.util.ModuleProviderChecker;
+import org.junit.Test;
 
 /**
- * @since 4.0
+ * @since 4.2
  */
-public class ProtostuffServerModuleProvider implements CayenneServerModuleProvider {
-
-    @Override
-    public Module module() {
-        return new ProtostuffModule();
-    }
-
-    @Override
-    public Class<? extends Module> moduleType() {
-        return ProtostuffModule.class;
-    }
+public class ROPServerModuleProviderTest {
 
-    @SuppressWarnings("unchecked")
-    @Override
-    public Collection<Class<? extends Module>> overrides() {
-        Collection modules = Collections.singletonList(ServerModule.class);
-        return modules;
+    @Test
+    public void testAutoLoadable() {
+        ModuleProviderChecker.testProviderPresent(ROPServerModuleProvider.class, CayenneServerModuleProvider.class);
     }
 }
diff --git a/cayenne-rop-server/src/test/java/org/apache/cayenne/configuration/rop/server/ROPServletTest.java b/cayenne-rop-server/src/test/java/org/apache/cayenne/configuration/rop/server/ROPServletTest.java
index 43d52fb..e23607d 100644
--- a/cayenne-rop-server/src/test/java/org/apache/cayenne/configuration/rop/server/ROPServletTest.java
+++ b/cayenne-rop-server/src/test/java/org/apache/cayenne/configuration/rop/server/ROPServletTest.java
@@ -18,6 +18,10 @@
  ****************************************************************/
 package org.apache.cayenne.configuration.rop.server;
 
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.List;
+
 import com.mockrunner.mock.web.MockServletConfig;
 import com.mockrunner.mock.web.MockServletContext;
 import org.apache.cayenne.configuration.CayenneRuntime;
@@ -32,11 +36,10 @@ import org.apache.cayenne.rop.ROPServlet;
 import org.junit.After;
 import org.junit.Test;
 
-import java.util.Arrays;
-import java.util.Collection;
-import java.util.List;
-
-import static org.junit.Assert.*;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertNull;
+import static org.junit.Assert.assertTrue;
 
 public class ROPServletTest {
 
@@ -116,7 +119,7 @@ public class ROPServletTest {
 		assertEquals(Arrays.asList(name + ".xml"), locations);
 
 		Collection<Module> modules = runtime.getModules();
-		assertEquals(4, modules.size());
+		assertEquals(5, modules.size());
 		Object[] marray = modules.toArray();
 
 		if(marray[0] instanceof ServerModule){
@@ -147,7 +150,7 @@ public class ROPServletTest {
 		assertNotNull(runtime);
 
 		Collection<Module> modules = runtime.getModules();
-		assertEquals(6, modules.size());
+		assertEquals(7, modules.size());
 
 		Object[] marray = modules.toArray();
 		if(marray[0] instanceof ServerModule){
@@ -179,7 +182,7 @@ public class ROPServletTest {
 		servlet.init(config);
 		runtime = WebUtil.getCayenneRuntime(context);
 		Collection<Module> modules = runtime.getModules();
-		assertEquals(5, modules.size());
+		assertEquals(6, modules.size());
 
 		Object[] marray = modules.toArray();
 
diff --git a/tutorials/tutorial-rop-server-http2/src/main/java/org/apache/cayenne/tutorial/Http2ROPServlet.java b/tutorials/tutorial-rop-server-http2/src/main/java/org/apache/cayenne/tutorial/Http2ROPServlet.java
index e9c6df5..7a348a9 100644
--- a/tutorials/tutorial-rop-server-http2/src/main/java/org/apache/cayenne/tutorial/Http2ROPServlet.java
+++ b/tutorials/tutorial-rop-server-http2/src/main/java/org/apache/cayenne/tutorial/Http2ROPServlet.java
@@ -19,7 +19,11 @@
 
 package org.apache.cayenne.tutorial;
 
-import org.apache.cayenne.configuration.rop.client.ProtostuffModule;
+import javax.servlet.ServletConfig;
+import javax.servlet.ServletException;
+import java.util.Collection;
+import java.util.Map;
+
 import org.apache.cayenne.configuration.rop.server.ROPServerModule;
 import org.apache.cayenne.configuration.server.ServerRuntime;
 import org.apache.cayenne.configuration.web.WebConfiguration;
@@ -29,12 +33,6 @@ import org.apache.cayenne.remote.RemoteService;
 import org.apache.cayenne.rop.ROPSerializationService;
 import org.apache.cayenne.rop.ROPServlet;
 
-
-import javax.servlet.ServletConfig;
-import javax.servlet.ServletException;
-import java.util.Collection;
-import java.util.Map;
-
 public class Http2ROPServlet extends ROPServlet {
 
     @Override
@@ -49,13 +47,13 @@ public class Http2ROPServlet extends ROPServlet {
         String configurationLocation = configAdapter.getConfigurationLocation();
         Map<String, String> eventBridgeParameters = configAdapter.getOtherParameters();
 
-        Collection<Module> modules = configAdapter.createModules(
-                new ROPServerModule(eventBridgeParameters),
-                new ProtostuffModule());
+        Collection<Module> modules = configAdapter.createModules();
 
         ServerRuntime runtime = ServerRuntime
                 .builder()
                 .addConfig(configurationLocation)
+                .addModule(binder ->
+                        ROPServerModule.contributeROPBridgeProperties(binder).putAll(eventBridgeParameters))
                 .addModules(modules)
                 .build();