You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@dubbo.apache.org by li...@apache.org on 2018/06/01 09:18:38 UTC
[incubator-dubbo] branch master updated: Merge pull request #1873,
support proxy for provider side.
This is an automated email from the ASF dual-hosted git repository.
liujun pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-dubbo.git
The following commit(s) were added to refs/heads/master by this push:
new f4c210b Merge pull request #1873, support proxy for provider side.
f4c210b is described below
commit f4c210b6d6846cc72f92997b52c3dd4c563347be
Author: Jerrick Zhu <di...@gmail.com>
AuthorDate: Fri Jun 1 17:18:25 2018 +0800
Merge pull request #1873, support proxy for provider side.
fixes #67
---
.../com/alibaba/dubbo/config/ServiceConfig.java | 7 +++++
.../alibaba/dubbo/config/ServiceConfigTest.java | 19 +++++++++++++
.../dubbo/config/mock/TestProxyFactory.java | 33 ++++++++++++++++++++++
.../services/com.alibaba.dubbo.rpc.ProxyFactory | 3 +-
4 files changed, 61 insertions(+), 1 deletion(-)
diff --git a/dubbo-config/dubbo-config-api/src/main/java/com/alibaba/dubbo/config/ServiceConfig.java b/dubbo-config/dubbo-config-api/src/main/java/com/alibaba/dubbo/config/ServiceConfig.java
index 8637662..ec6dcd9 100644
--- a/dubbo-config/dubbo-config-api/src/main/java/com/alibaba/dubbo/config/ServiceConfig.java
+++ b/dubbo-config/dubbo-config-api/src/main/java/com/alibaba/dubbo/config/ServiceConfig.java
@@ -500,6 +500,13 @@ public class ServiceConfig<T> extends AbstractServiceConfig {
if (logger.isInfoEnabled()) {
logger.info("Register dubbo service " + interfaceClass.getName() + " url " + url + " to registry " + registryURL);
}
+
+ // For providers, this is used to enable custom proxy to generate invoker
+ String proxy = url.getParameter(Constants.PROXY_KEY);
+ if (StringUtils.isNotEmpty(proxy)) {
+ registryURL = registryURL.addParameter(Constants.PROXY_KEY, proxy);
+ }
+
Invoker<?> invoker = proxyFactory.getInvoker(ref, (Class) interfaceClass, registryURL.addParameterAndEncoded(Constants.EXPORT_KEY, url.toFullString()));
DelegateProviderMetaDataInvoker wrapperInvoker = new DelegateProviderMetaDataInvoker(invoker, this);
diff --git a/dubbo-config/dubbo-config-api/src/test/java/com/alibaba/dubbo/config/ServiceConfigTest.java b/dubbo-config/dubbo-config-api/src/test/java/com/alibaba/dubbo/config/ServiceConfigTest.java
index d0eb6bc..ed5a2e3 100644
--- a/dubbo-config/dubbo-config-api/src/test/java/com/alibaba/dubbo/config/ServiceConfigTest.java
+++ b/dubbo-config/dubbo-config-api/src/test/java/com/alibaba/dubbo/config/ServiceConfigTest.java
@@ -21,6 +21,7 @@ import com.alibaba.dubbo.common.Constants;
import com.alibaba.dubbo.common.URL;
import com.alibaba.dubbo.config.api.DemoService;
import com.alibaba.dubbo.config.api.Greeting;
+import com.alibaba.dubbo.config.mock.TestProxyFactory;
import com.alibaba.dubbo.config.provider.impl.DemoServiceImpl;
import com.alibaba.dubbo.config.mock.MockProtocol2;
import com.alibaba.dubbo.config.mock.MockRegistryFactory2;
@@ -45,6 +46,7 @@ import static org.hamcrest.CoreMatchers.is;
import static org.hamcrest.Matchers.hasEntry;
import static org.hamcrest.Matchers.hasKey;
import static org.hamcrest.Matchers.hasSize;
+import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertThat;
import static org.mockito.Mockito.withSettings;
@@ -53,6 +55,7 @@ public class ServiceConfigTest {
private Registry registryDelegate = Mockito.mock(Registry.class);
private Exporter exporter = Mockito.mock(Exporter.class);
private ServiceConfig<DemoServiceImpl> service = new ServiceConfig<DemoServiceImpl>();
+ private ServiceConfig<DemoServiceImpl> service2 = new ServiceConfig<DemoServiceImpl>();
@Before
@@ -87,6 +90,14 @@ public class ServiceConfigTest {
service.setInterface(DemoService.class);
service.setRef(new DemoServiceImpl());
service.setMethods(Collections.singletonList(method));
+
+ service2.setProvider(provider);
+ service2.setApplication(app);
+ service2.setRegistry(registry);
+ service2.setInterface(DemoService.class);
+ service2.setRef(new DemoServiceImpl());
+ service2.setMethods(Collections.singletonList(method));
+ service2.setProxy("testproxyfactory");
}
@Test
@@ -113,6 +124,14 @@ public class ServiceConfigTest {
}
@Test
+ public void testProxy() throws Exception {
+ service2.export();
+
+ assertThat(service2.getExportedUrls(), hasSize(1));
+ assertEquals(2, TestProxyFactory.count); // local injvm and registry protocol, so expected is 2
+ }
+
+ @Test
@Ignore("cannot pass in travis")
public void testUnexport() throws Exception {
System.setProperty(Constants.SHUTDOWN_WAIT_KEY, "0");
diff --git a/dubbo-config/dubbo-config-api/src/test/java/com/alibaba/dubbo/config/mock/TestProxyFactory.java b/dubbo-config/dubbo-config-api/src/test/java/com/alibaba/dubbo/config/mock/TestProxyFactory.java
new file mode 100644
index 0000000..d70ecf7
--- /dev/null
+++ b/dubbo-config/dubbo-config-api/src/test/java/com/alibaba/dubbo/config/mock/TestProxyFactory.java
@@ -0,0 +1,33 @@
+/*
+ * 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 com.alibaba.dubbo.config.mock;
+
+import com.alibaba.dubbo.common.URL;
+import com.alibaba.dubbo.rpc.Invoker;
+import com.alibaba.dubbo.rpc.RpcException;
+import com.alibaba.dubbo.rpc.proxy.jdk.JdkProxyFactory;
+
+public class TestProxyFactory extends JdkProxyFactory {
+ public static int count = 0;
+
+ @Override
+ public <T> Invoker<T> getInvoker(T proxy, Class<T> type, URL url) throws RpcException {
+ count++;
+ return super.getInvoker(proxy, type, url);
+ }
+}
diff --git a/dubbo-config/dubbo-config-api/src/test/resources/META-INF/services/com.alibaba.dubbo.rpc.ProxyFactory b/dubbo-config/dubbo-config-api/src/test/resources/META-INF/services/com.alibaba.dubbo.rpc.ProxyFactory
index 0ae5c21..d1af147 100644
--- a/dubbo-config/dubbo-config-api/src/test/resources/META-INF/services/com.alibaba.dubbo.rpc.ProxyFactory
+++ b/dubbo-config/dubbo-config-api/src/test/resources/META-INF/services/com.alibaba.dubbo.rpc.ProxyFactory
@@ -1 +1,2 @@
-mockproxyfactory=com.alibaba.dubbo.config.mock.MockProxyFactory
\ No newline at end of file
+mockproxyfactory=com.alibaba.dubbo.config.mock.MockProxyFactory
+testproxyfactory=com.alibaba.dubbo.config.mock.TestProxyFactory
\ No newline at end of file
--
To stop receiving notification emails like this one, please contact
liujun@apache.org.