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

iluo 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 7286e23  remove ServiceClassHolder and use the ApplicationModel 
replacedly (#2646)
7286e23 is described below

commit 7286e23bb68cc8826f84eebd23d76717a2aaeea5
Author: Jeff-Lv <[email protected]>
AuthorDate: Wed Oct 24 14:52:04 2018 +0800

    remove ServiceClassHolder and use the ApplicationModel replacedly (#2646)
    
    * [Dubbo] move the classes of model from config to rpc-api for reusing
    
    * remove ServiceClassHolder and use the ApplicationModel replacedly
    
    * [Dubbo] delete the unused imported of ApplicationModel
    
    * Update dubbo-demo-consumer.xml
    
    this commits is no need to commit to remote repo.
---
 .../org/apache/dubbo/config/ReferenceConfig.java   |  7 +--
 .../org/apache/dubbo/config/ServiceConfig.java     |  2 -
 .../META-INF/spring/dubbo-demo-consumer.xml        |  2 +-
 .../org/apache/dubbo/rpc/ServiceClassHolder.java   | 45 -------------------
 .../apache/dubbo/rpc/model/ApplicationModel.java   | 50 +++++-----------------
 .../org/apache/dubbo/rpc/model/ProviderModel.java  |  4 ++
 .../org/apache/dubbo/rpc/ServiceHolderTest.java    | 34 ---------------
 .../dubbo/rpc/protocol/rest/RestProtocol.java      |  4 +-
 .../dubbo/rpc/protocol/rest/RestProtocolTest.java  | 50 ++++++++++++++--------
 .../dubbo/rpc/protol/rest/RestProtocolTest.java    | 23 +++++++---
 10 files changed, 71 insertions(+), 150 deletions(-)

diff --git 
a/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/ReferenceConfig.java
 
b/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/ReferenceConfig.java
index fb0f13e..f568700 100644
--- 
a/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/ReferenceConfig.java
+++ 
b/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/ReferenceConfig.java
@@ -283,7 +283,7 @@ public class ReferenceConfig<T> extends 
AbstractReferenceConfig {
         checkStubAndMock(interfaceClass);
         Map<String, String> map = new HashMap<String, String>();
         resolveAsyncInterface(interfaceClass, map);
-        Map<Object, Object> attributes = new HashMap<Object, Object>();
+
         map.put(Constants.SIDE_KEY, Constants.CONSUMER_SIDE);
         map.put(Constants.DUBBO_VERSION_KEY, Version.getProtocolVersion());
         map.put(Constants.TIMESTAMP_KEY, 
String.valueOf(System.currentTimeMillis()));
@@ -311,6 +311,7 @@ public class ReferenceConfig<T> extends 
AbstractReferenceConfig {
         appendParameters(map, this);
         String prefix = StringUtils.getServiceKey(map);
         if (methods != null && !methods.isEmpty()) {
+            Map<Object, Object> attributes = new HashMap<Object, Object>();
             for (MethodConfig method : methods) {
                 appendParameters(map, method, method.getName());
                 String retryKey = method.getName() + ".retry";
@@ -323,6 +324,8 @@ public class ReferenceConfig<T> extends 
AbstractReferenceConfig {
                 appendAttributes(attributes, method, prefix + "." + 
method.getName());
                 checkAndConvertImplicitConfig(method, map, attributes);
             }
+            //attributes are stored by system context.
+            StaticContext.getSystemContext().putAll(attributes);
         }
 
         String hostToRegistry = 
ConfigUtils.getSystemProperty(Constants.DUBBO_IP_TO_REGISTRY);
@@ -333,8 +336,6 @@ public class ReferenceConfig<T> extends 
AbstractReferenceConfig {
         }
         map.put(Constants.REGISTER_IP_KEY, hostToRegistry);
 
-        //attributes are stored by system context.
-        StaticContext.getSystemContext().putAll(attributes);
         ref = createProxy(map);
         ConsumerModel consumerModel = new 
ConsumerModel(getUniqueServiceName(), ref, interfaceClass.getMethods());
         ApplicationModel.initConsumerModel(getUniqueServiceName(), 
consumerModel);
diff --git 
a/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/ServiceConfig.java
 
b/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/ServiceConfig.java
index 29d5d11..e2d3969 100644
--- 
a/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/ServiceConfig.java
+++ 
b/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/ServiceConfig.java
@@ -32,7 +32,6 @@ import org.apache.dubbo.rpc.Exporter;
 import org.apache.dubbo.rpc.Invoker;
 import org.apache.dubbo.rpc.Protocol;
 import org.apache.dubbo.rpc.ProxyFactory;
-import org.apache.dubbo.rpc.ServiceClassHolder;
 import org.apache.dubbo.rpc.cluster.ConfiguratorFactory;
 import org.apache.dubbo.rpc.model.ApplicationModel;
 import org.apache.dubbo.rpc.model.ProviderModel;
@@ -532,7 +531,6 @@ public class ServiceConfig<T> extends AbstractServiceConfig 
{
                     .setProtocol(Constants.LOCAL_PROTOCOL)
                     .setHost(LOCALHOST)
                     .setPort(0);
-            
ServiceClassHolder.getInstance().pushServiceClass(getServiceClass(ref));
             Exporter<?> exporter = protocol.export(
                     proxyFactory.getInvoker(ref, (Class) interfaceClass, 
local));
             exporters.add(exporter);
diff --git 
a/dubbo-demo/dubbo-demo-consumer/src/main/resources/META-INF/spring/dubbo-demo-consumer.xml
 
b/dubbo-demo/dubbo-demo-consumer/src/main/resources/META-INF/spring/dubbo-demo-consumer.xml
index a56a10e..b4c1197 100644
--- 
a/dubbo-demo/dubbo-demo-consumer/src/main/resources/META-INF/spring/dubbo-demo-consumer.xml
+++ 
b/dubbo-demo/dubbo-demo-consumer/src/main/resources/META-INF/spring/dubbo-demo-consumer.xml
@@ -32,4 +32,4 @@
     local regular interface -->
     <dubbo:reference id="demoService" check="false" 
interface="org.apache.dubbo.demo.DemoService"/>
 
-</beans>
\ No newline at end of file
+</beans>
diff --git 
a/dubbo-rpc/dubbo-rpc-api/src/main/java/org/apache/dubbo/rpc/ServiceClassHolder.java
 
b/dubbo-rpc/dubbo-rpc-api/src/main/java/org/apache/dubbo/rpc/ServiceClassHolder.java
deleted file mode 100644
index bbbf755..0000000
--- 
a/dubbo-rpc/dubbo-rpc-api/src/main/java/org/apache/dubbo/rpc/ServiceClassHolder.java
+++ /dev/null
@@ -1,45 +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.dubbo.rpc;
-
-/**
- * TODO this is just a workaround for rest protocol, and now we just ensure it 
works in the most common dubbo usages
- *
- */
-public class ServiceClassHolder {
-
-    private static final ServiceClassHolder INSTANCE = new 
ServiceClassHolder();
-
-    private final ThreadLocal<Class> holder  = new ThreadLocal<Class>();
-
-    public static ServiceClassHolder getInstance() {
-        return INSTANCE;
-    }
-
-    private ServiceClassHolder() {
-    }
-
-    public Class popServiceClass() {
-        Class clazz = holder.get();
-        holder.remove();
-        return clazz;
-    }
-
-    public void pushServiceClass(Class clazz) {
-        holder.set(clazz);
-    }
-}
diff --git 
a/dubbo-rpc/dubbo-rpc-api/src/main/java/org/apache/dubbo/rpc/model/ApplicationModel.java
 
b/dubbo-rpc/dubbo-rpc-api/src/main/java/org/apache/dubbo/rpc/model/ApplicationModel.java
index 98d32c1..456930e 100644
--- 
a/dubbo-rpc/dubbo-rpc-api/src/main/java/org/apache/dubbo/rpc/model/ApplicationModel.java
+++ 
b/dubbo-rpc/dubbo-rpc-api/src/main/java/org/apache/dubbo/rpc/model/ApplicationModel.java
@@ -18,78 +18,50 @@ package org.apache.dubbo.rpc.model;
 
 import org.apache.dubbo.common.logger.Logger;
 import org.apache.dubbo.common.logger.LoggerFactory;
-import org.apache.dubbo.common.utils.ConcurrentHashSet;
-import org.apache.dubbo.rpc.Invoker;
 
 import java.util.Collection;
-import java.util.Collections;
-import java.util.HashSet;
-import java.util.Set;
 import java.util.concurrent.ConcurrentHashMap;
 import java.util.concurrent.ConcurrentMap;
 
-import static java.util.stream.Collectors.toSet;
-
 // adjust project structure in order to fully utilize the methods introduced 
here.
 public class ApplicationModel {
 
-    protected static final Logger logger = 
LoggerFactory.getLogger(ApplicationModel.class);
+    protected static final Logger LOGGER = 
LoggerFactory.getLogger(ApplicationModel.class);
 
     /**
      * full qualified class name -> provided service
      */
-    private static final ConcurrentMap<String, Set<ProviderModel>> 
providedServices = new ConcurrentHashMap<>();
+    private static final ConcurrentMap<String, ProviderModel> providedServices 
= new ConcurrentHashMap<>();
     /**
      * full qualified class name -> subscribe service
      */
-    private static final ConcurrentMap<String, Set<ConsumerModel>> 
consumedServices = new ConcurrentHashMap<>();
-
-    private static final ConcurrentMap<String, Set<Invoker>> 
providedServicesInvoker = new ConcurrentHashMap<>();
+    private static final ConcurrentMap<String, ConsumerModel> consumedServices 
= new ConcurrentHashMap<>();
 
     public static Collection<ConsumerModel> allConsumerModels() {
-        return 
consumedServices.values().stream().flatMap(Collection::stream).collect(toSet());
+        return consumedServices.values();
     }
 
     public static Collection<ProviderModel> allProviderModels() {
-       return 
providedServices.values().stream().flatMap(Collection::stream).collect(toSet());
+        return providedServices.values();
     }
 
-    public static Collection<ProviderModel> getProviderModel(String 
serviceName) {
+    public static ProviderModel getProviderModel(String serviceName) {
         return providedServices.get(serviceName);
     }
 
-    public static Collection<ConsumerModel> getConsumerModel(String 
serviceName) {
+    public static ConsumerModel getConsumerModel(String serviceName) {
         return consumedServices.get(serviceName);
     }
 
     public static void initConsumerModel(String serviceName, ConsumerModel 
consumerModel) {
-        Set<ConsumerModel> consumerModels = 
consumedServices.computeIfAbsent(serviceName, k -> new HashSet<>());
-        if (!consumerModels.add(consumerModel)) {
-            logger.warn("Already register the same consumer:" + serviceName);
+        if (consumedServices.putIfAbsent(serviceName, consumerModel) != null) {
+            LOGGER.warn("Already register the same consumer:" + serviceName);
         }
     }
 
     public static void initProviderModel(String serviceName, ProviderModel 
providerModel) {
-        Set<ProviderModel> providerModels = 
providedServices.computeIfAbsent(serviceName, k -> new HashSet<>());
-        if (!providerModels.add(providerModel)) {
-            logger.warn("already register the provider service: " + 
serviceName);
+        if (providedServices.putIfAbsent(serviceName, providerModel) != null) {
+            LOGGER.warn("Already register the same:" + serviceName);
         }
     }
-
-   public static void addProviderInvoker(String serviceName,Invoker invoker){
-       Set<Invoker> invokers = providedServicesInvoker.get(serviceName);
-       if (invokers == null){
-           providedServicesInvoker.putIfAbsent(serviceName,new 
ConcurrentHashSet<Invoker>());
-           invokers = providedServicesInvoker.get(serviceName);
-       }
-       invokers.add(invoker);
-   }
-
-   public Set<Invoker> getProviderInvoker(String serviceName){
-       Set<Invoker> invokers = providedServicesInvoker.get(serviceName);
-       if (invokers == null){
-           return Collections.emptySet();
-       }
-       return invokers;
-   }
 }
diff --git 
a/dubbo-rpc/dubbo-rpc-api/src/main/java/org/apache/dubbo/rpc/model/ProviderModel.java
 
b/dubbo-rpc/dubbo-rpc-api/src/main/java/org/apache/dubbo/rpc/model/ProviderModel.java
index b91d0cb..179d300 100644
--- 
a/dubbo-rpc/dubbo-rpc-api/src/main/java/org/apache/dubbo/rpc/model/ProviderModel.java
+++ 
b/dubbo-rpc/dubbo-rpc-api/src/main/java/org/apache/dubbo/rpc/model/ProviderModel.java
@@ -46,6 +46,10 @@ public class ProviderModel {
         return serviceName;
     }
 
+    public Class<?> getServiceInterfaceClass() {
+        return serviceInterfaceClass;
+    }
+
     public Object getServiceInstance() {
         return serviceInstance;
     }
diff --git 
a/dubbo-rpc/dubbo-rpc-api/src/test/java/org/apache/dubbo/rpc/ServiceHolderTest.java
 
b/dubbo-rpc/dubbo-rpc-api/src/test/java/org/apache/dubbo/rpc/ServiceHolderTest.java
deleted file mode 100644
index 9a9a42f..0000000
--- 
a/dubbo-rpc/dubbo-rpc-api/src/test/java/org/apache/dubbo/rpc/ServiceHolderTest.java
+++ /dev/null
@@ -1,34 +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.dubbo.rpc;
-
-import org.junit.Assert;
-import org.junit.Test;
-
-public class ServiceHolderTest {
-
-    @Test
-    public void testHolderClass() {
-
-        ServiceClassHolder holder = ServiceClassHolder.getInstance();
-
-        holder.pushServiceClass(ServiceHolderTest.class);
-
-        Assert.assertEquals(ServiceHolderTest.class, holder.popServiceClass());
-
-    }
-}
diff --git 
a/dubbo-rpc/dubbo-rpc-rest/src/main/java/org/apache/dubbo/rpc/protocol/rest/RestProtocol.java
 
b/dubbo-rpc/dubbo-rpc-rest/src/main/java/org/apache/dubbo/rpc/protocol/rest/RestProtocol.java
index 2268b71..6c24ca5 100644
--- 
a/dubbo-rpc/dubbo-rpc-rest/src/main/java/org/apache/dubbo/rpc/protocol/rest/RestProtocol.java
+++ 
b/dubbo-rpc/dubbo-rpc-rest/src/main/java/org/apache/dubbo/rpc/protocol/rest/RestProtocol.java
@@ -23,7 +23,7 @@ import org.apache.dubbo.remoting.http.HttpBinder;
 import org.apache.dubbo.remoting.http.servlet.BootstrapListener;
 import org.apache.dubbo.remoting.http.servlet.ServletManager;
 import org.apache.dubbo.rpc.RpcException;
-import org.apache.dubbo.rpc.ServiceClassHolder;
+import org.apache.dubbo.rpc.model.ApplicationModel;
 import org.apache.dubbo.rpc.protocol.AbstractProxyProtocol;
 
 import org.apache.http.HeaderElement;
@@ -90,7 +90,7 @@ public class RestProtocol extends AbstractProxyProtocol {
     @Override
     protected <T> Runnable doExport(T impl, Class<T> type, URL url) throws 
RpcException {
         String addr = getAddr(url);
-        Class implClass = ServiceClassHolder.getInstance().popServiceClass();
+        Class implClass = 
ApplicationModel.getProviderModel(url.getServiceKey()).getServiceInterfaceClass();
         RestServer server = servers.get(addr);
         if (server == null) {
             server = 
serverFactory.createServer(url.getParameter(Constants.SERVER_KEY, 
DEFAULT_SERVER));
diff --git 
a/dubbo-rpc/dubbo-rpc-rest/src/test/java/org/apache/dubbo/rpc/protocol/rest/RestProtocolTest.java
 
b/dubbo-rpc/dubbo-rpc-rest/src/test/java/org/apache/dubbo/rpc/protocol/rest/RestProtocolTest.java
index a698d0c..215bc41 100644
--- 
a/dubbo-rpc/dubbo-rpc-rest/src/test/java/org/apache/dubbo/rpc/protocol/rest/RestProtocolTest.java
+++ 
b/dubbo-rpc/dubbo-rpc-rest/src/test/java/org/apache/dubbo/rpc/protocol/rest/RestProtocolTest.java
@@ -27,7 +27,8 @@ import org.apache.dubbo.rpc.Result;
 import org.apache.dubbo.rpc.RpcContext;
 import org.apache.dubbo.rpc.RpcException;
 import org.apache.dubbo.rpc.RpcInvocation;
-import org.apache.dubbo.rpc.ServiceClassHolder;
+import org.apache.dubbo.rpc.model.ApplicationModel;
+import org.apache.dubbo.rpc.model.ProviderModel;
 import org.hamcrest.CoreMatchers;
 import org.junit.After;
 import org.junit.Test;
@@ -48,11 +49,12 @@ public class RestProtocolTest {
 
     @Test
     public void testExport() {
-        ServiceClassHolder.getInstance().pushServiceClass(DemoService.class);
-
+        IDemoService server = new DemoService();
+        ProviderModel providerModel = new 
ProviderModel(exportUrl.getServiceKey(), server, IDemoService.class);
+        ApplicationModel.initProviderModel(exportUrl.getServiceKey(), 
providerModel);
 
         RpcContext.getContext().setAttachment("timeout", "200");
-        Exporter<IDemoService> exporter = protocol.export(proxy.getInvoker(new 
DemoService(), IDemoService.class, exportUrl));
+        Exporter<IDemoService> exporter = 
protocol.export(proxy.getInvoker(server, IDemoService.class, exportUrl));
 
         IDemoService demoService = 
this.proxy.getProxy(protocol.refer(IDemoService.class, exportUrl));
 
@@ -64,7 +66,9 @@ public class RestProtocolTest {
 
     @Test
     public void testNettyServer() {
-        ServiceClassHolder.getInstance().pushServiceClass(DemoService.class);
+        IDemoService server = new DemoService();
+        ProviderModel providerModel = new 
ProviderModel(exportUrl.getServiceKey(), server, IDemoService.class);
+        ApplicationModel.initProviderModel(exportUrl.getServiceKey(), 
providerModel);
 
         URL nettyUrl = exportUrl.addParameter(Constants.SERVER_KEY, "netty");
         Exporter<IDemoService> exporter = protocol.export(proxy.getInvoker(new 
DemoService(), IDemoService.class, nettyUrl));
@@ -79,19 +83,23 @@ public class RestProtocolTest {
 
     @Test(expected = RpcException.class)
     public void testServletWithoutWebConfig() {
-        ServiceClassHolder.getInstance().pushServiceClass(DemoService.class);
+        IDemoService server = new DemoService();
+        ProviderModel providerModel = new 
ProviderModel(exportUrl.getServiceKey(), server, IDemoService.class);
+        ApplicationModel.initProviderModel(exportUrl.getServiceKey(), 
providerModel);
 
         URL servletUrl = exportUrl.addParameter(Constants.SERVER_KEY, 
"servlet");
 
-        protocol.export(proxy.getInvoker(new DemoService(), 
IDemoService.class, servletUrl));
+        protocol.export(proxy.getInvoker(server, IDemoService.class, 
servletUrl));
     }
 
     @Test(expected = RpcException.class)
     public void testErrorHandler() {
-        ServiceClassHolder.getInstance().pushServiceClass(DemoService.class);
+        IDemoService server = new DemoService();
+        ProviderModel providerModel = new 
ProviderModel(exportUrl.getServiceKey(), server, IDemoService.class);
+        ApplicationModel.initProviderModel(exportUrl.getServiceKey(), 
providerModel);
 
         URL nettyUrl = exportUrl.addParameter(Constants.SERVER_KEY, "netty");
-        Exporter<IDemoService> exporter = protocol.export(proxy.getInvoker(new 
DemoService(), IDemoService.class, nettyUrl));
+        Exporter<IDemoService> exporter = 
protocol.export(proxy.getInvoker(server, IDemoService.class, nettyUrl));
 
         IDemoService demoService = 
this.proxy.getProxy(protocol.refer(IDemoService.class, nettyUrl));
 
@@ -100,10 +108,12 @@ public class RestProtocolTest {
 
     @Test
     public void testInvoke() {
-        ServiceClassHolder.getInstance().pushServiceClass(DemoService.class);
+        IDemoService server = new DemoService();
+        ProviderModel providerModel = new 
ProviderModel(exportUrl.getServiceKey(), server, IDemoService.class);
+        ApplicationModel.initProviderModel(exportUrl.getServiceKey(), 
providerModel);
 
 
-        Exporter<IDemoService> exporter = protocol.export(proxy.getInvoker(new 
DemoService(), IDemoService.class, exportUrl));
+        Exporter<IDemoService> exporter = 
protocol.export(proxy.getInvoker(server, IDemoService.class, exportUrl));
 
         RpcInvocation rpcInvocation = new RpcInvocation("hello", new 
Class[]{Integer.class, Integer.class}, new Integer[]{2, 3});
 
@@ -113,11 +123,13 @@ public class RestProtocolTest {
 
     @Test
     public void testFilter() {
-        ServiceClassHolder.getInstance().pushServiceClass(DemoService.class);
+        IDemoService server = new DemoService();
+        ProviderModel providerModel = new 
ProviderModel(exportUrl.getServiceKey(), server, IDemoService.class);
+        ApplicationModel.initProviderModel(exportUrl.getServiceKey(), 
providerModel);
 
         URL nettyUrl = exportUrl.addParameter(Constants.SERVER_KEY, "netty")
                 .addParameter(Constants.EXTENSION_KEY, 
"org.apache.dubbo.rpc.protocol.rest.support.LoggingFilter");
-        Exporter<IDemoService> exporter = protocol.export(proxy.getInvoker(new 
DemoService(), IDemoService.class, nettyUrl));
+        Exporter<IDemoService> exporter = 
protocol.export(proxy.getInvoker(server, IDemoService.class, nettyUrl));
 
         IDemoService demoService = 
this.proxy.getProxy(protocol.refer(IDemoService.class, nettyUrl));
 
@@ -130,12 +142,14 @@ public class RestProtocolTest {
 
     @Test
     public void testRpcContextFilter() {
-        ServiceClassHolder.getInstance().pushServiceClass(DemoService.class);
+        IDemoService server = new DemoService();
+        ProviderModel providerModel = new 
ProviderModel(exportUrl.getServiceKey(), server, IDemoService.class);
+        ApplicationModel.initProviderModel(exportUrl.getServiceKey(), 
providerModel);
 
         // use RpcContextFilter
         URL nettyUrl = exportUrl.addParameter(Constants.SERVER_KEY, "netty")
                 .addParameter(Constants.EXTENSION_KEY, 
"org.apache.dubbo.rpc.protocol.rest.RpcContextFilter");
-        Exporter<IDemoService> exporter = protocol.export(proxy.getInvoker(new 
DemoService(), IDemoService.class, nettyUrl));
+        Exporter<IDemoService> exporter = 
protocol.export(proxy.getInvoker(server, IDemoService.class, nettyUrl));
 
         IDemoService demoService = 
this.proxy.getProxy(protocol.refer(IDemoService.class, nettyUrl));
 
@@ -151,10 +165,12 @@ public class RestProtocolTest {
 
     @Test(expected = RuntimeException.class)
     public void testRegFail() {
-        ServiceClassHolder.getInstance().pushServiceClass(DemoService.class);
+        IDemoService server = new DemoService();
+        ProviderModel providerModel = new 
ProviderModel(exportUrl.getServiceKey(), server, IDemoService.class);
+        ApplicationModel.initProviderModel(exportUrl.getServiceKey(), 
providerModel);
 
         URL nettyUrl = exportUrl.addParameter(Constants.EXTENSION_KEY, 
"com.not.existing.Filter");
-        protocol.export(proxy.getInvoker(new DemoService(), 
IDemoService.class, nettyUrl));
+        protocol.export(proxy.getInvoker(server, IDemoService.class, 
nettyUrl));
     }
 
     @Test
diff --git 
a/dubbo-rpc/dubbo-rpc-rest/src/test/java/org/apache/dubbo/rpc/protol/rest/RestProtocolTest.java
 
b/dubbo-rpc/dubbo-rpc-rest/src/test/java/org/apache/dubbo/rpc/protol/rest/RestProtocolTest.java
index bd2d66a..ab0da76 100644
--- 
a/dubbo-rpc/dubbo-rpc-rest/src/test/java/org/apache/dubbo/rpc/protol/rest/RestProtocolTest.java
+++ 
b/dubbo-rpc/dubbo-rpc-rest/src/test/java/org/apache/dubbo/rpc/protol/rest/RestProtocolTest.java
@@ -16,10 +16,15 @@
  */
 package org.apache.dubbo.rpc.protol.rest;
 
+import junit.framework.Assert;
 import org.apache.dubbo.common.URL;
 import org.apache.dubbo.common.extension.ExtensionLoader;
-import org.apache.dubbo.rpc.*;
-import junit.framework.Assert;
+import org.apache.dubbo.rpc.Exporter;
+import org.apache.dubbo.rpc.Invoker;
+import org.apache.dubbo.rpc.Protocol;
+import org.apache.dubbo.rpc.ProxyFactory;
+import org.apache.dubbo.rpc.model.ApplicationModel;
+import org.apache.dubbo.rpc.model.ProviderModel;
 import org.junit.Test;
 
 /**
@@ -32,12 +37,14 @@ public class RestProtocolTest {
 
     @Test
     public void testRestProtocol() {
-        
ServiceClassHolder.getInstance().pushServiceClass(RestServiceImpl.class);
-        RestServiceImpl server = new RestServiceImpl();
-        Assert.assertFalse(server.isCalled());
         URL url = URL.valueOf("rest://127.0.0.1:5342/rest/say1?version=1.0.0");
+        RestServiceImpl server = new RestServiceImpl();
+        ProviderModel providerModel = new ProviderModel(url.getServiceKey(), 
server, RestService.class);
+        ApplicationModel.initProviderModel(url.getServiceKey(), providerModel);
+
         Exporter<RestService> exporter = 
protocol.export(proxyFactory.getInvoker(server, RestService.class, url));
-        Invoker<RestService> invoker = protocol.refer(RestService.class, url);
+        Invoker<RestService> invoker = protocol.refer(RestService.class, url); 
       Assert.assertFalse(server.isCalled());
+
         RestService client = proxyFactory.getProxy(invoker);
         String result = client.sayHello("haha");
         Assert.assertTrue(server.isCalled());
@@ -48,10 +55,12 @@ public class RestProtocolTest {
 
     @Test
     public void testRestProtocolWithContextPath() {
-        
ServiceClassHolder.getInstance().pushServiceClass(RestServiceImpl.class);
         RestServiceImpl server = new RestServiceImpl();
         Assert.assertFalse(server.isCalled());
         URL url = URL.valueOf("rest://127.0.0.1:5341/a/b/c?version=1.0.0");
+        ProviderModel providerModel = new ProviderModel(url.getServiceKey(), 
server, RestService.class);
+        ApplicationModel.initProviderModel(url.getServiceKey(), providerModel);
+
         Exporter<RestService> exporter = 
protocol.export(proxyFactory.getInvoker(server, RestService.class, url));
 
         url = URL.valueOf("rest://127.0.0.1:5341/a/b/c/?version=1.0.0");

Reply via email to