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/11/15 07:16:39 UTC

[incubator-dubbo] branch dev-metadata updated (d11b876 -> 46a0580)

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

liujun pushed a change to branch dev-metadata
in repository https://gitbox.apache.org/repos/asf/incubator-dubbo.git.


    from d11b876  Merge branch 'dev-metadata' of https://github.com/apache/incubator-dubbo into dev-metadata
     add e94d74b  Optimize heartbeat and reconnect task. (#2658)
     add 195c82d  polish the code for pull request 2658: Optimize heartbeat and reconnect task (#2709)
     add 4d0a36c  重构 ServiceBean 的 isDelay 方法,使其更符合语义 (#2686)
     add 0a116aa  【Unit Test】FailbackRegistry Test: recover method (#2591)
     add c21cc05  replace ServiceAnnotationBeanPostProcessor log.isInfoEnabled->log.isWarnEnabled (#2712)
     add 3cf801b  [Dubbo-2678][For Master] Add ability to turn off SPI auto injection, special support for Object type.  (#2682)
     add 0d51bc4  Merge pull request #2725, problems of graceful shutdown in 2.6.3 and some recommendation.
     add 505d155  enhance comments (#2735)
     add 2284ede  code format (#2730)
     add 16f7a1e  Close all servers/ports after tests finish (#2741)
     add aed0102   Simplify the code of StringUtils to make it more graceful. (#2740)
     add 56b2193  Add 'forks' config into xml config (#2568)
     add 1a88c22  fix typo (#2747)
     add e3bd693  [DUBBO-2489] MockClusterInvoker provides local forced mock,I tested it locally, but it doesn't work (#2742)
     add b0107e7      #2748: Provider should disable mock configuration (#2749)
     add aa9f16e  Fix the bug that ReferenceBean refers service more than once when debugging. (#2754)
     add 20a5efb  Close all servers/ports after tests finish (#2755)
     add a7cf737  add checkstyle rule to check import order (#2745)
     add dcbd326  Changing URL so tests can run in any order (#2760)
     add 117d485  [Dubbo-2353]fix Invalid property 'interfaceName' of bean class [org.apache.dubbo.config.spring.ServiceBean]#2353 (#2418)
     add 7f5fd46      #2762: [Dubbo - qos-http] stopServer should be invoked ? (#2767)
     add bff16eb      #2777: heartbeat threads blocks process shutdown (#2778)
     add 38a6511  oschina vote (#2786)
     new dbca54c  Merge branch 'master' into dev-metadata
     new 0d0c955  solve dubbo-bootstrap conficts after merged master
     new 5f0d8c8  change how DynamicConfiguration instance is fetched.
     new 46a0580  fix ut

The 4 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.


Summary of changes:
 README.md                                          |   2 +
 codestyle/checkstyle.xml                           |   6 +
 codestyle/dubbo_codestyle_for_idea.xml             |   2 -
 dubbo-all/pom.xml                                  |  14 --
 dubbo-bom/pom.xml                                  |   5 -
 dubbo-bootstrap/pom.xml                            | 111 ----------------
 .../org/apache/dubbo/bootstrap/DubboBootstrap.java | 110 ----------------
 .../dubbo/rpc/cluster/router/tag/TagRouter.java    |   8 +-
 .../java/org/apache/dubbo/common/Constants.java    |  17 +++
 .../org/apache/dubbo/common/compiler/Compiler.java |   1 -
 .../common/compiler/support/AdaptiveCompiler.java  |   1 -
 .../dubbo/common/extension/DisableInject.java      |  68 +++++-----
 .../dubbo/common/extension/ExtensionLoader.java    |  21 ++-
 .../apache/dubbo/common/logger/jcl/JclLogger.java  |   1 +
 .../dubbo/common/logger/jcl/JclLoggerAdapter.java  |   1 +
 .../support/eager/EagerThreadPoolExecutor.java     |   2 +-
 .../dubbo/common/timer/HashedWheelTimer.java       |  13 +-
 .../java/org/apache/dubbo/common/timer/Timer.java  |   7 +
 .../common/utils/{Assert.java => ArrayUtils.java}  |  32 +++--
 .../org/apache/dubbo/common/utils/StringUtils.java | 118 +++++++++++------
 .../common/extension/ExtensionLoaderTest.java      |  13 +-
 .../ActivateExt1.java => injection/InjectExt.java} |  10 +-
 .../extension/injection/impl/InjectExtImpl.java    |  60 +++++++++
 .../VersionTest.java => utils/ArrayUtilsTest.java} |  25 ++--
 .../apache/dubbo/common/utils/StringUtilsTest.java |  30 ++++-
 ...ache.dubbo.common.extension.injection.InjectExt |   1 +
 .../main/java/com/alibaba/dubbo/common/URL.java    | 103 ++++++++++++++-
 .../alibaba/dubbo/common/status/StatusChecker.java |   1 +
 .../spring/context/annotation/EnableDubbo.java     |   1 +
 .../java/com/alibaba/dubbo/monitor/Monitor.java    |   1 +
 .../java/com/alibaba/dubbo/registry/Registry.java  |   1 +
 .../java/com/alibaba/dubbo/remoting/Channel.java   |   2 +
 .../main/java/com/alibaba/dubbo/rpc/Exporter.java  |   1 +
 .../main/java/com/alibaba/dubbo/rpc/Filter.java    |   1 +
 .../java/com/alibaba/dubbo/rpc/Invocation.java     |   2 +
 .../main/java/com/alibaba/dubbo/rpc/Invoker.java   |   2 +
 .../com/alibaba/dubbo/rpc/cluster/Directory.java   |   5 +-
 .../java/com/alibaba/dubbo/rpc/cluster/Router.java |   1 +
 ...atibleReferenceAnnotationBeanPostProcessor.java |   4 +-
 .../annotation/CompatibleReferenceBeanBuilder.java |   4 +-
 ...mpatibleServiceAnnotationBeanPostProcessor.java |   4 +-
 .../CompatibleDubboComponentScanRegistrar.java     |   1 +
 .../CompatibleAnnotationBeanDefinitionParser.java  |   3 +-
 dubbo-config/dubbo-config-api/pom.xml              |   5 +
 .../org/apache/dubbo/config/AbstractConfig.java    |   8 +-
 .../dubbo/config/AbstractInterfaceConfig.java      |  51 +++++---
 .../apache/dubbo/config/AbstractMethodConfig.java  |  23 +++-
 .../apache/dubbo/config/ConfigCenterConfig.java    |   7 +-
 .../apache/dubbo/config}/DubboShutdownHook.java    |   2 +-
 .../org/apache/dubbo/config/ProtocolConfig.java    |   2 +-
 .../org/apache/dubbo/config/ReferenceConfig.java   |   3 +-
 .../org/apache/dubbo/config/ServiceConfig.java     |  13 +-
 .../apache/dubbo/config/context/Environment.java   |  17 +--
 .../apache/dubbo/config/AbstractConfigTest.java    |   3 +-
 .../dubbo/config/AbstractInterfaceConfigTest.java  |  27 ++--
 .../dubbo/config/AbstractMethodConfigTest.java     |   7 +
 .../dubbo/config/AbstractReferenceConfigTest.java  |   0
 .../dubbo/config/AbstractServiceConfigTest.java    |   0
 .../apache/dubbo/config/ApplicationConfigTest.java |   0
 .../apache/dubbo/config/ArgumentConfigTest.java    |   0
 .../apache/dubbo/config/ConsumerConfigTest.java    |   0
 .../apache/dubbo/config/GenericServiceTest.java    |   0
 .../org/apache/dubbo/config/MethodConfigTest.java  |   0
 .../org/apache/dubbo/config/ModuleConfigTest.java  |   0
 .../org/apache/dubbo/config/MonitorConfigTest.java |   0
 .../apache/dubbo/config/ProtocolConfigTest.java    |   0
 .../apache/dubbo/config/ProviderConfigTest.java    |   0
 .../apache/dubbo/config/ReferenceConfigTest.java   |   0
 .../apache/dubbo/config/RegistryConfigTest.java    |   0
 .../org/apache/dubbo/config/ServiceConfigTest.java |  12 ++
 .../test/java/org/apache/dubbo/config/api/Box.java |   0
 .../org/apache/dubbo/config/api/DemoException.java |   0
 .../org/apache/dubbo/config/api/DemoService.java   |   0
 .../java/org/apache/dubbo/config/api/Greeting.java |   0
 .../java/org/apache/dubbo/config/api/User.java     |   0
 .../apache/dubbo/config/cache/CacheService.java    |   0
 .../dubbo/config/cache/CacheServiceImpl.java       |   0
 .../org/apache/dubbo/config/cache/CacheTest.java   |   0
 .../config/consumer/DemoActionByAnnotation.java    |   0
 .../dubbo/config/consumer/DemoActionBySetter.java  |   0
 .../dubbo/config/consumer/DemoInterceptor.java     |   0
 .../DelegateProviderMetaDataInvokerTest.java       |   0
 .../apache/dubbo/config/mock/GreetingLocal1.java   |   0
 .../apache/dubbo/config/mock/GreetingLocal2.java   |   0
 .../apache/dubbo/config/mock/GreetingLocal3.java   |   0
 .../apache/dubbo/config/mock/GreetingMock1.java    |   0
 .../apache/dubbo/config/mock/GreetingMock2.java    |   0
 .../org/apache/dubbo/config/mock/MockCluster.java  |   0
 .../org/apache/dubbo/config/mock/MockCodec.java    |   0
 .../apache/dubbo/config/mock/MockDispatcher.java   |   0
 .../apache/dubbo/config/mock/MockExchanger.java    |   0
 .../dubbo/config/mock/MockExporterListener.java    |   0
 .../org/apache/dubbo/config/mock/MockFilter.java   |   0
 .../dubbo/config/mock/MockInvokerListener.java     |   0
 .../apache/dubbo/config/mock/MockLoadBalance.java  |   0
 .../org/apache/dubbo/config/mock/MockProtocol.java |   0
 .../apache/dubbo/config/mock/MockProtocol2.java    |   0
 .../apache/dubbo/config/mock/MockProxyFactory.java |   0
 .../org/apache/dubbo/config/mock/MockRegistry.java |   0
 .../dubbo/config/mock/MockRegistryFactory.java     |   0
 .../dubbo/config/mock/MockRegistryFactory2.java    |   0
 .../dubbo/config/mock/MockStatusChecker.java       |   0
 .../dubbo/config/mock/MockTelnetHandler.java       |   0
 .../apache/dubbo/config/mock/MockThreadPool.java   |   0
 .../apache/dubbo/config/mock/MockTransporter.java  |   0
 .../apache/dubbo/config/mock/TestProxyFactory.java |   0
 .../config/provider/impl/DemoServiceImpl.java      |   0
 .../config/url/ExporterSideConfigUrlTest.java      |   0
 .../dubbo/config/url/InvokerSideConfigUrlTest.java |   0
 .../dubbo/config/url/RpcConfigGetSetProxy.java     |   0
 .../org/apache/dubbo/config/url/UrlTestBase.java   |   0
 .../dubbo/config/utils/MockReferenceConfig.java    |   0
 .../config/utils/ReferenceConfigCacheTest.java     |   0
 .../config/validation/ValidationParameter.java     |   0
 .../dubbo/config/validation/ValidationService.java |   0
 .../config/validation/ValidationServiceImpl.java   |   0
 .../dubbo/config/validation/ValidationTest.java    |   0
 .../org.apache.dubbo.common.status.StatusChecker   |   0
 .../org.apache.dubbo.common.threadpool.ThreadPool  |   0
 .../org.apache.dubbo.registry.RegistryFactory      |   0
 .../services/org.apache.dubbo.remoting.Codec       |   0
 .../services/org.apache.dubbo.remoting.Dispatcher  |   0
 .../services/org.apache.dubbo.remoting.Transporter |   0
 .../org.apache.dubbo.remoting.exchange.Exchanger   |   0
 .../org.apache.dubbo.remoting.telnet.TelnetHandler |   0
 .../services/org.apache.dubbo.rpc.ExporterListener |   0
 .../META-INF/services/org.apache.dubbo.rpc.Filter  |   0
 .../services/org.apache.dubbo.rpc.InvokerListener  |   0
 .../services/org.apache.dubbo.rpc.Protocol         |   0
 .../services/org.apache.dubbo.rpc.ProxyFactory     |   0
 .../services/org.apache.dubbo.rpc.cluster.Cluster  |   0
 .../org.apache.dubbo.rpc.cluster.LoadBalance       |   0
 .../dubbo-config-api/src}/test/resources/log4j.xml |   0
 dubbo-config/dubbo-config-spring/pom.xml           |   7 +-
 .../apache/dubbo/config/spring/AnnotationBean.java |  24 ++--
 .../apache/dubbo/config/spring/ReferenceBean.java  |   1 +
 .../apache/dubbo/config/spring/ServiceBean.java    |  29 +----
 .../AbstractAnnotationConfigBeanBuilder.java       |   1 +
 .../DubboConfigBindingBeanPostProcessor.java       |   1 +
 .../ReferenceAnnotationBeanPostProcessor.java      |   9 +-
 .../factory/annotation/ReferenceBeanBuilder.java   |   1 +
 .../ServiceAnnotationBeanPostProcessor.java        |   5 +-
 .../context/annotation/DubboComponentScan.java     |   1 +
 .../annotation/DubboComponentScanRegistrar.java    |   1 +
 .../annotation/DubboConfigBindingRegistrar.java    |   1 +
 .../annotation/DubboConfigBindingsRegistrar.java   |   1 +
 .../DubboConfigConfigurationSelector.java          |   1 +
 .../spring/context/annotation/EnableDubbo.java     |   1 +
 .../context/annotation/EnableDubboConfig.java      |   1 +
 .../annotation/EnableDubboConfigBinding.java       |   1 +
 .../properties/DefaultDubboConfigBinder.java       |   1 +
 .../context/properties/DubboConfigBinder.java      |   1 +
 .../converter/StringArrayToMapConverter.java       |   1 +
 .../spring/extension/SpringExtensionFactory.java   |  33 ++++-
 .../DubboApplicationContextInitializer.java        |  39 ------
 .../initializer/DubboApplicationListener.java      |  49 -------
 .../spring/initializer/DubboContextListener.java   |  72 ----------
 .../schema/AnnotationBeanDefinitionParser.java     |   1 +
 .../spring/schema/DubboNamespaceHandler.java       |   1 +
 .../spring/status/DataSourceStatusChecker.java     |   1 +
 .../config/spring/status/SpringStatusChecker.java  |   1 +
 .../dubbo/config/spring/util/BeanFactoryUtils.java |  28 ++++
 .../src/main/resources/META-INF/compat/dubbo.xsd   |  10 ++
 .../src/main/resources/META-INF/dubbo.xsd          |  10 ++
 .../src/main/resources/META-INF/web-fragment.xml   |  22 ----
 .../org/apache/dubbo/config/spring/ConfigTest.java |  33 +++++
 .../annotation/provider/HelloServiceImpl.java      |   2 +-
 .../DubboApplicationContextInitializerTest.java    |  88 -------------
 .../initializer/DubboApplicationListenerTest.java  |  59 ---------
 dubbo-container/dubbo-container-spring/pom.xml     |   7 +-
 .../dubbo/container/spring/SpringContainer.java    |   6 +-
 dubbo-distribution/pom.xml                         |   5 -
 .../org/apache/dubbo/cache/filter/CacheFilter.java |   4 +-
 .../dubbo/cache/support/expiring/ExpiringMap.java  |   2 +-
 .../cache/support/jcache/JCacheFactoryTest.java    |   2 +-
 .../governance/DynamicConfigurationFactory.java    |  35 -----
 .../nop/NopDynamicConfigurationFactory.java        |  42 ------
 .../apollo/ApolloDynamicConfigurationFactory.java  |  46 -------
 .../ArchaiusDynamicConfigurationFactory.java       |  44 -------
 .../org/apache/dubbo/metrics/MetricRegistry.java   |   1 -
 .../dubbo/qos/protocol/QosProtocolWrapper.java     |   9 +-
 .../java/org/apache/dubbo/qos/server/Server.java   |   1 +
 .../qos/server/handler/HttpProcessHandler.java     |   1 +
 .../qos/server/handler/LocalHostPermitHandler.java |   1 -
 .../qos/server/handler/TelnetProcessHandler.java   |   1 -
 .../java/org/apache/dubbo/qos/textui/TTable.java   |   6 +-
 .../java/org/apache/dubbo/qos/textui/TTree.java    |   2 +-
 dubbo-registry/dubbo-registry-api/pom.xml          |   5 -
 .../registry/integration/RegistryProtocol.java     |   9 +-
 .../registry/support/FailbackRegistryTest.java     |  23 ++++
 .../exchange/support/header/AbstractTimerTask.java |  87 +++++++++++++
 .../support/header/HeaderExchangeClient.java       |  67 +++++-----
 .../support/header/HeaderExchangeServer.java       |  76 +++++------
 .../exchange/support/header/HeartBeatTask.java     |  97 --------------
 .../support/header/HeartbeatTimerTask.java         |  62 +++++++++
 .../support/header/ReconnectTimerTask.java         |  61 +++++++++
 .../telnet/support/command/LogTelnetHandler.java   |   1 -
 .../transport/dispatcher/ChannelHandlers.java      |   1 -
 .../exchange/support/header/HeartBeatTaskTest.java |  29 +++--
 .../support/header/HeartbeatHandlerTest.java       |   8 +-
 .../transport/netty/NettyClientToServerTest.java   |  11 +-
 .../transport/netty4/NettyBackedChannelBuffer.java |   1 +
 .../transport/netty4/NettyClientHandler.java       |   4 +-
 .../transport/netty4/NettyServerHandler.java       |   2 +-
 .../transport/netty4/logging/MessageFormatter.java |   1 -
 .../transport/netty4/NettyClientToServerTest.java  |  11 +-
 .../zookeeper/zkclient/ZkClientWrapper.java        |   7 +-
 .../alibaba/dubbo/rpc/service/GenericService.java  |   1 +
 .../java/org/apache/dubbo/rpc/AbstractResult.java  |   1 +
 .../org/apache/dubbo/rpc/AsyncContextImpl.java     |   1 +
 .../java/org/apache/dubbo/rpc/AsyncRpcResult.java  |   1 +
 .../apache/dubbo/rpc/filter/AccessLogFilter.java   |   3 +-
 .../dubbo/rpc/proxy/AbstractProxyFactory.java      |   4 +-
 .../org/apache/dubbo/rpc/support/MockInvoker.java  | 145 +++++++++++++--------
 .../rpc/protocol/dubbo/filter/TraceFilter.java     |   1 +
 .../protocol/dubbo/telnet/InvokeTelnetHandler.java |   1 +
 .../protocol/dubbo/telnet/LogTelnetHandler.java    |   1 -
 .../rpc/protocol/dubbo/DubboProtocolTest.java      |   9 +-
 .../dubbo/ReferenceCountExchangeClientTest.java    |   7 +
 .../hessian/DubboHessianURLConnectionFactory.java  |   1 +
 .../rpc/protocol/hessian/HessianProtocol.java      |   2 +-
 .../dubbo/rpc/protocol/http/HttpProtocol.java      |   1 +
 .../rpc/protocol/http/HttpRemoteInvocation.java    |   1 +
 .../dubbo/rpc/protocol/rest/RpcContextFilter.java  |   1 +
 .../swagger/DubboSwaggerApiListingResource.java    |   7 +-
 .../integration/swagger/DubboSwaggerService.java   |   2 +-
 .../rpc/protocol/rmi/RmiRemoteInvocation.java      |   1 +
 .../dubbo/rpc/protocol/thrift/ThriftCodec.java     |   1 -
 .../serialize/fastjson/FastJsonObjectOutput.java   |   1 +
 .../dubbo/common/serialize/fst/FstFactory.java     |   1 +
 .../serialize/hessian2/Hessian2ObjectInput.java    |   3 +-
 .../serialize/hessian2/Hessian2ObjectOutput.java   |   3 +-
 .../common/serialize/java/JavaObjectOutput.java    |   1 -
 .../common/serialize/kryo/CompatibleKryo.java      |   7 +-
 .../serialize/kryo/utils/AbstractKryoFactory.java  |   5 +-
 .../protostuff/ProtostuffObjectInput.java          |   5 +-
 .../protostuff/ProtostuffObjectOutput.java         |   5 +-
 .../serialize/protostuff/utils/WrapperUtils.java   |   5 +-
 .../dubbo/test/Spring3CompatibilityTest.java       |   1 +
 .../dubbo/test/consumer/ConsumerConfiguration.java |   1 +
 .../dubbo/test/provider/ProviderConfiguration.java |   1 +
 pom.xml                                            |   1 -
 242 files changed, 1244 insertions(+), 1300 deletions(-)
 delete mode 100644 dubbo-bootstrap/pom.xml
 delete mode 100644 dubbo-bootstrap/src/main/java/org/apache/dubbo/bootstrap/DubboBootstrap.java
 copy dubbo-remoting/dubbo-remoting-api/src/main/java/org/apache/dubbo/remoting/telnet/support/Help.java => dubbo-common/src/main/java/org/apache/dubbo/common/extension/DisableInject.java (80%)
 copy dubbo-common/src/main/java/org/apache/dubbo/common/utils/{Assert.java => ArrayUtils.java} (56%)
 copy dubbo-common/src/test/java/org/apache/dubbo/common/extension/{activate/ActivateExt1.java => injection/InjectExt.java} (88%)
 create mode 100644 dubbo-common/src/test/java/org/apache/dubbo/common/extension/injection/impl/InjectExtImpl.java
 copy dubbo-common/src/test/java/org/apache/dubbo/common/{version/VersionTest.java => utils/ArrayUtilsTest.java} (58%)
 create mode 100644 dubbo-common/src/test/resources/META-INF/dubbo/internal/org.apache.dubbo.common.extension.injection.InjectExt
 rename {dubbo-bootstrap/src/main/java/org/apache/dubbo/bootstrap => dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config}/DubboShutdownHook.java (98%)
 rename {dubbo-bootstrap/src/main => dubbo-config/dubbo-config-api/src}/test/java/org/apache/dubbo/config/AbstractConfigTest.java (99%)
 rename {dubbo-bootstrap/src/main => dubbo-config/dubbo-config-api/src}/test/java/org/apache/dubbo/config/AbstractInterfaceConfigTest.java (94%)
 rename {dubbo-bootstrap/src/main => dubbo-config/dubbo-config-api/src}/test/java/org/apache/dubbo/config/AbstractMethodConfigTest.java (95%)
 rename {dubbo-bootstrap/src/main => dubbo-config/dubbo-config-api/src}/test/java/org/apache/dubbo/config/AbstractReferenceConfigTest.java (100%)
 rename {dubbo-bootstrap/src/main => dubbo-config/dubbo-config-api/src}/test/java/org/apache/dubbo/config/AbstractServiceConfigTest.java (100%)
 rename {dubbo-bootstrap/src/main => dubbo-config/dubbo-config-api/src}/test/java/org/apache/dubbo/config/ApplicationConfigTest.java (100%)
 rename {dubbo-bootstrap/src/main => dubbo-config/dubbo-config-api/src}/test/java/org/apache/dubbo/config/ArgumentConfigTest.java (100%)
 rename {dubbo-bootstrap/src/main => dubbo-config/dubbo-config-api/src}/test/java/org/apache/dubbo/config/ConsumerConfigTest.java (100%)
 rename {dubbo-bootstrap/src/main => dubbo-config/dubbo-config-api/src}/test/java/org/apache/dubbo/config/GenericServiceTest.java (100%)
 rename {dubbo-bootstrap/src/main => dubbo-config/dubbo-config-api/src}/test/java/org/apache/dubbo/config/MethodConfigTest.java (100%)
 rename {dubbo-bootstrap/src/main => dubbo-config/dubbo-config-api/src}/test/java/org/apache/dubbo/config/ModuleConfigTest.java (100%)
 rename {dubbo-bootstrap/src/main => dubbo-config/dubbo-config-api/src}/test/java/org/apache/dubbo/config/MonitorConfigTest.java (100%)
 rename {dubbo-bootstrap/src/main => dubbo-config/dubbo-config-api/src}/test/java/org/apache/dubbo/config/ProtocolConfigTest.java (100%)
 rename {dubbo-bootstrap/src/main => dubbo-config/dubbo-config-api/src}/test/java/org/apache/dubbo/config/ProviderConfigTest.java (100%)
 rename {dubbo-bootstrap/src/main => dubbo-config/dubbo-config-api/src}/test/java/org/apache/dubbo/config/ReferenceConfigTest.java (100%)
 rename {dubbo-bootstrap/src/main => dubbo-config/dubbo-config-api/src}/test/java/org/apache/dubbo/config/RegistryConfigTest.java (100%)
 rename {dubbo-bootstrap/src/main => dubbo-config/dubbo-config-api/src}/test/java/org/apache/dubbo/config/ServiceConfigTest.java (95%)
 rename {dubbo-bootstrap/src/main => dubbo-config/dubbo-config-api/src}/test/java/org/apache/dubbo/config/api/Box.java (100%)
 rename {dubbo-bootstrap/src/main => dubbo-config/dubbo-config-api/src}/test/java/org/apache/dubbo/config/api/DemoException.java (100%)
 rename {dubbo-bootstrap/src/main => dubbo-config/dubbo-config-api/src}/test/java/org/apache/dubbo/config/api/DemoService.java (100%)
 rename {dubbo-bootstrap/src/main => dubbo-config/dubbo-config-api/src}/test/java/org/apache/dubbo/config/api/Greeting.java (100%)
 rename {dubbo-bootstrap/src/main => dubbo-config/dubbo-config-api/src}/test/java/org/apache/dubbo/config/api/User.java (100%)
 rename {dubbo-bootstrap/src/main => dubbo-config/dubbo-config-api/src}/test/java/org/apache/dubbo/config/cache/CacheService.java (100%)
 rename {dubbo-bootstrap/src/main => dubbo-config/dubbo-config-api/src}/test/java/org/apache/dubbo/config/cache/CacheServiceImpl.java (100%)
 rename {dubbo-bootstrap/src/main => dubbo-config/dubbo-config-api/src}/test/java/org/apache/dubbo/config/cache/CacheTest.java (100%)
 rename {dubbo-bootstrap/src/main => dubbo-config/dubbo-config-api/src}/test/java/org/apache/dubbo/config/consumer/DemoActionByAnnotation.java (100%)
 rename {dubbo-bootstrap/src/main => dubbo-config/dubbo-config-api/src}/test/java/org/apache/dubbo/config/consumer/DemoActionBySetter.java (100%)
 rename {dubbo-bootstrap/src/main => dubbo-config/dubbo-config-api/src}/test/java/org/apache/dubbo/config/consumer/DemoInterceptor.java (100%)
 rename {dubbo-bootstrap/src/main => dubbo-config/dubbo-config-api/src}/test/java/org/apache/dubbo/config/invoker/DelegateProviderMetaDataInvokerTest.java (100%)
 rename {dubbo-bootstrap/src/main => dubbo-config/dubbo-config-api/src}/test/java/org/apache/dubbo/config/mock/GreetingLocal1.java (100%)
 rename {dubbo-bootstrap/src/main => dubbo-config/dubbo-config-api/src}/test/java/org/apache/dubbo/config/mock/GreetingLocal2.java (100%)
 rename {dubbo-bootstrap/src/main => dubbo-config/dubbo-config-api/src}/test/java/org/apache/dubbo/config/mock/GreetingLocal3.java (100%)
 rename {dubbo-bootstrap/src/main => dubbo-config/dubbo-config-api/src}/test/java/org/apache/dubbo/config/mock/GreetingMock1.java (100%)
 rename {dubbo-bootstrap/src/main => dubbo-config/dubbo-config-api/src}/test/java/org/apache/dubbo/config/mock/GreetingMock2.java (100%)
 rename {dubbo-bootstrap/src/main => dubbo-config/dubbo-config-api/src}/test/java/org/apache/dubbo/config/mock/MockCluster.java (100%)
 rename {dubbo-bootstrap/src/main => dubbo-config/dubbo-config-api/src}/test/java/org/apache/dubbo/config/mock/MockCodec.java (100%)
 rename {dubbo-bootstrap/src/main => dubbo-config/dubbo-config-api/src}/test/java/org/apache/dubbo/config/mock/MockDispatcher.java (100%)
 rename {dubbo-bootstrap/src/main => dubbo-config/dubbo-config-api/src}/test/java/org/apache/dubbo/config/mock/MockExchanger.java (100%)
 rename {dubbo-bootstrap/src/main => dubbo-config/dubbo-config-api/src}/test/java/org/apache/dubbo/config/mock/MockExporterListener.java (100%)
 rename {dubbo-bootstrap/src/main => dubbo-config/dubbo-config-api/src}/test/java/org/apache/dubbo/config/mock/MockFilter.java (100%)
 rename {dubbo-bootstrap/src/main => dubbo-config/dubbo-config-api/src}/test/java/org/apache/dubbo/config/mock/MockInvokerListener.java (100%)
 rename {dubbo-bootstrap/src/main => dubbo-config/dubbo-config-api/src}/test/java/org/apache/dubbo/config/mock/MockLoadBalance.java (100%)
 rename {dubbo-bootstrap/src/main => dubbo-config/dubbo-config-api/src}/test/java/org/apache/dubbo/config/mock/MockProtocol.java (100%)
 rename {dubbo-bootstrap/src/main => dubbo-config/dubbo-config-api/src}/test/java/org/apache/dubbo/config/mock/MockProtocol2.java (100%)
 rename {dubbo-bootstrap/src/main => dubbo-config/dubbo-config-api/src}/test/java/org/apache/dubbo/config/mock/MockProxyFactory.java (100%)
 rename {dubbo-bootstrap/src/main => dubbo-config/dubbo-config-api/src}/test/java/org/apache/dubbo/config/mock/MockRegistry.java (100%)
 rename {dubbo-bootstrap/src/main => dubbo-config/dubbo-config-api/src}/test/java/org/apache/dubbo/config/mock/MockRegistryFactory.java (100%)
 rename {dubbo-bootstrap/src/main => dubbo-config/dubbo-config-api/src}/test/java/org/apache/dubbo/config/mock/MockRegistryFactory2.java (100%)
 rename {dubbo-bootstrap/src/main => dubbo-config/dubbo-config-api/src}/test/java/org/apache/dubbo/config/mock/MockStatusChecker.java (100%)
 rename {dubbo-bootstrap/src/main => dubbo-config/dubbo-config-api/src}/test/java/org/apache/dubbo/config/mock/MockTelnetHandler.java (100%)
 rename {dubbo-bootstrap/src/main => dubbo-config/dubbo-config-api/src}/test/java/org/apache/dubbo/config/mock/MockThreadPool.java (100%)
 rename {dubbo-bootstrap/src/main => dubbo-config/dubbo-config-api/src}/test/java/org/apache/dubbo/config/mock/MockTransporter.java (100%)
 rename {dubbo-bootstrap/src/main => dubbo-config/dubbo-config-api/src}/test/java/org/apache/dubbo/config/mock/TestProxyFactory.java (100%)
 rename {dubbo-bootstrap/src/main => dubbo-config/dubbo-config-api/src}/test/java/org/apache/dubbo/config/provider/impl/DemoServiceImpl.java (100%)
 rename {dubbo-bootstrap/src/main => dubbo-config/dubbo-config-api/src}/test/java/org/apache/dubbo/config/url/ExporterSideConfigUrlTest.java (100%)
 rename {dubbo-bootstrap/src/main => dubbo-config/dubbo-config-api/src}/test/java/org/apache/dubbo/config/url/InvokerSideConfigUrlTest.java (100%)
 rename {dubbo-bootstrap/src/main => dubbo-config/dubbo-config-api/src}/test/java/org/apache/dubbo/config/url/RpcConfigGetSetProxy.java (100%)
 rename {dubbo-bootstrap/src/main => dubbo-config/dubbo-config-api/src}/test/java/org/apache/dubbo/config/url/UrlTestBase.java (100%)
 rename {dubbo-bootstrap/src/main => dubbo-config/dubbo-config-api/src}/test/java/org/apache/dubbo/config/utils/MockReferenceConfig.java (100%)
 rename {dubbo-bootstrap/src/main => dubbo-config/dubbo-config-api/src}/test/java/org/apache/dubbo/config/utils/ReferenceConfigCacheTest.java (100%)
 rename {dubbo-bootstrap/src/main => dubbo-config/dubbo-config-api/src}/test/java/org/apache/dubbo/config/validation/ValidationParameter.java (100%)
 rename {dubbo-bootstrap/src/main => dubbo-config/dubbo-config-api/src}/test/java/org/apache/dubbo/config/validation/ValidationService.java (100%)
 rename {dubbo-bootstrap/src/main => dubbo-config/dubbo-config-api/src}/test/java/org/apache/dubbo/config/validation/ValidationServiceImpl.java (100%)
 rename {dubbo-bootstrap/src/main => dubbo-config/dubbo-config-api/src}/test/java/org/apache/dubbo/config/validation/ValidationTest.java (100%)
 rename {dubbo-bootstrap/src/main => dubbo-config/dubbo-config-api/src}/test/resources/META-INF/services/org.apache.dubbo.common.status.StatusChecker (100%)
 rename {dubbo-bootstrap/src/main => dubbo-config/dubbo-config-api/src}/test/resources/META-INF/services/org.apache.dubbo.common.threadpool.ThreadPool (100%)
 rename {dubbo-bootstrap/src/main => dubbo-config/dubbo-config-api/src}/test/resources/META-INF/services/org.apache.dubbo.registry.RegistryFactory (100%)
 rename {dubbo-bootstrap/src/main => dubbo-config/dubbo-config-api/src}/test/resources/META-INF/services/org.apache.dubbo.remoting.Codec (100%)
 rename {dubbo-bootstrap/src/main => dubbo-config/dubbo-config-api/src}/test/resources/META-INF/services/org.apache.dubbo.remoting.Dispatcher (100%)
 rename {dubbo-bootstrap/src/main => dubbo-config/dubbo-config-api/src}/test/resources/META-INF/services/org.apache.dubbo.remoting.Transporter (100%)
 rename {dubbo-bootstrap/src/main => dubbo-config/dubbo-config-api/src}/test/resources/META-INF/services/org.apache.dubbo.remoting.exchange.Exchanger (100%)
 rename {dubbo-bootstrap/src/main => dubbo-config/dubbo-config-api/src}/test/resources/META-INF/services/org.apache.dubbo.remoting.telnet.TelnetHandler (100%)
 rename {dubbo-bootstrap/src/main => dubbo-config/dubbo-config-api/src}/test/resources/META-INF/services/org.apache.dubbo.rpc.ExporterListener (100%)
 rename {dubbo-bootstrap/src/main => dubbo-config/dubbo-config-api/src}/test/resources/META-INF/services/org.apache.dubbo.rpc.Filter (100%)
 rename {dubbo-bootstrap/src/main => dubbo-config/dubbo-config-api/src}/test/resources/META-INF/services/org.apache.dubbo.rpc.InvokerListener (100%)
 rename {dubbo-bootstrap/src/main => dubbo-config/dubbo-config-api/src}/test/resources/META-INF/services/org.apache.dubbo.rpc.Protocol (100%)
 rename {dubbo-bootstrap/src/main => dubbo-config/dubbo-config-api/src}/test/resources/META-INF/services/org.apache.dubbo.rpc.ProxyFactory (100%)
 rename {dubbo-bootstrap/src/main => dubbo-config/dubbo-config-api/src}/test/resources/META-INF/services/org.apache.dubbo.rpc.cluster.Cluster (100%)
 rename {dubbo-bootstrap/src/main => dubbo-config/dubbo-config-api/src}/test/resources/META-INF/services/org.apache.dubbo.rpc.cluster.LoadBalance (100%)
 rename {dubbo-bootstrap/src/main => dubbo-config/dubbo-config-api/src}/test/resources/log4j.xml (100%)
 delete mode 100644 dubbo-config/dubbo-config-spring/src/main/java/org/apache/dubbo/config/spring/initializer/DubboApplicationContextInitializer.java
 delete mode 100644 dubbo-config/dubbo-config-spring/src/main/java/org/apache/dubbo/config/spring/initializer/DubboApplicationListener.java
 delete mode 100644 dubbo-config/dubbo-config-spring/src/main/java/org/apache/dubbo/config/spring/initializer/DubboContextListener.java
 delete mode 100644 dubbo-config/dubbo-config-spring/src/main/resources/META-INF/web-fragment.xml
 delete mode 100644 dubbo-config/dubbo-config-spring/src/test/java/org/apache/dubbo/config/spring/initializer/DubboApplicationContextInitializerTest.java
 delete mode 100644 dubbo-config/dubbo-config-spring/src/test/java/org/apache/dubbo/config/spring/initializer/DubboApplicationListenerTest.java
 delete mode 100644 dubbo-governance/dubbo-governance-api/src/main/java/org/apache/dubbo/governance/DynamicConfigurationFactory.java
 delete mode 100644 dubbo-governance/dubbo-governance-api/src/main/java/org/apache/dubbo/governance/support/nop/NopDynamicConfigurationFactory.java
 delete mode 100644 dubbo-governance/dubbo-governance-apollo/src/main/java/org/apache/dubbo/governance/support/apollo/ApolloDynamicConfigurationFactory.java
 delete mode 100644 dubbo-governance/dubbo-governance-zookeeper/src/main/java/org/apache/dubbo/governance/support/archaius/ArchaiusDynamicConfigurationFactory.java
 create mode 100644 dubbo-remoting/dubbo-remoting-api/src/main/java/org/apache/dubbo/remoting/exchange/support/header/AbstractTimerTask.java
 delete mode 100644 dubbo-remoting/dubbo-remoting-api/src/main/java/org/apache/dubbo/remoting/exchange/support/header/HeartBeatTask.java
 create mode 100644 dubbo-remoting/dubbo-remoting-api/src/main/java/org/apache/dubbo/remoting/exchange/support/header/HeartbeatTimerTask.java
 create mode 100644 dubbo-remoting/dubbo-remoting-api/src/main/java/org/apache/dubbo/remoting/exchange/support/header/ReconnectTimerTask.java


[incubator-dubbo] 02/04: solve dubbo-bootstrap conficts after merged master

Posted by li...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

liujun pushed a commit to branch dev-metadata
in repository https://gitbox.apache.org/repos/asf/incubator-dubbo.git

commit 0d0c955eee40528fd87d856c402724c103835607
Author: ken.lj <ke...@gmail.com>
AuthorDate: Thu Nov 15 14:52:50 2018 +0800

    solve dubbo-bootstrap conficts after merged master
---
 dubbo-all/pom.xml                                  |  14 ---
 dubbo-bootstrap/pom.xml                            | 111 ---------------------
 .../org/apache/dubbo/bootstrap/DubboBootstrap.java | 110 --------------------
 .../org/apache/dubbo/config/AbstractConfig.java    |   3 +
 .../apache/dubbo/config}/DubboShutdownHook.java    |   2 +-
 .../apache/dubbo/config/AbstractConfigTest.java    |   0
 .../dubbo/config/AbstractInterfaceConfigTest.java  |   0
 .../dubbo/config/AbstractMethodConfigTest.java     |   0
 .../dubbo/config/AbstractReferenceConfigTest.java  |   0
 .../dubbo/config/AbstractServiceConfigTest.java    |   0
 .../apache/dubbo/config/ApplicationConfigTest.java |   0
 .../apache/dubbo/config/ArgumentConfigTest.java    |   0
 .../apache/dubbo/config/ConsumerConfigTest.java    |   0
 .../apache/dubbo/config/GenericServiceTest.java    |   0
 .../org/apache/dubbo/config/MethodConfigTest.java  |   0
 .../org/apache/dubbo/config/ModuleConfigTest.java  |   0
 .../org/apache/dubbo/config/MonitorConfigTest.java |   0
 .../apache/dubbo/config/ProtocolConfigTest.java    |   0
 .../apache/dubbo/config/ProviderConfigTest.java    |   0
 .../apache/dubbo/config/ReferenceConfigTest.java   |   0
 .../apache/dubbo/config/RegistryConfigTest.java    |   0
 .../org/apache/dubbo/config/ServiceConfigTest.java |   0
 .../test/java/org/apache/dubbo/config/api/Box.java |   0
 .../org/apache/dubbo/config/api/DemoException.java |   0
 .../org/apache/dubbo/config/api/DemoService.java   |   0
 .../java/org/apache/dubbo/config/api/Greeting.java |   0
 .../java/org/apache/dubbo/config/api/User.java     |   0
 .../apache/dubbo/config/cache/CacheService.java    |   0
 .../dubbo/config/cache/CacheServiceImpl.java       |   0
 .../org/apache/dubbo/config/cache/CacheTest.java   |   0
 .../config/consumer/DemoActionByAnnotation.java    |   0
 .../dubbo/config/consumer/DemoActionBySetter.java  |   0
 .../dubbo/config/consumer/DemoInterceptor.java     |   0
 .../DelegateProviderMetaDataInvokerTest.java       |   0
 .../apache/dubbo/config/mock/GreetingLocal1.java   |   0
 .../apache/dubbo/config/mock/GreetingLocal2.java   |   0
 .../apache/dubbo/config/mock/GreetingLocal3.java   |   0
 .../apache/dubbo/config/mock/GreetingMock1.java    |   0
 .../apache/dubbo/config/mock/GreetingMock2.java    |   0
 .../org/apache/dubbo/config/mock/MockCluster.java  |   0
 .../org/apache/dubbo/config/mock/MockCodec.java    |   0
 .../apache/dubbo/config/mock/MockDispatcher.java   |   0
 .../apache/dubbo/config/mock/MockExchanger.java    |   0
 .../dubbo/config/mock/MockExporterListener.java    |   0
 .../org/apache/dubbo/config/mock/MockFilter.java   |   0
 .../dubbo/config/mock/MockInvokerListener.java     |   0
 .../apache/dubbo/config/mock/MockLoadBalance.java  |   0
 .../org/apache/dubbo/config/mock/MockProtocol.java |   0
 .../apache/dubbo/config/mock/MockProtocol2.java    |   0
 .../apache/dubbo/config/mock/MockProxyFactory.java |   0
 .../org/apache/dubbo/config/mock/MockRegistry.java |   0
 .../dubbo/config/mock/MockRegistryFactory.java     |   0
 .../dubbo/config/mock/MockRegistryFactory2.java    |   0
 .../dubbo/config/mock/MockStatusChecker.java       |   0
 .../dubbo/config/mock/MockTelnetHandler.java       |   0
 .../apache/dubbo/config/mock/MockThreadPool.java   |   0
 .../apache/dubbo/config/mock/MockTransporter.java  |   0
 .../apache/dubbo/config/mock/TestProxyFactory.java |   0
 .../config/provider/impl/DemoServiceImpl.java      |   0
 .../config/url/ExporterSideConfigUrlTest.java      |   0
 .../dubbo/config/url/InvokerSideConfigUrlTest.java |   0
 .../dubbo/config/url/RpcConfigGetSetProxy.java     |   0
 .../org/apache/dubbo/config/url/UrlTestBase.java   |   0
 .../dubbo/config/utils/MockReferenceConfig.java    |   0
 .../config/utils/ReferenceConfigCacheTest.java     |   0
 .../config/validation/ValidationParameter.java     |   0
 .../dubbo/config/validation/ValidationService.java |   0
 .../config/validation/ValidationServiceImpl.java   |   0
 .../dubbo/config/validation/ValidationTest.java    |   0
 .../org.apache.dubbo.common.status.StatusChecker   |   0
 .../org.apache.dubbo.common.threadpool.ThreadPool  |   0
 .../org.apache.dubbo.registry.RegistryFactory      |   0
 .../services/org.apache.dubbo.remoting.Codec       |   0
 .../services/org.apache.dubbo.remoting.Dispatcher  |   0
 .../services/org.apache.dubbo.remoting.Transporter |   0
 .../org.apache.dubbo.remoting.exchange.Exchanger   |   0
 .../org.apache.dubbo.remoting.telnet.TelnetHandler |   0
 .../services/org.apache.dubbo.rpc.ExporterListener |   0
 .../META-INF/services/org.apache.dubbo.rpc.Filter  |   0
 .../services/org.apache.dubbo.rpc.InvokerListener  |   0
 .../services/org.apache.dubbo.rpc.Protocol         |   0
 .../services/org.apache.dubbo.rpc.ProxyFactory     |   0
 .../services/org.apache.dubbo.rpc.cluster.Cluster  |   0
 .../org.apache.dubbo.rpc.cluster.LoadBalance       |   0
 .../src/main/test/resources/log4j.xml              |   0
 .../governance/DynamicConfigurationFactory.java    |  35 -------
 .../nop/NopDynamicConfigurationFactory.java        |  42 --------
 .../apollo/ApolloDynamicConfigurationFactory.java  |  46 ---------
 .../ArchaiusDynamicConfigurationFactory.java       |  44 --------
 dubbo-registry/dubbo-registry-api/pom.xml          |   5 -
 90 files changed, 4 insertions(+), 408 deletions(-)

diff --git a/dubbo-all/pom.xml b/dubbo-all/pom.xml
index e7ac32e..620348d 100644
--- a/dubbo-all/pom.xml
+++ b/dubbo-all/pom.xml
@@ -327,13 +327,6 @@
         </dependency>
         <dependency>
             <groupId>org.apache.dubbo</groupId>
-            <artifactId>dubbo-bootstrap</artifactId>
-            <version>${project.version}</version>
-            <scope>compile</scope>
-            <optional>true</optional>
-        </dependency>
-        <dependency>
-            <groupId>org.apache.dubbo</groupId>
             <artifactId>dubbo-governance-api</artifactId>
             <version>${project.version}</version>
             <scope>compile</scope>
@@ -460,7 +453,6 @@
                                     <include>org.apache.dubbo:dubbo-serialization-kryo</include>
                                     <include>org.apache.dubbo:dubbo-serialization-jdk</include>
                                     <include>org.apache.dubbo:dubbo-serialization-protostuff</include>
-                                    <include>org.apache.dubbo:dubbo-bootstrap</include>
                                     <include>org.apache.dubbo:dubbo-governance-api</include>
                                     <include>org.apache.dubbo:dubbo-governance-apollo</include>
                                     <include>org.apache.dubbo:dubbo-governance-zookeeper</include>
@@ -586,12 +578,6 @@
                                     <resource>META-INF/dubbo/internal/org.apache.dubbo.governance.DynamicConfiguration
                                     </resource>
                                 </transformer>
-                                <transformer
-                                        implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer">
-                                    <resource>
-                                        META-INF/dubbo/internal/org.apache.dubbo.governance.DynamicConfigurationFactory
-                                    </resource>
-                                </transformer>
                             </transformers>
                         </configuration>
                     </execution>
diff --git a/dubbo-bootstrap/pom.xml b/dubbo-bootstrap/pom.xml
deleted file mode 100644
index c01861b..0000000
--- a/dubbo-bootstrap/pom.xml
+++ /dev/null
@@ -1,111 +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.
-  -->
-<project xmlns="http://maven.apache.org/POM/4.0.0"
-         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-    <parent>
-        <artifactId>dubbo-parent</artifactId>
-        <groupId>org.apache.dubbo</groupId>
-        <version>2.7.0-SNAPSHOT</version>
-    </parent>
-    <modelVersion>4.0.0</modelVersion>
-
-    <artifactId>dubbo-bootstrap</artifactId>
-
-
-    <dependencies>
-        <dependency>
-            <groupId>org.apache.dubbo</groupId>
-            <artifactId>dubbo-config-api</artifactId>
-            <version>${project.parent.version}</version>
-        </dependency>
-        <dependency>
-            <groupId>org.apache.dubbo</groupId>
-            <artifactId>dubbo-common</artifactId>
-            <version>${project.parent.version}</version>
-        </dependency>
-        <dependency>
-            <groupId>org.apache.dubbo</groupId>
-            <artifactId>dubbo-registry-api</artifactId>
-            <version>${project.parent.version}</version>
-        </dependency>
-
-        <dependency>
-            <groupId>org.apache.dubbo</groupId>
-            <artifactId>dubbo-monitor-default</artifactId>
-            <version>${project.parent.version}</version>
-            <scope>test</scope>
-        </dependency>
-        <dependency>
-            <groupId>org.apache.dubbo</groupId>
-            <artifactId>dubbo-rpc-dubbo</artifactId>
-            <version>${project.parent.version}</version>
-            <scope>test</scope>
-        </dependency>
-        <dependency>
-            <groupId>org.apache.dubbo</groupId>
-            <artifactId>dubbo-rpc-rmi</artifactId>
-            <version>${project.parent.version}</version>
-            <scope>test</scope>
-        </dependency>
-        <dependency>
-            <groupId>org.apache.dubbo</groupId>
-            <artifactId>dubbo-remoting-netty4</artifactId>
-            <version>${project.parent.version}</version>
-            <scope>test</scope>
-        </dependency>
-        <dependency>
-            <groupId>javax.validation</groupId>
-            <artifactId>validation-api</artifactId>
-            <scope>test</scope>
-        </dependency>
-        <dependency>
-            <groupId>org.hibernate</groupId>
-            <artifactId>hibernate-validator</artifactId>
-            <scope>test</scope>
-        </dependency>
-        <dependency>
-            <groupId>org.glassfish</groupId>
-            <artifactId>javax.el</artifactId>
-            <scope>test</scope>
-        </dependency>
-        <dependency>
-            <groupId>org.apache.dubbo</groupId>
-            <artifactId>dubbo-registry-default</artifactId>
-            <version>${project.parent.version}</version>
-            <scope>test</scope>
-        </dependency>
-        <dependency>
-            <groupId>org.apache.dubbo</groupId>
-            <artifactId>dubbo-registry-multicast</artifactId>
-            <version>${project.parent.version}</version>
-            <scope>test</scope>
-        </dependency>
-        <dependency>
-            <groupId>org.apache.dubbo</groupId>
-            <artifactId>dubbo-serialization-hessian2</artifactId>
-            <version>${project.parent.version}</version>
-            <scope>test</scope>
-        </dependency>
-        <dependency>
-            <groupId>org.apache.dubbo</groupId>
-            <artifactId>dubbo-serialization-jdk</artifactId>
-            <version>${project.parent.version}</version>
-            <scope>test</scope>
-        </dependency>
-    </dependencies>
-</project>
\ No newline at end of file
diff --git a/dubbo-bootstrap/src/main/java/org/apache/dubbo/bootstrap/DubboBootstrap.java b/dubbo-bootstrap/src/main/java/org/apache/dubbo/bootstrap/DubboBootstrap.java
deleted file mode 100644
index 8334c21..0000000
--- a/dubbo-bootstrap/src/main/java/org/apache/dubbo/bootstrap/DubboBootstrap.java
+++ /dev/null
@@ -1,110 +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.bootstrap;
-
-import org.apache.dubbo.config.ServiceConfig;
-
-import java.util.ArrayList;
-import java.util.List;
-
-/**
- * A bootstrap class to easily start and stop Dubbo via programmatic API.
- * The bootstrap class will be responsible to cleanup the resources during stop.
- */
-public class DubboBootstrap {
-
-    /**
-     * The list of ServiceConfig
-     */
-    private List<ServiceConfig> serviceConfigList;
-
-    /**
-     * Whether register the shutdown hook during start?
-     */
-    private final boolean registerShutdownHookOnStart;
-
-    /**
-     * The shutdown hook used when Dubbo is running under embedded environment
-     */
-    private DubboShutdownHook shutdownHook;
-
-    public DubboBootstrap() {
-        this(true, DubboShutdownHook.getDubboShutdownHook());
-    }
-
-    public DubboBootstrap(boolean registerShutdownHookOnStart) {
-        this(registerShutdownHookOnStart, DubboShutdownHook.getDubboShutdownHook());
-    }
-
-    public DubboBootstrap(boolean registerShutdownHookOnStart, DubboShutdownHook shutdownHook) {
-        this.serviceConfigList = new ArrayList<ServiceConfig>();
-        this.shutdownHook = shutdownHook;
-        this.registerShutdownHookOnStart = registerShutdownHookOnStart;
-    }
-
-    /**
-     * Register service config to bootstrap, which will be called during {@link DubboBootstrap#stop()}
-     * @param serviceConfig the service
-     * @return the bootstrap instance
-     */
-    public DubboBootstrap registerServiceConfig(ServiceConfig serviceConfig) {
-        serviceConfigList.add(serviceConfig);
-        return this;
-    }
-
-    public void start() {
-        if (registerShutdownHookOnStart) {
-            registerShutdownHook();
-        } else {
-            // DubboShutdown hook has been registered in AbstractConfig,
-            // we need to remove it explicitly
-            removeShutdownHook();
-        }
-        for (ServiceConfig serviceConfig: serviceConfigList) {
-            serviceConfig.export();
-        }
-    }
-
-    public void stop() {
-        for (ServiceConfig serviceConfig: serviceConfigList) {
-            serviceConfig.unexport();
-        }
-        shutdownHook.destroyAll();
-        if (registerShutdownHookOnStart) {
-            removeShutdownHook();
-        }
-    }
-
-    /**
-     * Register the shutdown hook
-     */
-    public void registerShutdownHook() {
-        Runtime.getRuntime().addShutdownHook(shutdownHook);
-    }
-
-    /**
-     * Remove this shutdown hook
-     */
-    public void removeShutdownHook() {
-        try {
-            Runtime.getRuntime().removeShutdownHook(shutdownHook);
-        }
-        catch (IllegalStateException ex) {
-            // ignore - VM is already shutting down
-        }
-    }
-}
diff --git a/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/AbstractConfig.java b/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/AbstractConfig.java
index 5af184d..a883973 100644
--- a/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/AbstractConfig.java
+++ b/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/AbstractConfig.java
@@ -78,6 +78,9 @@ public abstract class AbstractConfig implements Serializable {
         legacyProperties.put("dubbo.consumer.retries", "dubbo.service.max.retry.providers");
         legacyProperties.put("dubbo.consumer.check", "dubbo.service.allow.no.provider");
         legacyProperties.put("dubbo.service.url", "dubbo.service.address");
+
+        // this is only for compatibility
+        Runtime.getRuntime().addShutdownHook(DubboShutdownHook.getDubboShutdownHook());
     }
 
     protected String id;
diff --git a/dubbo-bootstrap/src/main/java/org/apache/dubbo/bootstrap/DubboShutdownHook.java b/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/DubboShutdownHook.java
similarity index 98%
rename from dubbo-bootstrap/src/main/java/org/apache/dubbo/bootstrap/DubboShutdownHook.java
rename to dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/DubboShutdownHook.java
index 11a846b..90ed237 100644
--- a/dubbo-bootstrap/src/main/java/org/apache/dubbo/bootstrap/DubboShutdownHook.java
+++ b/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/DubboShutdownHook.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.dubbo.bootstrap;
+package org.apache.dubbo.config;
 
 import org.apache.dubbo.common.extension.ExtensionLoader;
 import org.apache.dubbo.common.logger.Logger;
diff --git a/dubbo-bootstrap/src/main/test/java/org/apache/dubbo/config/AbstractConfigTest.java b/dubbo-config/dubbo-config-api/src/main/test/java/org/apache/dubbo/config/AbstractConfigTest.java
similarity index 100%
rename from dubbo-bootstrap/src/main/test/java/org/apache/dubbo/config/AbstractConfigTest.java
rename to dubbo-config/dubbo-config-api/src/main/test/java/org/apache/dubbo/config/AbstractConfigTest.java
diff --git a/dubbo-bootstrap/src/main/test/java/org/apache/dubbo/config/AbstractInterfaceConfigTest.java b/dubbo-config/dubbo-config-api/src/main/test/java/org/apache/dubbo/config/AbstractInterfaceConfigTest.java
similarity index 100%
rename from dubbo-bootstrap/src/main/test/java/org/apache/dubbo/config/AbstractInterfaceConfigTest.java
rename to dubbo-config/dubbo-config-api/src/main/test/java/org/apache/dubbo/config/AbstractInterfaceConfigTest.java
diff --git a/dubbo-bootstrap/src/main/test/java/org/apache/dubbo/config/AbstractMethodConfigTest.java b/dubbo-config/dubbo-config-api/src/main/test/java/org/apache/dubbo/config/AbstractMethodConfigTest.java
similarity index 100%
rename from dubbo-bootstrap/src/main/test/java/org/apache/dubbo/config/AbstractMethodConfigTest.java
rename to dubbo-config/dubbo-config-api/src/main/test/java/org/apache/dubbo/config/AbstractMethodConfigTest.java
diff --git a/dubbo-bootstrap/src/main/test/java/org/apache/dubbo/config/AbstractReferenceConfigTest.java b/dubbo-config/dubbo-config-api/src/main/test/java/org/apache/dubbo/config/AbstractReferenceConfigTest.java
similarity index 100%
rename from dubbo-bootstrap/src/main/test/java/org/apache/dubbo/config/AbstractReferenceConfigTest.java
rename to dubbo-config/dubbo-config-api/src/main/test/java/org/apache/dubbo/config/AbstractReferenceConfigTest.java
diff --git a/dubbo-bootstrap/src/main/test/java/org/apache/dubbo/config/AbstractServiceConfigTest.java b/dubbo-config/dubbo-config-api/src/main/test/java/org/apache/dubbo/config/AbstractServiceConfigTest.java
similarity index 100%
rename from dubbo-bootstrap/src/main/test/java/org/apache/dubbo/config/AbstractServiceConfigTest.java
rename to dubbo-config/dubbo-config-api/src/main/test/java/org/apache/dubbo/config/AbstractServiceConfigTest.java
diff --git a/dubbo-bootstrap/src/main/test/java/org/apache/dubbo/config/ApplicationConfigTest.java b/dubbo-config/dubbo-config-api/src/main/test/java/org/apache/dubbo/config/ApplicationConfigTest.java
similarity index 100%
rename from dubbo-bootstrap/src/main/test/java/org/apache/dubbo/config/ApplicationConfigTest.java
rename to dubbo-config/dubbo-config-api/src/main/test/java/org/apache/dubbo/config/ApplicationConfigTest.java
diff --git a/dubbo-bootstrap/src/main/test/java/org/apache/dubbo/config/ArgumentConfigTest.java b/dubbo-config/dubbo-config-api/src/main/test/java/org/apache/dubbo/config/ArgumentConfigTest.java
similarity index 100%
rename from dubbo-bootstrap/src/main/test/java/org/apache/dubbo/config/ArgumentConfigTest.java
rename to dubbo-config/dubbo-config-api/src/main/test/java/org/apache/dubbo/config/ArgumentConfigTest.java
diff --git a/dubbo-bootstrap/src/main/test/java/org/apache/dubbo/config/ConsumerConfigTest.java b/dubbo-config/dubbo-config-api/src/main/test/java/org/apache/dubbo/config/ConsumerConfigTest.java
similarity index 100%
rename from dubbo-bootstrap/src/main/test/java/org/apache/dubbo/config/ConsumerConfigTest.java
rename to dubbo-config/dubbo-config-api/src/main/test/java/org/apache/dubbo/config/ConsumerConfigTest.java
diff --git a/dubbo-bootstrap/src/main/test/java/org/apache/dubbo/config/GenericServiceTest.java b/dubbo-config/dubbo-config-api/src/main/test/java/org/apache/dubbo/config/GenericServiceTest.java
similarity index 100%
rename from dubbo-bootstrap/src/main/test/java/org/apache/dubbo/config/GenericServiceTest.java
rename to dubbo-config/dubbo-config-api/src/main/test/java/org/apache/dubbo/config/GenericServiceTest.java
diff --git a/dubbo-bootstrap/src/main/test/java/org/apache/dubbo/config/MethodConfigTest.java b/dubbo-config/dubbo-config-api/src/main/test/java/org/apache/dubbo/config/MethodConfigTest.java
similarity index 100%
rename from dubbo-bootstrap/src/main/test/java/org/apache/dubbo/config/MethodConfigTest.java
rename to dubbo-config/dubbo-config-api/src/main/test/java/org/apache/dubbo/config/MethodConfigTest.java
diff --git a/dubbo-bootstrap/src/main/test/java/org/apache/dubbo/config/ModuleConfigTest.java b/dubbo-config/dubbo-config-api/src/main/test/java/org/apache/dubbo/config/ModuleConfigTest.java
similarity index 100%
rename from dubbo-bootstrap/src/main/test/java/org/apache/dubbo/config/ModuleConfigTest.java
rename to dubbo-config/dubbo-config-api/src/main/test/java/org/apache/dubbo/config/ModuleConfigTest.java
diff --git a/dubbo-bootstrap/src/main/test/java/org/apache/dubbo/config/MonitorConfigTest.java b/dubbo-config/dubbo-config-api/src/main/test/java/org/apache/dubbo/config/MonitorConfigTest.java
similarity index 100%
rename from dubbo-bootstrap/src/main/test/java/org/apache/dubbo/config/MonitorConfigTest.java
rename to dubbo-config/dubbo-config-api/src/main/test/java/org/apache/dubbo/config/MonitorConfigTest.java
diff --git a/dubbo-bootstrap/src/main/test/java/org/apache/dubbo/config/ProtocolConfigTest.java b/dubbo-config/dubbo-config-api/src/main/test/java/org/apache/dubbo/config/ProtocolConfigTest.java
similarity index 100%
rename from dubbo-bootstrap/src/main/test/java/org/apache/dubbo/config/ProtocolConfigTest.java
rename to dubbo-config/dubbo-config-api/src/main/test/java/org/apache/dubbo/config/ProtocolConfigTest.java
diff --git a/dubbo-bootstrap/src/main/test/java/org/apache/dubbo/config/ProviderConfigTest.java b/dubbo-config/dubbo-config-api/src/main/test/java/org/apache/dubbo/config/ProviderConfigTest.java
similarity index 100%
rename from dubbo-bootstrap/src/main/test/java/org/apache/dubbo/config/ProviderConfigTest.java
rename to dubbo-config/dubbo-config-api/src/main/test/java/org/apache/dubbo/config/ProviderConfigTest.java
diff --git a/dubbo-bootstrap/src/main/test/java/org/apache/dubbo/config/ReferenceConfigTest.java b/dubbo-config/dubbo-config-api/src/main/test/java/org/apache/dubbo/config/ReferenceConfigTest.java
similarity index 100%
rename from dubbo-bootstrap/src/main/test/java/org/apache/dubbo/config/ReferenceConfigTest.java
rename to dubbo-config/dubbo-config-api/src/main/test/java/org/apache/dubbo/config/ReferenceConfigTest.java
diff --git a/dubbo-bootstrap/src/main/test/java/org/apache/dubbo/config/RegistryConfigTest.java b/dubbo-config/dubbo-config-api/src/main/test/java/org/apache/dubbo/config/RegistryConfigTest.java
similarity index 100%
rename from dubbo-bootstrap/src/main/test/java/org/apache/dubbo/config/RegistryConfigTest.java
rename to dubbo-config/dubbo-config-api/src/main/test/java/org/apache/dubbo/config/RegistryConfigTest.java
diff --git a/dubbo-bootstrap/src/main/test/java/org/apache/dubbo/config/ServiceConfigTest.java b/dubbo-config/dubbo-config-api/src/main/test/java/org/apache/dubbo/config/ServiceConfigTest.java
similarity index 100%
rename from dubbo-bootstrap/src/main/test/java/org/apache/dubbo/config/ServiceConfigTest.java
rename to dubbo-config/dubbo-config-api/src/main/test/java/org/apache/dubbo/config/ServiceConfigTest.java
diff --git a/dubbo-bootstrap/src/main/test/java/org/apache/dubbo/config/api/Box.java b/dubbo-config/dubbo-config-api/src/main/test/java/org/apache/dubbo/config/api/Box.java
similarity index 100%
rename from dubbo-bootstrap/src/main/test/java/org/apache/dubbo/config/api/Box.java
rename to dubbo-config/dubbo-config-api/src/main/test/java/org/apache/dubbo/config/api/Box.java
diff --git a/dubbo-bootstrap/src/main/test/java/org/apache/dubbo/config/api/DemoException.java b/dubbo-config/dubbo-config-api/src/main/test/java/org/apache/dubbo/config/api/DemoException.java
similarity index 100%
rename from dubbo-bootstrap/src/main/test/java/org/apache/dubbo/config/api/DemoException.java
rename to dubbo-config/dubbo-config-api/src/main/test/java/org/apache/dubbo/config/api/DemoException.java
diff --git a/dubbo-bootstrap/src/main/test/java/org/apache/dubbo/config/api/DemoService.java b/dubbo-config/dubbo-config-api/src/main/test/java/org/apache/dubbo/config/api/DemoService.java
similarity index 100%
rename from dubbo-bootstrap/src/main/test/java/org/apache/dubbo/config/api/DemoService.java
rename to dubbo-config/dubbo-config-api/src/main/test/java/org/apache/dubbo/config/api/DemoService.java
diff --git a/dubbo-bootstrap/src/main/test/java/org/apache/dubbo/config/api/Greeting.java b/dubbo-config/dubbo-config-api/src/main/test/java/org/apache/dubbo/config/api/Greeting.java
similarity index 100%
rename from dubbo-bootstrap/src/main/test/java/org/apache/dubbo/config/api/Greeting.java
rename to dubbo-config/dubbo-config-api/src/main/test/java/org/apache/dubbo/config/api/Greeting.java
diff --git a/dubbo-bootstrap/src/main/test/java/org/apache/dubbo/config/api/User.java b/dubbo-config/dubbo-config-api/src/main/test/java/org/apache/dubbo/config/api/User.java
similarity index 100%
rename from dubbo-bootstrap/src/main/test/java/org/apache/dubbo/config/api/User.java
rename to dubbo-config/dubbo-config-api/src/main/test/java/org/apache/dubbo/config/api/User.java
diff --git a/dubbo-bootstrap/src/main/test/java/org/apache/dubbo/config/cache/CacheService.java b/dubbo-config/dubbo-config-api/src/main/test/java/org/apache/dubbo/config/cache/CacheService.java
similarity index 100%
rename from dubbo-bootstrap/src/main/test/java/org/apache/dubbo/config/cache/CacheService.java
rename to dubbo-config/dubbo-config-api/src/main/test/java/org/apache/dubbo/config/cache/CacheService.java
diff --git a/dubbo-bootstrap/src/main/test/java/org/apache/dubbo/config/cache/CacheServiceImpl.java b/dubbo-config/dubbo-config-api/src/main/test/java/org/apache/dubbo/config/cache/CacheServiceImpl.java
similarity index 100%
rename from dubbo-bootstrap/src/main/test/java/org/apache/dubbo/config/cache/CacheServiceImpl.java
rename to dubbo-config/dubbo-config-api/src/main/test/java/org/apache/dubbo/config/cache/CacheServiceImpl.java
diff --git a/dubbo-bootstrap/src/main/test/java/org/apache/dubbo/config/cache/CacheTest.java b/dubbo-config/dubbo-config-api/src/main/test/java/org/apache/dubbo/config/cache/CacheTest.java
similarity index 100%
rename from dubbo-bootstrap/src/main/test/java/org/apache/dubbo/config/cache/CacheTest.java
rename to dubbo-config/dubbo-config-api/src/main/test/java/org/apache/dubbo/config/cache/CacheTest.java
diff --git a/dubbo-bootstrap/src/main/test/java/org/apache/dubbo/config/consumer/DemoActionByAnnotation.java b/dubbo-config/dubbo-config-api/src/main/test/java/org/apache/dubbo/config/consumer/DemoActionByAnnotation.java
similarity index 100%
rename from dubbo-bootstrap/src/main/test/java/org/apache/dubbo/config/consumer/DemoActionByAnnotation.java
rename to dubbo-config/dubbo-config-api/src/main/test/java/org/apache/dubbo/config/consumer/DemoActionByAnnotation.java
diff --git a/dubbo-bootstrap/src/main/test/java/org/apache/dubbo/config/consumer/DemoActionBySetter.java b/dubbo-config/dubbo-config-api/src/main/test/java/org/apache/dubbo/config/consumer/DemoActionBySetter.java
similarity index 100%
rename from dubbo-bootstrap/src/main/test/java/org/apache/dubbo/config/consumer/DemoActionBySetter.java
rename to dubbo-config/dubbo-config-api/src/main/test/java/org/apache/dubbo/config/consumer/DemoActionBySetter.java
diff --git a/dubbo-bootstrap/src/main/test/java/org/apache/dubbo/config/consumer/DemoInterceptor.java b/dubbo-config/dubbo-config-api/src/main/test/java/org/apache/dubbo/config/consumer/DemoInterceptor.java
similarity index 100%
rename from dubbo-bootstrap/src/main/test/java/org/apache/dubbo/config/consumer/DemoInterceptor.java
rename to dubbo-config/dubbo-config-api/src/main/test/java/org/apache/dubbo/config/consumer/DemoInterceptor.java
diff --git a/dubbo-bootstrap/src/main/test/java/org/apache/dubbo/config/invoker/DelegateProviderMetaDataInvokerTest.java b/dubbo-config/dubbo-config-api/src/main/test/java/org/apache/dubbo/config/invoker/DelegateProviderMetaDataInvokerTest.java
similarity index 100%
rename from dubbo-bootstrap/src/main/test/java/org/apache/dubbo/config/invoker/DelegateProviderMetaDataInvokerTest.java
rename to dubbo-config/dubbo-config-api/src/main/test/java/org/apache/dubbo/config/invoker/DelegateProviderMetaDataInvokerTest.java
diff --git a/dubbo-bootstrap/src/main/test/java/org/apache/dubbo/config/mock/GreetingLocal1.java b/dubbo-config/dubbo-config-api/src/main/test/java/org/apache/dubbo/config/mock/GreetingLocal1.java
similarity index 100%
rename from dubbo-bootstrap/src/main/test/java/org/apache/dubbo/config/mock/GreetingLocal1.java
rename to dubbo-config/dubbo-config-api/src/main/test/java/org/apache/dubbo/config/mock/GreetingLocal1.java
diff --git a/dubbo-bootstrap/src/main/test/java/org/apache/dubbo/config/mock/GreetingLocal2.java b/dubbo-config/dubbo-config-api/src/main/test/java/org/apache/dubbo/config/mock/GreetingLocal2.java
similarity index 100%
rename from dubbo-bootstrap/src/main/test/java/org/apache/dubbo/config/mock/GreetingLocal2.java
rename to dubbo-config/dubbo-config-api/src/main/test/java/org/apache/dubbo/config/mock/GreetingLocal2.java
diff --git a/dubbo-bootstrap/src/main/test/java/org/apache/dubbo/config/mock/GreetingLocal3.java b/dubbo-config/dubbo-config-api/src/main/test/java/org/apache/dubbo/config/mock/GreetingLocal3.java
similarity index 100%
rename from dubbo-bootstrap/src/main/test/java/org/apache/dubbo/config/mock/GreetingLocal3.java
rename to dubbo-config/dubbo-config-api/src/main/test/java/org/apache/dubbo/config/mock/GreetingLocal3.java
diff --git a/dubbo-bootstrap/src/main/test/java/org/apache/dubbo/config/mock/GreetingMock1.java b/dubbo-config/dubbo-config-api/src/main/test/java/org/apache/dubbo/config/mock/GreetingMock1.java
similarity index 100%
rename from dubbo-bootstrap/src/main/test/java/org/apache/dubbo/config/mock/GreetingMock1.java
rename to dubbo-config/dubbo-config-api/src/main/test/java/org/apache/dubbo/config/mock/GreetingMock1.java
diff --git a/dubbo-bootstrap/src/main/test/java/org/apache/dubbo/config/mock/GreetingMock2.java b/dubbo-config/dubbo-config-api/src/main/test/java/org/apache/dubbo/config/mock/GreetingMock2.java
similarity index 100%
rename from dubbo-bootstrap/src/main/test/java/org/apache/dubbo/config/mock/GreetingMock2.java
rename to dubbo-config/dubbo-config-api/src/main/test/java/org/apache/dubbo/config/mock/GreetingMock2.java
diff --git a/dubbo-bootstrap/src/main/test/java/org/apache/dubbo/config/mock/MockCluster.java b/dubbo-config/dubbo-config-api/src/main/test/java/org/apache/dubbo/config/mock/MockCluster.java
similarity index 100%
rename from dubbo-bootstrap/src/main/test/java/org/apache/dubbo/config/mock/MockCluster.java
rename to dubbo-config/dubbo-config-api/src/main/test/java/org/apache/dubbo/config/mock/MockCluster.java
diff --git a/dubbo-bootstrap/src/main/test/java/org/apache/dubbo/config/mock/MockCodec.java b/dubbo-config/dubbo-config-api/src/main/test/java/org/apache/dubbo/config/mock/MockCodec.java
similarity index 100%
rename from dubbo-bootstrap/src/main/test/java/org/apache/dubbo/config/mock/MockCodec.java
rename to dubbo-config/dubbo-config-api/src/main/test/java/org/apache/dubbo/config/mock/MockCodec.java
diff --git a/dubbo-bootstrap/src/main/test/java/org/apache/dubbo/config/mock/MockDispatcher.java b/dubbo-config/dubbo-config-api/src/main/test/java/org/apache/dubbo/config/mock/MockDispatcher.java
similarity index 100%
rename from dubbo-bootstrap/src/main/test/java/org/apache/dubbo/config/mock/MockDispatcher.java
rename to dubbo-config/dubbo-config-api/src/main/test/java/org/apache/dubbo/config/mock/MockDispatcher.java
diff --git a/dubbo-bootstrap/src/main/test/java/org/apache/dubbo/config/mock/MockExchanger.java b/dubbo-config/dubbo-config-api/src/main/test/java/org/apache/dubbo/config/mock/MockExchanger.java
similarity index 100%
rename from dubbo-bootstrap/src/main/test/java/org/apache/dubbo/config/mock/MockExchanger.java
rename to dubbo-config/dubbo-config-api/src/main/test/java/org/apache/dubbo/config/mock/MockExchanger.java
diff --git a/dubbo-bootstrap/src/main/test/java/org/apache/dubbo/config/mock/MockExporterListener.java b/dubbo-config/dubbo-config-api/src/main/test/java/org/apache/dubbo/config/mock/MockExporterListener.java
similarity index 100%
rename from dubbo-bootstrap/src/main/test/java/org/apache/dubbo/config/mock/MockExporterListener.java
rename to dubbo-config/dubbo-config-api/src/main/test/java/org/apache/dubbo/config/mock/MockExporterListener.java
diff --git a/dubbo-bootstrap/src/main/test/java/org/apache/dubbo/config/mock/MockFilter.java b/dubbo-config/dubbo-config-api/src/main/test/java/org/apache/dubbo/config/mock/MockFilter.java
similarity index 100%
rename from dubbo-bootstrap/src/main/test/java/org/apache/dubbo/config/mock/MockFilter.java
rename to dubbo-config/dubbo-config-api/src/main/test/java/org/apache/dubbo/config/mock/MockFilter.java
diff --git a/dubbo-bootstrap/src/main/test/java/org/apache/dubbo/config/mock/MockInvokerListener.java b/dubbo-config/dubbo-config-api/src/main/test/java/org/apache/dubbo/config/mock/MockInvokerListener.java
similarity index 100%
rename from dubbo-bootstrap/src/main/test/java/org/apache/dubbo/config/mock/MockInvokerListener.java
rename to dubbo-config/dubbo-config-api/src/main/test/java/org/apache/dubbo/config/mock/MockInvokerListener.java
diff --git a/dubbo-bootstrap/src/main/test/java/org/apache/dubbo/config/mock/MockLoadBalance.java b/dubbo-config/dubbo-config-api/src/main/test/java/org/apache/dubbo/config/mock/MockLoadBalance.java
similarity index 100%
rename from dubbo-bootstrap/src/main/test/java/org/apache/dubbo/config/mock/MockLoadBalance.java
rename to dubbo-config/dubbo-config-api/src/main/test/java/org/apache/dubbo/config/mock/MockLoadBalance.java
diff --git a/dubbo-bootstrap/src/main/test/java/org/apache/dubbo/config/mock/MockProtocol.java b/dubbo-config/dubbo-config-api/src/main/test/java/org/apache/dubbo/config/mock/MockProtocol.java
similarity index 100%
rename from dubbo-bootstrap/src/main/test/java/org/apache/dubbo/config/mock/MockProtocol.java
rename to dubbo-config/dubbo-config-api/src/main/test/java/org/apache/dubbo/config/mock/MockProtocol.java
diff --git a/dubbo-bootstrap/src/main/test/java/org/apache/dubbo/config/mock/MockProtocol2.java b/dubbo-config/dubbo-config-api/src/main/test/java/org/apache/dubbo/config/mock/MockProtocol2.java
similarity index 100%
rename from dubbo-bootstrap/src/main/test/java/org/apache/dubbo/config/mock/MockProtocol2.java
rename to dubbo-config/dubbo-config-api/src/main/test/java/org/apache/dubbo/config/mock/MockProtocol2.java
diff --git a/dubbo-bootstrap/src/main/test/java/org/apache/dubbo/config/mock/MockProxyFactory.java b/dubbo-config/dubbo-config-api/src/main/test/java/org/apache/dubbo/config/mock/MockProxyFactory.java
similarity index 100%
rename from dubbo-bootstrap/src/main/test/java/org/apache/dubbo/config/mock/MockProxyFactory.java
rename to dubbo-config/dubbo-config-api/src/main/test/java/org/apache/dubbo/config/mock/MockProxyFactory.java
diff --git a/dubbo-bootstrap/src/main/test/java/org/apache/dubbo/config/mock/MockRegistry.java b/dubbo-config/dubbo-config-api/src/main/test/java/org/apache/dubbo/config/mock/MockRegistry.java
similarity index 100%
rename from dubbo-bootstrap/src/main/test/java/org/apache/dubbo/config/mock/MockRegistry.java
rename to dubbo-config/dubbo-config-api/src/main/test/java/org/apache/dubbo/config/mock/MockRegistry.java
diff --git a/dubbo-bootstrap/src/main/test/java/org/apache/dubbo/config/mock/MockRegistryFactory.java b/dubbo-config/dubbo-config-api/src/main/test/java/org/apache/dubbo/config/mock/MockRegistryFactory.java
similarity index 100%
rename from dubbo-bootstrap/src/main/test/java/org/apache/dubbo/config/mock/MockRegistryFactory.java
rename to dubbo-config/dubbo-config-api/src/main/test/java/org/apache/dubbo/config/mock/MockRegistryFactory.java
diff --git a/dubbo-bootstrap/src/main/test/java/org/apache/dubbo/config/mock/MockRegistryFactory2.java b/dubbo-config/dubbo-config-api/src/main/test/java/org/apache/dubbo/config/mock/MockRegistryFactory2.java
similarity index 100%
rename from dubbo-bootstrap/src/main/test/java/org/apache/dubbo/config/mock/MockRegistryFactory2.java
rename to dubbo-config/dubbo-config-api/src/main/test/java/org/apache/dubbo/config/mock/MockRegistryFactory2.java
diff --git a/dubbo-bootstrap/src/main/test/java/org/apache/dubbo/config/mock/MockStatusChecker.java b/dubbo-config/dubbo-config-api/src/main/test/java/org/apache/dubbo/config/mock/MockStatusChecker.java
similarity index 100%
rename from dubbo-bootstrap/src/main/test/java/org/apache/dubbo/config/mock/MockStatusChecker.java
rename to dubbo-config/dubbo-config-api/src/main/test/java/org/apache/dubbo/config/mock/MockStatusChecker.java
diff --git a/dubbo-bootstrap/src/main/test/java/org/apache/dubbo/config/mock/MockTelnetHandler.java b/dubbo-config/dubbo-config-api/src/main/test/java/org/apache/dubbo/config/mock/MockTelnetHandler.java
similarity index 100%
rename from dubbo-bootstrap/src/main/test/java/org/apache/dubbo/config/mock/MockTelnetHandler.java
rename to dubbo-config/dubbo-config-api/src/main/test/java/org/apache/dubbo/config/mock/MockTelnetHandler.java
diff --git a/dubbo-bootstrap/src/main/test/java/org/apache/dubbo/config/mock/MockThreadPool.java b/dubbo-config/dubbo-config-api/src/main/test/java/org/apache/dubbo/config/mock/MockThreadPool.java
similarity index 100%
rename from dubbo-bootstrap/src/main/test/java/org/apache/dubbo/config/mock/MockThreadPool.java
rename to dubbo-config/dubbo-config-api/src/main/test/java/org/apache/dubbo/config/mock/MockThreadPool.java
diff --git a/dubbo-bootstrap/src/main/test/java/org/apache/dubbo/config/mock/MockTransporter.java b/dubbo-config/dubbo-config-api/src/main/test/java/org/apache/dubbo/config/mock/MockTransporter.java
similarity index 100%
rename from dubbo-bootstrap/src/main/test/java/org/apache/dubbo/config/mock/MockTransporter.java
rename to dubbo-config/dubbo-config-api/src/main/test/java/org/apache/dubbo/config/mock/MockTransporter.java
diff --git a/dubbo-bootstrap/src/main/test/java/org/apache/dubbo/config/mock/TestProxyFactory.java b/dubbo-config/dubbo-config-api/src/main/test/java/org/apache/dubbo/config/mock/TestProxyFactory.java
similarity index 100%
rename from dubbo-bootstrap/src/main/test/java/org/apache/dubbo/config/mock/TestProxyFactory.java
rename to dubbo-config/dubbo-config-api/src/main/test/java/org/apache/dubbo/config/mock/TestProxyFactory.java
diff --git a/dubbo-bootstrap/src/main/test/java/org/apache/dubbo/config/provider/impl/DemoServiceImpl.java b/dubbo-config/dubbo-config-api/src/main/test/java/org/apache/dubbo/config/provider/impl/DemoServiceImpl.java
similarity index 100%
rename from dubbo-bootstrap/src/main/test/java/org/apache/dubbo/config/provider/impl/DemoServiceImpl.java
rename to dubbo-config/dubbo-config-api/src/main/test/java/org/apache/dubbo/config/provider/impl/DemoServiceImpl.java
diff --git a/dubbo-bootstrap/src/main/test/java/org/apache/dubbo/config/url/ExporterSideConfigUrlTest.java b/dubbo-config/dubbo-config-api/src/main/test/java/org/apache/dubbo/config/url/ExporterSideConfigUrlTest.java
similarity index 100%
rename from dubbo-bootstrap/src/main/test/java/org/apache/dubbo/config/url/ExporterSideConfigUrlTest.java
rename to dubbo-config/dubbo-config-api/src/main/test/java/org/apache/dubbo/config/url/ExporterSideConfigUrlTest.java
diff --git a/dubbo-bootstrap/src/main/test/java/org/apache/dubbo/config/url/InvokerSideConfigUrlTest.java b/dubbo-config/dubbo-config-api/src/main/test/java/org/apache/dubbo/config/url/InvokerSideConfigUrlTest.java
similarity index 100%
rename from dubbo-bootstrap/src/main/test/java/org/apache/dubbo/config/url/InvokerSideConfigUrlTest.java
rename to dubbo-config/dubbo-config-api/src/main/test/java/org/apache/dubbo/config/url/InvokerSideConfigUrlTest.java
diff --git a/dubbo-bootstrap/src/main/test/java/org/apache/dubbo/config/url/RpcConfigGetSetProxy.java b/dubbo-config/dubbo-config-api/src/main/test/java/org/apache/dubbo/config/url/RpcConfigGetSetProxy.java
similarity index 100%
rename from dubbo-bootstrap/src/main/test/java/org/apache/dubbo/config/url/RpcConfigGetSetProxy.java
rename to dubbo-config/dubbo-config-api/src/main/test/java/org/apache/dubbo/config/url/RpcConfigGetSetProxy.java
diff --git a/dubbo-bootstrap/src/main/test/java/org/apache/dubbo/config/url/UrlTestBase.java b/dubbo-config/dubbo-config-api/src/main/test/java/org/apache/dubbo/config/url/UrlTestBase.java
similarity index 100%
rename from dubbo-bootstrap/src/main/test/java/org/apache/dubbo/config/url/UrlTestBase.java
rename to dubbo-config/dubbo-config-api/src/main/test/java/org/apache/dubbo/config/url/UrlTestBase.java
diff --git a/dubbo-bootstrap/src/main/test/java/org/apache/dubbo/config/utils/MockReferenceConfig.java b/dubbo-config/dubbo-config-api/src/main/test/java/org/apache/dubbo/config/utils/MockReferenceConfig.java
similarity index 100%
rename from dubbo-bootstrap/src/main/test/java/org/apache/dubbo/config/utils/MockReferenceConfig.java
rename to dubbo-config/dubbo-config-api/src/main/test/java/org/apache/dubbo/config/utils/MockReferenceConfig.java
diff --git a/dubbo-bootstrap/src/main/test/java/org/apache/dubbo/config/utils/ReferenceConfigCacheTest.java b/dubbo-config/dubbo-config-api/src/main/test/java/org/apache/dubbo/config/utils/ReferenceConfigCacheTest.java
similarity index 100%
rename from dubbo-bootstrap/src/main/test/java/org/apache/dubbo/config/utils/ReferenceConfigCacheTest.java
rename to dubbo-config/dubbo-config-api/src/main/test/java/org/apache/dubbo/config/utils/ReferenceConfigCacheTest.java
diff --git a/dubbo-bootstrap/src/main/test/java/org/apache/dubbo/config/validation/ValidationParameter.java b/dubbo-config/dubbo-config-api/src/main/test/java/org/apache/dubbo/config/validation/ValidationParameter.java
similarity index 100%
rename from dubbo-bootstrap/src/main/test/java/org/apache/dubbo/config/validation/ValidationParameter.java
rename to dubbo-config/dubbo-config-api/src/main/test/java/org/apache/dubbo/config/validation/ValidationParameter.java
diff --git a/dubbo-bootstrap/src/main/test/java/org/apache/dubbo/config/validation/ValidationService.java b/dubbo-config/dubbo-config-api/src/main/test/java/org/apache/dubbo/config/validation/ValidationService.java
similarity index 100%
rename from dubbo-bootstrap/src/main/test/java/org/apache/dubbo/config/validation/ValidationService.java
rename to dubbo-config/dubbo-config-api/src/main/test/java/org/apache/dubbo/config/validation/ValidationService.java
diff --git a/dubbo-bootstrap/src/main/test/java/org/apache/dubbo/config/validation/ValidationServiceImpl.java b/dubbo-config/dubbo-config-api/src/main/test/java/org/apache/dubbo/config/validation/ValidationServiceImpl.java
similarity index 100%
rename from dubbo-bootstrap/src/main/test/java/org/apache/dubbo/config/validation/ValidationServiceImpl.java
rename to dubbo-config/dubbo-config-api/src/main/test/java/org/apache/dubbo/config/validation/ValidationServiceImpl.java
diff --git a/dubbo-bootstrap/src/main/test/java/org/apache/dubbo/config/validation/ValidationTest.java b/dubbo-config/dubbo-config-api/src/main/test/java/org/apache/dubbo/config/validation/ValidationTest.java
similarity index 100%
rename from dubbo-bootstrap/src/main/test/java/org/apache/dubbo/config/validation/ValidationTest.java
rename to dubbo-config/dubbo-config-api/src/main/test/java/org/apache/dubbo/config/validation/ValidationTest.java
diff --git a/dubbo-bootstrap/src/main/test/resources/META-INF/services/org.apache.dubbo.common.status.StatusChecker b/dubbo-config/dubbo-config-api/src/main/test/resources/META-INF/services/org.apache.dubbo.common.status.StatusChecker
similarity index 100%
rename from dubbo-bootstrap/src/main/test/resources/META-INF/services/org.apache.dubbo.common.status.StatusChecker
rename to dubbo-config/dubbo-config-api/src/main/test/resources/META-INF/services/org.apache.dubbo.common.status.StatusChecker
diff --git a/dubbo-bootstrap/src/main/test/resources/META-INF/services/org.apache.dubbo.common.threadpool.ThreadPool b/dubbo-config/dubbo-config-api/src/main/test/resources/META-INF/services/org.apache.dubbo.common.threadpool.ThreadPool
similarity index 100%
rename from dubbo-bootstrap/src/main/test/resources/META-INF/services/org.apache.dubbo.common.threadpool.ThreadPool
rename to dubbo-config/dubbo-config-api/src/main/test/resources/META-INF/services/org.apache.dubbo.common.threadpool.ThreadPool
diff --git a/dubbo-bootstrap/src/main/test/resources/META-INF/services/org.apache.dubbo.registry.RegistryFactory b/dubbo-config/dubbo-config-api/src/main/test/resources/META-INF/services/org.apache.dubbo.registry.RegistryFactory
similarity index 100%
rename from dubbo-bootstrap/src/main/test/resources/META-INF/services/org.apache.dubbo.registry.RegistryFactory
rename to dubbo-config/dubbo-config-api/src/main/test/resources/META-INF/services/org.apache.dubbo.registry.RegistryFactory
diff --git a/dubbo-bootstrap/src/main/test/resources/META-INF/services/org.apache.dubbo.remoting.Codec b/dubbo-config/dubbo-config-api/src/main/test/resources/META-INF/services/org.apache.dubbo.remoting.Codec
similarity index 100%
rename from dubbo-bootstrap/src/main/test/resources/META-INF/services/org.apache.dubbo.remoting.Codec
rename to dubbo-config/dubbo-config-api/src/main/test/resources/META-INF/services/org.apache.dubbo.remoting.Codec
diff --git a/dubbo-bootstrap/src/main/test/resources/META-INF/services/org.apache.dubbo.remoting.Dispatcher b/dubbo-config/dubbo-config-api/src/main/test/resources/META-INF/services/org.apache.dubbo.remoting.Dispatcher
similarity index 100%
rename from dubbo-bootstrap/src/main/test/resources/META-INF/services/org.apache.dubbo.remoting.Dispatcher
rename to dubbo-config/dubbo-config-api/src/main/test/resources/META-INF/services/org.apache.dubbo.remoting.Dispatcher
diff --git a/dubbo-bootstrap/src/main/test/resources/META-INF/services/org.apache.dubbo.remoting.Transporter b/dubbo-config/dubbo-config-api/src/main/test/resources/META-INF/services/org.apache.dubbo.remoting.Transporter
similarity index 100%
rename from dubbo-bootstrap/src/main/test/resources/META-INF/services/org.apache.dubbo.remoting.Transporter
rename to dubbo-config/dubbo-config-api/src/main/test/resources/META-INF/services/org.apache.dubbo.remoting.Transporter
diff --git a/dubbo-bootstrap/src/main/test/resources/META-INF/services/org.apache.dubbo.remoting.exchange.Exchanger b/dubbo-config/dubbo-config-api/src/main/test/resources/META-INF/services/org.apache.dubbo.remoting.exchange.Exchanger
similarity index 100%
rename from dubbo-bootstrap/src/main/test/resources/META-INF/services/org.apache.dubbo.remoting.exchange.Exchanger
rename to dubbo-config/dubbo-config-api/src/main/test/resources/META-INF/services/org.apache.dubbo.remoting.exchange.Exchanger
diff --git a/dubbo-bootstrap/src/main/test/resources/META-INF/services/org.apache.dubbo.remoting.telnet.TelnetHandler b/dubbo-config/dubbo-config-api/src/main/test/resources/META-INF/services/org.apache.dubbo.remoting.telnet.TelnetHandler
similarity index 100%
rename from dubbo-bootstrap/src/main/test/resources/META-INF/services/org.apache.dubbo.remoting.telnet.TelnetHandler
rename to dubbo-config/dubbo-config-api/src/main/test/resources/META-INF/services/org.apache.dubbo.remoting.telnet.TelnetHandler
diff --git a/dubbo-bootstrap/src/main/test/resources/META-INF/services/org.apache.dubbo.rpc.ExporterListener b/dubbo-config/dubbo-config-api/src/main/test/resources/META-INF/services/org.apache.dubbo.rpc.ExporterListener
similarity index 100%
rename from dubbo-bootstrap/src/main/test/resources/META-INF/services/org.apache.dubbo.rpc.ExporterListener
rename to dubbo-config/dubbo-config-api/src/main/test/resources/META-INF/services/org.apache.dubbo.rpc.ExporterListener
diff --git a/dubbo-bootstrap/src/main/test/resources/META-INF/services/org.apache.dubbo.rpc.Filter b/dubbo-config/dubbo-config-api/src/main/test/resources/META-INF/services/org.apache.dubbo.rpc.Filter
similarity index 100%
rename from dubbo-bootstrap/src/main/test/resources/META-INF/services/org.apache.dubbo.rpc.Filter
rename to dubbo-config/dubbo-config-api/src/main/test/resources/META-INF/services/org.apache.dubbo.rpc.Filter
diff --git a/dubbo-bootstrap/src/main/test/resources/META-INF/services/org.apache.dubbo.rpc.InvokerListener b/dubbo-config/dubbo-config-api/src/main/test/resources/META-INF/services/org.apache.dubbo.rpc.InvokerListener
similarity index 100%
rename from dubbo-bootstrap/src/main/test/resources/META-INF/services/org.apache.dubbo.rpc.InvokerListener
rename to dubbo-config/dubbo-config-api/src/main/test/resources/META-INF/services/org.apache.dubbo.rpc.InvokerListener
diff --git a/dubbo-bootstrap/src/main/test/resources/META-INF/services/org.apache.dubbo.rpc.Protocol b/dubbo-config/dubbo-config-api/src/main/test/resources/META-INF/services/org.apache.dubbo.rpc.Protocol
similarity index 100%
rename from dubbo-bootstrap/src/main/test/resources/META-INF/services/org.apache.dubbo.rpc.Protocol
rename to dubbo-config/dubbo-config-api/src/main/test/resources/META-INF/services/org.apache.dubbo.rpc.Protocol
diff --git a/dubbo-bootstrap/src/main/test/resources/META-INF/services/org.apache.dubbo.rpc.ProxyFactory b/dubbo-config/dubbo-config-api/src/main/test/resources/META-INF/services/org.apache.dubbo.rpc.ProxyFactory
similarity index 100%
rename from dubbo-bootstrap/src/main/test/resources/META-INF/services/org.apache.dubbo.rpc.ProxyFactory
rename to dubbo-config/dubbo-config-api/src/main/test/resources/META-INF/services/org.apache.dubbo.rpc.ProxyFactory
diff --git a/dubbo-bootstrap/src/main/test/resources/META-INF/services/org.apache.dubbo.rpc.cluster.Cluster b/dubbo-config/dubbo-config-api/src/main/test/resources/META-INF/services/org.apache.dubbo.rpc.cluster.Cluster
similarity index 100%
rename from dubbo-bootstrap/src/main/test/resources/META-INF/services/org.apache.dubbo.rpc.cluster.Cluster
rename to dubbo-config/dubbo-config-api/src/main/test/resources/META-INF/services/org.apache.dubbo.rpc.cluster.Cluster
diff --git a/dubbo-bootstrap/src/main/test/resources/META-INF/services/org.apache.dubbo.rpc.cluster.LoadBalance b/dubbo-config/dubbo-config-api/src/main/test/resources/META-INF/services/org.apache.dubbo.rpc.cluster.LoadBalance
similarity index 100%
rename from dubbo-bootstrap/src/main/test/resources/META-INF/services/org.apache.dubbo.rpc.cluster.LoadBalance
rename to dubbo-config/dubbo-config-api/src/main/test/resources/META-INF/services/org.apache.dubbo.rpc.cluster.LoadBalance
diff --git a/dubbo-bootstrap/src/main/test/resources/log4j.xml b/dubbo-config/dubbo-config-api/src/main/test/resources/log4j.xml
similarity index 100%
rename from dubbo-bootstrap/src/main/test/resources/log4j.xml
rename to dubbo-config/dubbo-config-api/src/main/test/resources/log4j.xml
diff --git a/dubbo-governance/dubbo-governance-api/src/main/java/org/apache/dubbo/governance/DynamicConfigurationFactory.java b/dubbo-governance/dubbo-governance-api/src/main/java/org/apache/dubbo/governance/DynamicConfigurationFactory.java
deleted file mode 100644
index d4340d8..0000000
--- a/dubbo-governance/dubbo-governance-api/src/main/java/org/apache/dubbo/governance/DynamicConfigurationFactory.java
+++ /dev/null
@@ -1,35 +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.governance;
-
-import org.apache.dubbo.common.Constants;
-import org.apache.dubbo.common.URL;
-import org.apache.dubbo.common.extension.Adaptive;
-import org.apache.dubbo.common.extension.SPI;
-
-/**
- *
- */
-@SPI("nop")
-public interface DynamicConfigurationFactory {
-
-    @Adaptive({Constants.PROTOCOL_KEY})
-    DynamicConfiguration getDynamicConfiguration(URL url);
-
-    DynamicConfiguration getExistedDynamicConfiguration();
-
-}
diff --git a/dubbo-governance/dubbo-governance-api/src/main/java/org/apache/dubbo/governance/support/nop/NopDynamicConfigurationFactory.java b/dubbo-governance/dubbo-governance-api/src/main/java/org/apache/dubbo/governance/support/nop/NopDynamicConfigurationFactory.java
deleted file mode 100644
index 13f91a1..0000000
--- a/dubbo-governance/dubbo-governance-api/src/main/java/org/apache/dubbo/governance/support/nop/NopDynamicConfigurationFactory.java
+++ /dev/null
@@ -1,42 +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.governance.support.nop;
-
-import org.apache.dubbo.common.URL;
-import org.apache.dubbo.governance.DynamicConfiguration;
-import org.apache.dubbo.governance.DynamicConfigurationFactory;
-
-/**
- *
- */
-public class NopDynamicConfigurationFactory implements DynamicConfigurationFactory {
-    private static final URL FAkED_URL = URL.valueOf("config://0.0.0.0:20000/fakepath");
-
-    private NopDynamicConfiguration dynamicConfiguration;
-
-    @Override
-    public DynamicConfiguration getDynamicConfiguration(URL url) {
-        dynamicConfiguration = new NopDynamicConfiguration();
-        dynamicConfiguration.setUrl(FAkED_URL);
-        return dynamicConfiguration;
-    }
-
-    @Override
-    public DynamicConfiguration getExistedDynamicConfiguration() {
-        return dynamicConfiguration;
-    }
-}
diff --git a/dubbo-governance/dubbo-governance-apollo/src/main/java/org/apache/dubbo/governance/support/apollo/ApolloDynamicConfigurationFactory.java b/dubbo-governance/dubbo-governance-apollo/src/main/java/org/apache/dubbo/governance/support/apollo/ApolloDynamicConfigurationFactory.java
deleted file mode 100644
index 5762f0b..0000000
--- a/dubbo-governance/dubbo-governance-apollo/src/main/java/org/apache/dubbo/governance/support/apollo/ApolloDynamicConfigurationFactory.java
+++ /dev/null
@@ -1,46 +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.governance.support.apollo;
-
-import org.apache.dubbo.common.URL;
-import org.apache.dubbo.governance.DynamicConfiguration;
-import org.apache.dubbo.governance.DynamicConfigurationFactory;
-
-/**
- *
- */
-public class ApolloDynamicConfigurationFactory implements DynamicConfigurationFactory {
-
-    private DynamicConfiguration configuration;
-
-    @Override
-    public synchronized DynamicConfiguration getDynamicConfiguration(URL url) {
-        if (configuration == null) {
-            configuration = new ApolloDynamicConfiguration();
-            configuration.setUrl(url);
-            configuration.init();
-        }
-        return configuration;
-    }
-
-    @Override
-    public DynamicConfiguration getExistedDynamicConfiguration() {
-        return configuration;
-    }
-
-
-}
diff --git a/dubbo-governance/dubbo-governance-zookeeper/src/main/java/org/apache/dubbo/governance/support/archaius/ArchaiusDynamicConfigurationFactory.java b/dubbo-governance/dubbo-governance-zookeeper/src/main/java/org/apache/dubbo/governance/support/archaius/ArchaiusDynamicConfigurationFactory.java
deleted file mode 100644
index 6bbf127..0000000
--- a/dubbo-governance/dubbo-governance-zookeeper/src/main/java/org/apache/dubbo/governance/support/archaius/ArchaiusDynamicConfigurationFactory.java
+++ /dev/null
@@ -1,44 +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.governance.support.archaius;
-
-import org.apache.dubbo.common.URL;
-import org.apache.dubbo.governance.DynamicConfiguration;
-import org.apache.dubbo.governance.DynamicConfigurationFactory;
-
-/**
- *
- */
-public class ArchaiusDynamicConfigurationFactory implements DynamicConfigurationFactory {
-
-    private volatile DynamicConfiguration configuration;
-
-    @Override
-    public synchronized DynamicConfiguration getDynamicConfiguration(URL url) {
-        if (configuration == null) {
-            configuration = new ArchaiusDynamicConfiguration();
-            configuration.setUrl(url);
-            configuration.init();
-        }
-        return configuration;
-    }
-
-    @Override
-    public DynamicConfiguration getExistedDynamicConfiguration() {
-        return configuration;
-    }
-}
diff --git a/dubbo-registry/dubbo-registry-api/pom.xml b/dubbo-registry/dubbo-registry-api/pom.xml
index fd57a9a..e403d03 100644
--- a/dubbo-registry/dubbo-registry-api/pom.xml
+++ b/dubbo-registry/dubbo-registry-api/pom.xml
@@ -36,11 +36,6 @@
         </dependency>
         <dependency>
             <groupId>org.apache.dubbo</groupId>
-            <artifactId>dubbo-config-api</artifactId>
-            <version>${project.parent.version}</version>
-        </dependency>
-        <dependency>
-            <groupId>org.apache.dubbo</groupId>
             <artifactId>dubbo-governance-api</artifactId>
             <version>${project.parent.version}</version>
         </dependency>


[incubator-dubbo] 03/04: change how DynamicConfiguration instance is fetched.

Posted by li...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

liujun pushed a commit to branch dev-metadata
in repository https://gitbox.apache.org/repos/asf/incubator-dubbo.git

commit 5f0d8c8b370404e179852b8b7c49880b2fc3ed51
Author: ken.lj <ke...@gmail.com>
AuthorDate: Thu Nov 15 14:54:07 2018 +0800

    change how DynamicConfiguration instance is fetched.
---
 .../apache/dubbo/rpc/cluster/router/tag/TagRouter.java  |  8 ++++++--
 dubbo-config/dubbo-config-api/pom.xml                   |  5 +++++
 .../org/apache/dubbo/config/ConfigCenterConfig.java     |  7 ++++---
 .../org/apache/dubbo/config/context/Environment.java    | 17 +++++++----------
 .../dubbo/registry/integration/RegistryProtocol.java    |  9 +++++++--
 5 files changed, 29 insertions(+), 17 deletions(-)

diff --git a/dubbo-cluster/src/main/java/org/apache/dubbo/rpc/cluster/router/tag/TagRouter.java b/dubbo-cluster/src/main/java/org/apache/dubbo/rpc/cluster/router/tag/TagRouter.java
index 7f2ad73..462b8d9 100644
--- a/dubbo-cluster/src/main/java/org/apache/dubbo/rpc/cluster/router/tag/TagRouter.java
+++ b/dubbo-cluster/src/main/java/org/apache/dubbo/rpc/cluster/router/tag/TagRouter.java
@@ -27,7 +27,6 @@ import org.apache.dubbo.governance.ConfigChangeEvent;
 import org.apache.dubbo.governance.ConfigChangeType;
 import org.apache.dubbo.governance.ConfigurationListener;
 import org.apache.dubbo.governance.DynamicConfiguration;
-import org.apache.dubbo.governance.DynamicConfigurationFactory;
 import org.apache.dubbo.rpc.Invocation;
 import org.apache.dubbo.rpc.Invoker;
 import org.apache.dubbo.rpc.RpcException;
@@ -59,8 +58,13 @@ public class TagRouter extends AbstractRouter implements Comparable<Router>, Con
 
     private AtomicBoolean isInited = new AtomicBoolean(false);
 
+    /**
+     * compatible constructor, it should never be called to create TagRouter.
+     *
+     * @param url
+     */
     public TagRouter(URL url) {
-        this(ExtensionLoader.getExtensionLoader(DynamicConfigurationFactory.class).getAdaptiveExtension().getDynamicConfiguration(url), url);
+        this(ExtensionLoader.getExtensionLoader(DynamicConfiguration.class).getDefaultExtension(), url);
     }
 
     public TagRouter(DynamicConfiguration configuration, URL url) {
diff --git a/dubbo-config/dubbo-config-api/pom.xml b/dubbo-config/dubbo-config-api/pom.xml
index 285ab54..15868b0 100644
--- a/dubbo-config/dubbo-config-api/pom.xml
+++ b/dubbo-config/dubbo-config-api/pom.xml
@@ -31,6 +31,11 @@
     <dependencies>
         <dependency>
             <groupId>org.apache.dubbo</groupId>
+            <artifactId>dubbo-registry-api</artifactId>
+            <version>${project.parent.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.dubbo</groupId>
             <artifactId>dubbo-metadata-report-api</artifactId>
             <version>${project.parent.version}</version>
         </dependency>
diff --git a/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/ConfigCenterConfig.java b/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/ConfigCenterConfig.java
index 6904413..fdca12c 100644
--- a/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/ConfigCenterConfig.java
+++ b/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/ConfigCenterConfig.java
@@ -24,7 +24,6 @@ import org.apache.dubbo.common.utils.UrlUtils;
 import org.apache.dubbo.config.context.Environment;
 import org.apache.dubbo.config.support.Parameter;
 import org.apache.dubbo.governance.DynamicConfiguration;
-import org.apache.dubbo.governance.DynamicConfigurationFactory;
 
 import java.io.IOException;
 import java.io.StringReader;
@@ -94,8 +93,10 @@ public class ConfigCenterConfig extends AbstractConfig {
 //        checkConfigCenter();
 
         URL url = toConfigUrl();
-        DynamicConfiguration dynamicConfiguration = ExtensionLoader.getExtensionLoader(DynamicConfigurationFactory.class).getAdaptiveExtension().getDynamicConfiguration(url);
-        Environment.getInstance().setDynamicConfiguration(dynamicConfiguration);
+        DynamicConfiguration dynamicConfiguration = ExtensionLoader.getExtensionLoader(DynamicConfiguration.class).getExtension(url.getProtocol());
+        // TODO, maybe we need a factory to do this?
+        dynamicConfiguration.setUrl(url);
+        dynamicConfiguration.init();
         return dynamicConfiguration;
     }
 
diff --git a/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/context/Environment.java b/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/context/Environment.java
index c3e07cc..d98b33f 100644
--- a/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/context/Environment.java
+++ b/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/context/Environment.java
@@ -24,13 +24,14 @@ import org.apache.dubbo.common.config.InmemoryConfiguration;
 import org.apache.dubbo.common.config.PropertiesConfiguration;
 import org.apache.dubbo.common.config.SystemConfiguration;
 import org.apache.dubbo.common.extension.ExtensionLoader;
+import org.apache.dubbo.common.utils.CollectionUtils;
 import org.apache.dubbo.common.utils.StringUtils;
 import org.apache.dubbo.config.ConfigCenterConfig;
 import org.apache.dubbo.governance.DynamicConfiguration;
-import org.apache.dubbo.governance.DynamicConfigurationFactory;
 
 import java.util.HashMap;
 import java.util.Map;
+import java.util.Set;
 import java.util.concurrent.ConcurrentHashMap;
 
 /**
@@ -146,8 +147,6 @@ public class Environment {
         return compositeConfiguration;
     }
 
-
-
     /**
      * If user opens DynamicConfig, the extension instance must has been created during the initialization of ConfigCenterConfig with the right extension type user specified.
      * If no DynamicConfig presents, NopDynamicConfiguration will be used.
@@ -155,14 +154,12 @@ public class Environment {
      * @return
      */
     public DynamicConfiguration getDynamicConfiguration() {
-        if (dynamicConfiguration != null) {
-            return dynamicConfiguration;
+        Set<Object> configurations = ExtensionLoader.getExtensionLoader(DynamicConfiguration.class).getLoadedExtensionInstances();
+        if (CollectionUtils.isEmpty(configurations)) {
+            return ExtensionLoader.getExtensionLoader(DynamicConfiguration.class).getDefaultExtension();
+        } else {
+            return (DynamicConfiguration) configurations.iterator().next();
         }
-        return ExtensionLoader.getExtensionLoader(DynamicConfigurationFactory.class).getDefaultExtension().getDynamicConfiguration(null);
-    }
-
-    public void setDynamicConfiguration(DynamicConfiguration dynamicConfiguration) {
-        this.dynamicConfiguration = dynamicConfiguration;
     }
 
     private static String toKey(String keypart1, String keypart2) {
diff --git a/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/integration/RegistryProtocol.java b/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/integration/RegistryProtocol.java
index 20c1987..91d3ffd 100644
--- a/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/integration/RegistryProtocol.java
+++ b/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/integration/RegistryProtocol.java
@@ -26,7 +26,6 @@ import org.apache.dubbo.common.utils.ConfigUtils;
 import org.apache.dubbo.common.utils.NamedThreadFactory;
 import org.apache.dubbo.common.utils.StringUtils;
 import org.apache.dubbo.common.utils.UrlUtils;
-import org.apache.dubbo.config.context.Environment;
 import org.apache.dubbo.governance.ConfigChangeEvent;
 import org.apache.dubbo.governance.ConfigChangeType;
 import org.apache.dubbo.governance.ConfigurationListener;
@@ -51,6 +50,7 @@ import java.util.HashMap;
 import java.util.LinkedList;
 import java.util.List;
 import java.util.Map;
+import java.util.Set;
 import java.util.concurrent.ConcurrentHashMap;
 import java.util.concurrent.ExecutorService;
 import java.util.concurrent.Executors;
@@ -86,7 +86,12 @@ public class RegistryProtocol implements Protocol {
 
     public RegistryProtocol() {
         INSTANCE = this;
-        dynamicConfiguration = Environment.getInstance().getDynamicConfiguration();
+        Set<Object> configurations = ExtensionLoader.getExtensionLoader(DynamicConfiguration.class).getLoadedExtensionInstances();
+        if (CollectionUtils.isEmpty(configurations)) {
+            dynamicConfiguration = ExtensionLoader.getExtensionLoader(DynamicConfiguration.class).getDefaultExtension();
+        } else {
+            dynamicConfiguration = (DynamicConfiguration) configurations.iterator().next();
+        }
     }
 
     public static RegistryProtocol getRegistryProtocol() {


[incubator-dubbo] 04/04: fix ut

Posted by li...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

liujun pushed a commit to branch dev-metadata
in repository https://gitbox.apache.org/repos/asf/incubator-dubbo.git

commit 46a05803a8d6f59f95039a205318542d6270ce24
Author: ken.lj <ke...@gmail.com>
AuthorDate: Thu Nov 15 14:59:51 2018 +0800

    fix ut
---
 .../{main => }/test/java/org/apache/dubbo/config/AbstractConfigTest.java  | 0
 .../test/java/org/apache/dubbo/config/AbstractInterfaceConfigTest.java    | 0
 .../test/java/org/apache/dubbo/config/AbstractMethodConfigTest.java       | 0
 .../test/java/org/apache/dubbo/config/AbstractReferenceConfigTest.java    | 0
 .../test/java/org/apache/dubbo/config/AbstractServiceConfigTest.java      | 0
 .../test/java/org/apache/dubbo/config/ApplicationConfigTest.java          | 0
 .../{main => }/test/java/org/apache/dubbo/config/ArgumentConfigTest.java  | 0
 .../{main => }/test/java/org/apache/dubbo/config/ConsumerConfigTest.java  | 0
 .../{main => }/test/java/org/apache/dubbo/config/GenericServiceTest.java  | 0
 .../{main => }/test/java/org/apache/dubbo/config/MethodConfigTest.java    | 0
 .../{main => }/test/java/org/apache/dubbo/config/ModuleConfigTest.java    | 0
 .../{main => }/test/java/org/apache/dubbo/config/MonitorConfigTest.java   | 0
 .../{main => }/test/java/org/apache/dubbo/config/ProtocolConfigTest.java  | 0
 .../{main => }/test/java/org/apache/dubbo/config/ProviderConfigTest.java  | 0
 .../{main => }/test/java/org/apache/dubbo/config/ReferenceConfigTest.java | 0
 .../{main => }/test/java/org/apache/dubbo/config/RegistryConfigTest.java  | 0
 .../{main => }/test/java/org/apache/dubbo/config/ServiceConfigTest.java   | 0
 .../src/{main => }/test/java/org/apache/dubbo/config/api/Box.java         | 0
 .../{main => }/test/java/org/apache/dubbo/config/api/DemoException.java   | 0
 .../src/{main => }/test/java/org/apache/dubbo/config/api/DemoService.java | 0
 .../src/{main => }/test/java/org/apache/dubbo/config/api/Greeting.java    | 0
 .../src/{main => }/test/java/org/apache/dubbo/config/api/User.java        | 0
 .../{main => }/test/java/org/apache/dubbo/config/cache/CacheService.java  | 0
 .../test/java/org/apache/dubbo/config/cache/CacheServiceImpl.java         | 0
 .../src/{main => }/test/java/org/apache/dubbo/config/cache/CacheTest.java | 0
 .../java/org/apache/dubbo/config/consumer/DemoActionByAnnotation.java     | 0
 .../test/java/org/apache/dubbo/config/consumer/DemoActionBySetter.java    | 0
 .../test/java/org/apache/dubbo/config/consumer/DemoInterceptor.java       | 0
 .../apache/dubbo/config/invoker/DelegateProviderMetaDataInvokerTest.java  | 0
 .../{main => }/test/java/org/apache/dubbo/config/mock/GreetingLocal1.java | 0
 .../{main => }/test/java/org/apache/dubbo/config/mock/GreetingLocal2.java | 0
 .../{main => }/test/java/org/apache/dubbo/config/mock/GreetingLocal3.java | 0
 .../{main => }/test/java/org/apache/dubbo/config/mock/GreetingMock1.java  | 0
 .../{main => }/test/java/org/apache/dubbo/config/mock/GreetingMock2.java  | 0
 .../{main => }/test/java/org/apache/dubbo/config/mock/MockCluster.java    | 0
 .../src/{main => }/test/java/org/apache/dubbo/config/mock/MockCodec.java  | 0
 .../{main => }/test/java/org/apache/dubbo/config/mock/MockDispatcher.java | 0
 .../{main => }/test/java/org/apache/dubbo/config/mock/MockExchanger.java  | 0
 .../test/java/org/apache/dubbo/config/mock/MockExporterListener.java      | 0
 .../src/{main => }/test/java/org/apache/dubbo/config/mock/MockFilter.java | 0
 .../test/java/org/apache/dubbo/config/mock/MockInvokerListener.java       | 0
 .../test/java/org/apache/dubbo/config/mock/MockLoadBalance.java           | 0
 .../{main => }/test/java/org/apache/dubbo/config/mock/MockProtocol.java   | 0
 .../{main => }/test/java/org/apache/dubbo/config/mock/MockProtocol2.java  | 0
 .../test/java/org/apache/dubbo/config/mock/MockProxyFactory.java          | 0
 .../{main => }/test/java/org/apache/dubbo/config/mock/MockRegistry.java   | 0
 .../test/java/org/apache/dubbo/config/mock/MockRegistryFactory.java       | 0
 .../test/java/org/apache/dubbo/config/mock/MockRegistryFactory2.java      | 0
 .../test/java/org/apache/dubbo/config/mock/MockStatusChecker.java         | 0
 .../test/java/org/apache/dubbo/config/mock/MockTelnetHandler.java         | 0
 .../{main => }/test/java/org/apache/dubbo/config/mock/MockThreadPool.java | 0
 .../test/java/org/apache/dubbo/config/mock/MockTransporter.java           | 0
 .../test/java/org/apache/dubbo/config/mock/TestProxyFactory.java          | 0
 .../test/java/org/apache/dubbo/config/provider/impl/DemoServiceImpl.java  | 0
 .../test/java/org/apache/dubbo/config/url/ExporterSideConfigUrlTest.java  | 0
 .../test/java/org/apache/dubbo/config/url/InvokerSideConfigUrlTest.java   | 0
 .../test/java/org/apache/dubbo/config/url/RpcConfigGetSetProxy.java       | 0
 .../src/{main => }/test/java/org/apache/dubbo/config/url/UrlTestBase.java | 0
 .../test/java/org/apache/dubbo/config/utils/MockReferenceConfig.java      | 0
 .../test/java/org/apache/dubbo/config/utils/ReferenceConfigCacheTest.java | 0
 .../test/java/org/apache/dubbo/config/validation/ValidationParameter.java | 0
 .../test/java/org/apache/dubbo/config/validation/ValidationService.java   | 0
 .../java/org/apache/dubbo/config/validation/ValidationServiceImpl.java    | 0
 .../test/java/org/apache/dubbo/config/validation/ValidationTest.java      | 0
 .../META-INF/services/org.apache.dubbo.common.status.StatusChecker        | 0
 .../META-INF/services/org.apache.dubbo.common.threadpool.ThreadPool       | 0
 .../resources/META-INF/services/org.apache.dubbo.registry.RegistryFactory | 0
 .../test/resources/META-INF/services/org.apache.dubbo.remoting.Codec      | 0
 .../test/resources/META-INF/services/org.apache.dubbo.remoting.Dispatcher | 0
 .../resources/META-INF/services/org.apache.dubbo.remoting.Transporter     | 0
 .../META-INF/services/org.apache.dubbo.remoting.exchange.Exchanger        | 0
 .../META-INF/services/org.apache.dubbo.remoting.telnet.TelnetHandler      | 0
 .../resources/META-INF/services/org.apache.dubbo.rpc.ExporterListener     | 0
 .../test/resources/META-INF/services/org.apache.dubbo.rpc.Filter          | 0
 .../test/resources/META-INF/services/org.apache.dubbo.rpc.InvokerListener | 0
 .../test/resources/META-INF/services/org.apache.dubbo.rpc.Protocol        | 0
 .../test/resources/META-INF/services/org.apache.dubbo.rpc.ProxyFactory    | 0
 .../test/resources/META-INF/services/org.apache.dubbo.rpc.cluster.Cluster | 0
 .../resources/META-INF/services/org.apache.dubbo.rpc.cluster.LoadBalance  | 0
 dubbo-config/dubbo-config-api/src/{main => }/test/resources/log4j.xml     | 0
 80 files changed, 0 insertions(+), 0 deletions(-)

diff --git a/dubbo-config/dubbo-config-api/src/main/test/java/org/apache/dubbo/config/AbstractConfigTest.java b/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/AbstractConfigTest.java
similarity index 100%
rename from dubbo-config/dubbo-config-api/src/main/test/java/org/apache/dubbo/config/AbstractConfigTest.java
rename to dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/AbstractConfigTest.java
diff --git a/dubbo-config/dubbo-config-api/src/main/test/java/org/apache/dubbo/config/AbstractInterfaceConfigTest.java b/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/AbstractInterfaceConfigTest.java
similarity index 100%
rename from dubbo-config/dubbo-config-api/src/main/test/java/org/apache/dubbo/config/AbstractInterfaceConfigTest.java
rename to dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/AbstractInterfaceConfigTest.java
diff --git a/dubbo-config/dubbo-config-api/src/main/test/java/org/apache/dubbo/config/AbstractMethodConfigTest.java b/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/AbstractMethodConfigTest.java
similarity index 100%
rename from dubbo-config/dubbo-config-api/src/main/test/java/org/apache/dubbo/config/AbstractMethodConfigTest.java
rename to dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/AbstractMethodConfigTest.java
diff --git a/dubbo-config/dubbo-config-api/src/main/test/java/org/apache/dubbo/config/AbstractReferenceConfigTest.java b/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/AbstractReferenceConfigTest.java
similarity index 100%
rename from dubbo-config/dubbo-config-api/src/main/test/java/org/apache/dubbo/config/AbstractReferenceConfigTest.java
rename to dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/AbstractReferenceConfigTest.java
diff --git a/dubbo-config/dubbo-config-api/src/main/test/java/org/apache/dubbo/config/AbstractServiceConfigTest.java b/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/AbstractServiceConfigTest.java
similarity index 100%
rename from dubbo-config/dubbo-config-api/src/main/test/java/org/apache/dubbo/config/AbstractServiceConfigTest.java
rename to dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/AbstractServiceConfigTest.java
diff --git a/dubbo-config/dubbo-config-api/src/main/test/java/org/apache/dubbo/config/ApplicationConfigTest.java b/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/ApplicationConfigTest.java
similarity index 100%
rename from dubbo-config/dubbo-config-api/src/main/test/java/org/apache/dubbo/config/ApplicationConfigTest.java
rename to dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/ApplicationConfigTest.java
diff --git a/dubbo-config/dubbo-config-api/src/main/test/java/org/apache/dubbo/config/ArgumentConfigTest.java b/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/ArgumentConfigTest.java
similarity index 100%
rename from dubbo-config/dubbo-config-api/src/main/test/java/org/apache/dubbo/config/ArgumentConfigTest.java
rename to dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/ArgumentConfigTest.java
diff --git a/dubbo-config/dubbo-config-api/src/main/test/java/org/apache/dubbo/config/ConsumerConfigTest.java b/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/ConsumerConfigTest.java
similarity index 100%
rename from dubbo-config/dubbo-config-api/src/main/test/java/org/apache/dubbo/config/ConsumerConfigTest.java
rename to dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/ConsumerConfigTest.java
diff --git a/dubbo-config/dubbo-config-api/src/main/test/java/org/apache/dubbo/config/GenericServiceTest.java b/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/GenericServiceTest.java
similarity index 100%
rename from dubbo-config/dubbo-config-api/src/main/test/java/org/apache/dubbo/config/GenericServiceTest.java
rename to dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/GenericServiceTest.java
diff --git a/dubbo-config/dubbo-config-api/src/main/test/java/org/apache/dubbo/config/MethodConfigTest.java b/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/MethodConfigTest.java
similarity index 100%
rename from dubbo-config/dubbo-config-api/src/main/test/java/org/apache/dubbo/config/MethodConfigTest.java
rename to dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/MethodConfigTest.java
diff --git a/dubbo-config/dubbo-config-api/src/main/test/java/org/apache/dubbo/config/ModuleConfigTest.java b/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/ModuleConfigTest.java
similarity index 100%
rename from dubbo-config/dubbo-config-api/src/main/test/java/org/apache/dubbo/config/ModuleConfigTest.java
rename to dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/ModuleConfigTest.java
diff --git a/dubbo-config/dubbo-config-api/src/main/test/java/org/apache/dubbo/config/MonitorConfigTest.java b/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/MonitorConfigTest.java
similarity index 100%
rename from dubbo-config/dubbo-config-api/src/main/test/java/org/apache/dubbo/config/MonitorConfigTest.java
rename to dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/MonitorConfigTest.java
diff --git a/dubbo-config/dubbo-config-api/src/main/test/java/org/apache/dubbo/config/ProtocolConfigTest.java b/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/ProtocolConfigTest.java
similarity index 100%
rename from dubbo-config/dubbo-config-api/src/main/test/java/org/apache/dubbo/config/ProtocolConfigTest.java
rename to dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/ProtocolConfigTest.java
diff --git a/dubbo-config/dubbo-config-api/src/main/test/java/org/apache/dubbo/config/ProviderConfigTest.java b/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/ProviderConfigTest.java
similarity index 100%
rename from dubbo-config/dubbo-config-api/src/main/test/java/org/apache/dubbo/config/ProviderConfigTest.java
rename to dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/ProviderConfigTest.java
diff --git a/dubbo-config/dubbo-config-api/src/main/test/java/org/apache/dubbo/config/ReferenceConfigTest.java b/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/ReferenceConfigTest.java
similarity index 100%
rename from dubbo-config/dubbo-config-api/src/main/test/java/org/apache/dubbo/config/ReferenceConfigTest.java
rename to dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/ReferenceConfigTest.java
diff --git a/dubbo-config/dubbo-config-api/src/main/test/java/org/apache/dubbo/config/RegistryConfigTest.java b/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/RegistryConfigTest.java
similarity index 100%
rename from dubbo-config/dubbo-config-api/src/main/test/java/org/apache/dubbo/config/RegistryConfigTest.java
rename to dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/RegistryConfigTest.java
diff --git a/dubbo-config/dubbo-config-api/src/main/test/java/org/apache/dubbo/config/ServiceConfigTest.java b/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/ServiceConfigTest.java
similarity index 100%
rename from dubbo-config/dubbo-config-api/src/main/test/java/org/apache/dubbo/config/ServiceConfigTest.java
rename to dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/ServiceConfigTest.java
diff --git a/dubbo-config/dubbo-config-api/src/main/test/java/org/apache/dubbo/config/api/Box.java b/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/api/Box.java
similarity index 100%
rename from dubbo-config/dubbo-config-api/src/main/test/java/org/apache/dubbo/config/api/Box.java
rename to dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/api/Box.java
diff --git a/dubbo-config/dubbo-config-api/src/main/test/java/org/apache/dubbo/config/api/DemoException.java b/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/api/DemoException.java
similarity index 100%
rename from dubbo-config/dubbo-config-api/src/main/test/java/org/apache/dubbo/config/api/DemoException.java
rename to dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/api/DemoException.java
diff --git a/dubbo-config/dubbo-config-api/src/main/test/java/org/apache/dubbo/config/api/DemoService.java b/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/api/DemoService.java
similarity index 100%
rename from dubbo-config/dubbo-config-api/src/main/test/java/org/apache/dubbo/config/api/DemoService.java
rename to dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/api/DemoService.java
diff --git a/dubbo-config/dubbo-config-api/src/main/test/java/org/apache/dubbo/config/api/Greeting.java b/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/api/Greeting.java
similarity index 100%
rename from dubbo-config/dubbo-config-api/src/main/test/java/org/apache/dubbo/config/api/Greeting.java
rename to dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/api/Greeting.java
diff --git a/dubbo-config/dubbo-config-api/src/main/test/java/org/apache/dubbo/config/api/User.java b/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/api/User.java
similarity index 100%
rename from dubbo-config/dubbo-config-api/src/main/test/java/org/apache/dubbo/config/api/User.java
rename to dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/api/User.java
diff --git a/dubbo-config/dubbo-config-api/src/main/test/java/org/apache/dubbo/config/cache/CacheService.java b/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/cache/CacheService.java
similarity index 100%
rename from dubbo-config/dubbo-config-api/src/main/test/java/org/apache/dubbo/config/cache/CacheService.java
rename to dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/cache/CacheService.java
diff --git a/dubbo-config/dubbo-config-api/src/main/test/java/org/apache/dubbo/config/cache/CacheServiceImpl.java b/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/cache/CacheServiceImpl.java
similarity index 100%
rename from dubbo-config/dubbo-config-api/src/main/test/java/org/apache/dubbo/config/cache/CacheServiceImpl.java
rename to dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/cache/CacheServiceImpl.java
diff --git a/dubbo-config/dubbo-config-api/src/main/test/java/org/apache/dubbo/config/cache/CacheTest.java b/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/cache/CacheTest.java
similarity index 100%
rename from dubbo-config/dubbo-config-api/src/main/test/java/org/apache/dubbo/config/cache/CacheTest.java
rename to dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/cache/CacheTest.java
diff --git a/dubbo-config/dubbo-config-api/src/main/test/java/org/apache/dubbo/config/consumer/DemoActionByAnnotation.java b/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/consumer/DemoActionByAnnotation.java
similarity index 100%
rename from dubbo-config/dubbo-config-api/src/main/test/java/org/apache/dubbo/config/consumer/DemoActionByAnnotation.java
rename to dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/consumer/DemoActionByAnnotation.java
diff --git a/dubbo-config/dubbo-config-api/src/main/test/java/org/apache/dubbo/config/consumer/DemoActionBySetter.java b/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/consumer/DemoActionBySetter.java
similarity index 100%
rename from dubbo-config/dubbo-config-api/src/main/test/java/org/apache/dubbo/config/consumer/DemoActionBySetter.java
rename to dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/consumer/DemoActionBySetter.java
diff --git a/dubbo-config/dubbo-config-api/src/main/test/java/org/apache/dubbo/config/consumer/DemoInterceptor.java b/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/consumer/DemoInterceptor.java
similarity index 100%
rename from dubbo-config/dubbo-config-api/src/main/test/java/org/apache/dubbo/config/consumer/DemoInterceptor.java
rename to dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/consumer/DemoInterceptor.java
diff --git a/dubbo-config/dubbo-config-api/src/main/test/java/org/apache/dubbo/config/invoker/DelegateProviderMetaDataInvokerTest.java b/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/invoker/DelegateProviderMetaDataInvokerTest.java
similarity index 100%
rename from dubbo-config/dubbo-config-api/src/main/test/java/org/apache/dubbo/config/invoker/DelegateProviderMetaDataInvokerTest.java
rename to dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/invoker/DelegateProviderMetaDataInvokerTest.java
diff --git a/dubbo-config/dubbo-config-api/src/main/test/java/org/apache/dubbo/config/mock/GreetingLocal1.java b/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/mock/GreetingLocal1.java
similarity index 100%
rename from dubbo-config/dubbo-config-api/src/main/test/java/org/apache/dubbo/config/mock/GreetingLocal1.java
rename to dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/mock/GreetingLocal1.java
diff --git a/dubbo-config/dubbo-config-api/src/main/test/java/org/apache/dubbo/config/mock/GreetingLocal2.java b/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/mock/GreetingLocal2.java
similarity index 100%
rename from dubbo-config/dubbo-config-api/src/main/test/java/org/apache/dubbo/config/mock/GreetingLocal2.java
rename to dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/mock/GreetingLocal2.java
diff --git a/dubbo-config/dubbo-config-api/src/main/test/java/org/apache/dubbo/config/mock/GreetingLocal3.java b/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/mock/GreetingLocal3.java
similarity index 100%
rename from dubbo-config/dubbo-config-api/src/main/test/java/org/apache/dubbo/config/mock/GreetingLocal3.java
rename to dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/mock/GreetingLocal3.java
diff --git a/dubbo-config/dubbo-config-api/src/main/test/java/org/apache/dubbo/config/mock/GreetingMock1.java b/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/mock/GreetingMock1.java
similarity index 100%
rename from dubbo-config/dubbo-config-api/src/main/test/java/org/apache/dubbo/config/mock/GreetingMock1.java
rename to dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/mock/GreetingMock1.java
diff --git a/dubbo-config/dubbo-config-api/src/main/test/java/org/apache/dubbo/config/mock/GreetingMock2.java b/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/mock/GreetingMock2.java
similarity index 100%
rename from dubbo-config/dubbo-config-api/src/main/test/java/org/apache/dubbo/config/mock/GreetingMock2.java
rename to dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/mock/GreetingMock2.java
diff --git a/dubbo-config/dubbo-config-api/src/main/test/java/org/apache/dubbo/config/mock/MockCluster.java b/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/mock/MockCluster.java
similarity index 100%
rename from dubbo-config/dubbo-config-api/src/main/test/java/org/apache/dubbo/config/mock/MockCluster.java
rename to dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/mock/MockCluster.java
diff --git a/dubbo-config/dubbo-config-api/src/main/test/java/org/apache/dubbo/config/mock/MockCodec.java b/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/mock/MockCodec.java
similarity index 100%
rename from dubbo-config/dubbo-config-api/src/main/test/java/org/apache/dubbo/config/mock/MockCodec.java
rename to dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/mock/MockCodec.java
diff --git a/dubbo-config/dubbo-config-api/src/main/test/java/org/apache/dubbo/config/mock/MockDispatcher.java b/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/mock/MockDispatcher.java
similarity index 100%
rename from dubbo-config/dubbo-config-api/src/main/test/java/org/apache/dubbo/config/mock/MockDispatcher.java
rename to dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/mock/MockDispatcher.java
diff --git a/dubbo-config/dubbo-config-api/src/main/test/java/org/apache/dubbo/config/mock/MockExchanger.java b/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/mock/MockExchanger.java
similarity index 100%
rename from dubbo-config/dubbo-config-api/src/main/test/java/org/apache/dubbo/config/mock/MockExchanger.java
rename to dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/mock/MockExchanger.java
diff --git a/dubbo-config/dubbo-config-api/src/main/test/java/org/apache/dubbo/config/mock/MockExporterListener.java b/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/mock/MockExporterListener.java
similarity index 100%
rename from dubbo-config/dubbo-config-api/src/main/test/java/org/apache/dubbo/config/mock/MockExporterListener.java
rename to dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/mock/MockExporterListener.java
diff --git a/dubbo-config/dubbo-config-api/src/main/test/java/org/apache/dubbo/config/mock/MockFilter.java b/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/mock/MockFilter.java
similarity index 100%
rename from dubbo-config/dubbo-config-api/src/main/test/java/org/apache/dubbo/config/mock/MockFilter.java
rename to dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/mock/MockFilter.java
diff --git a/dubbo-config/dubbo-config-api/src/main/test/java/org/apache/dubbo/config/mock/MockInvokerListener.java b/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/mock/MockInvokerListener.java
similarity index 100%
rename from dubbo-config/dubbo-config-api/src/main/test/java/org/apache/dubbo/config/mock/MockInvokerListener.java
rename to dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/mock/MockInvokerListener.java
diff --git a/dubbo-config/dubbo-config-api/src/main/test/java/org/apache/dubbo/config/mock/MockLoadBalance.java b/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/mock/MockLoadBalance.java
similarity index 100%
rename from dubbo-config/dubbo-config-api/src/main/test/java/org/apache/dubbo/config/mock/MockLoadBalance.java
rename to dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/mock/MockLoadBalance.java
diff --git a/dubbo-config/dubbo-config-api/src/main/test/java/org/apache/dubbo/config/mock/MockProtocol.java b/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/mock/MockProtocol.java
similarity index 100%
rename from dubbo-config/dubbo-config-api/src/main/test/java/org/apache/dubbo/config/mock/MockProtocol.java
rename to dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/mock/MockProtocol.java
diff --git a/dubbo-config/dubbo-config-api/src/main/test/java/org/apache/dubbo/config/mock/MockProtocol2.java b/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/mock/MockProtocol2.java
similarity index 100%
rename from dubbo-config/dubbo-config-api/src/main/test/java/org/apache/dubbo/config/mock/MockProtocol2.java
rename to dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/mock/MockProtocol2.java
diff --git a/dubbo-config/dubbo-config-api/src/main/test/java/org/apache/dubbo/config/mock/MockProxyFactory.java b/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/mock/MockProxyFactory.java
similarity index 100%
rename from dubbo-config/dubbo-config-api/src/main/test/java/org/apache/dubbo/config/mock/MockProxyFactory.java
rename to dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/mock/MockProxyFactory.java
diff --git a/dubbo-config/dubbo-config-api/src/main/test/java/org/apache/dubbo/config/mock/MockRegistry.java b/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/mock/MockRegistry.java
similarity index 100%
rename from dubbo-config/dubbo-config-api/src/main/test/java/org/apache/dubbo/config/mock/MockRegistry.java
rename to dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/mock/MockRegistry.java
diff --git a/dubbo-config/dubbo-config-api/src/main/test/java/org/apache/dubbo/config/mock/MockRegistryFactory.java b/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/mock/MockRegistryFactory.java
similarity index 100%
rename from dubbo-config/dubbo-config-api/src/main/test/java/org/apache/dubbo/config/mock/MockRegistryFactory.java
rename to dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/mock/MockRegistryFactory.java
diff --git a/dubbo-config/dubbo-config-api/src/main/test/java/org/apache/dubbo/config/mock/MockRegistryFactory2.java b/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/mock/MockRegistryFactory2.java
similarity index 100%
rename from dubbo-config/dubbo-config-api/src/main/test/java/org/apache/dubbo/config/mock/MockRegistryFactory2.java
rename to dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/mock/MockRegistryFactory2.java
diff --git a/dubbo-config/dubbo-config-api/src/main/test/java/org/apache/dubbo/config/mock/MockStatusChecker.java b/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/mock/MockStatusChecker.java
similarity index 100%
rename from dubbo-config/dubbo-config-api/src/main/test/java/org/apache/dubbo/config/mock/MockStatusChecker.java
rename to dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/mock/MockStatusChecker.java
diff --git a/dubbo-config/dubbo-config-api/src/main/test/java/org/apache/dubbo/config/mock/MockTelnetHandler.java b/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/mock/MockTelnetHandler.java
similarity index 100%
rename from dubbo-config/dubbo-config-api/src/main/test/java/org/apache/dubbo/config/mock/MockTelnetHandler.java
rename to dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/mock/MockTelnetHandler.java
diff --git a/dubbo-config/dubbo-config-api/src/main/test/java/org/apache/dubbo/config/mock/MockThreadPool.java b/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/mock/MockThreadPool.java
similarity index 100%
rename from dubbo-config/dubbo-config-api/src/main/test/java/org/apache/dubbo/config/mock/MockThreadPool.java
rename to dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/mock/MockThreadPool.java
diff --git a/dubbo-config/dubbo-config-api/src/main/test/java/org/apache/dubbo/config/mock/MockTransporter.java b/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/mock/MockTransporter.java
similarity index 100%
rename from dubbo-config/dubbo-config-api/src/main/test/java/org/apache/dubbo/config/mock/MockTransporter.java
rename to dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/mock/MockTransporter.java
diff --git a/dubbo-config/dubbo-config-api/src/main/test/java/org/apache/dubbo/config/mock/TestProxyFactory.java b/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/mock/TestProxyFactory.java
similarity index 100%
rename from dubbo-config/dubbo-config-api/src/main/test/java/org/apache/dubbo/config/mock/TestProxyFactory.java
rename to dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/mock/TestProxyFactory.java
diff --git a/dubbo-config/dubbo-config-api/src/main/test/java/org/apache/dubbo/config/provider/impl/DemoServiceImpl.java b/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/provider/impl/DemoServiceImpl.java
similarity index 100%
rename from dubbo-config/dubbo-config-api/src/main/test/java/org/apache/dubbo/config/provider/impl/DemoServiceImpl.java
rename to dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/provider/impl/DemoServiceImpl.java
diff --git a/dubbo-config/dubbo-config-api/src/main/test/java/org/apache/dubbo/config/url/ExporterSideConfigUrlTest.java b/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/url/ExporterSideConfigUrlTest.java
similarity index 100%
rename from dubbo-config/dubbo-config-api/src/main/test/java/org/apache/dubbo/config/url/ExporterSideConfigUrlTest.java
rename to dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/url/ExporterSideConfigUrlTest.java
diff --git a/dubbo-config/dubbo-config-api/src/main/test/java/org/apache/dubbo/config/url/InvokerSideConfigUrlTest.java b/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/url/InvokerSideConfigUrlTest.java
similarity index 100%
rename from dubbo-config/dubbo-config-api/src/main/test/java/org/apache/dubbo/config/url/InvokerSideConfigUrlTest.java
rename to dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/url/InvokerSideConfigUrlTest.java
diff --git a/dubbo-config/dubbo-config-api/src/main/test/java/org/apache/dubbo/config/url/RpcConfigGetSetProxy.java b/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/url/RpcConfigGetSetProxy.java
similarity index 100%
rename from dubbo-config/dubbo-config-api/src/main/test/java/org/apache/dubbo/config/url/RpcConfigGetSetProxy.java
rename to dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/url/RpcConfigGetSetProxy.java
diff --git a/dubbo-config/dubbo-config-api/src/main/test/java/org/apache/dubbo/config/url/UrlTestBase.java b/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/url/UrlTestBase.java
similarity index 100%
rename from dubbo-config/dubbo-config-api/src/main/test/java/org/apache/dubbo/config/url/UrlTestBase.java
rename to dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/url/UrlTestBase.java
diff --git a/dubbo-config/dubbo-config-api/src/main/test/java/org/apache/dubbo/config/utils/MockReferenceConfig.java b/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/utils/MockReferenceConfig.java
similarity index 100%
rename from dubbo-config/dubbo-config-api/src/main/test/java/org/apache/dubbo/config/utils/MockReferenceConfig.java
rename to dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/utils/MockReferenceConfig.java
diff --git a/dubbo-config/dubbo-config-api/src/main/test/java/org/apache/dubbo/config/utils/ReferenceConfigCacheTest.java b/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/utils/ReferenceConfigCacheTest.java
similarity index 100%
rename from dubbo-config/dubbo-config-api/src/main/test/java/org/apache/dubbo/config/utils/ReferenceConfigCacheTest.java
rename to dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/utils/ReferenceConfigCacheTest.java
diff --git a/dubbo-config/dubbo-config-api/src/main/test/java/org/apache/dubbo/config/validation/ValidationParameter.java b/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/validation/ValidationParameter.java
similarity index 100%
rename from dubbo-config/dubbo-config-api/src/main/test/java/org/apache/dubbo/config/validation/ValidationParameter.java
rename to dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/validation/ValidationParameter.java
diff --git a/dubbo-config/dubbo-config-api/src/main/test/java/org/apache/dubbo/config/validation/ValidationService.java b/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/validation/ValidationService.java
similarity index 100%
rename from dubbo-config/dubbo-config-api/src/main/test/java/org/apache/dubbo/config/validation/ValidationService.java
rename to dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/validation/ValidationService.java
diff --git a/dubbo-config/dubbo-config-api/src/main/test/java/org/apache/dubbo/config/validation/ValidationServiceImpl.java b/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/validation/ValidationServiceImpl.java
similarity index 100%
rename from dubbo-config/dubbo-config-api/src/main/test/java/org/apache/dubbo/config/validation/ValidationServiceImpl.java
rename to dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/validation/ValidationServiceImpl.java
diff --git a/dubbo-config/dubbo-config-api/src/main/test/java/org/apache/dubbo/config/validation/ValidationTest.java b/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/validation/ValidationTest.java
similarity index 100%
rename from dubbo-config/dubbo-config-api/src/main/test/java/org/apache/dubbo/config/validation/ValidationTest.java
rename to dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/validation/ValidationTest.java
diff --git a/dubbo-config/dubbo-config-api/src/main/test/resources/META-INF/services/org.apache.dubbo.common.status.StatusChecker b/dubbo-config/dubbo-config-api/src/test/resources/META-INF/services/org.apache.dubbo.common.status.StatusChecker
similarity index 100%
rename from dubbo-config/dubbo-config-api/src/main/test/resources/META-INF/services/org.apache.dubbo.common.status.StatusChecker
rename to dubbo-config/dubbo-config-api/src/test/resources/META-INF/services/org.apache.dubbo.common.status.StatusChecker
diff --git a/dubbo-config/dubbo-config-api/src/main/test/resources/META-INF/services/org.apache.dubbo.common.threadpool.ThreadPool b/dubbo-config/dubbo-config-api/src/test/resources/META-INF/services/org.apache.dubbo.common.threadpool.ThreadPool
similarity index 100%
rename from dubbo-config/dubbo-config-api/src/main/test/resources/META-INF/services/org.apache.dubbo.common.threadpool.ThreadPool
rename to dubbo-config/dubbo-config-api/src/test/resources/META-INF/services/org.apache.dubbo.common.threadpool.ThreadPool
diff --git a/dubbo-config/dubbo-config-api/src/main/test/resources/META-INF/services/org.apache.dubbo.registry.RegistryFactory b/dubbo-config/dubbo-config-api/src/test/resources/META-INF/services/org.apache.dubbo.registry.RegistryFactory
similarity index 100%
rename from dubbo-config/dubbo-config-api/src/main/test/resources/META-INF/services/org.apache.dubbo.registry.RegistryFactory
rename to dubbo-config/dubbo-config-api/src/test/resources/META-INF/services/org.apache.dubbo.registry.RegistryFactory
diff --git a/dubbo-config/dubbo-config-api/src/main/test/resources/META-INF/services/org.apache.dubbo.remoting.Codec b/dubbo-config/dubbo-config-api/src/test/resources/META-INF/services/org.apache.dubbo.remoting.Codec
similarity index 100%
rename from dubbo-config/dubbo-config-api/src/main/test/resources/META-INF/services/org.apache.dubbo.remoting.Codec
rename to dubbo-config/dubbo-config-api/src/test/resources/META-INF/services/org.apache.dubbo.remoting.Codec
diff --git a/dubbo-config/dubbo-config-api/src/main/test/resources/META-INF/services/org.apache.dubbo.remoting.Dispatcher b/dubbo-config/dubbo-config-api/src/test/resources/META-INF/services/org.apache.dubbo.remoting.Dispatcher
similarity index 100%
rename from dubbo-config/dubbo-config-api/src/main/test/resources/META-INF/services/org.apache.dubbo.remoting.Dispatcher
rename to dubbo-config/dubbo-config-api/src/test/resources/META-INF/services/org.apache.dubbo.remoting.Dispatcher
diff --git a/dubbo-config/dubbo-config-api/src/main/test/resources/META-INF/services/org.apache.dubbo.remoting.Transporter b/dubbo-config/dubbo-config-api/src/test/resources/META-INF/services/org.apache.dubbo.remoting.Transporter
similarity index 100%
rename from dubbo-config/dubbo-config-api/src/main/test/resources/META-INF/services/org.apache.dubbo.remoting.Transporter
rename to dubbo-config/dubbo-config-api/src/test/resources/META-INF/services/org.apache.dubbo.remoting.Transporter
diff --git a/dubbo-config/dubbo-config-api/src/main/test/resources/META-INF/services/org.apache.dubbo.remoting.exchange.Exchanger b/dubbo-config/dubbo-config-api/src/test/resources/META-INF/services/org.apache.dubbo.remoting.exchange.Exchanger
similarity index 100%
rename from dubbo-config/dubbo-config-api/src/main/test/resources/META-INF/services/org.apache.dubbo.remoting.exchange.Exchanger
rename to dubbo-config/dubbo-config-api/src/test/resources/META-INF/services/org.apache.dubbo.remoting.exchange.Exchanger
diff --git a/dubbo-config/dubbo-config-api/src/main/test/resources/META-INF/services/org.apache.dubbo.remoting.telnet.TelnetHandler b/dubbo-config/dubbo-config-api/src/test/resources/META-INF/services/org.apache.dubbo.remoting.telnet.TelnetHandler
similarity index 100%
rename from dubbo-config/dubbo-config-api/src/main/test/resources/META-INF/services/org.apache.dubbo.remoting.telnet.TelnetHandler
rename to dubbo-config/dubbo-config-api/src/test/resources/META-INF/services/org.apache.dubbo.remoting.telnet.TelnetHandler
diff --git a/dubbo-config/dubbo-config-api/src/main/test/resources/META-INF/services/org.apache.dubbo.rpc.ExporterListener b/dubbo-config/dubbo-config-api/src/test/resources/META-INF/services/org.apache.dubbo.rpc.ExporterListener
similarity index 100%
rename from dubbo-config/dubbo-config-api/src/main/test/resources/META-INF/services/org.apache.dubbo.rpc.ExporterListener
rename to dubbo-config/dubbo-config-api/src/test/resources/META-INF/services/org.apache.dubbo.rpc.ExporterListener
diff --git a/dubbo-config/dubbo-config-api/src/main/test/resources/META-INF/services/org.apache.dubbo.rpc.Filter b/dubbo-config/dubbo-config-api/src/test/resources/META-INF/services/org.apache.dubbo.rpc.Filter
similarity index 100%
rename from dubbo-config/dubbo-config-api/src/main/test/resources/META-INF/services/org.apache.dubbo.rpc.Filter
rename to dubbo-config/dubbo-config-api/src/test/resources/META-INF/services/org.apache.dubbo.rpc.Filter
diff --git a/dubbo-config/dubbo-config-api/src/main/test/resources/META-INF/services/org.apache.dubbo.rpc.InvokerListener b/dubbo-config/dubbo-config-api/src/test/resources/META-INF/services/org.apache.dubbo.rpc.InvokerListener
similarity index 100%
rename from dubbo-config/dubbo-config-api/src/main/test/resources/META-INF/services/org.apache.dubbo.rpc.InvokerListener
rename to dubbo-config/dubbo-config-api/src/test/resources/META-INF/services/org.apache.dubbo.rpc.InvokerListener
diff --git a/dubbo-config/dubbo-config-api/src/main/test/resources/META-INF/services/org.apache.dubbo.rpc.Protocol b/dubbo-config/dubbo-config-api/src/test/resources/META-INF/services/org.apache.dubbo.rpc.Protocol
similarity index 100%
rename from dubbo-config/dubbo-config-api/src/main/test/resources/META-INF/services/org.apache.dubbo.rpc.Protocol
rename to dubbo-config/dubbo-config-api/src/test/resources/META-INF/services/org.apache.dubbo.rpc.Protocol
diff --git a/dubbo-config/dubbo-config-api/src/main/test/resources/META-INF/services/org.apache.dubbo.rpc.ProxyFactory b/dubbo-config/dubbo-config-api/src/test/resources/META-INF/services/org.apache.dubbo.rpc.ProxyFactory
similarity index 100%
rename from dubbo-config/dubbo-config-api/src/main/test/resources/META-INF/services/org.apache.dubbo.rpc.ProxyFactory
rename to dubbo-config/dubbo-config-api/src/test/resources/META-INF/services/org.apache.dubbo.rpc.ProxyFactory
diff --git a/dubbo-config/dubbo-config-api/src/main/test/resources/META-INF/services/org.apache.dubbo.rpc.cluster.Cluster b/dubbo-config/dubbo-config-api/src/test/resources/META-INF/services/org.apache.dubbo.rpc.cluster.Cluster
similarity index 100%
rename from dubbo-config/dubbo-config-api/src/main/test/resources/META-INF/services/org.apache.dubbo.rpc.cluster.Cluster
rename to dubbo-config/dubbo-config-api/src/test/resources/META-INF/services/org.apache.dubbo.rpc.cluster.Cluster
diff --git a/dubbo-config/dubbo-config-api/src/main/test/resources/META-INF/services/org.apache.dubbo.rpc.cluster.LoadBalance b/dubbo-config/dubbo-config-api/src/test/resources/META-INF/services/org.apache.dubbo.rpc.cluster.LoadBalance
similarity index 100%
rename from dubbo-config/dubbo-config-api/src/main/test/resources/META-INF/services/org.apache.dubbo.rpc.cluster.LoadBalance
rename to dubbo-config/dubbo-config-api/src/test/resources/META-INF/services/org.apache.dubbo.rpc.cluster.LoadBalance
diff --git a/dubbo-config/dubbo-config-api/src/main/test/resources/log4j.xml b/dubbo-config/dubbo-config-api/src/test/resources/log4j.xml
similarity index 100%
rename from dubbo-config/dubbo-config-api/src/main/test/resources/log4j.xml
rename to dubbo-config/dubbo-config-api/src/test/resources/log4j.xml


[incubator-dubbo] 01/04: Merge branch 'master' into dev-metadata

Posted by li...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

liujun pushed a commit to branch dev-metadata
in repository https://gitbox.apache.org/repos/asf/incubator-dubbo.git

commit dbca54ca237b16e157ada4aa2b98eb29117fb2ba
Merge: d11b876 38a6511
Author: ken.lj <ke...@gmail.com>
AuthorDate: Thu Nov 15 11:33:24 2018 +0800

    Merge branch 'master' into dev-metadata
    
    # Conflicts:
    #	dubbo-all/pom.xml
    #	dubbo-bootstrap/pom.xml
    #	dubbo-bootstrap/src/main/java/org/apache/dubbo/bootstrap/DubboBootstrap.java
    #	dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/AbstractConfig.java
    #	dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/AbstractInterfaceConfig.java
    #	dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/ProtocolConfig.java
    #	dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/ReferenceConfig.java
    #	dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/ServiceConfig.java
    #	dubbo-config/dubbo-config-spring/src/main/java/org/apache/dubbo/config/spring/ServiceBean.java
    #	dubbo-config/dubbo-config-spring/src/main/java/org/apache/dubbo/config/spring/context/annotation/DubboConfigConfiguration.java
    #	dubbo-config/dubbo-config-spring/src/test/java/org/apache/dubbo/config/spring/initializer/DubboApplicationListenerTest.java
    #	dubbo-demo/dubbo-demo-consumer/src/main/java/org/apache/dubbo/demo/consumer/Consumer.java

 README.md                                          |   2 +
 codestyle/checkstyle.xml                           |   6 +
 codestyle/dubbo_codestyle_for_idea.xml             |   2 -
 dubbo-bom/pom.xml                                  |   5 -
 .../apache/dubbo/config/AbstractConfigTest.java    |   3 +-
 .../dubbo/config/AbstractInterfaceConfigTest.java  |  27 ++--
 .../dubbo/config/AbstractMethodConfigTest.java     |   7 +
 .../org/apache/dubbo/config/ServiceConfigTest.java |  12 ++
 .../java/org/apache/dubbo/common/Constants.java    |  17 +++
 .../org/apache/dubbo/common/compiler/Compiler.java |   1 -
 .../common/compiler/support/AdaptiveCompiler.java  |   1 -
 .../dubbo/common/extension/DisableInject.java      |  16 ++-
 .../dubbo/common/extension/ExtensionLoader.java    |  21 ++-
 .../apache/dubbo/common/logger/jcl/JclLogger.java  |   1 +
 .../dubbo/common/logger/jcl/JclLoggerAdapter.java  |   1 +
 .../support/eager/EagerThreadPoolExecutor.java     |   2 +-
 .../dubbo/common/timer/HashedWheelTimer.java       |  13 +-
 .../java/org/apache/dubbo/common/timer/Timer.java  |   7 +
 .../Compiler.java => utils/ArrayUtils.java}        |  84 ++++++------
 .../org/apache/dubbo/common/utils/StringUtils.java | 118 +++++++++++------
 .../common/extension/ExtensionLoaderTest.java      |  13 +-
 .../common/extension/injection/InjectExt.java      |  13 +-
 .../extension/injection/impl/InjectExtImpl.java    |  60 +++++++++
 .../apache/dubbo/common/utils/ArrayUtilsTest.java  |  38 +++---
 .../apache/dubbo/common/utils/StringUtilsTest.java |  30 ++++-
 ...ache.dubbo.common.extension.injection.InjectExt |   1 +
 .../main/java/com/alibaba/dubbo/common/URL.java    | 103 ++++++++++++++-
 .../alibaba/dubbo/common/status/StatusChecker.java |   1 +
 .../spring/context/annotation/EnableDubbo.java     |   1 +
 .../java/com/alibaba/dubbo/monitor/Monitor.java    |   1 +
 .../java/com/alibaba/dubbo/registry/Registry.java  |   1 +
 .../java/com/alibaba/dubbo/remoting/Channel.java   |   2 +
 .../main/java/com/alibaba/dubbo/rpc/Exporter.java  |   1 +
 .../main/java/com/alibaba/dubbo/rpc/Filter.java    |   1 +
 .../java/com/alibaba/dubbo/rpc/Invocation.java     |   2 +
 .../main/java/com/alibaba/dubbo/rpc/Invoker.java   |   2 +
 .../com/alibaba/dubbo/rpc/cluster/Directory.java   |   5 +-
 .../java/com/alibaba/dubbo/rpc/cluster/Router.java |   1 +
 ...atibleReferenceAnnotationBeanPostProcessor.java |   4 +-
 .../annotation/CompatibleReferenceBeanBuilder.java |   4 +-
 ...mpatibleServiceAnnotationBeanPostProcessor.java |   4 +-
 .../CompatibleDubboComponentScanRegistrar.java     |   1 +
 .../CompatibleAnnotationBeanDefinitionParser.java  |   3 +-
 .../org/apache/dubbo/config/AbstractConfig.java    |   5 +-
 .../dubbo/config/AbstractInterfaceConfig.java      |  51 +++++---
 .../apache/dubbo/config/AbstractMethodConfig.java  |  23 +++-
 .../org/apache/dubbo/config/ProtocolConfig.java    |   2 +-
 .../org/apache/dubbo/config/ReferenceConfig.java   |   3 +-
 .../org/apache/dubbo/config/ServiceConfig.java     |  13 +-
 dubbo-config/dubbo-config-spring/pom.xml           |   7 +-
 .../apache/dubbo/config/spring/AnnotationBean.java |  24 ++--
 .../apache/dubbo/config/spring/ReferenceBean.java  |   1 +
 .../apache/dubbo/config/spring/ServiceBean.java    |  29 +----
 .../AbstractAnnotationConfigBeanBuilder.java       |   1 +
 .../DubboConfigBindingBeanPostProcessor.java       |   1 +
 .../ReferenceAnnotationBeanPostProcessor.java      |   9 +-
 .../factory/annotation/ReferenceBeanBuilder.java   |   1 +
 .../ServiceAnnotationBeanPostProcessor.java        |   5 +-
 .../context/annotation/DubboComponentScan.java     |   1 +
 .../annotation/DubboComponentScanRegistrar.java    |   1 +
 .../annotation/DubboConfigBindingRegistrar.java    |   1 +
 .../annotation/DubboConfigBindingsRegistrar.java   |   1 +
 .../DubboConfigConfigurationSelector.java          |   1 +
 .../spring/context/annotation/EnableDubbo.java     |   1 +
 .../context/annotation/EnableDubboConfig.java      |   1 +
 .../annotation/EnableDubboConfigBinding.java       |   1 +
 .../properties/DefaultDubboConfigBinder.java       |   1 +
 .../context/properties/DubboConfigBinder.java      |   1 +
 .../converter/StringArrayToMapConverter.java       |   1 +
 .../spring/extension/SpringExtensionFactory.java   |  33 ++++-
 .../DubboApplicationContextInitializer.java        |  39 ------
 .../initializer/DubboApplicationListener.java      |  49 -------
 .../spring/initializer/DubboContextListener.java   |  72 ----------
 .../schema/AnnotationBeanDefinitionParser.java     |   1 +
 .../spring/schema/DubboNamespaceHandler.java       |   1 +
 .../spring/status/DataSourceStatusChecker.java     |   1 +
 .../config/spring/status/SpringStatusChecker.java  |   1 +
 .../dubbo/config/spring/util/BeanFactoryUtils.java |  28 ++++
 .../src/main/resources/META-INF/compat/dubbo.xsd   |  10 ++
 .../src/main/resources/META-INF/dubbo.xsd          |  10 ++
 .../src/main/resources/META-INF/web-fragment.xml   |  22 ----
 .../org/apache/dubbo/config/spring/ConfigTest.java |  33 +++++
 .../annotation/provider/HelloServiceImpl.java      |   2 +-
 .../DubboApplicationContextInitializerTest.java    |  88 -------------
 .../initializer/DubboApplicationListenerTest.java  |  59 ---------
 dubbo-container/dubbo-container-spring/pom.xml     |   7 +-
 .../dubbo/container/spring/SpringContainer.java    |   6 +-
 dubbo-distribution/pom.xml                         |   5 -
 .../org/apache/dubbo/cache/filter/CacheFilter.java |   4 +-
 .../dubbo/cache/support/expiring/ExpiringMap.java  |   2 +-
 .../cache/support/jcache/JCacheFactoryTest.java    |   2 +-
 .../org/apache/dubbo/metrics/MetricRegistry.java   |   1 -
 .../dubbo/qos/protocol/QosProtocolWrapper.java     |   9 +-
 .../java/org/apache/dubbo/qos/server/Server.java   |   1 +
 .../qos/server/handler/HttpProcessHandler.java     |   1 +
 .../qos/server/handler/LocalHostPermitHandler.java |   1 -
 .../qos/server/handler/TelnetProcessHandler.java   |   1 -
 .../java/org/apache/dubbo/qos/textui/TTable.java   |   6 +-
 .../java/org/apache/dubbo/qos/textui/TTree.java    |   2 +-
 .../registry/support/FailbackRegistryTest.java     |  23 ++++
 .../exchange/support/header/AbstractTimerTask.java |  87 +++++++++++++
 .../support/header/HeaderExchangeClient.java       |  67 +++++-----
 .../support/header/HeaderExchangeServer.java       |  76 +++++------
 .../exchange/support/header/HeartBeatTask.java     |  97 --------------
 .../support/header/HeartbeatTimerTask.java         |  62 +++++++++
 .../support/header/ReconnectTimerTask.java         |  61 +++++++++
 .../telnet/support/command/LogTelnetHandler.java   |   1 -
 .../transport/dispatcher/ChannelHandlers.java      |   1 -
 .../exchange/support/header/HeartBeatTaskTest.java |  29 +++--
 .../support/header/HeartbeatHandlerTest.java       |   8 +-
 .../transport/netty/NettyClientToServerTest.java   |  11 +-
 .../transport/netty4/NettyBackedChannelBuffer.java |   1 +
 .../transport/netty4/NettyClientHandler.java       |   4 +-
 .../transport/netty4/NettyServerHandler.java       |   2 +-
 .../transport/netty4/logging/MessageFormatter.java |   1 -
 .../transport/netty4/NettyClientToServerTest.java  |  11 +-
 .../zookeeper/zkclient/ZkClientWrapper.java        |   7 +-
 .../alibaba/dubbo/rpc/service/GenericService.java  |   1 +
 .../java/org/apache/dubbo/rpc/AbstractResult.java  |   1 +
 .../org/apache/dubbo/rpc/AsyncContextImpl.java     |   1 +
 .../java/org/apache/dubbo/rpc/AsyncRpcResult.java  |   1 +
 .../apache/dubbo/rpc/filter/AccessLogFilter.java   |   3 +-
 .../dubbo/rpc/proxy/AbstractProxyFactory.java      |   4 +-
 .../org/apache/dubbo/rpc/support/MockInvoker.java  | 145 +++++++++++++--------
 .../rpc/protocol/dubbo/filter/TraceFilter.java     |   1 +
 .../protocol/dubbo/telnet/InvokeTelnetHandler.java |   1 +
 .../protocol/dubbo/telnet/LogTelnetHandler.java    |   1 -
 .../rpc/protocol/dubbo/DubboProtocolTest.java      |   9 +-
 .../dubbo/ReferenceCountExchangeClientTest.java    |   7 +
 .../hessian/DubboHessianURLConnectionFactory.java  |   1 +
 .../rpc/protocol/hessian/HessianProtocol.java      |   2 +-
 .../dubbo/rpc/protocol/http/HttpProtocol.java      |   1 +
 .../rpc/protocol/http/HttpRemoteInvocation.java    |   1 +
 .../dubbo/rpc/protocol/rest/RpcContextFilter.java  |   1 +
 .../swagger/DubboSwaggerApiListingResource.java    |   7 +-
 .../integration/swagger/DubboSwaggerService.java   |   2 +-
 .../rpc/protocol/rmi/RmiRemoteInvocation.java      |   1 +
 .../dubbo/rpc/protocol/thrift/ThriftCodec.java     |   1 -
 .../serialize/fastjson/FastJsonObjectOutput.java   |   1 +
 .../dubbo/common/serialize/fst/FstFactory.java     |   1 +
 .../serialize/hessian2/Hessian2ObjectInput.java    |   3 +-
 .../serialize/hessian2/Hessian2ObjectOutput.java   |   3 +-
 .../common/serialize/java/JavaObjectOutput.java    |   1 -
 .../common/serialize/kryo/CompatibleKryo.java      |   7 +-
 .../serialize/kryo/utils/AbstractKryoFactory.java  |   5 +-
 .../protostuff/ProtostuffObjectInput.java          |   5 +-
 .../protostuff/ProtostuffObjectOutput.java         |   5 +-
 .../serialize/protostuff/utils/WrapperUtils.java   |   5 +-
 .../dubbo/test/Spring3CompatibilityTest.java       |   1 +
 .../dubbo/test/consumer/ConsumerConfiguration.java |   1 +
 .../dubbo/test/provider/ProviderConfiguration.java |   1 +
 pom.xml                                            |   1 -
 152 files changed, 1224 insertions(+), 878 deletions(-)

diff --cc dubbo-common/src/main/java/org/apache/dubbo/common/extension/ExtensionLoader.java
index 3552f4d,31f72e6..d69b6aa
--- a/dubbo-common/src/main/java/org/apache/dubbo/common/extension/ExtensionLoader.java
+++ b/dubbo-common/src/main/java/org/apache/dubbo/common/extension/ExtensionLoader.java
@@@ -542,10 -532,13 +542,16 @@@ public class ExtensionLoader<T> 
                      if (method.getName().startsWith("set")
                              && method.getParameterTypes().length == 1
                              && Modifier.isPublic(method.getModifiers())) {
+                         /**
+                          * Check {@link DisableInject} to see if we need auto injection for this property
+                          */
+                         if (method.getAnnotation(DisableInject.class) != null) {
+                             continue;
+                         }
                          Class<?> pt = method.getParameterTypes()[0];
 +                        if (ReflectUtils.isPrimitives(pt)) {
 +                            continue;
 +                        }
                          try {
                              String property = method.getName().length() > 3 ? method.getName().substring(3, 4).toLowerCase() + method.getName().substring(4) : "";
                              Object object = objectFactory.getExtension(pt, property);
diff --cc dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/AbstractConfig.java
index 243e8d2,fada00e..5af184d
--- a/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/AbstractConfig.java
+++ b/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/AbstractConfig.java
@@@ -1,627 -1,535 +1,628 @@@
 -/*
 - * 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.config;
 -
 -import org.apache.dubbo.common.Constants;
 -import org.apache.dubbo.common.URL;
 -import org.apache.dubbo.common.extension.ExtensionLoader;
 -import org.apache.dubbo.common.logger.Logger;
 -import org.apache.dubbo.common.logger.LoggerFactory;
 -import org.apache.dubbo.common.utils.CollectionUtils;
 -import org.apache.dubbo.common.utils.ConfigUtils;
 -import org.apache.dubbo.common.utils.ReflectUtils;
 -import org.apache.dubbo.common.utils.StringUtils;
 -import org.apache.dubbo.config.support.Parameter;
 -import org.apache.dubbo.rpc.model.ConsumerMethodModel;
 -
 -import java.io.Serializable;
 -import java.lang.reflect.Method;
 -import java.lang.reflect.Modifier;
 -import java.util.HashMap;
 -import java.util.Map;
 -import java.util.regex.Matcher;
 -import java.util.regex.Pattern;
 -
 -/**
 - * Utility methods and public methods for parsing configuration
 - *
 - * @export
 - */
 -public abstract class AbstractConfig implements Serializable {
 -
 -    protected static final Logger logger = LoggerFactory.getLogger(AbstractConfig.class);
 -    private static final long serialVersionUID = 4267533505537413570L;
 -    private static final int MAX_LENGTH = 200;
 -
 -    private static final int MAX_PATH_LENGTH = 200;
 -
 -    private static final Pattern PATTERN_NAME = Pattern.compile("[\\-._0-9a-zA-Z]+");
 -
 -    private static final Pattern PATTERN_MULTI_NAME = Pattern.compile("[,\\-._0-9a-zA-Z]+");
 -
 -    private static final Pattern PATTERN_METHOD_NAME = Pattern.compile("[a-zA-Z][0-9a-zA-Z]*");
 -
 -    private static final Pattern PATTERN_PATH = Pattern.compile("[/\\-$._0-9a-zA-Z]+");
 -
 -    private static final Pattern PATTERN_NAME_HAS_SYMBOL = Pattern.compile("[:*,\\s/\\-._0-9a-zA-Z]+");
 -
 -    private static final Pattern PATTERN_KEY = Pattern.compile("[*,\\-._0-9a-zA-Z]+");
 -    private static final Map<String, String> legacyProperties = new HashMap<String, String>();
 -    private static final String[] SUFFIXES = new String[]{"Config", "Bean"};
 -
 -    static {
 -        legacyProperties.put("dubbo.protocol.name", "dubbo.service.protocol");
 -        legacyProperties.put("dubbo.protocol.host", "dubbo.service.server.host");
 -        legacyProperties.put("dubbo.protocol.port", "dubbo.service.server.port");
 -        legacyProperties.put("dubbo.protocol.threads", "dubbo.service.max.thread.pool.size");
 -        legacyProperties.put("dubbo.consumer.timeout", "dubbo.service.invoke.timeout");
 -        legacyProperties.put("dubbo.consumer.retries", "dubbo.service.max.retry.providers");
 -        legacyProperties.put("dubbo.consumer.check", "dubbo.service.allow.no.provider");
 -        legacyProperties.put("dubbo.service.url", "dubbo.service.address");
 -
 -        // this is only for compatibility
 -        Runtime.getRuntime().addShutdownHook(DubboShutdownHook.getDubboShutdownHook());
 -    }
 -
 -    protected String id;
 -
 -    private static String convertLegacyValue(String key, String value) {
 -        if (value != null && value.length() > 0) {
 -            if ("dubbo.service.max.retry.providers".equals(key)) {
 -                return String.valueOf(Integer.parseInt(value) - 1);
 -            } else if ("dubbo.service.allow.no.provider".equals(key)) {
 -                return String.valueOf(!Boolean.parseBoolean(value));
 -            }
 -        }
 -        return value;
 -    }
 -
 -    protected static void appendProperties(AbstractConfig config) {
 -        if (config == null) {
 -            return;
 -        }
 -        String prefix = "dubbo." + getTagName(config.getClass()) + ".";
 -        Method[] methods = config.getClass().getMethods();
 -        for (Method method : methods) {
 -            try {
 -                String name = method.getName();
 -                if (name.length() > 3 && name.startsWith("set") && Modifier.isPublic(method.getModifiers())
 -                        && method.getParameterTypes().length == 1 && isPrimitive(method.getParameterTypes()[0])) {
 -                    String property = StringUtils.camelToSplitName(name.substring(3, 4).toLowerCase() + name.substring(4), ".");
 -
 -                    String value = null;
 -                    if (config.getId() != null && config.getId().length() > 0) {
 -                        String pn = prefix + config.getId() + "." + property;
 -                        value = System.getProperty(pn);
 -                        if (!StringUtils.isBlank(value)) {
 -                            logger.info("Use System Property " + pn + " to config dubbo");
 -                        }
 -                    }
 -                    if (value == null || value.length() == 0) {
 -                        String pn = prefix + property;
 -                        value = System.getProperty(pn);
 -                        if (!StringUtils.isBlank(value)) {
 -                            logger.info("Use System Property " + pn + " to config dubbo");
 -                        }
 -                    }
 -                    if (value == null || value.length() == 0) {
 -                        Method getter;
 -                        try {
 -                            getter = config.getClass().getMethod("get" + name.substring(3));
 -                        } catch (NoSuchMethodException e) {
 -                            try {
 -                                getter = config.getClass().getMethod("is" + name.substring(3));
 -                            } catch (NoSuchMethodException e2) {
 -                                getter = null;
 -                            }
 -                        }
 -                        if (getter != null) {
 -                            if (getter.invoke(config) == null) {
 -                                if (config.getId() != null && config.getId().length() > 0) {
 -                                    value = ConfigUtils.getProperty(prefix + config.getId() + "." + property);
 -                                }
 -                                if (value == null || value.length() == 0) {
 -                                    value = ConfigUtils.getProperty(prefix + property);
 -                                }
 -                                if (value == null || value.length() == 0) {
 -                                    String legacyKey = legacyProperties.get(prefix + property);
 -                                    if (legacyKey != null && legacyKey.length() > 0) {
 -                                        value = convertLegacyValue(legacyKey, ConfigUtils.getProperty(legacyKey));
 -                                    }
 -                                }
 -
 -                            }
 -                        }
 -                    }
 -                    if (value != null && value.length() > 0) {
 -                        method.invoke(config, convertPrimitive(method.getParameterTypes()[0], value));
 -                    }
 -                }
 -            } catch (Exception e) {
 -                logger.error(e.getMessage(), e);
 -            }
 -        }
 -    }
 -
 -    private static String getTagName(Class<?> cls) {
 -        String tag = cls.getSimpleName();
 -        for (String suffix : SUFFIXES) {
 -            if (tag.endsWith(suffix)) {
 -                tag = tag.substring(0, tag.length() - suffix.length());
 -                break;
 -            }
 -        }
 -        tag = tag.toLowerCase();
 -        return tag;
 -    }
 -
 -    protected static void appendParameters(Map<String, String> parameters, Object config) {
 -        appendParameters(parameters, config, null);
 -    }
 -
 -    @SuppressWarnings("unchecked")
 -    protected static void appendParameters(Map<String, String> parameters, Object config, String prefix) {
 -        if (config == null) {
 -            return;
 -        }
 -        Method[] methods = config.getClass().getMethods();
 -        for (Method method : methods) {
 -            try {
 -                String name = method.getName();
 -                if ((name.startsWith("get") || name.startsWith("is"))
 -                        && !"getClass".equals(name)
 -                        && Modifier.isPublic(method.getModifiers())
 -                        && method.getParameterTypes().length == 0
 -                        && isPrimitive(method.getReturnType())) {
 -                    Parameter parameter = method.getAnnotation(Parameter.class);
 -                    if (method.getReturnType() == Object.class || parameter != null && parameter.excluded()) {
 -                        continue;
 -                    }
 -                    int i = name.startsWith("get") ? 3 : 2;
 -                    String prop = StringUtils.camelToSplitName(name.substring(i, i + 1).toLowerCase() + name.substring(i + 1), ".");
 -                    String key;
 -                    if (parameter != null && parameter.key().length() > 0) {
 -                        key = parameter.key();
 -                    } else {
 -                        key = prop;
 -                    }
 -                    Object value = method.invoke(config);
 -                    String str = String.valueOf(value).trim();
 -                    if (value != null && str.length() > 0) {
 -                        if (parameter != null && parameter.escaped()) {
 -                            str = URL.encode(str);
 -                        }
 -                        if (parameter != null && parameter.append()) {
 -                            String pre = parameters.get(Constants.DEFAULT_KEY + "." + key);
 -                            if (pre != null && pre.length() > 0) {
 -                                str = pre + "," + str;
 -                            }
 -                            pre = parameters.get(key);
 -                            if (pre != null && pre.length() > 0) {
 -                                str = pre + "," + str;
 -                            }
 -                        }
 -                        if (prefix != null && prefix.length() > 0) {
 -                            key = prefix + "." + key;
 -                        }
 -                        parameters.put(key, str);
 -                    } else if (parameter != null && parameter.required()) {
 -                        throw new IllegalStateException(config.getClass().getSimpleName() + "." + key + " == null");
 -                    }
 -                } else if ("getParameters".equals(name)
 -                        && Modifier.isPublic(method.getModifiers())
 -                        && method.getParameterTypes().length == 0
 -                        && method.getReturnType() == Map.class) {
 -                    Map<String, String> map = (Map<String, String>) method.invoke(config, new Object[0]);
 -                    if (map != null && map.size() > 0) {
 -                        String pre = (prefix != null && prefix.length() > 0 ? prefix + "." : "");
 -                        for (Map.Entry<String, String> entry : map.entrySet()) {
 -                            parameters.put(pre + entry.getKey().replace('-', '.'), entry.getValue());
 -                        }
 -                    }
 -                }
 -            } catch (Exception e) {
 -                throw new IllegalStateException(e.getMessage(), e);
 -            }
 -        }
 -    }
 -
 -    protected static void appendAttributes(Map<String, Object> parameters, Object config) {
 -        appendAttributes(parameters, config, null);
 -    }
 -
 -    protected static void appendAttributes(Map<String, Object> parameters, Object config, String prefix) {
 -        if (config == null) {
 -            return;
 -        }
 -        Method[] methods = config.getClass().getMethods();
 -        for (Method method : methods) {
 -            try {
 -                Parameter parameter = method.getAnnotation(Parameter.class);
 -                if (parameter == null || !parameter.attribute()) {
 -                    continue;
 -                }
 -                String name = method.getName();
 -                if ((name.startsWith("get") || name.startsWith("is"))
 -                        && !"getClass".equals(name)
 -                        && Modifier.isPublic(method.getModifiers())
 -                        && method.getParameterTypes().length == 0
 -                        && isPrimitive(method.getReturnType())) {
 -                    String key;
 -                    if (parameter.key().length() > 0) {
 -                        key = parameter.key();
 -                    } else {
 -                        int i = name.startsWith("get") ? 3 : 2;
 -                        key = name.substring(i, i + 1).toLowerCase() + name.substring(i + 1);
 -                    }
 -                    Object value = method.invoke(config);
 -                    if (value != null) {
 -                        if (prefix != null && prefix.length() > 0) {
 -                            key = prefix + "." + key;
 -                        }
 -                        parameters.put(key, value);
 -                    }
 -                }
 -            } catch (Exception e) {
 -                throw new IllegalStateException(e.getMessage(), e);
 -            }
 -        }
 -    }
 -
 -    protected static ConsumerMethodModel.AsyncMethodInfo convertMethodConfig2AyncInfo(MethodConfig methodConfig) {
 -        if (methodConfig == null || (methodConfig.getOninvoke() == null && methodConfig.getOnreturn() == null && methodConfig.getOnthrow() == null)) {
 -            return null;
 -        }
 -
 -        //check config conflict
 -        if (Boolean.FALSE.equals(methodConfig.isReturn()) && (methodConfig.getOnreturn() != null || methodConfig.getOnthrow() != null)) {
 -            throw new IllegalStateException("method config error : return attribute must be set true when onreturn or onthrow has been set.");
 -        }
 -
 -        ConsumerMethodModel.AsyncMethodInfo asyncMethodInfo = new ConsumerMethodModel.AsyncMethodInfo();
 -
 -        asyncMethodInfo.setOninvokeInstance(methodConfig.getOninvoke());
 -        asyncMethodInfo.setOnreturnInstance(methodConfig.getOnreturn());
 -        asyncMethodInfo.setOnthrowInstance(methodConfig.getOnthrow());
 -
 -        try {
 -            String oninvokeMethod = methodConfig.getOninvokeMethod();
 -            if (StringUtils.isNotEmpty(oninvokeMethod)) {
 -                asyncMethodInfo.setOninvokeMethod(getMethodByName(methodConfig.getOninvoke().getClass(), oninvokeMethod));
 -            }
 -
 -            String onreturnMethod = methodConfig.getOnreturnMethod();
 -            if (StringUtils.isNotEmpty(onreturnMethod)) {
 -                asyncMethodInfo.setOnreturnMethod(getMethodByName(methodConfig.getOnreturn().getClass(), onreturnMethod));
 -            }
 -
 -            String onthrowMethod = methodConfig.getOnthrowMethod();
 -            if (StringUtils.isNotEmpty(onthrowMethod)) {
 -                asyncMethodInfo.setOnthrowMethod(getMethodByName(methodConfig.getOnthrow().getClass(), onthrowMethod));
 -            }
 -        } catch (Exception e) {
 -            throw new IllegalStateException(e.getMessage(), e);
 -        }
 -
 -        return asyncMethodInfo;
 -    }
 -
 -    private static Method getMethodByName(Class<?> clazz, String methodName) {
 -        try {
 -            return ReflectUtils.findMethodByMethodName(clazz, methodName);
 -        } catch (Exception e) {
 -            throw new IllegalStateException(e);
 -        }
 -    }
 -
 -    private static boolean isPrimitive(Class<?> type) {
 -        return type.isPrimitive()
 -                || type == String.class
 -                || type == Character.class
 -                || type == Boolean.class
 -                || type == Byte.class
 -                || type == Short.class
 -                || type == Integer.class
 -                || type == Long.class
 -                || type == Float.class
 -                || type == Double.class
 -                || type == Object.class;
 -    }
 -
 -    private static Object convertPrimitive(Class<?> type, String value) {
 -        if (type == char.class || type == Character.class) {
 -            return value.length() > 0 ? value.charAt(0) : '\0';
 -        } else if (type == boolean.class || type == Boolean.class) {
 -            return Boolean.valueOf(value);
 -        } else if (type == byte.class || type == Byte.class) {
 -            return Byte.valueOf(value);
 -        } else if (type == short.class || type == Short.class) {
 -            return Short.valueOf(value);
 -        } else if (type == int.class || type == Integer.class) {
 -            return Integer.valueOf(value);
 -        } else if (type == long.class || type == Long.class) {
 -            return Long.valueOf(value);
 -        } else if (type == float.class || type == Float.class) {
 -            return Float.valueOf(value);
 -        } else if (type == double.class || type == Double.class) {
 -            return Double.valueOf(value);
 -        }
 -        return value;
 -    }
 -
 -    protected static void checkExtension(Class<?> type, String property, String value) {
 -        checkName(property, value);
 -        if (value != null && value.length() > 0
 -                && !ExtensionLoader.getExtensionLoader(type).hasExtension(value)) {
 -            throw new IllegalStateException("No such extension " + value + " for " + property + "/" + type.getName());
 -        }
 -    }
 -
 -    protected static void checkMultiExtension(Class<?> type, String property, String value) {
 -        checkMultiName(property, value);
 -        if (value != null && value.length() > 0) {
 -            String[] values = value.split("\\s*[,]+\\s*");
 -            for (String v : values) {
 -                if (v.startsWith(Constants.REMOVE_VALUE_PREFIX)) {
 -                    v = v.substring(1);
 -                }
 -                if (Constants.DEFAULT_KEY.equals(v)) {
 -                    continue;
 -                }
 -                if (!ExtensionLoader.getExtensionLoader(type).hasExtension(v)) {
 -                    throw new IllegalStateException("No such extension " + v + " for " + property + "/" + type.getName());
 -                }
 -            }
 -        }
 -    }
 -
 -    protected static void checkLength(String property, String value) {
 -        checkProperty(property, value, MAX_LENGTH, null);
 -    }
 -
 -    protected static void checkPathLength(String property, String value) {
 -        checkProperty(property, value, MAX_PATH_LENGTH, null);
 -    }
 -
 -    protected static void checkName(String property, String value) {
 -        checkProperty(property, value, MAX_LENGTH, PATTERN_NAME);
 -    }
 -
 -    protected static void checkNameHasSymbol(String property, String value) {
 -        checkProperty(property, value, MAX_LENGTH, PATTERN_NAME_HAS_SYMBOL);
 -    }
 -
 -    protected static void checkKey(String property, String value) {
 -        checkProperty(property, value, MAX_LENGTH, PATTERN_KEY);
 -    }
 -
 -    protected static void checkMultiName(String property, String value) {
 -        checkProperty(property, value, MAX_LENGTH, PATTERN_MULTI_NAME);
 -    }
 -
 -    protected static void checkPathName(String property, String value) {
 -        checkProperty(property, value, MAX_PATH_LENGTH, PATTERN_PATH);
 -    }
 -
 -    protected static void checkMethodName(String property, String value) {
 -        checkProperty(property, value, MAX_LENGTH, PATTERN_METHOD_NAME);
 -    }
 -
 -    protected static void checkParameterName(Map<String, String> parameters) {
 -        if (parameters == null || parameters.size() == 0) {
 -            return;
 -        }
 -        for (Map.Entry<String, String> entry : parameters.entrySet()) {
 -            checkNameHasSymbol(entry.getKey(), entry.getValue());
 -        }
 -    }
 -
 -    protected static void checkProperty(String property, String value, int maxlength, Pattern pattern) {
 -        if (value == null || value.length() == 0) {
 -            return;
 -        }
 -        if (value.length() > maxlength) {
 -            throw new IllegalStateException("Invalid " + property + "=\"" + value + "\" is longer than " + maxlength);
 -        }
 -        if (pattern != null) {
 -            Matcher matcher = pattern.matcher(value);
 -            if (!matcher.matches()) {
 -                throw new IllegalStateException("Invalid " + property + "=\"" + value + "\" contains illegal " +
 -                        "character, only digit, letter, '-', '_' or '.' is legal.");
 -            }
 -        }
 -    }
 -
 -    @Parameter(excluded = true)
 -    public String getId() {
 -        return id;
 -    }
 -
 -    public void setId(String id) {
 -        this.id = id;
 -    }
 -
 -    protected void appendAnnotation(Class<?> annotationClass, Object annotation) {
 -        Method[] methods = annotationClass.getMethods();
 -        for (Method method : methods) {
 -            if (method.getDeclaringClass() != Object.class
 -                    && method.getReturnType() != void.class
 -                    && method.getParameterTypes().length == 0
 -                    && Modifier.isPublic(method.getModifiers())
 -                    && !Modifier.isStatic(method.getModifiers())) {
 -                try {
 -                    String property = method.getName();
 -                    if ("interfaceClass".equals(property) || "interfaceName".equals(property)) {
 -                        property = "interface";
 -                    }
 -                    String setter = "set" + property.substring(0, 1).toUpperCase() + property.substring(1);
 -                    Object value = method.invoke(annotation);
 -                    if (value != null && !value.equals(method.getDefaultValue())) {
 -                        Class<?> parameterType = ReflectUtils.getBoxedClass(method.getReturnType());
 -                        if ("filter".equals(property) || "listener".equals(property)) {
 -                            parameterType = String.class;
 -                            value = StringUtils.join((String[]) value, ",");
 -                        } else if ("parameters".equals(property)) {
 -                            parameterType = Map.class;
 -                            value = CollectionUtils.toStringMap((String[]) value);
 -                        }
 -                        try {
 -                            Method setterMethod = getClass().getMethod(setter, parameterType);
 -                            setterMethod.invoke(this, value);
 -                        } catch (NoSuchMethodException e) {
 -                            // ignore
 -                        }
 -                    }
 -                } catch (Throwable e) {
 -                    logger.error(e.getMessage(), e);
 -                }
 -            }
 -        }
 -    }
 -
 -    @Override
 -    public String toString() {
 -        try {
 -            StringBuilder buf = new StringBuilder();
 -            buf.append("<dubbo:");
 -            buf.append(getTagName(getClass()));
 -            Method[] methods = getClass().getMethods();
 -            for (Method method : methods) {
 -                try {
 -                    String name = method.getName();
 -                    if ((name.startsWith("get") || name.startsWith("is"))
 -                            && !"get".equals(name) && !"is".equals(name)
 -                            && !"getClass".equals(name) && !"getObject".equals(name)
 -                            && Modifier.isPublic(method.getModifiers())
 -                            && method.getParameterTypes().length == 0
 -                            && isPrimitive(method.getReturnType())) {
 -                        int i = name.startsWith("get") ? 3 : 2;
 -                        String key = name.substring(i, i + 1).toLowerCase() + name.substring(i + 1);
 -                        Object value = method.invoke(this);
 -                        if (value != null) {
 -                            buf.append(" ");
 -                            buf.append(key);
 -                            buf.append("=\"");
 -                            buf.append(value);
 -                            buf.append("\"");
 -                        }
 -                    }
 -                } catch (Exception e) {
 -                    logger.warn(e.getMessage(), e);
 -                }
 -            }
 -            buf.append(" />");
 -            return buf.toString();
 -        } catch (Throwable t) {
 -            logger.warn(t.getMessage(), t);
 -            return super.toString();
 -        }
 -    }
 -
 -}
 +/*
 + * 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.config;
 +
 +import org.apache.dubbo.common.Constants;
 +import org.apache.dubbo.common.URL;
 +import org.apache.dubbo.common.config.CompositeConfiguration;
 +import org.apache.dubbo.common.config.Configuration;
 +import org.apache.dubbo.common.extension.ExtensionLoader;
 +import org.apache.dubbo.common.logger.Logger;
 +import org.apache.dubbo.common.logger.LoggerFactory;
 +import org.apache.dubbo.common.utils.CollectionUtils;
 +import org.apache.dubbo.common.utils.ReflectUtils;
 +import org.apache.dubbo.common.utils.StringUtils;
 +import org.apache.dubbo.config.context.Environment;
 +import org.apache.dubbo.config.support.Parameter;
 +import org.apache.dubbo.config.utils.ConfigConverter;
 +import org.apache.dubbo.rpc.model.ConsumerMethodModel;
 +
 +import java.io.Serializable;
 +import java.lang.reflect.Method;
 +import java.lang.reflect.Modifier;
 +import java.util.HashMap;
 +import java.util.Map;
 +import java.util.regex.Matcher;
 +import java.util.regex.Pattern;
 +
 +/**
 + * Utility methods and public methods for parsing configuration
 + *
 + * @export
 + */
 +public abstract class AbstractConfig implements Serializable {
 +
 +    protected static final Logger logger = LoggerFactory.getLogger(AbstractConfig.class);
 +    private static final long serialVersionUID = 4267533505537413570L;
 +    private static final int MAX_LENGTH = 200;
 +
 +    private static final int MAX_PATH_LENGTH = 200;
 +
 +    private static final Pattern PATTERN_NAME = Pattern.compile("[\\-._0-9a-zA-Z]+");
 +
 +    private static final Pattern PATTERN_MULTI_NAME = Pattern.compile("[,\\-._0-9a-zA-Z]+");
 +
 +    private static final Pattern PATTERN_METHOD_NAME = Pattern.compile("[a-zA-Z][0-9a-zA-Z]*");
 +
 +    private static final Pattern PATTERN_PATH = Pattern.compile("[/\\-$._0-9a-zA-Z]+");
 +
-     private static final Pattern PATTERN_NAME_HAS_SYMBOL = Pattern.compile("[:*,/\\-._0-9a-zA-Z]+");
++    private static final Pattern PATTERN_NAME_HAS_SYMBOL = Pattern.compile("[:*,\\s/\\-._0-9a-zA-Z]+");
 +
 +    private static final Pattern PATTERN_KEY = Pattern.compile("[*,\\-._0-9a-zA-Z]+");
 +    private static final Map<String, String> legacyProperties = new HashMap<String, String>();
 +    private static final String[] SUFFIXES = new String[]{"Config", "Bean"};
 +
 +    private boolean init;
 +    private volatile Map<String, String> metaData;
 +
 +    static {
 +        legacyProperties.put("dubbo.protocol.name", "dubbo.service.protocol");
 +        legacyProperties.put("dubbo.protocol.host", "dubbo.service.server.host");
 +        legacyProperties.put("dubbo.protocol.port", "dubbo.service.server.port");
 +        legacyProperties.put("dubbo.protocol.threads", "dubbo.service.max.thread.pool.size");
 +        legacyProperties.put("dubbo.consumer.timeout", "dubbo.service.invoke.timeout");
 +        legacyProperties.put("dubbo.consumer.retries", "dubbo.service.max.retry.providers");
 +        legacyProperties.put("dubbo.consumer.check", "dubbo.service.allow.no.provider");
 +        legacyProperties.put("dubbo.service.url", "dubbo.service.address");
 +    }
 +
 +    protected String id;
 +
 +    private static String convertLegacyValue(String key, String value) {
 +        if (value != null && value.length() > 0) {
 +            if ("dubbo.service.max.retry.providers".equals(key)) {
 +                return String.valueOf(Integer.parseInt(value) - 1);
 +            } else if ("dubbo.service.allow.no.provider".equals(key)) {
 +                return String.valueOf(!Boolean.parseBoolean(value));
 +            }
 +        }
 +        return value;
 +    }
 +
 +    private static String getTagName(Class<?> cls) {
 +        String tag = cls.getSimpleName();
 +        for (String suffix : SUFFIXES) {
 +            if (tag.endsWith(suffix)) {
 +                tag = tag.substring(0, tag.length() - suffix.length());
 +                break;
 +            }
 +        }
 +        tag = tag.toLowerCase();
 +        return tag;
 +    }
 +
 +    protected static void appendParameters(Map<String, String> parameters, Object config) {
 +        appendParameters(parameters, config, null);
 +    }
 +
 +    @SuppressWarnings("unchecked")
 +    protected static void appendParameters(Map<String, String> parameters, Object config, String prefix) {
 +        if (config == null) {
 +            return;
 +        }
 +        Method[] methods = config.getClass().getMethods();
 +        for (Method method : methods) {
 +            try {
 +                String name = method.getName();
 +                if ((name.startsWith("get") || name.startsWith("is"))
 +                        && !"getClass".equals(name)
 +                        && Modifier.isPublic(method.getModifiers())
 +                        && method.getParameterTypes().length == 0
 +                        && isPrimitive(method.getReturnType())) {
 +                    Parameter parameter = method.getAnnotation(Parameter.class);
 +                    if (method.getReturnType() == Object.class || parameter != null && parameter.excluded()) {
 +                        continue;
 +                    }
 +                    int i = name.startsWith("get") ? 3 : 2;
 +                    String prop = StringUtils.camelToSplitName(name.substring(i, i + 1).toLowerCase() + name.substring(i + 1), ".");
 +                    String key;
 +                    if (parameter != null && parameter.key().length() > 0) {
 +                        key = parameter.key();
 +                    } else {
 +                        key = prop;
 +                    }
 +                    Object value = method.invoke(config);
 +                    String str = String.valueOf(value).trim();
 +                    if (value != null && str.length() > 0) {
 +                        if (parameter != null && parameter.escaped()) {
 +                            str = URL.encode(str);
 +                        }
 +                        if (parameter != null && parameter.append()) {
 +                            String pre = parameters.get(Constants.DEFAULT_KEY + "." + key);
 +                            if (pre != null && pre.length() > 0) {
 +                                str = pre + "," + str;
 +                            }
 +                            pre = parameters.get(key);
 +                            if (pre != null && pre.length() > 0) {
 +                                str = pre + "," + str;
 +                            }
 +                        }
 +                        if (prefix != null && prefix.length() > 0) {
 +                            key = prefix + "." + key;
 +                        }
 +                        parameters.put(key, str);
 +                    } else if (parameter != null && parameter.required()) {
 +                        throw new IllegalStateException(config.getClass().getSimpleName() + "." + key + " == null");
 +                    }
 +                } else if ("getParameters".equals(name)
 +                        && Modifier.isPublic(method.getModifiers())
 +                        && method.getParameterTypes().length == 0
 +                        && method.getReturnType() == Map.class) {
 +                    Map<String, String> map = (Map<String, String>) method.invoke(config, new Object[0]);
 +                    if (map != null && map.size() > 0) {
 +                        String pre = (prefix != null && prefix.length() > 0 ? prefix + "." : "");
 +                        for (Map.Entry<String, String> entry : map.entrySet()) {
 +                            parameters.put(pre + entry.getKey().replace('-', '.'), entry.getValue());
 +                        }
 +                    }
 +                }
 +            } catch (Exception e) {
 +                throw new IllegalStateException(e.getMessage(), e);
 +            }
 +        }
 +    }
 +
 +    protected static void appendAttributes(Map<String, Object> parameters, Object config) {
 +        appendAttributes(parameters, config, null);
 +    }
 +
 +    protected static void appendAttributes(Map<String, Object> parameters, Object config, String prefix) {
 +        if (config == null) {
 +            return;
 +        }
 +        Method[] methods = config.getClass().getMethods();
 +        for (Method method : methods) {
 +            try {
 +                Parameter parameter = method.getAnnotation(Parameter.class);
 +                if (parameter == null || !parameter.attribute()) {
 +                    continue;
 +                }
 +                String name = method.getName();
 +                if ((name.startsWith("get") || name.startsWith("is"))
 +                        && !"getClass".equals(name)
 +                        && Modifier.isPublic(method.getModifiers())
 +                        && method.getParameterTypes().length == 0
 +                        && isPrimitive(method.getReturnType())) {
 +                    String key;
 +                    if (parameter.key().length() > 0) {
 +                        key = parameter.key();
 +                    } else {
 +                        int i = name.startsWith("get") ? 3 : 2;
 +                        key = name.substring(i, i + 1).toLowerCase() + name.substring(i + 1);
 +                    }
 +                    Object value = method.invoke(config);
 +                    if (value != null) {
 +                        if (prefix != null && prefix.length() > 0) {
 +                            key = prefix + "." + key;
 +                        }
 +                        parameters.put(key, value);
 +                    }
 +                }
 +            } catch (Exception e) {
 +                throw new IllegalStateException(e.getMessage(), e);
 +            }
 +        }
 +    }
 +
 +    protected static ConsumerMethodModel.AsyncMethodInfo convertMethodConfig2AyncInfo(MethodConfig methodConfig) {
 +        if (methodConfig == null || (methodConfig.getOninvoke() == null && methodConfig.getOnreturn() == null && methodConfig.getOnthrow() == null)) {
 +            return null;
 +        }
 +
 +        //check config conflict
 +        if (Boolean.FALSE.equals(methodConfig.isReturn()) && (methodConfig.getOnreturn() != null || methodConfig.getOnthrow() != null)) {
 +            throw new IllegalStateException("method config error : return attribute must be set true when onreturn or onthrow has been set.");
 +        }
 +
 +        ConsumerMethodModel.AsyncMethodInfo asyncMethodInfo = new ConsumerMethodModel.AsyncMethodInfo();
 +
 +        asyncMethodInfo.setOninvokeInstance(methodConfig.getOninvoke());
 +        asyncMethodInfo.setOnreturnInstance(methodConfig.getOnreturn());
 +        asyncMethodInfo.setOnthrowInstance(methodConfig.getOnthrow());
 +
 +        try {
 +            String oninvokeMethod = methodConfig.getOninvokeMethod();
 +            if (StringUtils.isNotEmpty(oninvokeMethod)) {
 +                asyncMethodInfo.setOninvokeMethod(getMethodByName(methodConfig.getOninvoke().getClass(), oninvokeMethod));
 +            }
 +
 +            String onreturnMethod = methodConfig.getOnreturnMethod();
 +            if (StringUtils.isNotEmpty(onreturnMethod)) {
 +                asyncMethodInfo.setOnreturnMethod(getMethodByName(methodConfig.getOnreturn().getClass(), onreturnMethod));
 +            }
 +
 +            String onthrowMethod = methodConfig.getOnthrowMethod();
 +            if (StringUtils.isNotEmpty(onthrowMethod)) {
 +                asyncMethodInfo.setOnthrowMethod(getMethodByName(methodConfig.getOnthrow().getClass(), onthrowMethod));
 +            }
 +        } catch (Exception e) {
 +            throw new IllegalStateException(e.getMessage(), e);
 +        }
 +
 +        return asyncMethodInfo;
 +    }
 +
 +    private static Method getMethodByName(Class<?> clazz, String methodName) {
 +        try {
 +            return ReflectUtils.findMethodByMethodName(clazz, methodName);
 +        } catch (Exception e) {
 +            throw new IllegalStateException(e);
 +        }
 +    }
 +
 +    private static boolean isPrimitive(Class<?> type) {
 +        return type.isPrimitive()
 +                || type == String.class
 +                || type == Character.class
 +                || type == Boolean.class
 +                || type == Byte.class
 +                || type == Short.class
 +                || type == Integer.class
 +                || type == Long.class
 +                || type == Float.class
 +                || type == Double.class
 +                || type == Object.class;
 +    }
 +
 +    private static Object convertPrimitive(Class<?> type, String value) {
 +        if (type == char.class || type == Character.class) {
 +            return value.length() > 0 ? value.charAt(0) : '\0';
 +        } else if (type == boolean.class || type == Boolean.class) {
 +            return Boolean.valueOf(value);
 +        } else if (type == byte.class || type == Byte.class) {
 +            return Byte.valueOf(value);
 +        } else if (type == short.class || type == Short.class) {
 +            return Short.valueOf(value);
 +        } else if (type == int.class || type == Integer.class) {
 +            return Integer.valueOf(value);
 +        } else if (type == long.class || type == Long.class) {
 +            return Long.valueOf(value);
 +        } else if (type == float.class || type == Float.class) {
 +            return Float.valueOf(value);
 +        } else if (type == double.class || type == Double.class) {
 +            return Double.valueOf(value);
 +        }
 +        return value;
 +    }
 +
 +    protected static void checkExtension(Class<?> type, String property, String value) {
 +        checkName(property, value);
 +        if (value != null && value.length() > 0
 +                && !ExtensionLoader.getExtensionLoader(type).hasExtension(value)) {
 +            throw new IllegalStateException("No such extension " + value + " for " + property + "/" + type.getName());
 +        }
 +    }
 +
 +    protected static void checkMultiExtension(Class<?> type, String property, String value) {
 +        checkMultiName(property, value);
 +        if (value != null && value.length() > 0) {
 +            String[] values = value.split("\\s*[,]+\\s*");
 +            for (String v : values) {
 +                if (v.startsWith(Constants.REMOVE_VALUE_PREFIX)) {
 +                    v = v.substring(1);
 +                }
 +                if (Constants.DEFAULT_KEY.equals(v)) {
 +                    continue;
 +                }
 +                if (!ExtensionLoader.getExtensionLoader(type).hasExtension(v)) {
 +                    throw new IllegalStateException("No such extension " + v + " for " + property + "/" + type.getName());
 +                }
 +            }
 +        }
 +    }
 +
 +    protected static void checkLength(String property, String value) {
 +        checkProperty(property, value, MAX_LENGTH, null);
 +    }
 +
 +    protected static void checkPathLength(String property, String value) {
 +        checkProperty(property, value, MAX_PATH_LENGTH, null);
 +    }
 +
 +    protected static void checkName(String property, String value) {
 +        checkProperty(property, value, MAX_LENGTH, PATTERN_NAME);
 +    }
 +
 +    protected static void checkNameHasSymbol(String property, String value) {
 +        checkProperty(property, value, MAX_LENGTH, PATTERN_NAME_HAS_SYMBOL);
 +    }
 +
 +    protected static void checkKey(String property, String value) {
 +        checkProperty(property, value, MAX_LENGTH, PATTERN_KEY);
 +    }
 +
 +    protected static void checkMultiName(String property, String value) {
 +        checkProperty(property, value, MAX_LENGTH, PATTERN_MULTI_NAME);
 +    }
 +
 +    protected static void checkPathName(String property, String value) {
 +        checkProperty(property, value, MAX_PATH_LENGTH, PATTERN_PATH);
 +    }
 +
 +    protected static void checkMethodName(String property, String value) {
 +        checkProperty(property, value, MAX_LENGTH, PATTERN_METHOD_NAME);
 +    }
 +
 +    protected static void checkParameterName(Map<String, String> parameters) {
 +        if (parameters == null || parameters.size() == 0) {
 +            return;
 +        }
 +        for (Map.Entry<String, String> entry : parameters.entrySet()) {
 +            checkNameHasSymbol(entry.getKey(), entry.getValue());
 +        }
 +    }
 +
 +    protected static void checkProperty(String property, String value, int maxlength, Pattern pattern) {
 +        if (value == null || value.length() == 0) {
 +            return;
 +        }
 +        if (value.length() > maxlength) {
 +            throw new IllegalStateException("Invalid " + property + "=\"" + value + "\" is longer than " + maxlength);
 +        }
 +        if (pattern != null) {
 +            Matcher matcher = pattern.matcher(value);
 +            if (!matcher.matches()) {
 +                throw new IllegalStateException("Invalid " + property + "=\"" + value + "\" contains illegal " +
 +                        "character, only digit, letter, '-', '_' or '.' is legal.");
 +            }
 +        }
 +    }
 +
 +    @Parameter(excluded = true)
 +    public String getId() {
 +        return id;
 +    }
 +
 +    public void setId(String id) {
 +        this.id = id;
 +    }
 +
 +    protected void appendAnnotation(Class<?> annotationClass, Object annotation) {
 +        Method[] methods = annotationClass.getMethods();
 +        for (Method method : methods) {
 +            if (method.getDeclaringClass() != Object.class
 +                    && method.getReturnType() != void.class
 +                    && method.getParameterTypes().length == 0
 +                    && Modifier.isPublic(method.getModifiers())
 +                    && !Modifier.isStatic(method.getModifiers())) {
 +                try {
 +                    String property = method.getName();
 +                    if ("interfaceClass".equals(property) || "interfaceName".equals(property)) {
 +                        property = "interface";
 +                    }
 +                    String setter = "set" + property.substring(0, 1).toUpperCase() + property.substring(1);
 +                    Object value = method.invoke(annotation);
 +                    if (value != null && !value.equals(method.getDefaultValue())) {
 +                        Class<?> parameterType = ReflectUtils.getBoxedClass(method.getReturnType());
 +                        if ("filter".equals(property) || "listener".equals(property)) {
 +                            parameterType = String.class;
 +                            value = StringUtils.join((String[]) value, ",");
 +                        } else if ("parameters".equals(property)) {
 +                            parameterType = Map.class;
 +                            value = CollectionUtils.toStringMap((String[]) value);
 +                        }
 +                        try {
 +                            Method setterMethod = getClass().getMethod(setter, parameterType);
 +                            setterMethod.invoke(this, value);
 +                        } catch (NoSuchMethodException e) {
 +                            // ignore
 +                        }
 +                    }
 +                } catch (Throwable e) {
 +                    logger.error(e.getMessage(), e);
 +                }
 +            }
 +        }
 +    }
 +
 +
 +    /**
 +     * Should be called after Config was fully initialized.
 +     *
 +     * @return
 +     */
 +    public Map<String, String> getMetaData() {
 +        metaData = new HashMap<>();
 +        Method[] methods = this.getClass().getMethods();
 +        for (Method method : methods) {
 +            try {
 +                String name = method.getName();
 +                if ((name.startsWith("get") || name.startsWith("is"))
 +                        && !name.equals("get")
 +                        && !"getClass".equals(name)
 +                        && Modifier.isPublic(method.getModifiers())
 +                        && method.getParameterTypes().length == 0
 +                        && isPrimitive(method.getReturnType())) {
 +                    int i = name.startsWith("get") ? 3 : 2;
 +                    String prop = StringUtils.camelToSplitName(name.substring(i, i + 1).toLowerCase() + name.substring(i + 1), ".");
 +                    String key;
 +                    Parameter parameter = method.getAnnotation(Parameter.class);
 +                    if (parameter != null && parameter.key().length() > 0) {
 +                        key = parameter.key();
 +                    } else {
 +                        key = prop;
 +                    }
 +                    if (method.getReturnType() == Object.class || parameter != null && parameter.excluded()) {
 +                        metaData.put(key, null);
 +                        continue;
 +                    }
 +                    Object value = method.invoke(this);
 +                    String str = String.valueOf(value).trim();
 +                    if (value != null && str.length() > 0) {
 +                        if (parameter != null && parameter.escaped()) {
 +                            str = URL.encode(str);
 +                        }
 +                        if (parameter != null && parameter.append()) {
 +                            String pre = String.valueOf(metaData.get(Constants.DEFAULT_KEY + "." + key));
 +                            if (pre != null && pre.length() > 0) {
 +                                str = pre + "," + str;
 +                            }
 +                            pre = String.valueOf(metaData.get(key));
 +                            if (pre != null && pre.length() > 0) {
 +                                str = pre + "," + str;
 +                            }
 +                        }
 +                      /*  if (prefix != null && prefix.length() > 0) {
 +                            key = prefix + "." + key;
 +                        }*/
 +                        metaData.put(key, str);
 +                    } else {
 +                        metaData.put(key, null);
 +                    }
 +                    // TODO check required somewhere else.
 +                    /*else if (parameter != null && parameter.required()) {
 +                        throw new IllegalStateException(this.getClass().getSimpleName() + "." + key + " == null");
 +                    }*/
 +                } else if ("getParameters".equals(name)
 +                        && Modifier.isPublic(method.getModifiers())
 +                        && method.getParameterTypes().length == 0
 +                        && method.getReturnType() == Map.class) {
 +                    Map<String, String> map = (Map<String, String>) method.invoke(this, new Object[0]);
 +                    if (map != null && map.size() > 0) {
 +//                            String pre = (prefix != null && prefix.length() > 0 ? prefix + "." : "");
 +                        for (Map.Entry<String, String> entry : map.entrySet()) {
 +                            metaData.put(entry.getKey().replace('-', '.'), entry.getValue());
 +                        }
 +                    }
 +                }
 +            } catch (Exception e) {
 +                System.out.println(this.getClass().getName());
 +                System.out.println(method.getName());
 +                throw new IllegalStateException(e.getMessage(), e);
 +            }
 +        }
 +        return metaData;
 +    }
 +
 +    @Parameter(excluded = true)
 +    public String getPrefix() {
 +        return Constants.DUBBO + "." + getTagName(this.getClass());
 +    }
 +
 +    /**
 +     * TODO
 +     * Currently, only support overriding of properties explicitly defined in Config class, doesn't support overriding of customized parameters stored in 'parameters'.
 +     */
 +    public void refresh() {
 +        if (init) {
 +            return;
 +        }
 +        init = true;
 +
 +        try {
 +            Configuration configuration = ConfigConverter.toConfiguration(this);
 +            CompositeConfiguration compositeConfiguration = Environment.getInstance().getStartupCompositeConf(getPrefix(), getId());
 +            int index = 3;
 +            if (!Environment.getInstance().isConfigCenterFirst()) {
 +                index = 1;
 +            }
 +            compositeConfiguration.addConfiguration(index, configuration);
 +            // loop methods, get override value and set the new value back to method
 +            Method[] methods = getClass().getMethods();
 +            for (Method method : methods) {
 +                if (isSetter(method)) {
 +                    try {
 +                        String value = compositeConfiguration.getString(extractPropertyName(method));
 +                        if (value != null) {
 +                            method.invoke(this, convertPrimitive(method.getParameterTypes()[0], value));
 +                        }
 +                    } catch (NoSuchMethodException e) {
 +                        logger.warn("Failed to override the property " + method.getName() + " in " + this.getClass().getSimpleName() + ", please make sure every property has a getter/setter pair.", e);
 +                    }
 +                }
 +            }
 +        } catch (Exception e) {
 +            logger.error("Failed to override ", e);
 +        }
 +    }
 +
 +    private static boolean isSetter(Method method) {
 +        if (method.getName().startsWith("set")
 +                && !"set".equals(method.getName())
 +                && Modifier.isPublic(method.getModifiers())
 +                && method.getParameterCount() == 1
 +                && isPrimitive(method.getParameterTypes()[0])) {
 +            return true;
 +        }
 +        return false;
 +    }
 +
 +    public String extractPropertyName(Method setter) throws Exception {
 +        String propertyName = setter.getName().substring("set".length());
 +        Method getter = null;
 +        try {
 +            getter = getClass().getMethod("get" + propertyName);
 +        } catch (NoSuchMethodException e) {
 +            getter = getClass().getMethod("is" + propertyName);
 +        }
 +        Parameter parameter = getter.getAnnotation(Parameter.class);
 +        if (parameter != null && StringUtils.isNotEmpty(parameter.key()) && parameter.propertyKey()) {
 +            propertyName = parameter.key();
 +        } else {
 +            propertyName = propertyName.toLowerCase();
 +        }
 +        return propertyName;
 +    }
 +
 +    @Override
 +    public String toString() {
 +        try {
 +            StringBuilder buf = new StringBuilder();
 +            buf.append("<dubbo:");
 +            buf.append(getTagName(getClass()));
 +            Method[] methods = getClass().getMethods();
 +            for (Method method : methods) {
 +                try {
 +                    String name = method.getName();
 +                    if ((name.startsWith("get") || name.startsWith("is"))
-                             && !"getClass".equals(name) && !"get".equals(name) && !"is".equals(name)
++                            && !"get".equals(name) && !"is".equals(name)
++                            && !"getClass".equals(name) && !"getObject".equals(name)
 +                            && Modifier.isPublic(method.getModifiers())
 +                            && method.getParameterTypes().length == 0
 +                            && isPrimitive(method.getReturnType())) {
 +                        int i = name.startsWith("get") ? 3 : 2;
 +                        String key = name.substring(i, i + 1).toLowerCase() + name.substring(i + 1);
 +                        Object value = method.invoke(this);
 +                        if (value != null) {
 +                            buf.append(" ");
 +                            buf.append(key);
 +                            buf.append("=\"");
 +                            buf.append(value);
 +                            buf.append("\"");
 +                        }
 +                    }
 +                } catch (Exception e) {
 +                    logger.warn(e.getMessage(), e);
 +                }
 +            }
 +            buf.append(" />");
 +            return buf.toString();
 +        } catch (Throwable t) {
 +            logger.warn(t.getMessage(), t);
 +            return super.toString();
 +        }
 +    }
 +
 +    /**
 +     * FIXME check @Parameter(required=true) and any conditions that need to match.
 +     */
 +    @Parameter(excluded = true)
 +    public boolean isValid() {
 +        return true;
 +    }
 +
 +}
diff --cc dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/ProtocolConfig.java
index 7e45e4c,7582169..3e9fdcd
--- a/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/ProtocolConfig.java
+++ b/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/ProtocolConfig.java
@@@ -471,9 -470,4 +471,9 @@@ public class ProtocolConfig extends Abs
              ExtensionLoader.getExtensionLoader(Protocol.class).getExtension(name).destroy();
          }
      }
 +
 +    @Override
 +    public boolean isValid() {
 +        return StringUtils.isNotEmpty(name);
 +    }
- }
+ }
diff --cc dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/ReferenceConfig.java
index f98d8c1,c39f3b6..2512839
--- 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
@@@ -218,45 -244,8 +218,46 @@@ public class ReferenceConfig<T> extend
              }
          }
          checkApplication();
 +        checkMetadataReport();
 +        checkRegistryDataConfig();
 +    }
 +
 +    public synchronized T get() {
 +        checkAndUpdateSubConfigs();
 +
 +        if (destroyed) {
 +            throw new IllegalStateException("Already destroyed!");
 +        }
 +        if (ref == null) {
 +            init();
 +        }
 +        return ref;
 +    }
 +
 +    public synchronized void destroy() {
 +        if (ref == null) {
 +            return;
 +        }
 +        if (destroyed) {
 +            return;
 +        }
 +        destroyed = true;
 +        try {
 +            invoker.destroy();
 +        } catch (Throwable t) {
 +            logger.warn("Unexpected err when destroy invoker of ReferenceConfig(" + url + ").", t);
 +        }
 +        invoker = null;
 +        ref = null;
 +    }
 +
 +    private void init() {
 +        if (initialized) {
 +            return;
 +        }
 +        initialized = true;
-         checkStubAndMock(interfaceClass);
+         checkStub(interfaceClass);
+         checkMock(interfaceClass);
          Map<String, String> map = new HashMap<String, String>();
          resolveAsyncInterface(interfaceClass, map);
  
diff --cc dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/ServiceConfig.java
index 394a8f6,66e8d7f..0133b01
--- 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
@@@ -284,45 -305,12 +284,46 @@@ public class ServiceConfig<T> extends A
                  throw new IllegalStateException("The stub implementation class " + stubClass.getName() + " not implement interface " + interfaceName);
              }
          }
-         checkStubAndMock(interfaceClass);
 -        checkApplication();
 -        checkRegistry();
 -        checkProtocol();
 -        appendProperties(this);
+         checkStub(interfaceClass);
+         checkMock(interfaceClass);
 +    }
 +
 +    public synchronized void export() {
 +        checkAndUpdateSubConfigs();
 +
 +        if (provider != null) {
 +            if (export == null) {
 +                export = provider.getExport();
 +            }
 +            if (delay == null) {
 +                delay = provider.getDelay();
 +            }
 +        }
 +        if (export != null && !export) {
 +            return;
 +        }
 +
 +        if (delay != null && delay > 0) {
 +            delayExportExecutor.schedule(new Runnable() {
 +                @Override
 +                public void run() {
 +                    doExport();
 +                }
 +            }, delay, TimeUnit.MILLISECONDS);
 +        } else {
 +            doExport();
 +        }
 +    }
 +
 +    protected synchronized void doExport() {
 +        if (unexported) {
 +            throw new IllegalStateException("Already unexported!");
 +        }
 +        if (exported) {
 +            return;
 +        }
 +        exported = true;
 +
          if (path == null || path.length() == 0) {
              path = interfaceName;
          }
diff --cc dubbo-config/dubbo-config-spring/src/main/java/org/apache/dubbo/config/spring/schema/DubboNamespaceHandler.java
index df0415b,035c3f9..afbc26b
--- a/dubbo-config/dubbo-config-spring/src/main/java/org/apache/dubbo/config/spring/schema/DubboNamespaceHandler.java
+++ b/dubbo-config/dubbo-config-spring/src/main/java/org/apache/dubbo/config/spring/schema/DubboNamespaceHandler.java
@@@ -24,9 -24,9 +24,10 @@@ import org.apache.dubbo.config.MonitorC
  import org.apache.dubbo.config.ProtocolConfig;
  import org.apache.dubbo.config.ProviderConfig;
  import org.apache.dubbo.config.RegistryConfig;
 +import org.apache.dubbo.config.spring.ConfigCenterBean;
  import org.apache.dubbo.config.spring.ReferenceBean;
  import org.apache.dubbo.config.spring.ServiceBean;
+ 
  import org.springframework.beans.factory.xml.NamespaceHandlerSupport;
  
  /**