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/12/24 07:48:47 UTC
[incubator-dubbo] branch master updated (a35f942 -> b88bf3a)
This is an automated email from the ASF dual-hosted git repository.
liujun pushed a change to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-dubbo.git.
from a35f942 'continue' statement is unnecessary as the last statement in a loop (#3046)
add c061ec4 Integrate with dynamic config
add 23275bd A basically running dynamic config integration
add 83076fd Reformat code
add c321bbe New config format
add 6d95c4d Add app level configuration
add 191cae1 Add route part
add 2b80c3e fix route cache issue, can run
add 3cd4603 Merge branch 'master' into dev-metadata
add 692dbdf Solve merge conflicts manually
add 0e133c5 Add Router name and fix routerchain error.
add efc566c Add demo method
add 103cdb3 Check children size is 0 in RouterChain
add 72e47d9 Refactor tag router
add 09863b6 Rename GroupRouter to TagRouter
add 2ba2ddd Change variable name
add 01ce1b3 Change ConfigConditionRouter and TagRouter: scope and rules
add aaa8758 To identify app level or service level changes
add 553b206 Fix compilation error in UTs
add 927a7e5 Fix router problems: 1. TagRouter change from global to Application level 2. Add tag rule and condition rule support 3. Fix problem when building RouterChain 4. Change logic of getting invokers from router cache.
add c0be5e5 Add demo change for tagrouter
add 6f70f03 Remove duplicate ut classes
add 0242852 Remove duplicate ut classes
add 75853a8 Merge branch 'master' into dev-metadata
add a5695af Fix problem when rule need to run at runtime.
add ca057cb Refactor dynamic config, 1. Extract common method to AbstractDynamicConfiguration 2. Unify strategy when config server cannot be reached at startup: start using local snapshot and try to connect in background.
add 507f5bf Update config connecting status when ZK connection changes.
add 4ef7f28 Fix small bugs and add comments
add 7edb71c Fix compilation problem
add e37319d Support enabled property.
add 49f1caa Fix compilation problem
add 514fd4e Support static tag group in TagRouter
add 3747cc3 Remove useless config item in xsd
add 612e3ac Improve the route logic.
add 714951a Change for demo and test logic
add 577eb77 Merge pull request #2468, Simplify registry data and add a new service data store seperated from registry #2030 (#2468)
add 91fddde Improvements for dynamic config and router: 1. support route in StaticDirectory, multi-registry & group merger 2. tolerance of abnormal configs from configserver. 3. add check policy when failed to connect to configserver
add 44fb07f Demo and ut changes
add 59dd98a Merge pull request #2626, simplify registry data and add a new service data store seperated from registry.
add ab2b736 Merge branch 'dev-metadata' of https://github.com/apache/incubator-dubbo into dev-metadata
add aef5bb7 Adjust test class, remove version
add bfa1795 Demo, remove version
add 515f709 Extract pom dependency version in config-dynamic.
add 123c66d Clear dependency of commons-lang in RegistryProtocol
add 97836c2 Refactor the dynamic-config module to governance module
add e8da094 Refactor the dynamic-config module to governance module
add 97a5825 Add test scope pom dependency
add 9bd9563 Add test scope pom dependency
add ffdb46b Rename SPI config file of governance module
add daf24b3 Remove provided scope restrict of commons-configuration dependency
add 1646e6c Enhancements for router chain: 1. make route cache building in RouterChain thread-safe. 2. clear generated routers when urls change. 3. clear invokers in route cache when provider list in notification is empty. 4. add name for each router.
add de32524 Change the default root directory of zookeeper config center from '/dubbo/config' to '/dubbo'.
add 413ed71 test registry group
add 37c22c7 Merge pull request #2672, simplify registry url: rename servicestore to metada & enhancements.
add 2f9dcf1 Merge branch 'dev-metadata' of https://github.com/apache/incubator-dubbo into dev-metadata
add 8839c9b Ignore invalid configurators
add ac13330 Rename MetadataReportFactory SPI config files
add 4c51b0d fix comments
add e125951 Add dynamic configuration support
add 9af1f1a Merge branch 'master' into dev-metadata-config-mergemaster
add 596721d Fix compiler error after merge master branch
add 79812af Enhancements for dynamic config
add 93b1cf0 Move UT in config-api to bootstrap temporarily, to solve the unreasonable dependency problem between modules. For long term run, we should refactor the config-api module to stop it from depending on other modules.
add e6e6689 Changes on demo, for test purpose.
add d423f55 Add xml schema and spring bean support for ConfigCenterConfig
add d20a6aa Change ZooKeeper's data structure as a config center
add a45bfd4 Move UT in config-api to bootstrap temporarily, to solve the unreasonable dependency problem between modules.
add 80f9091 Changes for demo
add 91f1ce8 Merge pull request #2721, Refactor , add switch to simplify registry url and control metadata flow.
add 65450f5 Merge url part from cvictory and fix configuration override problems
add b727c87 Merge url part from cvictory and fix configuration override problems
add 201d1f3 Add app level configuration file; Unified group and namespace in different configcenter implementation.
add 4b68368 Demo changes.
add 4097405 Add spring annotation support for ConfigCenter.
add 220c9da cherry-pick 4d0a36c435ca59bfcf909c0e76fa2ab024fb7408 from master 重构 ServiceBean 的 isDelay 方法,使其更符合语义
add 22599b9 Make ReferenceBean depend on ConfigCenterBean, so that ConfigCenterBean can always be initialized before refer.
add 072b51e Merge pull request #2744, metadata unit test and generic test, refactor zk store.
add d85550a Merge branch 'dev-metadata' of https://github.com/apache/incubator-dubbo into dev-metadata
add 546b135 override url in directory
add 708cdb5 Remove default group in DynamicConfiguration API
add ebb7dd7 Fix problem when parsing override rule
add 42fac3e Fix subscribe and parse problems with override protocol.
add 3d79fe0 Add enabled=true check for override url.
add e2f664f record init status.
add b787ab7 Move refresh action of configs from Spring bean to a Config API.
add 60b1342 support accepting external configuration from application.
add b7e8b1e Merge branch 'dev-metadata-spring-environment' into dev-metadata
add bdfc500 Fix NPE in TagRouter
add 042ab09 support standard spring PropertySource
add e3916ef add cluster-style address support for configcenter
add e572f15 merge from base
add 678b3fd Merge branch 'dev-metadata' of https://github.com/apache/incubator-dubbo into dev-metadata
add fd36193 add metadata master flow
add d3d6025 modify apache license
add 1aa9138 new pull
add 98021af Merge branch 'dev-metadata' into dev-metadata
add 653f5e4 new pull
add cd13f62 new pull
add bab12d2 new pull
add d93515a fix review issue: english comments and class format
add 5ab51cf Merge branch 'dev-metadata' of https://github.com/apache/incubator-dubbo into dev-metadata
add 5fcfbce Merge branch 'dev-metadata' of https://github.com/apache/incubator-dubbo into dev-metadata
add 0cb75df Merge branch 'dev-metadata' of https://github.com/apache/incubator-dubbo into dev-metadata
add 1af7240 modify data store
add f532ffd add redis service store support
add 98daa43 add test
add d695b5e add test on serviceStore and serviceStoreFactory
add f8a9315 Merge branch 'dev-metadata' of https://github.com/apache/incubator-dubbo into dev-metadata
add fe8380f add classinfo collect
add 9f6f0f5 add serviceStoreService test and modify the code
add 6f86a8e add tests
add 0dac06e add unit test
add 336ffd1 add unit test
add 00513f8 zk and redis unit test and fix some bug
add 5e3415f fix review issue
add d3469fd delete class
add 462337f remove author
add 1dc5d35 remove author
add a69bc0a Merge branch 'dev-metadata' of https://github.com/apache/incubator-dubbo into dev-metadata
add 695d9f8 move getKey from RedisServiceStore to AbstractServiceStore; modify demo consumer url
add 10b2af4 modify dubbo configuration key
add 876b9d6 merge from dev-metadata
add 5194066 Merge branch 'dev-metadata' of https://github.com/apache/incubator-dubbo into dev-metadata
add a97bf43 renew the module name, package name, class name
add 604439a Merge branch 'dev-metadata' of https://github.com/apache/incubator-dubbo into dev-metadata
add 0a29783 refactor AbstractMetadataReport
add 1e6800b seperate retry from AbstractMetadataReport
add ca649e3 rename the serviceStore to metadataReport; default MetadataReportFactory to redis
add f1ea451 Merge branch 'dev-metadata' of https://github.com/apache/incubator-dubbo into dev-metadata
add 8416db1 refactor the interface and import jaket source
add 2a8986a refactor the interface and import jaket source
add 801eb73 Merge branch 'dev-metadata' of https://github.com/apache/incubator-dubbo into dev-metadata
add 26f01c9 modify servicestore and refactory abstractMetadataReport
add 10bca19 add simple registry switch and metadata retry switch
add a4db979 add simple registry switch and metadata retry switch
add 6f90215 fix compiler issue
add 033b58e remove the group of registry from demo-provider
add 8600ae4 remove dependent and import
add a41930e merge dev-metadata
add 61bdd46 make demo work
add 90a9134 merge dev-metadata from upstream and refactor zk store
add 6b4bae0 merge dev-metadata and add unit test
add 9d37574 remove origin metadata code , add new metadata test, add generic test for metadata
add c064b0a Merge branch 'dev-metadata' of https://github.com/apache/incubator-dubbo into dev-metadata
add 8f498c9 if no metadata config address, config the log level to warn
add bc9cf99 Merge branch 'dev-metadata' of https://github.com/apache/incubator-dubbo into dev-metadata
add c5bc3bc Merge branch 'dev-metadata' of https://github.com/apache/incubator-dubbo into dev-metadata
add d8db928 fix :dubbo.properties cannot work on MetadataReportConfig
add efacb58 Merge branch 'dev-metadata' of https://github.com/apache/incubator-dubbo into dev-metadata
add 29ef73f refactor the simplified, add some unit test, fix issue.
add 21b4334 Merge branch 'dev-metadata' of github.com:apache/incubator-dubbo into dev-metadata
add d11b876 Merge branch 'dev-metadata' of https://github.com/apache/incubator-dubbo into dev-metadata
add dbca54c Merge branch 'master' into dev-metadata
add 0d0c955 solve dubbo-bootstrap conficts after merged master
add 5f0d8c8 change how DynamicConfiguration instance is fetched.
add 46a0580 fix ut
add dc23a34 Add pom dependency
add a3f9a54 change log level to info
add 453e323 ignore parameter(exclude=true).
add 2e9e85a avoid repeat init of dynamicconfiguration
add e430443 modify the variable name and support springbean configuration
add 1a8e8b1 Merge branch 'dev-metadata' of github.com:apache/incubator-dubbo into dev-metadata
add 92e8825 Merge branch 'dev-metadata' of https://github.com/apache/incubator-dubbo into dev-metadata
add 3de0ec0 Restore the previous behaviour
add 6999c6a refactor override rule
add 0a4cce7 rename module name from governance to configcenter
add a3215cb refactor governance to configcenter
add c880720 if the registry type is zookeeper, use the address as default configcenter address.
add 51146f7 Split the Environment into two parts: Environment in Common and ConfigurationUtils in ConfigCenter
add 912498a empty rule protection: "" should not be treated as delete.
add 0aebefe modify consumer metadatareport: param type from string to map
add 1ab215e add dubbo specification version into registry for ops
add 701cf26 Merge branch 'dev-metadata' of https://github.com/apache/incubator-dubbo into dev-metadata
add 3845d78 add apiVersion to override url
add ecc34c2 Fix reExport, check url to registry changed before do register.
add 740b5aa remove unnecessary volatile restrict
add 9f02b97 Fix configurator bug
add 6140bc2 Fix concurrent problem of zookeeper configcenter, wait to start until cache being fully populated.
add 6a1b9ee Merge pull request #2810, code review and refactor for dubbo-configcenter.
add 1bebd2d Fix problems in Configuration: remove cache usage in startupCompositeConfiguration.
add 607af9d Merge pull request #2817, code review for dubbo-configcente.
add 65e1640 support ops; modify properties with split -, fix issue
add 7adf111 Merge pull request #2818, code review for AbstractConfig.
add 1e28f7a Merge branch 'dev-metadata' of https://github.com/apache/incubator-dubbo into dev-metadata
add 2d7b8c1 Add extra type match check when override config value.
add 773d7f4 Fix small bugs find in UT
add da978fd does not use parameter key in config metadata
add 3dfa8d2 Code review around Environment, AbstractConfig, and AbstractPrefixConfiguration's impls. (#2820)
add 720784c Merge branch 'dev-metadata' of https://github.com/apache/incubator-dubbo into dev-metadata
add 8f40549 add missing return statement.
add 8d8aed2 Merge pull request #2823, Code review for ConfigurationUtils and Environment.
add 3206dba store DynamicConfiguration reference in Environment
add b9ce4a4 Add UT for Configuration
add 6f61822 try different zookeeper implementations
add bc3086e add unit tests
add d4156cc upgrade curator version
add d9e0b64 save one zookeeper implementation as default
add 0fb3657 temporarily close checkstyle on importing orders
add d39343e adjust zookeeper dependency
add 23f0e52 fix NPE when no listeners registered for key
add 4700f2c create separate RouterChain for StaticDirectory
add a1b9e0a fix ut
add 8465e9a add Apache license
add 719b5a3 reformat code
add 7101b6b reformat code
add 14d1f97 optimize dynamic configuration api
add 83a27e8 rename
add abb62c8 add dependency into dubbo.jar
add 8f9a76e Merge branch 'dev-metadata' of https://github.com/apache/incubator-dubbo into dev-metadata
add 38a8fad add fixme comment
add 00b15a4 refactor config-center implementation
add 7473662 app level override rule should only generate one url
add 25080d3 add `dubbo.` prefix for tag router key
add cc943d3 fix unit test
add 52a325d Merge pull request #2872, refactor config-center implementation.
add 92c721b Merge remote-tracking branch 'origin/dev-metadata' into dev-metadata
add 6081c9e add log for rule notification.
add dfdd424 remove useless file
add b01e251 fix problem when creating router chain for StaticDirectory (consume multi groups)
add c94ac7a Optimize ConfigCenter api and implementation 1. add group to api definition. 2. add removeListener implementation. 3. fix Zookeeper implementation
add 6007fd3 Optimize service governance: 1. avoid duplicate notification of application level override rule 2. remove route cache 3. support sub menu in ops for router and configurator
add 0a2aab8 support using multi registries/protocols in config center.
add e425767 fix problem of governance: configurator & router
add c2b34c8 unit test
add 2b01e0c Merge branch 'dev-metadata' of github.com:apache/incubator-dubbo into dev-metadata
add 5a9406c modify metadata store from sync to async
add d40beeb add licence
add 85eb412 remove chinese comments
add e0bd630 fix unit test
add 0d3c0da fix unit test and add licence
add 48e482e [DOCS]:[fix comment statement and reformat code] (#2844)
add d4d827e remove Provider and ConsumerMetataIdentifier
add 368a59e Release resource after use in ConfigParserTest (#2905)
add e86b89c resolve conflicts
add f92f00f use asyncInterfaceClass
add c8c5b3d make sure compatible Router works fine
add 67c8718 Refactor, put overrides related to Config Center inside ConfigurationListeners
add c0b277c generate a empty list for invokerUrls in refreshInvoker if it's null
add 5b1b14d set reg status to true after reExport
add 455943f add fault tolerant code to avoid NPE
add 47213f4 fix wrong invokers reference to StaticDirectory under multi-group
add 5d690d9 add comment
add 275635e unify the config key format, sth like: dubbo.registries.id.address=xxx dubbo.registry.address=xxx dubbo.configCenters.apollo.address=xxx dubbo.configCenter.address=xxx
add 5c2293d fix UT compile error
add fdc9202 update demo
add d962113 fix NPE
new 4bd2ed4 unify config format.
new 5184416 fix busy loop caused by singledThreadExecutor
new b132451 Merge branch 'dev-metadata'
new ac31d4f fix compile error.
new cedba72 fix UT
new 411abe9 make condition router enabled by default.
new 96dffe3 set all router rule enabled by default
new 9897aa3 remove appConfigs cache to support one service/reference registered more than one time (if users don't explicitly add id, cache can not work properly)
new c20164e fix wrong reference
new b88bf3a Merge branch 'master' of https://github.com/apache/incubator-dubbo
The 10 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:
codestyle/checkstyle.xml | 10 +-
dubbo-all/pom.xml | 57 +++
dubbo-bom/pom.xml | 35 ++
dubbo-cluster/pom.xml | 20 +
...rFactory.java => AbstractAppRouterFactory.java} | 24 +-
...uterFactory.java => AbstractRouterFactory.java} | 19 +-
.../org/apache/dubbo/rpc/cluster/Configurator.java | 48 +++
.../java/org/apache/dubbo/rpc/cluster/Router.java | 45 ++-
.../org/apache/dubbo/rpc/cluster/RouterChain.java | 156 ++++++++
.../apache/dubbo/rpc/cluster/RouterFactory.java | 7 +-
.../cluster/configurator/AbstractConfigurator.java | 75 +++-
.../cluster/configurator/parser/ConfigParser.java | 201 ++++++++++
.../configurator/parser/model/ConfigItem.java | 103 +++++
.../parser/model/ConfiguratorConfig.java | 74 ++++
.../rpc/cluster/directory/AbstractDirectory.java | 54 +--
.../rpc/cluster/directory/StaticDirectory.java | 35 +-
.../dubbo/rpc/cluster/router/AbstractRouter.java | 101 +++++
.../rpc/cluster/router/AbstractRouterRule.java | 105 +++++
.../cluster/router/condition/ConditionRouter.java | 46 ++-
.../config/AbstractConfigConditionRouter.java | 145 +++++++
.../condition/config/AppConfigConditionRouter.java | 28 +-
.../config/AppConfigConditionRouterFactory.java} | 19 +-
.../config/ServiceConfigConditionRouter.java | 28 +-
.../ServiceConfigConditionRouterFactory.java} | 19 +-
.../condition/config/model/BlackWhiteListRule.java | 73 ++--
.../config/model/ConditionRouterRule.java | 99 +++--
.../config/model/ConditionRuleParser.java | 57 +++
.../router/{ => mock}/MockInvokersSelector.java | 214 +++++-----
.../MockRouterFactory.java} | 16 +-
.../rpc/cluster/router/script/ScriptRouter.java | 32 +-
.../dubbo/rpc/cluster/router/tag/TagRouter.java | 217 ++++++++--
.../rpc/cluster/router/tag/TagRouterFactory.java | 14 +-
.../dubbo/rpc/cluster/router/tag/model/Tag.java | 80 ++--
.../cluster/router/tag/model/TagRouterRule.java | 86 ++++
.../cluster/router/tag/model/TagRuleParser.java | 45 +++
.../cluster/support/AbstractClusterInvoker.java | 2 +-
.../dubbo/rpc/cluster/support/ClusterUtils.java | 15 +-
.../cluster/support/MergeableClusterInvoker.java | 29 +-
.../rpc/cluster/support/RegistryAwareCluster.java | 25 +-
.../support/RegistryAwareClusterInvoker.java | 59 +++
.../internal/org.apache.dubbo.rpc.cluster.Cluster | 3 +-
.../org.apache.dubbo.rpc.cluster.RouterFactory | 5 +-
.../configurator/parser/ConfigParserTest.java | 163 ++++++++
.../loadbalance/RoundRobinLoadBalanceTest.java | 32 +-
.../cluster/router/ConfigConditionRouterTest.java | 134 +++++++
.../dubbo/rpc/cluster/router/TagRouterTest.java | 67 ++++
.../cluster/router/file/FileRouterEngineTest.java | 14 +-
.../rpc/cluster/router/tag/TagRouterTest.java | 170 --------
.../support/AbstractClusterInvokerTest.java | 10 +-
.../support/wrapper/MockClusterInvokerTest.java | 22 +-
.../src/test/resources/AppAnyServices.yml | 32 ++
.../src/test/resources/AppMultiServices.yml | 32 ++
dubbo-cluster/src/test/resources/AppNoService.yml | 32 ++
dubbo-cluster/src/test/resources/ConditionRule.yml | 56 +++
.../test/resources/ConsumerSpecificProviders.yml | 34 ++
.../src/test/resources/ServiceGroupVersion.yml | 29 ++
.../src/test/resources/ServiceMultiApps.yml | 30 ++
dubbo-cluster/src/test/resources/ServiceNoApp.yml | 29 ++
dubbo-cluster/src/test/resources/ServiceNoRule.yml | 28 ++
dubbo-cluster/src/test/resources/TagRule.yml | 31 ++
.../java/org/apache/dubbo/common/Constants.java | 89 ++++-
.../src/main/java/org/apache/dubbo/common/URL.java | 62 ++-
.../dubbo/common/config/AbstractConfiguration.java | 91 +++++
.../common/config/AbstractPrefixConfiguration.java | 52 +++
.../common/config/CompositeConfiguration.java | 82 ++++
.../apache/dubbo/common/config/Configuration.java | 82 ++++
.../dubbo/common/config/ConfigurationUtils.java | 59 +++
.../apache/dubbo/common/config/Environment.java | 172 ++++++++
.../common/config/EnvironmentConfiguration.java | 22 +-
.../dubbo/common/config/InmemoryConfiguration.java | 67 ++++
.../common/config/PropertiesConfiguration.java | 28 +-
.../dubbo/common/config/SystemConfiguration.java | 27 +-
.../dubbo/common/extension/ExtensionLoader.java | 20 +-
.../org/apache/dubbo/common/utils/ClassHelper.java | 70 ++++
.../org/apache/dubbo/common/utils/ConfigUtils.java | 40 +-
.../org/apache/dubbo/common/utils/UrlUtils.java | 11 +-
.../config/AbstractPrefixConfigurationTest.java | 46 +--
.../common/config/CompositeConfigurationTest.java | 46 +--
.../dubbo/common/config/EnvironmentTest.java | 46 +--
.../apache/dubbo/common/utils/ConfigUtilsTest.java | 27 --
dubbo-compatible/pom.xml | 7 +-
.../java/com/alibaba/dubbo/rpc/cluster/Router.java | 34 +-
.../dubbo/config/RegistryDataConfigTest.java | 87 ++++
.../apache/dubbo/generic/GenericServiceTest.java | 181 ++++++++-
.../apache/dubbo/rpc/cluster/CompatibleRouter.java | 88 +++--
.../org/apache/dubbo/service/ComplexObject.java | 282 +++++++++++++
.../java/org/apache/dubbo/service/DemoService.java | 8 +-
.../org/apache/dubbo/service/DemoServiceImpl.java | 15 +-
dubbo-config/dubbo-config-api/pom.xml | 5 +
.../org/apache/dubbo/config/AbstractConfig.java | 331 ++++++++++------
.../dubbo/config/AbstractInterfaceConfig.java | 297 ++++++++++----
.../apache/dubbo/config/AbstractMethodConfig.java | 16 +-
.../apache/dubbo/config/AbstractServiceConfig.java | 36 +-
.../org/apache/dubbo/config/ApplicationConfig.java | 29 +-
.../apache/dubbo/config/ConfigCenterConfig.java | 313 +++++++++++++++
.../org/apache/dubbo/config/ConsumerConfig.java | 8 +-
.../org/apache/dubbo/config/DubboShutdownHook.java | 9 +-
...onitorConfig.java => MetadataReportConfig.java} | 280 ++++++-------
.../java/org/apache/dubbo/config/MethodConfig.java | 37 ++
.../java/org/apache/dubbo/config/ModuleConfig.java | 8 +-
.../org/apache/dubbo/config/MonitorConfig.java | 13 +-
.../org/apache/dubbo/config/ProtocolConfig.java | 11 +-
.../org/apache/dubbo/config/ReferenceConfig.java | 121 +++---
.../org/apache/dubbo/config/RegistryConfig.java | 49 ++-
.../apache/dubbo/config/RegistryDataConfig.java | 86 ++++
.../org/apache/dubbo/config/ServiceConfig.java | 177 ++++++---
.../invoker/DelegateProviderMetaDataInvoker.java | 2 +-
.../org/apache/dubbo/config/support/Parameter.java | 2 +
.../apache/dubbo/config/AbstractConfigTest.java | 280 ++++++++++++-
.../dubbo/config/AbstractInterfaceConfigTest.java | 5 +-
.../dubbo/config/AbstractReferenceConfigTest.java | 1 +
.../dubbo/config/AbstractServiceConfigTest.java | 1 +
.../apache/dubbo/config/ApplicationConfigTest.java | 1 +
.../org/apache/dubbo/config/MethodConfigTest.java | 1 +
.../apache/dubbo/config/ProtocolConfigTest.java | 1 +
.../apache/dubbo/config/ReferenceConfigTest.java | 6 +
.../apache/dubbo/config/RegistryConfigTest.java | 2 +
.../org/apache/dubbo/config/ServiceConfigTest.java | 6 +-
.../org/apache/dubbo/config/api/DemoException.java | 84 ++--
.../org/apache/dubbo/config/api/DemoService.java | 72 ++--
.../java/org/apache/dubbo/config/api/User.java | 130 +++---
.../apache/dubbo/config/cache/CacheService.java | 52 +--
.../dubbo/config/cache/CacheServiceImpl.java | 64 +--
.../org/apache/dubbo/config/cache/CacheTest.java | 238 +++++------
.../config/consumer/DemoActionByAnnotation.java | 68 ++--
.../dubbo/config/consumer/DemoActionBySetter.java | 70 ++--
.../dubbo/config/consumer/DemoInterceptor.java | 60 +--
.../DelegateProviderMetaDataInvokerTest.java | 3 +-
.../dubbo/config/mock/MockExporterListener.java | 2 +-
.../org/apache/dubbo/config/mock/MockRegistry.java | 16 +-
.../dubbo/config/mock/MockRegistryFactory.java | 2 +-
.../apache/dubbo/config/mock/MockThreadPool.java | 2 +-
.../apache/dubbo/config/mock/MockTransporter.java | 1 +
.../config/provider/impl/DemoServiceImpl.java | 100 ++---
.../org.apache.dubbo.registry.RegistryFactory | 4 +-
.../src/test/resources/dubbo.properties | 2 +
.../dubbo-config-api/src/test/resources/log4j.xml | 54 +--
.../dubbo/config/spring/ConfigCenterBean.java | 154 ++++++++
.../apache/dubbo/config/spring/ReferenceBean.java | 57 ++-
.../apache/dubbo/config/spring/ServiceBean.java | 76 +++-
.../annotation/DubboConfigConfiguration.java | 12 +-
.../spring/schema/DubboBeanDefinitionParser.java | 46 +--
.../spring/schema/DubboNamespaceHandler.java | 2 +
.../src/main/resources/META-INF/compat/dubbo.xsd | 137 ++++++-
.../src/main/resources/META-INF/dubbo.xsd | 128 ++++++
.../dubbo-configcenter-api}/pom.xml | 14 +-
.../configcenter/AbstractDynamicConfiguration.java | 127 ++++++
.../AbstractDynamicConfigurationFactory.java | 26 +-
.../dubbo/configcenter/ConfigChangeEvent.java | 63 +++
.../dubbo/configcenter/ConfigChangeType.java | 63 +--
.../dubbo/configcenter/ConfigurationListener.java | 57 +--
.../dubbo/configcenter/DynamicConfiguration.java | 106 +++++
.../configcenter/DynamicConfigurationFactory.java | 56 +--
.../support/nop/NopDynamicConfiguration.java | 66 ++++
.../nop/NopDynamicConfigurationFactory.java | 17 +-
....dubbo.configcenter.DynamicConfigurationFactory | 1 +
.../mock/AbstractDynamicConfigurationTest.java | 47 +++
.../mock/MockDynamicConfiguration.java | 64 +++
.../mock/MockDynamicConfigurationFactory.java | 17 +-
....dubbo.configcenter.DynamicConfigurationFactory | 1 +
.../dubbo-configcenter-apollo}/pom.xml | 16 +-
.../support/apollo/ApolloDynamicConfiguration.java | 191 +++++++++
.../apollo/ApolloDynamicConfigurationFactory.java | 18 +-
....dubbo.configcenter.DynamicConfigurationFactory | 1 +
.../dubbo-configcenter-zookeeper}/pom.xml | 43 +-
.../support/zookeeper/CacheListener.java | 119 ++++++
.../zookeeper/ZookeeperDynamicConfiguration.java | 162 ++++++++
.../ZookeeperDynamicConfigurationFactory.java | 20 +-
....dubbo.configcenter.DynamicConfigurationFactory | 1 +
.../ZookeeperDynamicConfigurationTest.java | 151 +++++++
{dubbo-cluster => dubbo-configcenter}/pom.xml | 22 +-
dubbo-container/dubbo-container-log4j/pom.xml | 5 +
.../dubbo/container/log4j/Log4jContainer.java | 8 +-
.../java/org/apache/dubbo/demo/DemoService.java | 4 +
dubbo-demo/dubbo-demo-consumer/pom.xml | 14 +-
.../org/apache/dubbo/demo/consumer/Consumer.java | 8 +
.../dubbo/demo/consumer/DemoServiceMock.java | 24 +-
.../META-INF/spring/dubbo-demo-consumer.xml | 8 +-
dubbo-demo/dubbo-demo-provider/pom.xml | 18 +-
.../dubbo/demo/provider/DemoServiceImpl.java | 12 +
.../META-INF/spring/dubbo-demo-provider.xml | 86 ++--
dubbo-dependencies-bom/pom.xml | 54 ++-
.../dubbo-metadata-definition}/pom.xml | 27 +-
.../definition/ServiceDefinitionBuilder.java | 107 +++++
.../metadata/definition/TypeDefinitionBuilder.java | 79 ++++
.../definition/builder/ArrayTypeBuilder.java | 119 +++---
.../definition/builder/CollectionTypeBuilder.java | 79 ++++
.../definition/builder/DefaultTypeBuilder.java | 70 ++++
.../definition/builder/EnumTypeBuilder.java | 63 +++
.../definition/builder/MapTypeBuilder.java | 76 ++++
.../metadata/definition/builder/TypeBuilder.java | 82 ++--
.../definition/model/FullServiceDefinition.java | 30 +-
.../definition/model/MethodDefinition.java | 92 +++++
.../definition/model/ServiceDefinition.java | 96 +++++
.../metadata/definition/model/TypeDefinition.java | 124 ++++++
.../dubbo/metadata/definition/util/ClassUtils.java | 111 ++++++
.../definition/util/JaketConfigurationUtils.java | 100 +++++
.../dubbo/metadata/definition/MetadataTest.java | 143 +++++++
.../dubbo/metadata/definition/MetadataUtils.java | 75 ++++
.../definition/ServiceDefinitionBuildderTest.java | 98 +++++
.../definition/common/ClassExtendsMap.java | 19 +-
.../metadata/definition/common/ColorEnum.java | 45 ++-
.../metadata/definition/common/OuterClass.java | 72 ++--
.../common/ResultWithRawCollections.java | 96 +++--
.../metadata/definition/common/TestService.java | 98 +++--
.../metadata/definition/service/ComplexObject.java | 296 ++++++++++++++
.../metadata/definition/service}/DemoService.java | 67 ++--
.../dubbo-metadata-report-api}/pom.xml | 53 ++-
.../metadata/identifier/MetadataIdentifier.java | 125 ++++++
.../integration/MetadataReportService.java | 103 +++++
.../dubbo/metadata/store/MetadataReport.java | 73 ++--
.../metadata/store/MetadataReportFactory.java | 56 +--
.../metadata/support/AbstractMetadataReport.java | 407 +++++++++++++++++++
.../support/AbstractMetadataReportFactory.java | 64 +++
.../integration/InterfaceNameTestService.java | 48 +--
.../integration/InterfaceNameTestService2.java | 48 +--
.../integration/MetadataReportServiceTest.java | 137 +++++++
.../metadata/integration/RetryTestService.java | 53 +--
.../store/test/JTestMetadataReport4Test.java | 69 ++++
.../test/JTestMetadataReportFactory4Test.java | 25 +-
.../support/AbstractMetadataReportFactoryTest.java | 94 +++++
.../support/AbstractMetadataReportTest.java | 323 +++++++++++++++
...ache.dubbo.metadata.store.MetadataReportFactory | 1 +
.../dubbo-metadata-report-redis}/pom.xml | 35 +-
.../metadata/store/redis/RedisMetadataReport.java | 63 +++
.../store/redis/RedisMetadataReportFactory.java | 17 +-
...ache.dubbo.metadata.store.MetadataReportFactory | 1 +
.../store/redis/RedisMetadata4TstService.java | 12 +
.../store/redis/RedisMetadataReportTest.java | 130 ++++++
.../dubbo-metadata-report-zookeeper}/pom.xml | 29 +-
.../store/zookeeper/ZookeeperMetadataReport.java | 94 +++++
.../zookeeper/ZookeeperMetadataReportFactory.java | 25 +-
...ache.dubbo.metadata.store.MetadataReportFactory | 1 +
.../ZookeeperMetadataReport4TstService.java | 11 +
.../zookeeper/ZookeeperMetadataReportTest.java | 125 ++++++
{dubbo-cluster => dubbo-metadata-report}/pom.xml | 35 +-
dubbo-plugin/dubbo-qos/pom.xml | 2 +-
dubbo-registry/dubbo-registry-api/pom.xml | 23 +-
.../integration/AbstractConfiguratorListener.java | 71 ++++
.../registry/integration/RegistryDirectory.java | 439 +++++++++++++--------
.../registry/integration/RegistryProtocol.java | 317 +++++++++++----
.../registry/support/ProviderConsumerRegTable.java | 48 ++-
.../registry/support/ProviderInvokerWrapper.java | 9 +
.../java/org/apache/dubbo/registry/ZKTools.java | 307 ++++++++++++++
dubbo-registry/dubbo-registry-default/pom.xml | 5 +
.../registry/dubbo/RegistryDirectoryTest.java | 18 +-
.../dubbo/registry/dubbo/RegistryProtocolTest.java | 1 -
.../registry/integration/RegistryProtocolTest.java | 23 ++
.../dubbo/remoting/zookeeper/ZookeeperClient.java | 4 +
.../zookeeper/curator/CuratorZookeeperClient.java | 40 ++
.../zookeeper/support/AbstractZookeeperClient.java | 28 ++
.../zookeeper/zkclient/ZkClientWrapper.java | 15 +
.../zkclient/ZkclientZookeeperClient.java | 25 ++
.../curator/CuratorZookeeperClientTest.java | 30 +-
.../zkclient/ZkclientZookeeperClientTest.java | 30 +-
.../java/org/apache/dubbo/rpc/AsyncContext.java | 1 +
.../java/org/apache/dubbo/rpc/AsyncRpcResult.java | 4 +-
.../main/java/org/apache/dubbo/rpc/RpcContext.java | 5 +-
.../java/org/apache/dubbo/rpc/RpcException.java | 5 +
.../org/apache/dubbo/rpc/filter/ContextFilter.java | 1 -
.../apache/dubbo/rpc/model/ApplicationModel.java | 10 +
dubbo-rpc/dubbo-rpc-dubbo/pom.xml | 5 +
.../dubbo/rpc/protocol/dubbo/DubboInvoker.java | 4 +-
.../dubbo/rpc/protocol/dubbo/DubboProtocol.java | 8 +-
.../protocol/dubbo/DubboInvokerAvilableTest.java | 3 +-
.../dubbo/rpc/protocol/thrift/ThriftProtocol.java | 4 +-
.../webservice/WebserviceProtocolTest.java | 4 +-
.../dubbo/test/provider/DefaultDemoService.java | 10 +
pom.xml | 2 +
269 files changed, 13754 insertions(+), 3059 deletions(-)
copy dubbo-cluster/src/main/java/org/apache/dubbo/rpc/cluster/{router/tag/TagRouterFactory.java => AbstractAppRouterFactory.java} (67%)
copy dubbo-cluster/src/main/java/org/apache/dubbo/rpc/cluster/{router/tag/TagRouterFactory.java => AbstractRouterFactory.java} (57%)
create mode 100644 dubbo-cluster/src/main/java/org/apache/dubbo/rpc/cluster/RouterChain.java
create mode 100644 dubbo-cluster/src/main/java/org/apache/dubbo/rpc/cluster/configurator/parser/ConfigParser.java
create mode 100644 dubbo-cluster/src/main/java/org/apache/dubbo/rpc/cluster/configurator/parser/model/ConfigItem.java
create mode 100644 dubbo-cluster/src/main/java/org/apache/dubbo/rpc/cluster/configurator/parser/model/ConfiguratorConfig.java
create mode 100644 dubbo-cluster/src/main/java/org/apache/dubbo/rpc/cluster/router/AbstractRouter.java
create mode 100644 dubbo-cluster/src/main/java/org/apache/dubbo/rpc/cluster/router/AbstractRouterRule.java
create mode 100644 dubbo-cluster/src/main/java/org/apache/dubbo/rpc/cluster/router/condition/config/AbstractConfigConditionRouter.java
copy dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/mock/MockRegistryFactory.java => dubbo-cluster/src/main/java/org/apache/dubbo/rpc/cluster/router/condition/config/AppConfigConditionRouter.java (52%)
copy dubbo-cluster/src/main/java/org/apache/dubbo/rpc/cluster/router/{tag/TagRouterFactory.java => condition/config/AppConfigConditionRouterFactory.java} (62%)
copy dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/mock/MockRegistryFactory.java => dubbo-cluster/src/main/java/org/apache/dubbo/rpc/cluster/router/condition/config/ServiceConfigConditionRouter.java (53%)
copy dubbo-cluster/src/main/java/org/apache/dubbo/rpc/cluster/router/{tag/TagRouterFactory.java => condition/config/ServiceConfigConditionRouterFactory.java} (62%)
copy dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/api/DemoService.java => dubbo-cluster/src/main/java/org/apache/dubbo/rpc/cluster/router/condition/config/model/BlackWhiteListRule.java (67%)
copy dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/provider/impl/DemoServiceImpl.java => dubbo-cluster/src/main/java/org/apache/dubbo/rpc/cluster/router/condition/config/model/ConditionRouterRule.java (55%)
create mode 100644 dubbo-cluster/src/main/java/org/apache/dubbo/rpc/cluster/router/condition/config/model/ConditionRuleParser.java
rename dubbo-cluster/src/main/java/org/apache/dubbo/rpc/cluster/router/{ => mock}/MockInvokersSelector.java (88%)
copy dubbo-cluster/src/main/java/org/apache/dubbo/rpc/cluster/router/{tag/TagRouterFactory.java => mock/MockRouterFactory.java} (81%)
copy dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/api/DemoService.java => dubbo-cluster/src/main/java/org/apache/dubbo/rpc/cluster/router/tag/model/Tag.java (65%)
create mode 100644 dubbo-cluster/src/main/java/org/apache/dubbo/rpc/cluster/router/tag/model/TagRouterRule.java
create mode 100644 dubbo-cluster/src/main/java/org/apache/dubbo/rpc/cluster/router/tag/model/TagRuleParser.java
copy dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/mock/MockRegistryFactory.java => dubbo-cluster/src/main/java/org/apache/dubbo/rpc/cluster/support/RegistryAwareCluster.java (63%)
create mode 100644 dubbo-cluster/src/main/java/org/apache/dubbo/rpc/cluster/support/RegistryAwareClusterInvoker.java
create mode 100644 dubbo-cluster/src/test/java/org/apache/dubbo/rpc/cluster/configurator/parser/ConfigParserTest.java
create mode 100644 dubbo-cluster/src/test/java/org/apache/dubbo/rpc/cluster/router/ConfigConditionRouterTest.java
create mode 100644 dubbo-cluster/src/test/java/org/apache/dubbo/rpc/cluster/router/TagRouterTest.java
delete mode 100644 dubbo-cluster/src/test/java/org/apache/dubbo/rpc/cluster/router/tag/TagRouterTest.java
create mode 100644 dubbo-cluster/src/test/resources/AppAnyServices.yml
create mode 100644 dubbo-cluster/src/test/resources/AppMultiServices.yml
create mode 100644 dubbo-cluster/src/test/resources/AppNoService.yml
create mode 100644 dubbo-cluster/src/test/resources/ConditionRule.yml
create mode 100644 dubbo-cluster/src/test/resources/ConsumerSpecificProviders.yml
create mode 100644 dubbo-cluster/src/test/resources/ServiceGroupVersion.yml
create mode 100644 dubbo-cluster/src/test/resources/ServiceMultiApps.yml
create mode 100644 dubbo-cluster/src/test/resources/ServiceNoApp.yml
create mode 100644 dubbo-cluster/src/test/resources/ServiceNoRule.yml
create mode 100644 dubbo-cluster/src/test/resources/TagRule.yml
create mode 100644 dubbo-common/src/main/java/org/apache/dubbo/common/config/AbstractConfiguration.java
create mode 100644 dubbo-common/src/main/java/org/apache/dubbo/common/config/AbstractPrefixConfiguration.java
create mode 100644 dubbo-common/src/main/java/org/apache/dubbo/common/config/CompositeConfiguration.java
create mode 100644 dubbo-common/src/main/java/org/apache/dubbo/common/config/Configuration.java
create mode 100644 dubbo-common/src/main/java/org/apache/dubbo/common/config/ConfigurationUtils.java
create mode 100644 dubbo-common/src/main/java/org/apache/dubbo/common/config/Environment.java
copy dubbo-cluster/src/main/java/org/apache/dubbo/rpc/cluster/router/tag/TagRouterFactory.java => dubbo-common/src/main/java/org/apache/dubbo/common/config/EnvironmentConfiguration.java (66%)
create mode 100644 dubbo-common/src/main/java/org/apache/dubbo/common/config/InmemoryConfiguration.java
copy dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/mock/MockRegistryFactory.java => dubbo-common/src/main/java/org/apache/dubbo/common/config/PropertiesConfiguration.java (54%)
copy dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/mock/MockRegistryFactory.java => dubbo-common/src/main/java/org/apache/dubbo/common/config/SystemConfiguration.java (61%)
copy dubbo-demo/dubbo-demo-api/src/main/java/org/apache/dubbo/demo/DemoService.java => dubbo-common/src/test/java/org/apache/dubbo/common/config/AbstractPrefixConfigurationTest.java (86%)
copy dubbo-demo/dubbo-demo-api/src/main/java/org/apache/dubbo/demo/DemoService.java => dubbo-common/src/test/java/org/apache/dubbo/common/config/CompositeConfigurationTest.java (86%)
copy dubbo-demo/dubbo-demo-api/src/main/java/org/apache/dubbo/demo/DemoService.java => dubbo-common/src/test/java/org/apache/dubbo/common/config/EnvironmentTest.java (86%)
create mode 100644 dubbo-compatible/src/test/java/org/apache/dubbo/config/RegistryDataConfigTest.java
copy dubbo-cluster/src/main/java/org/apache/dubbo/rpc/cluster/Configurator.java => dubbo-compatible/src/test/java/org/apache/dubbo/rpc/cluster/CompatibleRouter.java (59%)
create mode 100644 dubbo-compatible/src/test/java/org/apache/dubbo/service/ComplexObject.java
create mode 100644 dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/ConfigCenterConfig.java
copy dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/{MonitorConfig.java => MetadataReportConfig.java} (53%)
create mode 100644 dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/RegistryDataConfig.java
create mode 100644 dubbo-config/dubbo-config-api/src/test/resources/dubbo.properties
create mode 100644 dubbo-config/dubbo-config-spring/src/main/java/org/apache/dubbo/config/spring/ConfigCenterBean.java
copy {dubbo-container/dubbo-container-log4j => dubbo-configcenter/dubbo-configcenter-api}/pom.xml (73%)
create mode 100644 dubbo-configcenter/dubbo-configcenter-api/src/main/java/org/apache/dubbo/configcenter/AbstractDynamicConfiguration.java
copy dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/mock/MockRegistryFactory.java => dubbo-configcenter/dubbo-configcenter-api/src/main/java/org/apache/dubbo/configcenter/AbstractDynamicConfigurationFactory.java (57%)
create mode 100644 dubbo-configcenter/dubbo-configcenter-api/src/main/java/org/apache/dubbo/configcenter/ConfigChangeEvent.java
copy dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/cache/CacheService.java => dubbo-configcenter/dubbo-configcenter-api/src/main/java/org/apache/dubbo/configcenter/ConfigChangeType.java (75%)
copy dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/cache/CacheService.java => dubbo-configcenter/dubbo-configcenter-api/src/main/java/org/apache/dubbo/configcenter/ConfigurationListener.java (66%)
create mode 100644 dubbo-configcenter/dubbo-configcenter-api/src/main/java/org/apache/dubbo/configcenter/DynamicConfiguration.java
copy dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/cache/CacheService.java => dubbo-configcenter/dubbo-configcenter-api/src/main/java/org/apache/dubbo/configcenter/DynamicConfigurationFactory.java (77%)
create mode 100644 dubbo-configcenter/dubbo-configcenter-api/src/main/java/org/apache/dubbo/configcenter/support/nop/NopDynamicConfiguration.java
copy dubbo-cluster/src/main/java/org/apache/dubbo/rpc/cluster/router/tag/TagRouterFactory.java => dubbo-configcenter/dubbo-configcenter-api/src/main/java/org/apache/dubbo/configcenter/support/nop/NopDynamicConfigurationFactory.java (67%)
create mode 100644 dubbo-configcenter/dubbo-configcenter-api/src/main/resources/META-INF/dubbo/org.apache.dubbo.configcenter.DynamicConfigurationFactory
create mode 100644 dubbo-configcenter/dubbo-configcenter-api/src/test/java/org/apache/dubbo/configcenter/mock/AbstractDynamicConfigurationTest.java
create mode 100644 dubbo-configcenter/dubbo-configcenter-api/src/test/java/org/apache/dubbo/configcenter/mock/MockDynamicConfiguration.java
copy dubbo-cluster/src/main/java/org/apache/dubbo/rpc/cluster/router/tag/TagRouterFactory.java => dubbo-configcenter/dubbo-configcenter-api/src/test/java/org/apache/dubbo/configcenter/mock/MockDynamicConfigurationFactory.java (68%)
create mode 100644 dubbo-configcenter/dubbo-configcenter-api/src/test/resources/META-INF/dubbo/internal/org.apache.dubbo.configcenter.DynamicConfigurationFactory
copy {dubbo-container/dubbo-container-log4j => dubbo-configcenter/dubbo-configcenter-apollo}/pom.xml (67%)
create mode 100644 dubbo-configcenter/dubbo-configcenter-apollo/src/main/java/org/apache/dubbo/configcenter/support/apollo/ApolloDynamicConfiguration.java
copy dubbo-cluster/src/main/java/org/apache/dubbo/rpc/cluster/router/tag/TagRouterFactory.java => dubbo-configcenter/dubbo-configcenter-apollo/src/main/java/org/apache/dubbo/configcenter/support/apollo/ApolloDynamicConfigurationFactory.java (67%)
create mode 100644 dubbo-configcenter/dubbo-configcenter-apollo/src/main/resources/META-INF/dubbo/internal/org.apache.dubbo.configcenter.DynamicConfigurationFactory
copy {dubbo-registry/dubbo-registry-api => dubbo-configcenter/dubbo-configcenter-zookeeper}/pom.xml (53%)
create mode 100644 dubbo-configcenter/dubbo-configcenter-zookeeper/src/main/java/org/apache/dubbo/configcenter/support/zookeeper/CacheListener.java
create mode 100644 dubbo-configcenter/dubbo-configcenter-zookeeper/src/main/java/org/apache/dubbo/configcenter/support/zookeeper/ZookeeperDynamicConfiguration.java
copy dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/mock/MockRegistryFactory.java => dubbo-configcenter/dubbo-configcenter-zookeeper/src/main/java/org/apache/dubbo/configcenter/support/zookeeper/ZookeeperDynamicConfigurationFactory.java (67%)
create mode 100644 dubbo-configcenter/dubbo-configcenter-zookeeper/src/main/resources/META-INF/dubbo/internal/org.apache.dubbo.configcenter.DynamicConfigurationFactory
create mode 100644 dubbo-configcenter/dubbo-configcenter-zookeeper/src/test/java/org/apache/dubbo/configcenter/support/zookeeper/ZookeeperDynamicConfigurationTest.java
copy {dubbo-cluster => dubbo-configcenter}/pom.xml (65%)
copy dubbo-cluster/src/main/java/org/apache/dubbo/rpc/cluster/router/tag/TagRouterFactory.java => dubbo-demo/dubbo-demo-consumer/src/main/java/org/apache/dubbo/demo/consumer/DemoServiceMock.java (69%)
copy {dubbo-cluster => dubbo-metadata-report/dubbo-metadata-definition}/pom.xml (66%)
create mode 100755 dubbo-metadata-report/dubbo-metadata-definition/src/main/java/org/apache/dubbo/metadata/definition/ServiceDefinitionBuilder.java
create mode 100755 dubbo-metadata-report/dubbo-metadata-definition/src/main/java/org/apache/dubbo/metadata/definition/TypeDefinitionBuilder.java
copy dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/api/User.java => dubbo-metadata-report/dubbo-metadata-definition/src/main/java/org/apache/dubbo/metadata/definition/builder/ArrayTypeBuilder.java (52%)
mode change 100644 => 100755
create mode 100755 dubbo-metadata-report/dubbo-metadata-definition/src/main/java/org/apache/dubbo/metadata/definition/builder/CollectionTypeBuilder.java
create mode 100755 dubbo-metadata-report/dubbo-metadata-definition/src/main/java/org/apache/dubbo/metadata/definition/builder/DefaultTypeBuilder.java
create mode 100755 dubbo-metadata-report/dubbo-metadata-definition/src/main/java/org/apache/dubbo/metadata/definition/builder/EnumTypeBuilder.java
create mode 100755 dubbo-metadata-report/dubbo-metadata-definition/src/main/java/org/apache/dubbo/metadata/definition/builder/MapTypeBuilder.java
copy dubbo-cluster/src/main/java/org/apache/dubbo/rpc/cluster/Configurator.java => dubbo-metadata-report/dubbo-metadata-definition/src/main/java/org/apache/dubbo/metadata/definition/builder/TypeBuilder.java (64%)
mode change 100644 => 100755
copy dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/mock/MockRegistryFactory.java => dubbo-metadata-report/dubbo-metadata-definition/src/main/java/org/apache/dubbo/metadata/definition/model/FullServiceDefinition.java (60%)
create mode 100755 dubbo-metadata-report/dubbo-metadata-definition/src/main/java/org/apache/dubbo/metadata/definition/model/MethodDefinition.java
create mode 100755 dubbo-metadata-report/dubbo-metadata-definition/src/main/java/org/apache/dubbo/metadata/definition/model/ServiceDefinition.java
create mode 100755 dubbo-metadata-report/dubbo-metadata-definition/src/main/java/org/apache/dubbo/metadata/definition/model/TypeDefinition.java
create mode 100755 dubbo-metadata-report/dubbo-metadata-definition/src/main/java/org/apache/dubbo/metadata/definition/util/ClassUtils.java
create mode 100755 dubbo-metadata-report/dubbo-metadata-definition/src/main/java/org/apache/dubbo/metadata/definition/util/JaketConfigurationUtils.java
create mode 100644 dubbo-metadata-report/dubbo-metadata-definition/src/test/java/org/apache/dubbo/metadata/definition/MetadataTest.java
create mode 100644 dubbo-metadata-report/dubbo-metadata-definition/src/test/java/org/apache/dubbo/metadata/definition/MetadataUtils.java
create mode 100644 dubbo-metadata-report/dubbo-metadata-definition/src/test/java/org/apache/dubbo/metadata/definition/ServiceDefinitionBuildderTest.java
copy dubbo-cluster/src/main/java/org/apache/dubbo/rpc/cluster/router/tag/TagRouterFactory.java => dubbo-metadata-report/dubbo-metadata-definition/src/test/java/org/apache/dubbo/metadata/definition/common/ClassExtendsMap.java (68%)
copy dubbo-demo/dubbo-demo-api/src/main/java/org/apache/dubbo/demo/DemoService.java => dubbo-metadata-report/dubbo-metadata-definition/src/test/java/org/apache/dubbo/metadata/definition/common/ColorEnum.java (87%)
copy dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/cache/CacheServiceImpl.java => dubbo-metadata-report/dubbo-metadata-definition/src/test/java/org/apache/dubbo/metadata/definition/common/OuterClass.java (67%)
copy dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/api/DemoException.java => dubbo-metadata-report/dubbo-metadata-definition/src/test/java/org/apache/dubbo/metadata/definition/common/ResultWithRawCollections.java (58%)
copy dubbo-cluster/src/main/java/org/apache/dubbo/rpc/cluster/Configurator.java => dubbo-metadata-report/dubbo-metadata-definition/src/test/java/org/apache/dubbo/metadata/definition/common/TestService.java (64%)
create mode 100644 dubbo-metadata-report/dubbo-metadata-definition/src/test/java/org/apache/dubbo/metadata/definition/service/ComplexObject.java
copy {dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/api => dubbo-metadata-report/dubbo-metadata-definition/src/test/java/org/apache/dubbo/metadata/definition/service}/DemoService.java (76%)
copy {dubbo-config/dubbo-config-api => dubbo-metadata-report/dubbo-metadata-report-api}/pom.xml (59%)
create mode 100644 dubbo-metadata-report/dubbo-metadata-report-api/src/main/java/org/apache/dubbo/metadata/identifier/MetadataIdentifier.java
create mode 100644 dubbo-metadata-report/dubbo-metadata-report-api/src/main/java/org/apache/dubbo/metadata/integration/MetadataReportService.java
copy dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/api/DemoService.java => dubbo-metadata-report/dubbo-metadata-report-api/src/main/java/org/apache/dubbo/metadata/store/MetadataReport.java (60%)
copy dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/cache/CacheService.java => dubbo-metadata-report/dubbo-metadata-report-api/src/main/java/org/apache/dubbo/metadata/store/MetadataReportFactory.java (72%)
create mode 100644 dubbo-metadata-report/dubbo-metadata-report-api/src/main/java/org/apache/dubbo/metadata/support/AbstractMetadataReport.java
create mode 100644 dubbo-metadata-report/dubbo-metadata-report-api/src/main/java/org/apache/dubbo/metadata/support/AbstractMetadataReportFactory.java
copy dubbo-demo/dubbo-demo-api/src/main/java/org/apache/dubbo/demo/DemoService.java => dubbo-metadata-report/dubbo-metadata-report-api/src/test/java/org/apache/dubbo/metadata/integration/InterfaceNameTestService.java (85%)
copy dubbo-demo/dubbo-demo-api/src/main/java/org/apache/dubbo/demo/DemoService.java => dubbo-metadata-report/dubbo-metadata-report-api/src/test/java/org/apache/dubbo/metadata/integration/InterfaceNameTestService2.java (85%)
create mode 100644 dubbo-metadata-report/dubbo-metadata-report-api/src/test/java/org/apache/dubbo/metadata/integration/MetadataReportServiceTest.java
copy dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/cache/CacheService.java => dubbo-metadata-report/dubbo-metadata-report-api/src/test/java/org/apache/dubbo/metadata/integration/RetryTestService.java (84%)
create mode 100644 dubbo-metadata-report/dubbo-metadata-report-api/src/test/java/org/apache/dubbo/metadata/store/test/JTestMetadataReport4Test.java
copy dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/mock/MockRegistryFactory.java => dubbo-metadata-report/dubbo-metadata-report-api/src/test/java/org/apache/dubbo/metadata/store/test/JTestMetadataReportFactory4Test.java (55%)
create mode 100644 dubbo-metadata-report/dubbo-metadata-report-api/src/test/java/org/apache/dubbo/metadata/support/AbstractMetadataReportFactoryTest.java
create mode 100644 dubbo-metadata-report/dubbo-metadata-report-api/src/test/java/org/apache/dubbo/metadata/support/AbstractMetadataReportTest.java
create mode 100644 dubbo-metadata-report/dubbo-metadata-report-api/src/test/resources/META-INF/dubbo/internal/org.apache.dubbo.metadata.store.MetadataReportFactory
copy {dubbo-plugin/dubbo-qos => dubbo-metadata-report/dubbo-metadata-report-redis}/pom.xml (56%)
create mode 100644 dubbo-metadata-report/dubbo-metadata-report-redis/src/main/java/org/apache/dubbo/metadata/store/redis/RedisMetadataReport.java
copy dubbo-cluster/src/main/java/org/apache/dubbo/rpc/cluster/router/tag/TagRouterFactory.java => dubbo-metadata-report/dubbo-metadata-report-redis/src/main/java/org/apache/dubbo/metadata/store/redis/RedisMetadataReportFactory.java (68%)
create mode 100644 dubbo-metadata-report/dubbo-metadata-report-redis/src/main/resources/META-INF/dubbo/internal/org.apache.dubbo.metadata.store.MetadataReportFactory
create mode 100644 dubbo-metadata-report/dubbo-metadata-report-redis/src/test/java/org/apache/dubbo/metadata/store/redis/RedisMetadata4TstService.java
create mode 100644 dubbo-metadata-report/dubbo-metadata-report-redis/src/test/java/org/apache/dubbo/metadata/store/redis/RedisMetadataReportTest.java
copy {dubbo-plugin/dubbo-qos => dubbo-metadata-report/dubbo-metadata-report-zookeeper}/pom.xml (60%)
create mode 100644 dubbo-metadata-report/dubbo-metadata-report-zookeeper/src/main/java/org/apache/dubbo/metadata/store/zookeeper/ZookeeperMetadataReport.java
copy dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/mock/MockRegistryFactory.java => dubbo-metadata-report/dubbo-metadata-report-zookeeper/src/main/java/org/apache/dubbo/metadata/store/zookeeper/ZookeeperMetadataReportFactory.java (55%)
create mode 100644 dubbo-metadata-report/dubbo-metadata-report-zookeeper/src/main/resources/META-INF/dubbo/internal/org.apache.dubbo.metadata.store.MetadataReportFactory
create mode 100644 dubbo-metadata-report/dubbo-metadata-report-zookeeper/src/test/java/org/apache/dubbo/metadata/store/zookeeper/ZookeeperMetadataReport4TstService.java
create mode 100644 dubbo-metadata-report/dubbo-metadata-report-zookeeper/src/test/java/org/apache/dubbo/metadata/store/zookeeper/ZookeeperMetadataReportTest.java
copy {dubbo-cluster => dubbo-metadata-report}/pom.xml (57%)
create mode 100644 dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/integration/AbstractConfiguratorListener.java
create mode 100644 dubbo-registry/dubbo-registry-api/src/test/java/org/apache/dubbo/registry/ZKTools.java
create mode 100644 dubbo-registry/dubbo-registry-default/src/test/java/org/apache/dubbo/registry/integration/RegistryProtocolTest.java
[incubator-dubbo] 06/10: make condition router enabled by default.
Posted by li...@apache.org.
This is an automated email from the ASF dual-hosted git repository.
liujun pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-dubbo.git
commit 411abe9026ea4d6b8c9e73515947c3a520411656
Author: ken.lj <ke...@gmail.com>
AuthorDate: Mon Dec 24 12:17:27 2018 +0800
make condition router enabled by default.
---
.../org/apache/dubbo/rpc/cluster/router/condition/ConditionRouter.java | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/dubbo-cluster/src/main/java/org/apache/dubbo/rpc/cluster/router/condition/ConditionRouter.java b/dubbo-cluster/src/main/java/org/apache/dubbo/rpc/cluster/router/condition/ConditionRouter.java
index 6ba42ee..0cc3da6 100644
--- a/dubbo-cluster/src/main/java/org/apache/dubbo/rpc/cluster/router/condition/ConditionRouter.java
+++ b/dubbo-cluster/src/main/java/org/apache/dubbo/rpc/cluster/router/condition/ConditionRouter.java
@@ -196,7 +196,7 @@ public class ConditionRouter extends AbstractRouter implements Comparable<Router
@Override
public boolean isEnabled() {
- return url == null ? enabled : url.getParameter(Constants.ENABLED_KEY, false);
+ return url == null ? enabled : url.getParameter(Constants.ENABLED_KEY, true);
}
@Override
[incubator-dubbo] 03/10: Merge branch '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 master
in repository https://gitbox.apache.org/repos/asf/incubator-dubbo.git
commit b1324511d13aad36d14adee7bce71cdbe65a872a
Merge: 678cdb4 5184416
Author: ken.lj <ke...@gmail.com>
AuthorDate: Sun Dec 23 20:29:38 2018 +0800
Merge branch 'dev-metadata'
# Conflicts:
# dubbo-cluster/src/main/java/org/apache/dubbo/rpc/cluster/Router.java
# dubbo-cluster/src/main/java/org/apache/dubbo/rpc/cluster/router/condition/ConditionRouter.java
# dubbo-cluster/src/main/java/org/apache/dubbo/rpc/cluster/router/mock/MockInvokersSelector.java
# dubbo-cluster/src/main/java/org/apache/dubbo/rpc/cluster/router/script/ScriptRouter.java
# dubbo-cluster/src/main/java/org/apache/dubbo/rpc/cluster/router/tag/TagRouter.java
# dubbo-cluster/src/main/java/org/apache/dubbo/rpc/cluster/support/AbstractClusterInvoker.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/ReferenceConfig.java
# dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/ServiceConfig.java
# dubbo-config/dubbo-config-api/src/test/resources/log4j.xml
# dubbo-config/dubbo-config-spring/src/main/java/org/apache/dubbo/config/spring/schema/DubboBeanDefinitionParser.java
# dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/integration/RegistryDirectory.java
# dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/support/ProviderConsumerRegTable.java
# dubbo-rpc/dubbo-rpc-api/src/main/java/org/apache/dubbo/rpc/model/ApplicationModel.java
# dubbo-rpc/dubbo-rpc-api/src/test/java/org/apache/dubbo/rpc/support/RuntimeExceptionInvoker.java
# dubbo-rpc/dubbo-rpc-dubbo/src/test/java/org/apache/dubbo/rpc/protocol/dubbo/DubboInvokerAvilableTest.java
# dubbo-rpc/dubbo-rpc-dubbo/src/test/java/org/apache/dubbo/rpc/service/GenericServiceTest.java
# dubbo-rpc/dubbo-rpc-dubbo/src/test/java/org/apache/dubbo/rpc/validation/ValidationParameter.java
# dubbo-rpc/dubbo-rpc-dubbo/src/test/java/org/apache/dubbo/rpc/validation/ValidationService.java
# dubbo-rpc/dubbo-rpc-dubbo/src/test/java/org/apache/dubbo/rpc/validation/ValidationTest.java
codestyle/checkstyle.xml | 10 +-
dubbo-all/pom.xml | 57 +++
dubbo-bom/pom.xml | 35 ++
dubbo-cluster/pom.xml | 20 +
...rFactory.java => AbstractAppRouterFactory.java} | 24 +-
...uterFactory.java => AbstractRouterFactory.java} | 19 +-
.../org/apache/dubbo/rpc/cluster/Configurator.java | 48 +++
.../java/org/apache/dubbo/rpc/cluster/Router.java | 45 ++-
.../org/apache/dubbo/rpc/cluster/RouterChain.java | 156 ++++++++
.../apache/dubbo/rpc/cluster/RouterFactory.java | 7 +-
.../cluster/configurator/AbstractConfigurator.java | 75 +++-
.../cluster/configurator/parser/ConfigParser.java | 201 ++++++++++
.../configurator/parser/model/ConfigItem.java | 103 +++++
.../parser/model/ConfiguratorConfig.java | 74 ++++
.../rpc/cluster/directory/AbstractDirectory.java | 55 +--
.../rpc/cluster/directory/StaticDirectory.java | 35 +-
.../dubbo/rpc/cluster/router/AbstractRouter.java | 101 +++++
.../rpc/cluster/router/AbstractRouterRule.java | 105 +++++
.../cluster/router/condition/ConditionRouter.java | 46 ++-
.../config/AbstractConfigConditionRouter.java | 145 +++++++
.../condition/config/AppConfigConditionRouter.java | 28 +-
.../config/AppConfigConditionRouterFactory.java} | 19 +-
.../config/ServiceConfigConditionRouter.java | 28 +-
.../ServiceConfigConditionRouterFactory.java} | 19 +-
.../condition/config/model/BlackWhiteListRule.java | 73 ++--
.../config/model/ConditionRouterRule.java | 99 +++--
.../config/model/ConditionRuleParser.java | 57 +++
.../router/{ => mock}/MockInvokersSelector.java | 214 +++++-----
.../MockRouterFactory.java} | 16 +-
.../rpc/cluster/router/script/ScriptRouter.java | 32 +-
.../dubbo/rpc/cluster/router/tag/TagRouter.java | 217 ++++++++--
.../rpc/cluster/router/tag/TagRouterFactory.java | 14 +-
.../dubbo/rpc/cluster/router/tag/model/Tag.java | 80 ++--
.../cluster/router/tag/model/TagRouterRule.java | 86 ++++
.../cluster/router/tag/model/TagRuleParser.java | 45 +++
.../cluster/support/AbstractClusterInvoker.java | 2 +-
.../dubbo/rpc/cluster/support/ClusterUtils.java | 15 +-
.../cluster/support/MergeableClusterInvoker.java | 29 +-
.../rpc/cluster/support/RegistryAwareCluster.java | 25 +-
.../support/RegistryAwareClusterInvoker.java | 59 +++
.../internal/org.apache.dubbo.rpc.cluster.Cluster | 3 +-
.../org.apache.dubbo.rpc.cluster.RouterFactory | 5 +-
.../configurator/parser/ConfigParserTest.java | 167 ++++++++
.../loadbalance/RoundRobinLoadBalanceTest.java | 32 +-
.../cluster/router/ConfigConditionRouterTest.java | 134 +++++++
.../dubbo/rpc/cluster/router/TagRouterTest.java | 67 ++++
.../cluster/router/file/FileRouterEngineTest.java | 14 +-
.../rpc/cluster/router/tag/TagRouterTest.java | 170 --------
.../support/AbstractClusterInvokerTest.java | 10 +-
.../support/wrapper/MockClusterInvokerTest.java | 22 +-
.../src/test/resources/AppAnyServices.yml | 32 ++
.../src/test/resources/AppMultiServices.yml | 32 ++
dubbo-cluster/src/test/resources/AppNoService.yml | 32 ++
dubbo-cluster/src/test/resources/ConditionRule.yml | 56 +++
.../test/resources/ConsumerSpecificProviders.yml | 34 ++
.../src/test/resources/ServiceGroupVersion.yml | 29 ++
.../src/test/resources/ServiceMultiApps.yml | 30 ++
dubbo-cluster/src/test/resources/ServiceNoApp.yml | 29 ++
dubbo-cluster/src/test/resources/ServiceNoRule.yml | 28 ++
dubbo-cluster/src/test/resources/TagRule.yml | 31 ++
.../java/org/apache/dubbo/common/Constants.java | 89 ++++-
.../src/main/java/org/apache/dubbo/common/URL.java | 62 ++-
.../dubbo/common/config/AbstractConfiguration.java | 91 +++++
.../common/config/AbstractPrefixConfiguration.java | 52 +++
.../common/config/CompositeConfiguration.java | 82 ++++
.../apache/dubbo/common/config/Configuration.java | 82 ++++
.../dubbo/common/config/ConfigurationUtils.java | 59 +++
.../apache/dubbo/common/config/Environment.java | 199 ++++++++++
.../common/config/EnvironmentConfiguration.java | 22 +-
.../dubbo/common/config/InmemoryConfiguration.java | 67 ++++
.../common/config/PropertiesConfiguration.java | 28 +-
.../dubbo/common/config/SystemConfiguration.java | 27 +-
.../dubbo/common/extension/ExtensionLoader.java | 20 +-
.../org/apache/dubbo/common/utils/ClassHelper.java | 70 ++++
.../org/apache/dubbo/common/utils/ConfigUtils.java | 40 +-
.../org/apache/dubbo/common/utils/UrlUtils.java | 11 +-
.../config/AbstractPrefixConfigurationTest.java | 46 +--
.../common/config/CompositeConfigurationTest.java | 46 +--
.../dubbo/common/config/EnvironmentTest.java | 46 +--
.../apache/dubbo/common/utils/ConfigUtilsTest.java | 27 --
dubbo-compatible/pom.xml | 7 +-
.../java/com/alibaba/dubbo/rpc/cluster/Router.java | 34 +-
.../dubbo/config/RegistryDataConfigTest.java | 87 ++++
.../apache/dubbo/generic/GenericServiceTest.java | 181 ++++++++-
.../apache/dubbo/rpc/cluster/CompatibleRouter.java | 88 +++--
.../org/apache/dubbo/service/ComplexObject.java | 282 +++++++++++++
.../java/org/apache/dubbo/service/DemoService.java | 8 +-
.../org/apache/dubbo/service/DemoServiceImpl.java | 15 +-
dubbo-config/dubbo-config-api/pom.xml | 5 +
.../org/apache/dubbo/config/AbstractConfig.java | 323 +++++++++------
.../dubbo/config/AbstractInterfaceConfig.java | 297 ++++++++++----
.../apache/dubbo/config/AbstractMethodConfig.java | 16 +-
.../apache/dubbo/config/AbstractServiceConfig.java | 36 +-
.../org/apache/dubbo/config/ApplicationConfig.java | 29 +-
.../apache/dubbo/config/ConfigCenterConfig.java | 313 +++++++++++++++
.../org/apache/dubbo/config/ConsumerConfig.java | 8 +-
.../org/apache/dubbo/config/DubboShutdownHook.java | 9 +-
...onitorConfig.java => MetadataReportConfig.java} | 280 ++++++-------
.../java/org/apache/dubbo/config/MethodConfig.java | 37 ++
.../java/org/apache/dubbo/config/ModuleConfig.java | 8 +-
.../org/apache/dubbo/config/MonitorConfig.java | 13 +-
.../org/apache/dubbo/config/ProtocolConfig.java | 11 +-
.../org/apache/dubbo/config/ReferenceConfig.java | 121 +++---
.../org/apache/dubbo/config/RegistryConfig.java | 49 ++-
.../apache/dubbo/config/RegistryDataConfig.java | 86 ++++
.../org/apache/dubbo/config/ServiceConfig.java | 177 ++++++---
.../invoker/DelegateProviderMetaDataInvoker.java | 2 +-
.../org/apache/dubbo/config/support/Parameter.java | 2 +
.../apache/dubbo/config/AbstractConfigTest.java | 280 ++++++++++++-
.../dubbo/config/AbstractInterfaceConfigTest.java | 5 +-
.../dubbo/config/AbstractReferenceConfigTest.java | 1 +
.../dubbo/config/AbstractServiceConfigTest.java | 1 +
.../apache/dubbo/config/ApplicationConfigTest.java | 1 +
.../org/apache/dubbo/config/MethodConfigTest.java | 1 +
.../apache/dubbo/config/ProtocolConfigTest.java | 1 +
.../apache/dubbo/config/ReferenceConfigTest.java | 6 +
.../apache/dubbo/config/RegistryConfigTest.java | 2 +
.../org/apache/dubbo/config/ServiceConfigTest.java | 6 +-
.../org/apache/dubbo/config/api/DemoException.java | 84 ++--
.../org/apache/dubbo/config/api/DemoService.java | 72 ++--
.../java/org/apache/dubbo/config/api/User.java | 130 +++---
.../apache/dubbo/config/cache/CacheService.java | 52 +--
.../dubbo/config/cache/CacheServiceImpl.java | 64 +--
.../org/apache/dubbo/config/cache/CacheTest.java | 238 +++++------
.../config/consumer/DemoActionByAnnotation.java | 68 ++--
.../dubbo/config/consumer/DemoActionBySetter.java | 70 ++--
.../dubbo/config/consumer/DemoInterceptor.java | 60 +--
.../DelegateProviderMetaDataInvokerTest.java | 3 +-
.../dubbo/config/mock/MockExporterListener.java | 2 +-
.../org/apache/dubbo/config/mock/MockRegistry.java | 16 +-
.../dubbo/config/mock/MockRegistryFactory.java | 2 +-
.../apache/dubbo/config/mock/MockThreadPool.java | 2 +-
.../apache/dubbo/config/mock/MockTransporter.java | 1 +
.../config/provider/impl/DemoServiceImpl.java | 100 ++---
.../org.apache.dubbo.registry.RegistryFactory | 4 +-
.../src/test/resources/dubbo.properties | 2 +
.../dubbo-config-api/src/test/resources/log4j.xml | 54 +--
.../dubbo/config/spring/ConfigCenterBean.java | 154 ++++++++
.../apache/dubbo/config/spring/ReferenceBean.java | 57 ++-
.../apache/dubbo/config/spring/ServiceBean.java | 76 +++-
.../annotation/DubboConfigConfiguration.java | 12 +-
.../spring/schema/DubboBeanDefinitionParser.java | 46 +--
.../spring/schema/DubboNamespaceHandler.java | 2 +
.../src/main/resources/META-INF/compat/dubbo.xsd | 137 ++++++-
.../src/main/resources/META-INF/dubbo.xsd | 128 ++++++
.../dubbo-configcenter-api}/pom.xml | 14 +-
.../configcenter/AbstractDynamicConfiguration.java | 127 ++++++
.../AbstractDynamicConfigurationFactory.java | 26 +-
.../dubbo/configcenter/ConfigChangeEvent.java | 63 +++
.../dubbo/configcenter/ConfigChangeType.java | 63 +--
.../dubbo/configcenter/ConfigurationListener.java | 57 +--
.../dubbo/configcenter/DynamicConfiguration.java | 106 +++++
.../configcenter/DynamicConfigurationFactory.java | 56 +--
.../support/nop/NopDynamicConfiguration.java | 66 ++++
.../nop/NopDynamicConfigurationFactory.java | 17 +-
....dubbo.configcenter.DynamicConfigurationFactory | 1 +
.../mock/AbstractDynamicConfigurationTest.java | 47 +++
.../mock/MockDynamicConfiguration.java | 64 +++
.../mock/MockDynamicConfigurationFactory.java | 17 +-
....dubbo.configcenter.DynamicConfigurationFactory | 1 +
.../dubbo-configcenter-apollo}/pom.xml | 16 +-
.../support/apollo/ApolloDynamicConfiguration.java | 191 +++++++++
.../apollo/ApolloDynamicConfigurationFactory.java | 18 +-
....dubbo.configcenter.DynamicConfigurationFactory | 1 +
.../dubbo-configcenter-zookeeper}/pom.xml | 43 +-
.../support/zookeeper/CacheListener.java | 119 ++++++
.../zookeeper/ZookeeperDynamicConfiguration.java | 162 ++++++++
.../ZookeeperDynamicConfigurationFactory.java | 20 +-
....dubbo.configcenter.DynamicConfigurationFactory | 1 +
.../ZookeeperDynamicConfigurationTest.java | 151 +++++++
{dubbo-cluster => dubbo-configcenter}/pom.xml | 22 +-
dubbo-container/dubbo-container-log4j/pom.xml | 5 +
.../dubbo/container/log4j/Log4jContainer.java | 8 +-
.../java/org/apache/dubbo/demo/DemoService.java | 4 +
dubbo-demo/dubbo-demo-consumer/pom.xml | 14 +-
.../org/apache/dubbo/demo/consumer/Consumer.java | 8 +
.../dubbo/demo/consumer/DemoServiceMock.java | 24 +-
.../META-INF/spring/dubbo-demo-consumer.xml | 8 +-
dubbo-demo/dubbo-demo-provider/pom.xml | 18 +-
.../dubbo/demo/provider/DemoServiceImpl.java | 12 +
.../META-INF/spring/dubbo-demo-provider.xml | 86 ++--
dubbo-dependencies-bom/pom.xml | 54 ++-
.../dubbo-metadata-definition}/pom.xml | 27 +-
.../definition/ServiceDefinitionBuilder.java | 107 +++++
.../metadata/definition/TypeDefinitionBuilder.java | 79 ++++
.../definition/builder/ArrayTypeBuilder.java | 119 +++---
.../definition/builder/CollectionTypeBuilder.java | 79 ++++
.../definition/builder/DefaultTypeBuilder.java | 70 ++++
.../definition/builder/EnumTypeBuilder.java | 63 +++
.../definition/builder/MapTypeBuilder.java | 76 ++++
.../metadata/definition/builder/TypeBuilder.java | 82 ++--
.../definition/model/FullServiceDefinition.java | 30 +-
.../definition/model/MethodDefinition.java | 92 +++++
.../definition/model/ServiceDefinition.java | 96 +++++
.../metadata/definition/model/TypeDefinition.java | 124 ++++++
.../dubbo/metadata/definition/util/ClassUtils.java | 111 ++++++
.../definition/util/JaketConfigurationUtils.java | 100 +++++
.../dubbo/metadata/definition/MetadataTest.java | 143 +++++++
.../dubbo/metadata/definition/MetadataUtils.java | 75 ++++
.../definition/ServiceDefinitionBuildderTest.java | 98 +++++
.../definition/common/ClassExtendsMap.java | 19 +-
.../metadata/definition/common/ColorEnum.java | 45 ++-
.../metadata/definition/common/OuterClass.java | 72 ++--
.../common/ResultWithRawCollections.java | 96 +++--
.../metadata/definition/common/TestService.java | 98 +++--
.../metadata/definition/service/ComplexObject.java | 296 ++++++++++++++
.../metadata/definition/service}/DemoService.java | 67 ++--
.../dubbo-metadata-report-api}/pom.xml | 53 ++-
.../metadata/identifier/MetadataIdentifier.java | 125 ++++++
.../integration/MetadataReportService.java | 103 +++++
.../dubbo/metadata/store/MetadataReport.java | 73 ++--
.../metadata/store/MetadataReportFactory.java | 56 +--
.../metadata/support/AbstractMetadataReport.java | 407 +++++++++++++++++++
.../support/AbstractMetadataReportFactory.java | 64 +++
.../integration/InterfaceNameTestService.java | 48 +--
.../integration/InterfaceNameTestService2.java | 48 +--
.../integration/MetadataReportServiceTest.java | 137 +++++++
.../metadata/integration/RetryTestService.java | 53 +--
.../store/test/JTestMetadataReport4Test.java | 69 ++++
.../test/JTestMetadataReportFactory4Test.java | 25 +-
.../support/AbstractMetadataReportFactoryTest.java | 94 +++++
.../support/AbstractMetadataReportTest.java | 323 +++++++++++++++
...ache.dubbo.metadata.store.MetadataReportFactory | 1 +
.../dubbo-metadata-report-redis}/pom.xml | 35 +-
.../metadata/store/redis/RedisMetadataReport.java | 63 +++
.../store/redis/RedisMetadataReportFactory.java | 17 +-
...ache.dubbo.metadata.store.MetadataReportFactory | 1 +
.../store/redis/RedisMetadata4TstService.java | 12 +
.../store/redis/RedisMetadataReportTest.java | 130 ++++++
.../dubbo-metadata-report-zookeeper}/pom.xml | 29 +-
.../store/zookeeper/ZookeeperMetadataReport.java | 94 +++++
.../zookeeper/ZookeeperMetadataReportFactory.java | 25 +-
...ache.dubbo.metadata.store.MetadataReportFactory | 1 +
.../ZookeeperMetadataReport4TstService.java | 11 +
.../zookeeper/ZookeeperMetadataReportTest.java | 125 ++++++
{dubbo-cluster => dubbo-metadata-report}/pom.xml | 35 +-
dubbo-plugin/dubbo-qos/pom.xml | 2 +-
dubbo-registry/dubbo-registry-api/pom.xml | 23 +-
.../integration/AbstractConfiguratorListener.java | 71 ++++
.../registry/integration/RegistryDirectory.java | 439 +++++++++++++--------
.../registry/integration/RegistryProtocol.java | 317 +++++++++++----
.../registry/support/ProviderConsumerRegTable.java | 48 ++-
.../registry/support/ProviderInvokerWrapper.java | 9 +
.../java/org/apache/dubbo/registry/ZKTools.java | 307 ++++++++++++++
dubbo-registry/dubbo-registry-default/pom.xml | 5 +
.../registry/dubbo/RegistryDirectoryTest.java | 18 +-
.../dubbo/registry/dubbo/RegistryProtocolTest.java | 1 -
.../registry/integration/RegistryProtocolTest.java | 23 ++
.../dubbo/remoting/zookeeper/ZookeeperClient.java | 4 +
.../zookeeper/curator/CuratorZookeeperClient.java | 40 ++
.../zookeeper/support/AbstractZookeeperClient.java | 28 ++
.../zookeeper/zkclient/ZkClientWrapper.java | 15 +
.../zkclient/ZkclientZookeeperClient.java | 25 ++
.../curator/CuratorZookeeperClientTest.java | 30 +-
.../zkclient/ZkclientZookeeperClientTest.java | 30 +-
.../java/org/apache/dubbo/rpc/AsyncContext.java | 1 +
.../java/org/apache/dubbo/rpc/AsyncRpcResult.java | 4 +-
.../main/java/org/apache/dubbo/rpc/RpcContext.java | 5 +-
.../java/org/apache/dubbo/rpc/RpcException.java | 5 +
.../org/apache/dubbo/rpc/filter/ContextFilter.java | 1 -
.../apache/dubbo/rpc/model/ApplicationModel.java | 10 +
dubbo-rpc/dubbo-rpc-dubbo/pom.xml | 5 +
.../dubbo/rpc/protocol/dubbo/DubboInvoker.java | 4 +-
.../dubbo/rpc/protocol/dubbo/DubboProtocol.java | 8 +-
.../protocol/dubbo/DubboInvokerAvilableTest.java | 3 +-
.../dubbo/rpc/protocol/thrift/ThriftProtocol.java | 4 +-
.../webservice/WebserviceProtocolTest.java | 4 +-
.../dubbo/test/provider/DefaultDemoService.java | 10 +
pom.xml | 2 +
269 files changed, 13777 insertions(+), 3060 deletions(-)
diff --cc dubbo-cluster/src/main/java/org/apache/dubbo/rpc/cluster/directory/AbstractDirectory.java
index f650b6e,20b0a0e..f44c398
--- a/dubbo-cluster/src/main/java/org/apache/dubbo/rpc/cluster/directory/AbstractDirectory.java
+++ b/dubbo-cluster/src/main/java/org/apache/dubbo/rpc/cluster/directory/AbstractDirectory.java
@@@ -16,24 -16,18 +16,20 @@@
*/
package org.apache.dubbo.rpc.cluster.directory;
- 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.StringUtils;
import org.apache.dubbo.rpc.Invocation;
import org.apache.dubbo.rpc.Invoker;
import org.apache.dubbo.rpc.RpcException;
import org.apache.dubbo.rpc.cluster.Directory;
import org.apache.dubbo.rpc.cluster.Router;
- import org.apache.dubbo.rpc.cluster.RouterFactory;
- import org.apache.dubbo.rpc.cluster.router.MockInvokersSelector;
+ import org.apache.dubbo.rpc.cluster.RouterChain;
import java.util.ArrayList;
- import java.util.Collections;
import java.util.List;
+import java.util.Map;
/**
* Abstract implementation of Directory: Invoker list returned from this Directory's list method have been filtered by Routers
@@@ -64,16 -58,9 +60,16 @@@ public abstract class AbstractDirectory
if (url == null) {
throw new IllegalArgumentException("url == null");
}
- this.url = url;
+
+ if (url.getProtocol().equals(Constants.REGISTRY_PROTOCOL)) {
+ Map<String, String> queryMap = StringUtils.parseQueryString(url.getParameterAndDecoded(Constants.REFER_KEY));
+ this.url = url.clearParameters().addParameters(queryMap).removeParameter(Constants.MONITOR_KEY);
+ } else {
+ this.url = url;
+ }
+
this.consumerUrl = consumerUrl;
- setRouters(routers);
+ setRouterChain(routerChain);
}
@Override
diff --cc dubbo-cluster/src/main/java/org/apache/dubbo/rpc/cluster/router/script/ScriptRouter.java
index 7c3070a,05815df..f95573c
--- a/dubbo-cluster/src/main/java/org/apache/dubbo/rpc/cluster/router/script/ScriptRouter.java
+++ b/dubbo-cluster/src/main/java/org/apache/dubbo/rpc/cluster/router/script/ScriptRouter.java
@@@ -40,9 -40,10 +40,9 @@@ import java.util.concurrent.ConcurrentH
/**
* ScriptRouter
- *
*/
- public class ScriptRouter implements Router {
-
+ public class ScriptRouter extends AbstractRouter {
+ public static final String NAME = "SCRIPT_ROUTER";
private static final Logger logger = LoggerFactory.getLogger(ScriptRouter.class);
private static final Map<String, ScriptEngine> engines = new ConcurrentHashMap<String, ScriptEngine>();
diff --cc dubbo-cluster/src/main/java/org/apache/dubbo/rpc/cluster/support/AbstractClusterInvoker.java
index 2d3602a,14e9f07..63486aa
--- a/dubbo-cluster/src/main/java/org/apache/dubbo/rpc/cluster/support/AbstractClusterInvoker.java
+++ b/dubbo-cluster/src/main/java/org/apache/dubbo/rpc/cluster/support/AbstractClusterInvoker.java
@@@ -256,8 -257,8 +256,8 @@@ public abstract class AbstractClusterIn
}
protected void checkInvokers(List<Invoker<T>> invokers, Invocation invocation) {
- if (invokers == null || invokers.isEmpty()) {
+ if (CollectionUtils.isEmpty(invokers)) {
- throw new RpcException("Failed to invoke the method "
+ throw new RpcException(RpcException.NO_INVOKER_AVAILABLE_AFTER_FILTER, "Failed to invoke the method "
+ invocation.getMethodName() + " in the service " + getInterface().getName()
+ ". No provider available for the service " + directory.getUrl().getServiceKey()
+ " from registry " + directory.getUrl().getAddress()
diff --cc dubbo-common/src/main/java/org/apache/dubbo/common/Constants.java
index c6f8b1f,5c1006b..1750e31
--- a/dubbo-common/src/main/java/org/apache/dubbo/common/Constants.java
+++ b/dubbo-common/src/main/java/org/apache/dubbo/common/Constants.java
@@@ -671,11 -715,41 +725,42 @@@ public class Constants
public static final String MULTICAST = "multicast";
- public static final String TAG_KEY = "tag";
+ public static final String TAG_KEY = "dubbo.tag";
+
+ public static final String FORCE_USE_TAG = "dubbo.force.tag";
+
+ public static final String HOST_KEY = "host";
+
+ public static final String ADDRESS_KEY = "address";
+
+ public static final String RETRY_TIMES_KEY = "retry.times";
+
+ public static final String RETRY_PERIOD_KEY = "retry.period";
+
+ public static final String SYNC_REPORT_KEY = "sync.report";
+
+ public static final String CYCLE_REPORT_KEY = "cycle.report";
+
+ public static final String CONFIG_VERSION_KEY = "configVersion";
+
+ public static final String COMPATIBLE_CONFIG_KEY = "compatible_config";
+ // package version in the manifest
+ public static final String SPECIFICATION_VERSION_KEY = "specVersion";
+
+ public static final String OVERRIDE_PROVIDERS_KEY = "providerAddreses";
+
+ public static final String PROTOCOLS_SUFFIX = "dubbo.protocols.";
+
+ public static final String PROTOCOL_SUFFIX = "dubbo.protocol.";
+
+ public static final String REGISTRIES_SUFFIX = "dubbo.registries.";
+
+ public static final String[] DEFAULT_REGISTER_PROVIDER_KEYS = {APPLICATION_KEY, CODEC_KEY, EXCHANGER_KEY, SERIALIZATION_KEY, CLUSTER_KEY, CONNECTIONS_KEY, DEPRECATED_KEY,
+ GROUP_KEY, LOADBALANCE_KEY, MOCK_KEY, PATH_KEY, TIMEOUT_KEY, TOKEN_KEY, VERSION_KEY, WARMUP_KEY, WEIGHT_KEY, TIMESTAMP_KEY, DUBBO_VERSION_KEY, SPECIFICATION_VERSION_KEY};
- public static final String REQUEST_TAG_KEY = "request.tag";
+ public static final String[] DEFAULT_REGISTER_CONSUMER_KEYS = {APPLICATION_KEY, VERSION_KEY, GROUP_KEY, DUBBO_VERSION_KEY, SPECIFICATION_VERSION_KEY};
+ public static final String TELNET = "telnet";
/*
* private Constants(){ }
*/
diff --cc dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/AbstractConfig.java
index 7cddb97,a64c73e..952853d
--- 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,535 -1,606 +1,606 @@@
-/*
- * 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.Configuration;
-import org.apache.dubbo.common.config.Environment;
-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.ClassHelper;
-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.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.Set;
-import java.util.regex.Matcher;
-import java.util.regex.Pattern;
-import java.util.stream.Collectors;
-
-/**
- * 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;
- protected String prefix;
-
- 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;
- }
- }
- return tag.substring(0, 1).toLowerCase() + tag.substring(1);
- }
-
- 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 (ClassHelper.isGetter(method)) {
- Parameter parameter = method.getAnnotation(Parameter.class);
- if (method.getReturnType() == Object.class || parameter != null && parameter.excluded()) {
- continue;
- }
- String key;
- if (parameter != null && parameter.key().length() > 0) {
- key = parameter.key();
- } else {
- key = calculatePropertyFromGetter(name);
- }
- 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 (ClassHelper.isGetter(method)) {
- String key;
- if (parameter.key().length() > 0) {
- key = parameter.key();
- } else {
- key = calculateAttributeFromGetter(name);
- }
- 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);
- }
- }
-
- /**
- * We only check boolean value at this moment.
- *
- * @param type
- * @param value
- * @return
- */
- private static boolean isTypeMatch(Class<?> type, String value) {
- if ((type == boolean.class || type == Boolean.class)
- && !("true".equals(value) || "false".equals(value))) {
- return false;
- }
- return true;
- }
-
- 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.");
- }
- }
- }
-
- protected static Set<String> getSubProperties(Map<String, String> properties, String prefix) {
- return properties.keySet().stream().filter(k -> k.contains(prefix)).map(k -> {
- k = k.substring(prefix.length());
- return k.substring(0, k.indexOf("."));
- }).collect(Collectors.toSet());
- }
-
- private static String extractPropertyName(Class<?> clazz, Method setter) throws Exception {
- String propertyName = setter.getName().substring("set".length());
- Method getter = null;
- try {
- getter = clazz.getMethod("get" + propertyName);
- } catch (NoSuchMethodException e) {
- getter = clazz.getMethod("is" + propertyName);
- }
- Parameter parameter = getter.getAnnotation(Parameter.class);
- if (parameter != null && StringUtils.isNotEmpty(parameter.key()) && parameter.useKeyAsProperty()) {
- propertyName = parameter.key();
- } else {
- propertyName = propertyName.substring(0, 1).toLowerCase() + propertyName.substring(1);
- }
- return propertyName;
- }
-
- private static String calculatePropertyFromGetter(String name) {
- int i = name.startsWith("get") ? 3 : 2;
- return StringUtils.camelToSplitName(name.substring(i, i + 1).toLowerCase() + name.substring(i + 1), ".");
- }
-
- private static String calculateAttributeFromGetter(String getter) {
- int i = getter.startsWith("get") ? 3 : 2;
- return getter.substring(i, i + 1).toLowerCase() + getter.substring(i + 1);
- }
-
- @Parameter(excluded = true)
- public String getId() {
- return id;
- }
-
- public void setId(String id) {
- this.id = id;
- }
-
- public void updateIdIfAbsent(String value) {
- if (StringUtils.isNotEmpty(value) && StringUtils.isEmpty(id)) {
- this.id = value;
- }
- }
-
- 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.
- * // FIXME: this method should be completely replaced by appendParameters
- *
- * @return
- * @see AbstractConfig#appendParameters(Map, Object, String)
- * <p>
- * Notice! This method should include all properties in the returning map, treat @Parameter differently compared to appendParameters.
- */
- public Map<String, String> getMetaData() {
- Map<String, String> 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
- && ClassHelper.isPrimitive(method.getReturnType())) {
- String prop = calculateAttributeFromGetter(name);
- String key;
- Parameter parameter = method.getAnnotation(Parameter.class);
- if (parameter != null && parameter.key().length() > 0 && parameter.useKeyAsProperty()) {
- key = parameter.key();
- } else {
- key = prop;
- }
- // treat url and configuration differently, the value should always present in configuration though it may not need to present in url.
- //if (method.getReturnType() == Object.class || parameter != null && parameter.excluded()) {
- if (method.getReturnType() == Object.class) {
- metaData.put(key, null);
- continue;
- }
- Object value = method.invoke(this);
- String str = String.valueOf(value).trim();
- if (value != null && str.length() > 0) {
- // ignore escape, keep the original value.
- /*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) {
- throw new IllegalStateException(e.getMessage(), e);
- }
- }
- return metaData;
- }
-
- @Parameter(excluded = true)
- public String getPrefix() {
- return StringUtils.isNotEmpty(prefix) ? prefix : (Constants.DUBBO + "." + getTagName(this.getClass()));
- }
-
- public void setPrefix(String prefix) {
- this.prefix = prefix;
- }
-
- /**
- * 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() {
- try {
- Environment env = Environment.getInstance();
- env.addAppConfig(getPrefix(), getId(), getMetaData());
- Configuration configuration = env.getConfiguration(getPrefix(), getId());
-
- // loop methods, get override value and set the new value back to method
- Method[] methods = getClass().getMethods();
- for (Method method : methods) {
- if (ClassHelper.isSetter(method)) {
- try {
- String value = configuration.getString(extractPropertyName(getClass(), method));
- // isTypeMatch() is called to avoid duplicate and incorrect update, for example, we have two 'setGeneric' methods in ReferenceConfig.
- if (value != null && ClassHelper.isTypeMatch(method.getParameterTypes()[0], value)) {
- method.invoke(this, ClassHelper.convertPrimitive(method.getParameterTypes()[0], value));
- }
- } catch (NoSuchMethodException e) {
- logger.info("Failed to override the property " + method.getName() + " in " +
- this.getClass().getSimpleName() +
- ", please make sure every property has getter/setter method provided.");
- }
- }
- }
- } catch (Exception e) {
- logger.error("Failed to override ", 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 {
- if (ClassHelper.isGetter(method)) {
- String name = method.getName();
- String key = calculateAttributeFromGetter(name);
- 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;
- }
-
-}
+/*
+ * 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.Configuration;
++import org.apache.dubbo.common.config.Environment;
+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.ClassHelper;
+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.Set;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
++import java.util.stream.Collectors;
+
+/**
+ * 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
+ DubboShutdownHook.getDubboShutdownHook().register();
+ }
+
+ protected String id;
++ protected String prefix;
+
+ 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;
++ return tag.substring(0, 1).toLowerCase() + tag.substring(1);
+ }
+
+ 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())) {
++ if (ClassHelper.isGetter(method)) {
+ 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;
++ key = calculatePropertyFromGetter(name);
+ }
+ 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())) {
++ if (ClassHelper.isGetter(method)) {
+ 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);
++ key = calculateAttributeFromGetter(name);
+ }
+ 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);
++ /**
++ * We only check boolean value at this moment.
++ *
++ * @param type
++ * @param value
++ * @return
++ */
++ private static boolean isTypeMatch(Class<?> type, String value) {
++ if ((type == boolean.class || type == Boolean.class)
++ && !("true".equals(value) || "false".equals(value))) {
++ return false;
+ }
- return value;
++ return true;
+ }
+
+ 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.");
+ }
+ }
+ }
+
++ protected static Set<String> getSubProperties(Map<String, String> properties, String prefix) {
++ return properties.keySet().stream().filter(k -> k.contains(prefix)).map(k -> {
++ k = k.substring(prefix.length());
++ return k.substring(0, k.indexOf("."));
++ }).collect(Collectors.toSet());
++ }
++
++ private static String extractPropertyName(Class<?> clazz, Method setter) throws Exception {
++ String propertyName = setter.getName().substring("set".length());
++ Method getter = null;
++ try {
++ getter = clazz.getMethod("get" + propertyName);
++ } catch (NoSuchMethodException e) {
++ getter = clazz.getMethod("is" + propertyName);
++ }
++ Parameter parameter = getter.getAnnotation(Parameter.class);
++ if (parameter != null && StringUtils.isNotEmpty(parameter.key()) && parameter.useKeyAsProperty()) {
++ propertyName = parameter.key();
++ } else {
++ propertyName = propertyName.substring(0, 1).toLowerCase() + propertyName.substring(1);
++ }
++ return propertyName;
++ }
++
++ private static String calculatePropertyFromGetter(String name) {
++ int i = name.startsWith("get") ? 3 : 2;
++ return StringUtils.camelToSplitName(name.substring(i, i + 1).toLowerCase() + name.substring(i + 1), ".");
++ }
++
++ private static String calculateAttributeFromGetter(String getter) {
++ int i = getter.startsWith("get") ? 3 : 2;
++ return getter.substring(i, i + 1).toLowerCase() + getter.substring(i + 1);
++ }
++
+ @Parameter(excluded = true)
+ public String getId() {
+ return id;
+ }
+
+ public void setId(String id) {
+ this.id = id;
+ }
+
++ public void updateIdIfAbsent(String value) {
++ if (StringUtils.isNotEmpty(value) && StringUtils.isEmpty(id)) {
++ this.id = value;
++ }
++ }
++
+ 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.
++ * // FIXME: this method should be completely replaced by appendParameters
++ *
++ * @return
++ * @see AbstractConfig#appendParameters(Map, Object, String)
++ * <p>
++ * Notice! This method should include all properties in the returning map, treat @Parameter differently compared to appendParameters.
++ */
++ public Map<String, String> getMetaData() {
++ Map<String, String> 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
++ && ClassHelper.isPrimitive(method.getReturnType())) {
++ String prop = calculateAttributeFromGetter(name);
++ String key;
++ Parameter parameter = method.getAnnotation(Parameter.class);
++ if (parameter != null && parameter.key().length() > 0 && parameter.useKeyAsProperty()) {
++ key = parameter.key();
++ } else {
++ key = prop;
++ }
++ // treat url and configuration differently, the value should always present in configuration though it may not need to present in url.
++ //if (method.getReturnType() == Object.class || parameter != null && parameter.excluded()) {
++ if (method.getReturnType() == Object.class) {
++ metaData.put(key, null);
++ continue;
++ }
++ Object value = method.invoke(this);
++ String str = String.valueOf(value).trim();
++ if (value != null && str.length() > 0) {
++ // ignore escape, keep the original value.
++ /*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) {
++ throw new IllegalStateException(e.getMessage(), e);
++ }
++ }
++ return metaData;
++ }
++
++ @Parameter(excluded = true)
++ public String getPrefix() {
++ return StringUtils.isNotEmpty(prefix) ? prefix : (Constants.DUBBO + "." + getTagName(this.getClass()));
++ }
++
++ public void setPrefix(String prefix) {
++ this.prefix = prefix;
++ }
++
++ /**
++ * 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() {
++ try {
++ Environment env = Environment.getInstance();
++ env.addAppConfig(getPrefix(), getId(), getMetaData());
++ Configuration configuration = env.getConfiguration(getPrefix(), getId());
++
++ // loop methods, get override value and set the new value back to method
++ Method[] methods = getClass().getMethods();
++ for (Method method : methods) {
++ if (ClassHelper.isSetter(method)) {
++ try {
++ String value = configuration.getString(extractPropertyName(getClass(), method));
++ // isTypeMatch() is called to avoid duplicate and incorrect update, for example, we have two 'setGeneric' methods in ReferenceConfig.
++ if (value != null && ClassHelper.isTypeMatch(method.getParameterTypes()[0], value)) {
++ method.invoke(this, ClassHelper.convertPrimitive(method.getParameterTypes()[0], value));
++ }
++ } catch (NoSuchMethodException e) {
++ logger.info("Failed to override the property " + method.getName() + " in " +
++ this.getClass().getSimpleName() +
++ ", please make sure every property has getter/setter method provided.");
++ }
++ }
++ }
++ } catch (Exception e) {
++ logger.error("Failed to override ", 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);
++ if (ClassHelper.isGetter(method)) {
++ String name = method.getName();
++ String key = calculateAttributeFromGetter(name);
+ 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/DubboShutdownHook.java
index 57535ac,06c9e12..22d50dd
--- a/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/DubboShutdownHook.java
+++ b/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/DubboShutdownHook.java
@@@ -35,24 -35,20 +35,23 @@@ public class DubboShutdownHook extends
private static final Logger logger = LoggerFactory.getLogger(DubboShutdownHook.class);
private static final DubboShutdownHook dubboShutdownHook = new DubboShutdownHook("DubboShutdownHook");
-
- public static DubboShutdownHook getDubboShutdownHook() {
- return dubboShutdownHook;
- }
-
/**
+ * Has it already been registered or not?
+ */
+ private final AtomicBoolean registered = new AtomicBoolean(false);
+ /**
* Has it already been destroyed or not?
*/
- private final AtomicBoolean destroyed;
+ private final AtomicBoolean destroyed= new AtomicBoolean(false);
private DubboShutdownHook(String name) {
super(name);
- this.destroyed = new AtomicBoolean(false);
}
+ public static DubboShutdownHook getDubboShutdownHook() {
+ return dubboShutdownHook;
+ }
+
@Override
public void run() {
if (logger.isInfoEnabled()) {
diff --cc dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/ReferenceConfig.java
index 7ec277d,2389b33..5144fc2
--- 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
@@@ -490,46 -552,10 +513,52 @@@ public class ReferenceConfig<T> extend
return buf.toString();
}
+ @Override
+ @Parameter(excluded = true)
+ public String getPrefix() {
+ return Constants.DUBBO + ".reference." + interfaceName;
+ }
+
+ private void resolveFile() {
+ String resolve = System.getProperty(interfaceName);
+ String resolveFile = null;
+ if (resolve == null || resolve.length() == 0) {
+ resolveFile = System.getProperty("dubbo.resolve.file");
+ if (resolveFile == null || resolveFile.length() == 0) {
+ File userResolveFile = new File(new File(System.getProperty("user.home")), "dubbo-resolve.properties");
+ if (userResolveFile.exists()) {
+ resolveFile = userResolveFile.getAbsolutePath();
+ }
+ }
+ if (resolveFile != null && resolveFile.length() > 0) {
+ Properties properties = new Properties();
+ FileInputStream fis = null;
+ try {
+ fis = new FileInputStream(new File(resolveFile));
+ properties.load(fis);
+ } catch (IOException e) {
+ throw new IllegalStateException("Unload " + resolveFile + ", cause: " + e.getMessage(), e);
+ } finally {
+ try {
+ if (null != fis) {
+ fis.close();
+ }
+ } catch (IOException e) {
+ logger.warn(e.getMessage(), e);
+ }
+ }
+ resolve = properties.getProperty(interfaceName);
+ }
+ }
+ if (resolve != null && resolve.length() > 0) {
+ url = resolve;
+ if (logger.isWarnEnabled()) {
+ if (resolveFile != null) {
+ logger.warn("Using default dubbo resolve file " + resolveFile + " replace " + interfaceName + "" + resolve + " to p2p invoke remote service.");
+ } else {
+ logger.warn("Using -D" + interfaceName + "=" + resolve + " to p2p invoke remote service.");
+ }
+ }
+ }
+ }
}
diff --cc dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/ServiceConfig.java
index 37539eb,fc5d251..1d20a57
--- 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
@@@ -301,12 -285,46 +286,41 @@@ public class ServiceConfig<T> extends A
throw new IllegalStateException("The stub implementation class " + stubClass.getName() + " not implement interface " + interfaceName);
}
}
- 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);
++ delayExportExecutor.schedule(this::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-api/src/test/resources/log4j.xml
index 5007dd1,8607f5d..bfc37a8
--- a/dubbo-config/dubbo-config-api/src/test/resources/log4j.xml
+++ b/dubbo-config/dubbo-config-api/src/test/resources/log4j.xml
@@@ -1,28 -1,28 +1,28 @@@
- <!--
- 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.
- -->
- <!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
- <log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/" debug="false">
- <appender name="CONSOLE" class="org.apache.log4j.ConsoleAppender">
- <layout class="org.apache.log4j.PatternLayout">
- <param name="ConversionPattern" value="[%d{dd/MM/yy HH:mm:ss:SSS z}] %t %5p %c{2}: %m%n"/>
- </layout>
- </appender>
- <root>
- <level value="INFO"/>
- <appender-ref ref="CONSOLE"/>
- </root>
+ <!--
+ 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.
+ -->
+ <!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
+ <log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/" debug="false">
+ <appender name="CONSOLE" class="org.apache.log4j.ConsoleAppender">
+ <layout class="org.apache.log4j.PatternLayout">
- <param name="ConversionPattern" value="[%d{dd/MM/yy hh:mm:ss:sss z}] %t %5p %c{2}: %m%n"/>
++ <param name="ConversionPattern" value="[%d{dd/MM/yy HH:mm:ss:SSS z}] %t %5p %c{2}: %m%n"/>
+ </layout>
+ </appender>
+ <root>
+ <level value="INFO"/>
+ <appender-ref ref="CONSOLE"/>
+ </root>
</log4j:configuration>
diff --cc dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/support/ProviderConsumerRegTable.java
index 5149760,3f3f018..620c534
--- a/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/support/ProviderConsumerRegTable.java
+++ b/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/support/ProviderConsumerRegTable.java
@@@ -23,10 -22,10 +22,12 @@@ import org.apache.dubbo.registry.integr
import org.apache.dubbo.rpc.Invoker;
import java.util.Collections;
+import java.util.Map;
+import java.util.Objects;
+ import java.util.HashSet;
import java.util.Set;
import java.util.concurrent.ConcurrentHashMap;
+ import java.util.concurrent.ConcurrentMap;
/**
* @date 2017/11/23
diff --cc dubbo-registry/dubbo-registry-default/src/test/java/org/apache/dubbo/registry/dubbo/RegistryDirectoryTest.java
index 8c8b8ea,3a65eb9..b271773
--- a/dubbo-registry/dubbo-registry-default/src/test/java/org/apache/dubbo/registry/dubbo/RegistryDirectoryTest.java
+++ b/dubbo-registry/dubbo-registry-default/src/test/java/org/apache/dubbo/registry/dubbo/RegistryDirectoryTest.java
@@@ -29,12 -29,10 +29,10 @@@ import org.apache.dubbo.rpc.Invoker
import org.apache.dubbo.rpc.Protocol;
import org.apache.dubbo.rpc.RpcException;
import org.apache.dubbo.rpc.RpcInvocation;
- import org.apache.dubbo.rpc.cluster.Router;
import org.apache.dubbo.rpc.cluster.loadbalance.LeastActiveLoadBalance;
import org.apache.dubbo.rpc.cluster.loadbalance.RoundRobinLoadBalance;
- import org.apache.dubbo.rpc.cluster.router.script.ScriptRouter;
import org.apache.dubbo.rpc.cluster.router.script.ScriptRouterFactory;
-
+import org.apache.dubbo.rpc.cluster.support.wrapper.MockClusterInvoker;
import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;
diff --cc dubbo-rpc/dubbo-rpc-api/src/main/java/org/apache/dubbo/rpc/model/ApplicationModel.java
index 26669ce,7c63bc7..cfad21c
--- a/dubbo-rpc/dubbo-rpc-api/src/main/java/org/apache/dubbo/rpc/model/ApplicationModel.java
+++ b/dubbo-rpc/dubbo-rpc-api/src/main/java/org/apache/dubbo/rpc/model/ApplicationModel.java
@@@ -73,11 -75,11 +75,19 @@@ public class ApplicationModel
}
}
+ public static String getApplication() {
+ return application;
+ }
+
+ public static void setApplication(String application) {
+ ApplicationModel.application = application;
+ }
++
+ /**
+ * For unit test
+ */
+ public static void reset() {
+ providedServices.clear();
+ consumedServices.clear();
+ }
}
diff --cc dubbo-rpc/dubbo-rpc-dubbo/src/test/java/org/apache/dubbo/rpc/protocol/dubbo/DubboInvokerAvilableTest.java
index 14ab124,4addbf3..08444f7
--- a/dubbo-rpc/dubbo-rpc-dubbo/src/test/java/org/apache/dubbo/rpc/protocol/dubbo/DubboInvokerAvilableTest.java
+++ b/dubbo-rpc/dubbo-rpc-dubbo/src/test/java/org/apache/dubbo/rpc/protocol/dubbo/DubboInvokerAvilableTest.java
@@@ -97,7 -92,7 +97,6 @@@ public class DubboInvokerAvilableTest
try{
System.setProperty(Constants.SHUTDOWN_WAIT_KEY, "2000");
- System.out.println("------------ConfigUtils.getServerShutdownTimeout(): " + ConfigUtils.getServerShutdownTimeout());
- System.out.println("------------ConfigUtils.getServerShutdownTimeout(): " + ConfigurationUtils.getServerShutdownTimeout());
protocol.destroy();
}finally {
System.getProperties().remove(Constants.SHUTDOWN_WAIT_KEY);
[incubator-dubbo] 10/10: Merge branch 'master' of
https://github.com/apache/incubator-dubbo
Posted by li...@apache.org.
This is an automated email from the ASF dual-hosted git repository.
liujun pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-dubbo.git
commit b88bf3af685fad81494e0501bcba9dc09554e6b1
Merge: c20164e a35f942
Author: ken.lj <ke...@gmail.com>
AuthorDate: Mon Dec 24 15:47:49 2018 +0800
Merge branch 'master' of https://github.com/apache/incubator-dubbo
dubbo-common/src/main/java/org/apache/dubbo/common/Version.java | 1 -
1 file changed, 1 deletion(-)
[incubator-dubbo] 07/10: set all router rule enabled by default
Posted by li...@apache.org.
This is an automated email from the ASF dual-hosted git repository.
liujun pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-dubbo.git
commit 96dffe353ef3c9cdf938bf81d38fd9f19cd17f1a
Author: ken.lj <ke...@gmail.com>
AuthorDate: Mon Dec 24 14:47:51 2018 +0800
set all router rule enabled by default
---
.../main/java/org/apache/dubbo/rpc/cluster/router/AbstractRouter.java | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/dubbo-cluster/src/main/java/org/apache/dubbo/rpc/cluster/router/AbstractRouter.java b/dubbo-cluster/src/main/java/org/apache/dubbo/rpc/cluster/router/AbstractRouter.java
index 301ca01..6192f7a 100644
--- a/dubbo-cluster/src/main/java/org/apache/dubbo/rpc/cluster/router/AbstractRouter.java
+++ b/dubbo-cluster/src/main/java/org/apache/dubbo/rpc/cluster/router/AbstractRouter.java
@@ -29,8 +29,8 @@ import java.util.concurrent.CopyOnWriteArrayList;
*/
public abstract class AbstractRouter implements Router {
protected int priority;
- protected boolean force;
- protected boolean enabled;
+ protected boolean force = false;
+ protected boolean enabled = true;
protected List<RouterChain> routerChains = new CopyOnWriteArrayList<>();
protected URL url;
[incubator-dubbo] 01/10: unify config format.
Posted by li...@apache.org.
This is an automated email from the ASF dual-hosted git repository.
liujun pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-dubbo.git
commit 4bd2ed4979920bef7e04328b5711c662190a4f1a
Author: ken.lj <ke...@gmail.com>
AuthorDate: Sat Dec 22 14:07:31 2018 +0800
unify config format.
---
.../java/org/apache/dubbo/common/Constants.java | 18 +++++------
.../org/apache/dubbo/config/AbstractConfig.java | 2 +-
.../apache/dubbo/config/ConfigCenterConfig.java | 12 --------
.../apache/dubbo/config/MetadataReportConfig.java | 35 ++++++++++------------
.../apache/dubbo/config/RegistryDataConfig.java | 5 ----
.../annotation/DubboConfigConfiguration.java | 11 ++++---
6 files changed, 31 insertions(+), 52 deletions(-)
diff --git a/dubbo-common/src/main/java/org/apache/dubbo/common/Constants.java b/dubbo-common/src/main/java/org/apache/dubbo/common/Constants.java
index ef3f50c..5c1006b 100644
--- a/dubbo-common/src/main/java/org/apache/dubbo/common/Constants.java
+++ b/dubbo-common/src/main/java/org/apache/dubbo/common/Constants.java
@@ -470,23 +470,23 @@ public class Constants {
* simple the registry for provider.
* @since 2.7.0
*/
- public static final String SIMPLE_PROVIDER_CONFIG_KEY = "simpleProviderConfig";
+ public static final String SIMPLE_PROVIDER_CONFIG_KEY = "simple.provider.config";
/**
* simple the registry for consumer.
* @since 2.7.0
*/
- public static final String SIMPLE_CONSUMER_CONFIG_KEY = "simpleConsumerConfig";
+ public static final String SIMPLE_CONSUMER_CONFIG_KEY = "simple.consumer.config";
/**
* After simplify the registry, should add some paramter individually for provider.
* @since 2.7.0
*/
- public static final String EXTRA_PROVIDER_CONFIG_KEYS_KEY = "extraProviderKeys";
+ public static final String EXTRA_PROVIDER_CONFIG_KEYS_KEY = "extra.provider.keys";
/**
* After simplify the registry, should add some paramter individually for consumer.
*
* @since 2.7.0
*/
- public static final String EXTRA_CONSUMER_CONFIG_KEYS_KEY = "extraConsumerKeys";
+ public static final String EXTRA_CONSUMER_CONFIG_KEYS_KEY = "extra.consumer.keys";
/**
* To decide whether to exclude unavailable invoker from the cluster
@@ -723,13 +723,13 @@ public class Constants {
public static final String ADDRESS_KEY = "address";
- public static final String RETRY_TIMES_KEY = "retry-times";
+ public static final String RETRY_TIMES_KEY = "retry.times";
- public static final String RETRY_PERIOD_KEY = "retry-period";
+ public static final String RETRY_PERIOD_KEY = "retry.period";
- public static final String SYNC_REPORT_KEY = "sync-report";
+ public static final String SYNC_REPORT_KEY = "sync.report";
- public static final String CYCLE_REPORT_KEY = "cycle-report";
+ public static final String CYCLE_REPORT_KEY = "cycle.report";
public static final String CONFIG_VERSION_KEY = "configVersion";
@@ -745,8 +745,6 @@ public class Constants {
public static final String REGISTRIES_SUFFIX = "dubbo.registries.";
- public static final String CONFIGCENTERS_SUFFIX = "dubbo.configCenters.";
-
public static final String[] DEFAULT_REGISTER_PROVIDER_KEYS = {APPLICATION_KEY, CODEC_KEY, EXCHANGER_KEY, SERIALIZATION_KEY, CLUSTER_KEY, CONNECTIONS_KEY, DEPRECATED_KEY,
GROUP_KEY, LOADBALANCE_KEY, MOCK_KEY, PATH_KEY, TIMEOUT_KEY, TOKEN_KEY, VERSION_KEY, WARMUP_KEY, WEIGHT_KEY, TIMESTAMP_KEY, DUBBO_VERSION_KEY, SPECIFICATION_VERSION_KEY};
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 f4abaf3..a64c73e 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
@@ -460,7 +460,7 @@ public abstract class AbstractConfig implements Serializable {
&& Modifier.isPublic(method.getModifiers())
&& method.getParameterTypes().length == 0
&& ClassHelper.isPrimitive(method.getReturnType())) {
- String prop = calculatePropertyFromGetter(name);
+ String prop = calculateAttributeFromGetter(name);
String key;
Parameter parameter = method.getAnnotation(Parameter.class);
if (parameter != null && parameter.key().length() > 0 && parameter.useKeyAsProperty()) {
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 b4043e7..fe62fda 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
@@ -70,11 +70,6 @@ public class ConfigCenterConfig extends AbstractConfig {
// give jvm properties the chance to override local configs, e.g., -Ddubbo.configcenter.highestPriority
refresh();
- if (StringUtils.isNotEmpty(getId())) {
- // read 'dubbo.configCenters.zookeeper.'
- setPrefix(Constants.CONFIGCENTERS_SUFFIX);
- refresh();
- }
// try to use registryConfig as the default configcenter, only applies to zookeeper.
if (!isValid() && registry != null && registry.isZookeeperProtocol()) {
@@ -166,7 +161,6 @@ public class ConfigCenterConfig extends AbstractConfig {
public void setProtocol(String protocol) {
this.protocol = protocol;
- this.updateIdIfAbsent(protocol);
}
@Parameter(excluded = true)
@@ -176,12 +170,6 @@ public class ConfigCenterConfig extends AbstractConfig {
public void setAddress(String address) {
this.address = address;
- if (address != null) {
- int i = address.indexOf("://");
- if (i > 0) {
- this.updateIdIfAbsent(address.substring(0, i));
- }
- }
}
@Parameter(key = Constants.CONFIG_CLUSTER_KEY, useKeyAsProperty = false)
diff --git a/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/MetadataReportConfig.java b/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/MetadataReportConfig.java
index 05112ac..a0928b6 100644
--- a/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/MetadataReportConfig.java
+++ b/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/MetadataReportConfig.java
@@ -44,13 +44,13 @@ public class MetadataReportConfig extends AbstractConfig {
// customized parameters
private Map<String, String> parameters;
- private Integer retrytimes;
+ private Integer retryTimes;
- private Integer retryperiod;
+ private Integer retryPeriod;
/**
* by default the metadatastore will store full metadata repeatly every day .
*/
- private Boolean cyclereport;
+ private Boolean cycleReport;
/**
* sync report, default async
@@ -104,41 +104,36 @@ public class MetadataReportConfig extends AbstractConfig {
this.parameters = parameters;
}
- @Parameter(key = "retry-times")
- public Integer getRetrytimes() {
- return retrytimes;
+ public Integer getRetryTimes() {
+ return retryTimes;
}
- public void setRetrytimes(Integer retrytimes) {
- this.retrytimes = retrytimes;
+ public void setRetryTimes(Integer retryTimes) {
+ this.retryTimes = retryTimes;
}
- @Parameter(key = "retry-period")
- public Integer getRetryperiod() {
- return retryperiod;
+ public Integer getRetryPeriod() {
+ return retryPeriod;
}
- public void setRetryperiod(Integer retryperiod) {
- this.retryperiod = retryperiod;
+ public void setRetryPeriod(Integer retryPeriod) {
+ this.retryPeriod = retryPeriod;
}
- @Parameter(key = "cycle-report")
- public Boolean getCyclereport() {
- return cyclereport;
+ public Boolean getCycleReport() {
+ return cycleReport;
}
- public void setCyclereport(Boolean cyclereport) {
- this.cyclereport = cyclereport;
+ public void setCycleReport(Boolean cycleReport) {
+ this.cycleReport = cycleReport;
}
-
@Override
@Parameter(excluded = true)
public boolean isValid() {
return StringUtils.isNotEmpty(address);
}
- @Parameter(key = "sync-report")
public Boolean getSyncReport() {
return syncReport;
}
diff --git a/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/RegistryDataConfig.java b/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/RegistryDataConfig.java
index ce2f052..1b41e2e 100644
--- a/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/RegistryDataConfig.java
+++ b/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/RegistryDataConfig.java
@@ -18,7 +18,6 @@ package org.apache.dubbo.config;
import org.apache.dubbo.common.Constants;
import org.apache.dubbo.common.utils.StringUtils;
-import org.apache.dubbo.config.support.Parameter;
import java.util.HashMap;
import java.util.Map;
@@ -52,7 +51,6 @@ public class RegistryDataConfig extends AbstractConfig {
return map;
}
- @Parameter(key = "simple-provider-config")
public Boolean getSimpleProviderConfig() {
return simpleProviderConfig;
}
@@ -61,7 +59,6 @@ public class RegistryDataConfig extends AbstractConfig {
this.simpleProviderConfig = simpleProviderConfig;
}
- @Parameter(key = "simple-consumer-config")
public Boolean getSimpleConsumerConfig() {
return simpleConsumerConfig;
}
@@ -70,7 +67,6 @@ public class RegistryDataConfig extends AbstractConfig {
this.simpleConsumerConfig = simpleConsumerConfig;
}
- @Parameter(key = "extra-provider-keys")
public String getExtraProviderKeys() {
return extraProviderKeys;
}
@@ -80,7 +76,6 @@ public class RegistryDataConfig extends AbstractConfig {
}
- @Parameter(key = "extra-consumer-keys")
public String getExtraConsumerKeys() {
return extraConsumerKeys;
}
diff --git a/dubbo-config/dubbo-config-spring/src/main/java/org/apache/dubbo/config/spring/context/annotation/DubboConfigConfiguration.java b/dubbo-config/dubbo-config-spring/src/main/java/org/apache/dubbo/config/spring/context/annotation/DubboConfigConfiguration.java
index 4b74828..7ace9e1 100644
--- a/dubbo-config/dubbo-config-spring/src/main/java/org/apache/dubbo/config/spring/context/annotation/DubboConfigConfiguration.java
+++ b/dubbo-config/dubbo-config-spring/src/main/java/org/apache/dubbo/config/spring/context/annotation/DubboConfigConfiguration.java
@@ -57,9 +57,11 @@ public class DubboConfigConfiguration {
@EnableDubboConfigBinding(prefix = "dubbo.registry", type = RegistryConfig.class),
@EnableDubboConfigBinding(prefix = "dubbo.protocol", type = ProtocolConfig.class),
@EnableDubboConfigBinding(prefix = "dubbo.monitor", type = MonitorConfig.class),
- @EnableDubboConfigBinding(prefix = "dubbo.provider", type = ProviderConfig.class), @EnableDubboConfigBinding(prefix = "dubbo.consumer", type = ConsumerConfig.class), @EnableDubboConfigBinding(prefix = "dubbo.configCenter", type = ConfigCenterBean.class),
- @EnableDubboConfigBinding(prefix = "dubbo.registrydata", type = RegistryDataConfig.class),
- @EnableDubboConfigBinding(prefix = "dubbo.metadatareport", type = MetadataReportConfig.class)
+ @EnableDubboConfigBinding(prefix = "dubbo.provider", type = ProviderConfig.class),
+ @EnableDubboConfigBinding(prefix = "dubbo.consumer", type = ConsumerConfig.class),
+ @EnableDubboConfigBinding(prefix = "dubbo.configCenter", type = ConfigCenterBean.class),
+ @EnableDubboConfigBinding(prefix = "dubbo.registryData", type = RegistryDataConfig.class),
+ @EnableDubboConfigBinding(prefix = "dubbo.metadataReport", type = MetadataReportConfig.class)
})
public static class Single {
@@ -75,7 +77,8 @@ public class DubboConfigConfiguration {
@EnableDubboConfigBinding(prefix = "dubbo.protocols", type = ProtocolConfig.class, multiple = true),
@EnableDubboConfigBinding(prefix = "dubbo.monitors", type = MonitorConfig.class, multiple = true),
@EnableDubboConfigBinding(prefix = "dubbo.providers", type = ProviderConfig.class, multiple = true),
- @EnableDubboConfigBinding(prefix = "dubbo.consumers", type = ConsumerConfig.class, multiple = true)
+ @EnableDubboConfigBinding(prefix = "dubbo.consumers", type = ConsumerConfig.class, multiple = true),
+ @EnableDubboConfigBinding(prefix = "dubbo.configCenters", type = ConfigCenterBean.class, multiple = true)
})
public static class Multiple {
[incubator-dubbo] 04/10: fix compile error.
Posted by li...@apache.org.
This is an automated email from the ASF dual-hosted git repository.
liujun pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-dubbo.git
commit ac31d4f5217f383574984e05b035c2e0968d675f
Author: ken.lj <ke...@gmail.com>
AuthorDate: Sun Dec 23 21:07:51 2018 +0800
fix compile error.
---
.../java/org/apache/dubbo/rpc/cluster/directory/AbstractDirectory.java | 1 +
1 file changed, 1 insertion(+)
diff --git a/dubbo-cluster/src/main/java/org/apache/dubbo/rpc/cluster/directory/AbstractDirectory.java b/dubbo-cluster/src/main/java/org/apache/dubbo/rpc/cluster/directory/AbstractDirectory.java
index f44c398..6f3a316 100644
--- a/dubbo-cluster/src/main/java/org/apache/dubbo/rpc/cluster/directory/AbstractDirectory.java
+++ b/dubbo-cluster/src/main/java/org/apache/dubbo/rpc/cluster/directory/AbstractDirectory.java
@@ -16,6 +16,7 @@
*/
package org.apache.dubbo.rpc.cluster.directory;
+import org.apache.dubbo.common.Constants;
import org.apache.dubbo.common.URL;
import org.apache.dubbo.common.logger.Logger;
import org.apache.dubbo.common.logger.LoggerFactory;
[incubator-dubbo] 08/10: remove appConfigs cache to support one
service/reference registered more than one time (if users don't explicitly
add id, cache can not work properly)
Posted by li...@apache.org.
This is an automated email from the ASF dual-hosted git repository.
liujun pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-dubbo.git
commit 9897aa3d7273e3eb96910cfdc09709a77cae50b0
Author: ken.lj <ke...@gmail.com>
AuthorDate: Mon Dec 24 14:49:22 2018 +0800
remove appConfigs cache to support one service/reference registered more than one time (if users don't explicitly add id, cache can not work properly)
---
.../apache/dubbo/common/config/Environment.java | 37 +++-------------------
.../org/apache/dubbo/config/AbstractConfig.java | 16 +++++++---
2 files changed, 17 insertions(+), 36 deletions(-)
diff --git a/dubbo-common/src/main/java/org/apache/dubbo/common/config/Environment.java b/dubbo-common/src/main/java/org/apache/dubbo/common/config/Environment.java
index 74c9d30..4526fbc 100644
--- a/dubbo-common/src/main/java/org/apache/dubbo/common/config/Environment.java
+++ b/dubbo-common/src/main/java/org/apache/dubbo/common/config/Environment.java
@@ -35,7 +35,6 @@ public class Environment {
private Map<String, EnvironmentConfiguration> environmentConfigs = new ConcurrentHashMap<>();
private Map<String, InmemoryConfiguration> externalConfigs = new ConcurrentHashMap<>();
private Map<String, InmemoryConfiguration> appExternalConfigs = new ConcurrentHashMap<>();
- private Map<String, InmemoryConfiguration> appConfigs = new ConcurrentHashMap<>();
private Map<String, String> externalConfigurationMap = new HashMap<>();
private Map<String, String> appExternalConfigurationMap = new HashMap<>();
@@ -79,10 +78,6 @@ public class Environment {
return environmentConfigs.computeIfAbsent(toKey(prefix, id), k -> new EnvironmentConfiguration(prefix, id));
}
- public InmemoryConfiguration getAppConfig(String prefix, String id) {
- return appConfigs.get(toKey(prefix, id));
- }
-
public void setExternalConfigMap(Map<String, String> externalConfiguration) {
this.externalConfigurationMap = externalConfiguration;
}
@@ -99,14 +94,6 @@ public class Environment {
return appExternalConfigurationMap;
}
- public void addAppConfig(String prefix, String id, Map<String, String> properties) {
- appConfigs.computeIfAbsent(toKey(prefix, id), k -> {
- InmemoryConfiguration configuration = new InmemoryConfiguration(prefix, id);
- configuration.addProperties(properties);
- return configuration;
- });
- }
-
public void updateExternalConfigurationMap(Map<String, String> externalMap) {
this.externalConfigurationMap.putAll(externalMap);
}
@@ -124,27 +111,13 @@ public class Environment {
* @param id
* @return
*/
- public Configuration getConfiguration(String prefix, String id) {
+ public CompositeConfiguration getConfiguration(String prefix, String id) {
CompositeConfiguration compositeConfiguration = new CompositeConfiguration();
- InmemoryConfiguration appConfig = this.getAppConfig(prefix, id);
// Config center has the highest priority
- if (!configCenterFirst) {
- compositeConfiguration.addConfiguration(this.getSystemConfig(prefix, id));
- if (appConfig != null) {
- compositeConfiguration.addConfiguration(appConfig);
- }
- compositeConfiguration.addConfiguration(this.getAppExternalConfig(prefix, id));
- compositeConfiguration.addConfiguration(this.getExternalConfig(prefix, id));
- compositeConfiguration.addConfiguration(this.getPropertiesConfig(prefix, id));
- } else {
- compositeConfiguration.addConfiguration(this.getSystemConfig(prefix, id));
- compositeConfiguration.addConfiguration(this.getAppExternalConfig(prefix, id));
- compositeConfiguration.addConfiguration(this.getExternalConfig(prefix, id));
- if (appConfig != null) {
- compositeConfiguration.addConfiguration(appConfig);
- }
- compositeConfiguration.addConfiguration(this.getPropertiesConfig(prefix, id));
- }
+ compositeConfiguration.addConfiguration(this.getSystemConfig(prefix, id));
+ compositeConfiguration.addConfiguration(this.getAppExternalConfig(prefix, id));
+ compositeConfiguration.addConfiguration(this.getExternalConfig(prefix, id));
+ compositeConfiguration.addConfiguration(this.getPropertiesConfig(prefix, id));
return compositeConfiguration;
}
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 952853d..a52b355 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
@@ -18,8 +18,9 @@ package org.apache.dubbo.config;
import org.apache.dubbo.common.Constants;
import org.apache.dubbo.common.URL;
-import org.apache.dubbo.common.config.Configuration;
+import org.apache.dubbo.common.config.CompositeConfiguration;
import org.apache.dubbo.common.config.Environment;
+import org.apache.dubbo.common.config.InmemoryConfiguration;
import org.apache.dubbo.common.extension.ExtensionLoader;
import org.apache.dubbo.common.logger.Logger;
import org.apache.dubbo.common.logger.LoggerFactory;
@@ -536,9 +537,16 @@ public abstract class AbstractConfig implements Serializable {
*/
public void refresh() {
try {
- Environment env = Environment.getInstance();
- env.addAppConfig(getPrefix(), getId(), getMetaData());
- Configuration configuration = env.getConfiguration(getPrefix(), getId());
+ CompositeConfiguration compositeConfiguration = Environment.getInstance().getConfiguration(getPrefix(), getId());
+ InmemoryConfiguration configuration = new InmemoryConfiguration(getPrefix(), getId());
+ configuration.addProperties(getMetaData());
+ if (Environment.getInstance().isConfigCenterFirst()) {
+ // The sequence would be: SystemConfiguration -> ExternalConfiguration -> AppExternalConfiguration -> AbstractConfig -> PropertiesConfiguration
+ compositeConfiguration.addConfiguration(3,configuration);
+ } else {
+ // The sequence would be: SystemConfiguration -> AbstractConfig -> ExternalConfiguration -> AppExternalConfiguration -> PropertiesConfiguration
+ compositeConfiguration.addConfiguration(1, configuration);
+ }
// loop methods, get override value and set the new value back to method
Method[] methods = getClass().getMethods();
[incubator-dubbo] 09/10: fix wrong reference
Posted by li...@apache.org.
This is an automated email from the ASF dual-hosted git repository.
liujun pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-dubbo.git
commit c20164ef1d3ef92ce8db15fc0cc27fc3c059857a
Author: ken.lj <ke...@gmail.com>
AuthorDate: Mon Dec 24 15:09:07 2018 +0800
fix wrong reference
---
.../src/main/java/org/apache/dubbo/config/AbstractConfig.java | 10 +++++-----
1 file changed, 5 insertions(+), 5 deletions(-)
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 a52b355..6945266 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
@@ -538,14 +538,14 @@ public abstract class AbstractConfig implements Serializable {
public void refresh() {
try {
CompositeConfiguration compositeConfiguration = Environment.getInstance().getConfiguration(getPrefix(), getId());
- InmemoryConfiguration configuration = new InmemoryConfiguration(getPrefix(), getId());
- configuration.addProperties(getMetaData());
+ InmemoryConfiguration config = new InmemoryConfiguration(getPrefix(), getId());
+ config.addProperties(getMetaData());
if (Environment.getInstance().isConfigCenterFirst()) {
// The sequence would be: SystemConfiguration -> ExternalConfiguration -> AppExternalConfiguration -> AbstractConfig -> PropertiesConfiguration
- compositeConfiguration.addConfiguration(3,configuration);
+ compositeConfiguration.addConfiguration(3,config);
} else {
// The sequence would be: SystemConfiguration -> AbstractConfig -> ExternalConfiguration -> AppExternalConfiguration -> PropertiesConfiguration
- compositeConfiguration.addConfiguration(1, configuration);
+ compositeConfiguration.addConfiguration(1, config);
}
// loop methods, get override value and set the new value back to method
@@ -553,7 +553,7 @@ public abstract class AbstractConfig implements Serializable {
for (Method method : methods) {
if (ClassHelper.isSetter(method)) {
try {
- String value = configuration.getString(extractPropertyName(getClass(), method));
+ String value = compositeConfiguration.getString(extractPropertyName(getClass(), method));
// isTypeMatch() is called to avoid duplicate and incorrect update, for example, we have two 'setGeneric' methods in ReferenceConfig.
if (value != null && ClassHelper.isTypeMatch(method.getParameterTypes()[0], value)) {
method.invoke(this, ClassHelper.convertPrimitive(method.getParameterTypes()[0], value));
[incubator-dubbo] 02/10: fix busy loop caused by
singledThreadExecutor
Posted by li...@apache.org.
This is an automated email from the ASF dual-hosted git repository.
liujun pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-dubbo.git
commit 5184416bc7c87f5a6960f29823a071bc1ae826a4
Author: ken.lj <ke...@gmail.com>
AuthorDate: Sat Dec 22 14:08:14 2018 +0800
fix busy loop caused by singledThreadExecutor
---
.../org/apache/dubbo/metadata/support/AbstractMetadataReport.java | 5 +++--
1 file changed, 3 insertions(+), 2 deletions(-)
diff --git a/dubbo-metadata-report/dubbo-metadata-report-api/src/main/java/org/apache/dubbo/metadata/support/AbstractMetadataReport.java b/dubbo-metadata-report/dubbo-metadata-report-api/src/main/java/org/apache/dubbo/metadata/support/AbstractMetadataReport.java
index c557325..9aab901 100644
--- a/dubbo-metadata-report/dubbo-metadata-report-api/src/main/java/org/apache/dubbo/metadata/support/AbstractMetadataReport.java
+++ b/dubbo-metadata-report/dubbo-metadata-report-api/src/main/java/org/apache/dubbo/metadata/support/AbstractMetadataReport.java
@@ -16,7 +16,6 @@
*/
package org.apache.dubbo.metadata.support;
-import com.google.gson.Gson;
import org.apache.dubbo.common.Constants;
import org.apache.dubbo.common.URL;
import org.apache.dubbo.common.logger.Logger;
@@ -27,6 +26,8 @@ import org.apache.dubbo.metadata.definition.model.FullServiceDefinition;
import org.apache.dubbo.metadata.identifier.MetadataIdentifier;
import org.apache.dubbo.metadata.store.MetadataReport;
+import com.google.gson.Gson;
+
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
@@ -98,7 +99,7 @@ public abstract class AbstractMetadataReport implements MetadataReport {
reportServerURL.getParameter(Constants.RETRY_PERIOD_KEY, Constants.DEFAULT_METADATA_REPORT_RETRY_PERIOD));
// cycle report the data switch
if (reportServerURL.getParameter(Constants.CYCLE_REPORT_KEY, Constants.DEFAULT_METADATA_REPORT_CYCLE_REPORT)) {
- ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(0, new NamedThreadFactory("DubboMetadataReportTimer", true));
+ ScheduledExecutorService scheduler = Executors.newSingleThreadScheduledExecutor(new NamedThreadFactory("DubboMetadataReportTimer", true));
scheduler.scheduleAtFixedRate(new Runnable() {
@Override
public void run() {
[incubator-dubbo] 05/10: 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 master
in repository https://gitbox.apache.org/repos/asf/incubator-dubbo.git
commit cedba72024848fa3ceae1d1e6f89e6960b284fb5
Author: ken.lj <ke...@gmail.com>
AuthorDate: Sun Dec 23 21:46:06 2018 +0800
fix UT
---
.../dubbo/rpc/cluster/configurator/parser/ConfigParserTest.java | 6 +-----
dubbo-cluster/src/test/resources/AppAnyServices.yml | 2 +-
dubbo-cluster/src/test/resources/AppMultiServices.yml | 2 +-
dubbo-cluster/src/test/resources/AppNoService.yml | 2 +-
dubbo-cluster/src/test/resources/ConsumerSpecificProviders.yml | 2 +-
dubbo-cluster/src/test/resources/ServiceGroupVersion.yml | 2 +-
dubbo-cluster/src/test/resources/ServiceMultiApps.yml | 2 +-
dubbo-cluster/src/test/resources/ServiceNoApp.yml | 2 +-
dubbo-cluster/src/test/resources/ServiceNoRule.yml | 2 +-
9 files changed, 9 insertions(+), 13 deletions(-)
diff --git a/dubbo-cluster/src/test/java/org/apache/dubbo/rpc/cluster/configurator/parser/ConfigParserTest.java b/dubbo-cluster/src/test/java/org/apache/dubbo/rpc/cluster/configurator/parser/ConfigParserTest.java
index 809437f..0c365c0 100644
--- a/dubbo-cluster/src/test/java/org/apache/dubbo/rpc/cluster/configurator/parser/ConfigParserTest.java
+++ b/dubbo-cluster/src/test/java/org/apache/dubbo/rpc/cluster/configurator/parser/ConfigParserTest.java
@@ -107,17 +107,13 @@ public class ConfigParserTest {
String yamlFile = streamToString(yamlStream);
List<URL> urls = ConfigParser.parseConfigurators(yamlFile);
Assert.assertNotNull(urls);
- Assert.assertEquals(2, urls.size());
+ Assert.assertEquals(4, urls.size());
URL url = urls.get(0);
Assert.assertEquals("127.0.0.1", url.getAddress());
Assert.assertEquals("service1", url.getServiceInterface());
Assert.assertEquals(6666, url.getParameter(Constants.TIMEOUT_KEY, 0));
Assert.assertEquals("random", url.getParameter(Constants.LOADBALANCE_KEY));
Assert.assertEquals(url.getParameter(Constants.APPLICATION_KEY), "demo-consumer");
-
- List<URL> urls2 = ConfigParser.parseConfigurators(yamlFile);
- Assert.assertNotNull(urls2);
- Assert.assertEquals(0, urls2.size());
}
diff --git a/dubbo-cluster/src/test/resources/AppAnyServices.yml b/dubbo-cluster/src/test/resources/AppAnyServices.yml
index 947faea..e1b401c 100644
--- a/dubbo-cluster/src/test/resources/AppAnyServices.yml
+++ b/dubbo-cluster/src/test/resources/AppAnyServices.yml
@@ -19,7 +19,7 @@
# Application scope, apply to all services.
---
-apiVersion: v2.7
+configVersion: v2.7
scope: application
key: demo-consumer
configs:
diff --git a/dubbo-cluster/src/test/resources/AppMultiServices.yml b/dubbo-cluster/src/test/resources/AppMultiServices.yml
index f7f9098..bc6d6bc 100644
--- a/dubbo-cluster/src/test/resources/AppMultiServices.yml
+++ b/dubbo-cluster/src/test/resources/AppMultiServices.yml
@@ -19,7 +19,7 @@
# Application scope, apply to the specified services
---
-apiVersion: v2.7
+configVersion: v2.7
scope: application
key: demo-consumer
configs:
diff --git a/dubbo-cluster/src/test/resources/AppNoService.yml b/dubbo-cluster/src/test/resources/AppNoService.yml
index ee8dca3..4b6a236 100644
--- a/dubbo-cluster/src/test/resources/AppNoService.yml
+++ b/dubbo-cluster/src/test/resources/AppNoService.yml
@@ -19,7 +19,7 @@
# Application scope, no service means apply to all
---
-apiVersion: v2.7
+configVersion: v2.7
scope: application
key: demo-consumer
configs:
diff --git a/dubbo-cluster/src/test/resources/ConsumerSpecificProviders.yml b/dubbo-cluster/src/test/resources/ConsumerSpecificProviders.yml
index 1e9be4f..2da6a22 100644
--- a/dubbo-cluster/src/test/resources/ConsumerSpecificProviders.yml
+++ b/dubbo-cluster/src/test/resources/ConsumerSpecificProviders.yml
@@ -19,7 +19,7 @@
# Application scope, no service means apply to all
---
-apiVersion: v2.7
+configVersion: v2.7
scope: application
key: demo-consumer
configs:
diff --git a/dubbo-cluster/src/test/resources/ServiceGroupVersion.yml b/dubbo-cluster/src/test/resources/ServiceGroupVersion.yml
index 1c09d0d..6d48c5c 100644
--- a/dubbo-cluster/src/test/resources/ServiceGroupVersion.yml
+++ b/dubbo-cluster/src/test/resources/ServiceGroupVersion.yml
@@ -19,7 +19,7 @@
# Service scope, without any app
---
-apiVersion: v2.7
+configVersion: v2.7
scope: service
key: testgroup/servicekey:1.0.0
configs:
diff --git a/dubbo-cluster/src/test/resources/ServiceMultiApps.yml b/dubbo-cluster/src/test/resources/ServiceMultiApps.yml
index 6cf3a19..43ed62a 100644
--- a/dubbo-cluster/src/test/resources/ServiceMultiApps.yml
+++ b/dubbo-cluster/src/test/resources/ServiceMultiApps.yml
@@ -19,7 +19,7 @@
# Service scope, with multiple apps
---
-apiVersion: v2.7
+configVersion: v2.7
scope: service
key: serviceKey
configs:
diff --git a/dubbo-cluster/src/test/resources/ServiceNoApp.yml b/dubbo-cluster/src/test/resources/ServiceNoApp.yml
index 1a5f191..5009c61 100644
--- a/dubbo-cluster/src/test/resources/ServiceNoApp.yml
+++ b/dubbo-cluster/src/test/resources/ServiceNoApp.yml
@@ -19,7 +19,7 @@
# Service scope, without any app
---
-apiVersion: v2.7
+configVersion: v2.7
scope: service
key: serviceKey
configs:
diff --git a/dubbo-cluster/src/test/resources/ServiceNoRule.yml b/dubbo-cluster/src/test/resources/ServiceNoRule.yml
index 7dd21fe..b320878 100644
--- a/dubbo-cluster/src/test/resources/ServiceNoRule.yml
+++ b/dubbo-cluster/src/test/resources/ServiceNoRule.yml
@@ -19,7 +19,7 @@
# Service scope, without specific App
---
-apiVersion: v2.7
+configVersion: v2.7
scope: service
key: serviceKey
configs: