├── .gitignore ├── LICENSE ├── Readme.md ├── caravan-common ├── .gitignore ├── pom.xml └── src │ ├── main │ └── java │ │ └── com │ │ └── ctrip │ │ └── soa │ │ └── caravan │ │ └── common │ │ ├── collect │ │ ├── AuditData.java │ │ ├── GenericArray.java │ │ └── KeyValuePair.java │ │ ├── concurrent │ │ ├── ThreadFactories.java │ │ ├── ThreadPools.java │ │ ├── Threads.java │ │ ├── ValueScope.java │ │ └── collect │ │ │ ├── MultiWriteBatchReadList.java │ │ │ └── circularbuffer │ │ │ └── timebucket │ │ │ ├── CounterBucket.java │ │ │ ├── CounterBuffer.java │ │ │ ├── IntegerPercentileBuffer.java │ │ │ ├── PercentileBucket.java │ │ │ ├── PercentileBuffer.java │ │ │ ├── PercentileBufferConfig.java │ │ │ ├── TimeBucket.java │ │ │ ├── TimeBufferConfig.java │ │ │ └── TimeCircularBuffer.java │ │ ├── defensive │ │ └── Loops.java │ │ ├── delegate │ │ ├── Action.java │ │ ├── Action1.java │ │ ├── Action2.java │ │ ├── Action3.java │ │ ├── Action4.java │ │ ├── Func.java │ │ ├── Func1.java │ │ ├── Func2.java │ │ ├── Func3.java │ │ └── Func4.java │ │ ├── exception │ │ ├── ParseRuntimeException.java │ │ └── TempRuntimeException.java │ │ ├── metric │ │ ├── AuditMetric.java │ │ ├── AuditMetricManager.java │ │ ├── EventMetric.java │ │ ├── EventMetricManager.java │ │ ├── Metric.java │ │ ├── MetricConfig.java │ │ ├── MetricManager.java │ │ ├── MetricManagerConfig.java │ │ ├── MetricReporter.java │ │ ├── NullAuditMetric.java │ │ ├── NullAuditMetricManager.java │ │ ├── NullAuditMetricReporter.java │ │ ├── NullEventMetric.java │ │ ├── NullEventMetricManager.java │ │ ├── NullEventMetricReporter.java │ │ ├── NullStatusMetric.java │ │ ├── NullStatusMetricManager.java │ │ ├── NullStatusMetricReporter.java │ │ ├── StatusMetric.java │ │ ├── StatusMetricConfig.java │ │ ├── StatusMetricManager.java │ │ └── StatusProvider.java │ │ ├── net │ │ └── NetworkInterfaceManager.java │ │ ├── serializer │ │ ├── BytesSerializer.java │ │ ├── DateSerializer.java │ │ ├── SerializationException.java │ │ ├── Serializer.java │ │ ├── StreamSerializer.java │ │ └── StringSerializer.java │ │ ├── trace │ │ ├── NullTrace.java │ │ ├── NullTraceFactory.java │ │ ├── Trace.java │ │ ├── TraceExecutor.java │ │ └── TraceFactory.java │ │ └── value │ │ ├── ArrayValues.java │ │ ├── BooleanValues.java │ │ ├── CloseableValues.java │ │ ├── CollectionValues.java │ │ ├── ConcurrentHashMapValues.java │ │ ├── DateValues.java │ │ ├── DefaultValues.java │ │ ├── MapValues.java │ │ ├── NullValues.java │ │ ├── StringValues.java │ │ ├── XMLValues.java │ │ ├── checker │ │ ├── CollectionArgumentChecker.java │ │ ├── MapArgumentChecker.java │ │ ├── NullArgumentChecker.java │ │ ├── StringArgumentChecker.java │ │ ├── ValueChecker.java │ │ └── ValueCheckers.java │ │ ├── converter │ │ ├── MapValueConverter.java │ │ └── ValueConverter.java │ │ ├── corrector │ │ ├── DefaultValueCorrector.java │ │ ├── MapValueCorrector.java │ │ ├── NullValueRangeCorrector.java │ │ ├── PatternCorrector.java │ │ ├── Patterns.java │ │ ├── PipelineCorrector.java │ │ ├── RangeCorrector.java │ │ └── ValueCorrector.java │ │ └── parser │ │ ├── BooleanParser.java │ │ ├── IntegerParser.java │ │ ├── ListMultimapParser.java │ │ ├── ListParser.java │ │ ├── LongParser.java │ │ ├── LongValueMapParser.java │ │ ├── MapParser.java │ │ ├── StandardDateFormatTimeZoneParser.java │ │ ├── StringParser.java │ │ └── ValueParser.java │ └── test │ └── java │ └── com │ └── ctrip │ └── soa │ └── caravan │ └── common │ └── value │ ├── DefaultValuesTest.java │ ├── StringValuesTest.java │ └── corrector │ └── PatternCorrectorTest.java ├── caravan-configuration ├── .gitignore ├── pom.xml └── src │ ├── main │ └── java │ │ └── com │ │ └── ctrip │ │ └── soa │ │ └── caravan │ │ └── configuration │ │ ├── AbstractConfigurationSource.java │ │ ├── Configuration.java │ │ ├── ConfigurationManager.java │ │ ├── ConfigurationSource.java │ │ ├── DefaultConfigurationManager.java │ │ ├── DefaultProperty.java │ │ ├── NullProperty.java │ │ ├── Property.java │ │ ├── cached │ │ ├── CachedConfigurationManager.java │ │ ├── CachedProperty.java │ │ ├── DefaultCachedConfigurationManager.java │ │ ├── DefaultCachedProperty.java │ │ └── corrected │ │ │ ├── CachedCorrectedConfigurationManager.java │ │ │ ├── CachedCorrectedProperty.java │ │ │ ├── DefaultCachedCorrectedConfigurationManager.java │ │ │ └── DefaultCachedCorrectedProperty.java │ │ ├── corrected │ │ ├── CorrectedConfigurationManager.java │ │ ├── CorrectedProperty.java │ │ ├── DefaultCorrectedConfigurationManager.java │ │ └── DefaultCorrectedProperty.java │ │ ├── defaultvalue │ │ ├── DefaultValueConfigurationManager.java │ │ └── DefaultValueWrapper.java │ │ ├── dynamic │ │ ├── ChangeEvent.java │ │ ├── ConfigurationSourceChangeEvent.java │ │ ├── ConfigurationSourceChangeListener.java │ │ ├── DefaultConfigurationSourceChangeEvent.java │ │ ├── DefaultDynamicConfigurationManager.java │ │ ├── DefaultDynamicProperty.java │ │ ├── DefaultPropertyChangeEvent.java │ │ ├── DynamicConfigurationManager.java │ │ ├── DynamicConfigurationSource.java │ │ ├── DynamicProperty.java │ │ ├── PropertyChangeEvent.java │ │ ├── PropertyChangeListener.java │ │ ├── WeakReferencePropertyChangeListener.java │ │ ├── cached │ │ │ ├── CachedPropertyWeakReferencePropertyChangeListener.java │ │ │ ├── DefaultDynamicCachedConfigurationManager.java │ │ │ ├── DefaultDynamicCachedProperty.java │ │ │ ├── DynamicCachedConfigurationManager.java │ │ │ ├── DynamicCachedProperty.java │ │ │ └── corrected │ │ │ │ ├── DefaultDynamicCachedCorrectedConfigurationManager.java │ │ │ │ ├── DefaultDynamicCachedCorrectedProperty.java │ │ │ │ ├── DynamicCachedCorrectedConfigurationManager.java │ │ │ │ └── DynamicCachedCorrectedProperty.java │ │ └── corrected │ │ │ ├── DefaultDynamicCorrectedConfigurationManager.java │ │ │ ├── DefaultDynamicCorrectedProperty.java │ │ │ ├── DynamicCorrectedConfigurationManager.java │ │ │ └── DynamicCorrectedProperty.java │ │ ├── facade │ │ ├── ConfigurationManagers.java │ │ ├── ConfigurationSources.java │ │ └── TypedDynamicCachedCorrectedProperties.java │ │ ├── source │ │ ├── cascaded │ │ │ ├── CascadedConfiguration.java │ │ │ ├── CascadedConfigurationSource.java │ │ │ └── dynamic │ │ │ │ └── CascadedDynamicConfigurationSource.java │ │ ├── defaultvalue │ │ │ ├── DefaultValueConfiguration.java │ │ │ └── DefaultValueConfigurationSource.java │ │ ├── environmentvariable │ │ │ ├── EnvironmentVariableConfiguration.java │ │ │ └── EnvironmentVariableConfigurationSource.java │ │ ├── memory │ │ │ ├── MemoryConfiguration.java │ │ │ ├── MemoryConfigurationSource.java │ │ │ └── MemoryConfigurationSourceChangeEvent.java │ │ └── properties │ │ │ ├── PropertiesConfiguration.java │ │ │ └── PropertiesConfigurationSource.java │ │ ├── typed │ │ ├── DefaultTypedConfigurationManager.java │ │ ├── DefaultTypedProperty.java │ │ ├── TypedConfigurationManager.java │ │ ├── TypedProperty.java │ │ ├── cached │ │ │ ├── DefaultTypedCachedConfigurationManager.java │ │ │ ├── DefaultTypedCachedProperty.java │ │ │ ├── TypedCachedConfigurationManager.java │ │ │ ├── TypedCachedProperty.java │ │ │ └── corrected │ │ │ │ ├── DefaultTypedCachedCorrectedConfigurationManager.java │ │ │ │ ├── DefaultTypedCachedCorrectedProperty.java │ │ │ │ ├── TypedCachedCorrectedConfigurationManager.java │ │ │ │ └── TypedCachedCorrectedProperty.java │ │ ├── corrected │ │ │ ├── DefaultTypedCorrectedConfigurationManager.java │ │ │ ├── DefaultTypedCorrectedProperty.java │ │ │ ├── TypedCorrectedConfigurationManager.java │ │ │ └── TypedCorrectedProperty.java │ │ └── dynamic │ │ │ ├── DefaultTypedDynamicConfigurationManager.java │ │ │ ├── DefaultTypedDynamicProperty.java │ │ │ ├── TypedDynamicConfigurationManager.java │ │ │ ├── TypedDynamicProperty.java │ │ │ ├── cached │ │ │ ├── DefaultTypedDynamicCachedConfigurationManager.java │ │ │ ├── DefaultTypedDynamicCachedProperty.java │ │ │ ├── TypedDynamicCachedConfigurationManager.java │ │ │ ├── TypedDynamicCachedProperty.java │ │ │ └── corrected │ │ │ │ ├── DefaultTypedDynamicCachedCorrectedConfigurationManager.java │ │ │ │ ├── DefaultTypedDynamicCachedCorrectedProperty.java │ │ │ │ ├── TypedDynamicCachedCorrectedConfigurationManager.java │ │ │ │ └── TypedDynamicCachedCorrectedProperty.java │ │ │ └── corrected │ │ │ ├── DefaultTypedDynamicCorrectedConfigurationManager.java │ │ │ ├── DefaultTypedDynamicCorrectedProperty.java │ │ │ ├── TypedDynamicCorrectedConfigurationManager.java │ │ │ └── TypedDynamicCorrectedProperty.java │ │ ├── util │ │ ├── ConfigurationSourceComparator.java │ │ ├── PropertyChangeEventGenerator.java │ │ ├── PropertyComparator.java │ │ ├── PropertyKeyGenerator.java │ │ ├── PropertyValueGetter.java │ │ └── RangePropertyConfig.java │ │ └── wrapper │ │ ├── ConfigurationManagerWrapper.java │ │ └── PropertyWrapper.java │ └── test │ └── java │ └── com │ └── ctrip │ └── soa │ └── caravan │ └── configuration │ ├── DefaultConfigurationManagerTest.java │ ├── DefaultPropertyTest.java │ ├── MyConfiguration.java │ ├── MyConfigurationManager.java │ ├── MyConfigurationSource.java │ ├── MyProperty.java │ ├── cached │ ├── DefaultCachedConfigurationManagerTest.java │ └── DefaultCachedPropertyTest.java │ ├── defaultvalue │ └── DefaultValuePropertyTest.java │ ├── facade │ └── TypedDynamicCachedCorrectedPropertiesTest.java │ ├── source │ ├── defaultvalue │ │ └── DefaultValueConfigurationSourceTest.java │ ├── environmentvariable │ │ ├── EnvironmentVariableConfigurationSourceTest.java │ │ └── EnvironmentVariableConfigurationTest.java │ └── memory │ │ └── MemoryConfigurationSourceTest.java │ ├── sources │ └── cascaded │ │ └── CascadedConfigurationSourceTest.java │ └── typed │ ├── DefaultTypedConfigurationManagerTest.java │ └── dynamic │ └── cached │ ├── TypedDynamicCachedPropertyTest.java │ └── corrected │ └── DefaultTypedDynamicCachedCorrectedPropertyTest.java ├── caravan-etcd ├── .gitignore ├── pom.xml └── src │ ├── main │ └── java │ │ └── com │ │ └── ctrip │ │ └── soa │ │ └── caravan │ │ └── etcd │ │ └── v2 │ │ ├── EtcdClient.java │ │ ├── EtcdClientConfig.java │ │ ├── EtcdClientException.java │ │ ├── EtcdNode.java │ │ └── EtcdResult.java │ └── test │ └── java │ └── com │ └── ctrip │ └── soa │ └── caravan │ └── etcd │ └── test │ └── EtcdClientTest.java ├── caravan-hystrix ├── .gitignore ├── pom.xml └── src │ ├── main │ └── java │ │ └── com │ │ └── ctrip │ │ └── soa │ │ └── caravan │ │ └── hystrix │ │ ├── DefaultExecutionCommand.java │ │ ├── DefaultExecutionCommandManager.java │ │ ├── DefaultExecutionContext.java │ │ ├── ExecutionCommand.java │ │ ├── ExecutionCommandManager.java │ │ ├── ExecutionContext.java │ │ ├── ExecutionEvent.java │ │ ├── ValidationFailChecker.java │ │ ├── circuitbreaker │ │ ├── CircuitBreaker.java │ │ └── DefaultCircuitBreaker.java │ │ ├── config │ │ ├── CircuitBreakerConfig.java │ │ ├── CommandConfig.java │ │ ├── DefaultCircuitBreakerConfig.java │ │ ├── DefaultExecutionConfig.java │ │ ├── DefaultIsolatorConfig.java │ │ ├── DefaultMetricsConfig.java │ │ ├── IsolatorConfig.java │ │ └── MetricsConfig.java │ │ ├── exception │ │ ├── IsolationException.java │ │ └── ShortCircuitException.java │ │ ├── facade │ │ ├── CommandExecutor.java │ │ ├── CommandManagers.java │ │ └── ExecutionExceptons.java │ │ ├── isolator │ │ ├── DefaultIsolator.java │ │ └── Isolator.java │ │ ├── metrics │ │ ├── DefaultExecutionMetrics.java │ │ ├── DefaultHealthSnapshot.java │ │ ├── ExecutionMetrics.java │ │ └── HealthSnapshot.java │ │ └── util │ │ ├── KeyManager.java │ │ └── ManagerConfig.java │ └── test │ └── java │ └── com │ └── ctrip │ └── soa │ └── caravan │ └── hystrix │ ├── HystrixTestUtility.java │ └── bvt │ └── EndToEnd.java ├── caravan-protobuf ├── .gitignore ├── pom.xml └── src │ ├── main │ └── java │ │ └── com │ │ └── ctrip │ │ └── soa │ │ └── caravan │ │ └── protobuf │ │ └── v2 │ │ ├── GoogleProtobuf2Serializer.java │ │ ├── JacksonProtobuf2Serializer.java │ │ ├── ProtobufConfig.java │ │ ├── ProtobufMapperWrapper.java │ │ └── customization │ │ ├── AbstractBeanDeserializer.java │ │ ├── AbstractBeanSerializer.java │ │ ├── AbstractTypeCustomizationFactory.java │ │ ├── CustomBeanDeserializerFactory.java │ │ ├── CustomBeanSerializerFactory.java │ │ ├── CustomProtobufFactory.java │ │ ├── CustomProtobufParser.java │ │ ├── ProtobufParserUtil.java │ │ ├── TypeCustomizationFactory.java │ │ ├── array │ │ ├── ArrayProvider.java │ │ ├── CustomSimpleDeserializers.java │ │ └── CustomSimpleSerializers.java │ │ ├── bigdecimal │ │ ├── BigDecimalCustomizationFactory.java │ │ ├── BigDecimalDeserializer.java │ │ ├── BigDecimalSerializer.java │ │ ├── DecimalConverter.java │ │ └── DotNetDecimalProtobuf.java │ │ ├── biginteger │ │ └── BigIntegerCustomizationFactory.java │ │ ├── enums │ │ └── EnumCustomizationFactory.java │ │ ├── map │ │ ├── ClassPair.java │ │ ├── CustomCollectionDeserializer.java │ │ ├── DynamicClassFactory.java │ │ ├── KVPair.java │ │ ├── MapCustomizationFactory.java │ │ ├── MapDeserializer.java │ │ ├── MapDeserializerManager.java │ │ ├── MapSerializer.java │ │ └── MapSerializerManager.java │ │ ├── scalar │ │ ├── BooleanCustomizationFactory.java │ │ ├── ByteCustomizationFactory.java │ │ ├── CharacterCustomizationFactory.java │ │ └── ShortCustomizationFactory.java │ │ ├── schema │ │ ├── CustomMessageElementVisitor.java │ │ ├── CustomProtoBufSchemaVisitor.java │ │ └── CustomProtobufSchemaGenerator.java │ │ └── timerelated │ │ ├── AbstractTimeRelatedCustomizationFactory.java │ │ ├── DotNetTimeRelatedProtobuf.java │ │ ├── TimeRelatedConverter.java │ │ ├── calendar │ │ ├── CalendarCustomizationFactory.java │ │ ├── CalendarDeserializer.java │ │ └── CalendarSerializer.java │ │ ├── duration │ │ ├── DurationCustomizationFactory.java │ │ ├── DurationDeserializer.java │ │ └── DurationSerializer.java │ │ └── xmlgregoriancalendar │ │ ├── XMLGregorianCalendarCustomizationFactory.java │ │ ├── XMLGregorianCalendarDeserializer.java │ │ └── XMLGregorianCalendarSerializer.java │ └── test │ └── java │ └── com │ └── ctrip │ └── soa │ ├── caravan │ └── protobuf │ │ ├── Color.java │ │ ├── ComplexPojo.java │ │ ├── DateTimePojo.java │ │ ├── SimpleEnumPojo.java │ │ ├── SimplePojo.java │ │ ├── SimplePojo2.java │ │ └── v2 │ │ ├── AsmTest.java │ │ ├── BugReport.java │ │ ├── Embed.java │ │ ├── JacksonProtobufSerializerTest.java │ │ ├── JavaDotNetCompatibleTest.java │ │ ├── PBHandleUnknownNestedKeyTest.java │ │ ├── PBSkipFieldTest.java │ │ ├── PerfTest.java │ │ ├── Pojo10.java │ │ ├── Pojo11.java │ │ ├── Pojo12.java │ │ ├── Pojo13.java │ │ ├── Pojo14.java │ │ ├── Pojo2.java │ │ ├── Pojo3.java │ │ ├── Pojo4.java │ │ ├── Pojo5.java │ │ ├── Pojo6.java │ │ ├── Pojo7.java │ │ ├── Pojo8.java │ │ ├── Pojo9.java │ │ ├── PojoBigDecimal.java │ │ ├── PojoDate.java │ │ ├── ProtobufCustomizationTest.java │ │ ├── SomeTest.java │ │ ├── StringTest.java │ │ ├── TimeTest.java │ │ └── customization │ │ └── map │ │ └── DynamicClassFactoryTest.java │ └── framework │ └── soa │ └── testservice │ └── v1 │ ├── ArrayTypes.java │ ├── BasicTypes1.java │ ├── BasicTypes2.java │ ├── ComplexType.java │ ├── EmbedType1.java │ ├── EnumType1.java │ ├── EnumType2.java │ ├── Level1.java │ ├── Level2.java │ ├── Level3.java │ ├── ListTypes.java │ ├── ObjectFactory.java │ ├── TypeWithEnum.java │ └── package-info.java ├── caravan-ribbon ├── .gitignore ├── pom.xml └── src │ ├── main │ └── java │ │ └── com │ │ └── ctrip │ │ └── soa │ │ └── caravan │ │ └── ribbon │ │ ├── ConfigurationKeys.java │ │ ├── DynamicServerSource.java │ │ ├── LoadBalancer.java │ │ ├── LoadBalancerConfig.java │ │ ├── LoadBalancerManager.java │ │ ├── LoadBalancerManagerConfig.java │ │ ├── LoadBalancerRequestConfig.java │ │ ├── LoadBalancerRequestContext.java │ │ ├── LoadBalancerRoute.java │ │ ├── LoadBalancerRouteConfig.java │ │ ├── LoadBalancerRule.java │ │ ├── LoadBalancerRuleFactoryManager.java │ │ ├── Ping.java │ │ ├── SeekRouteEvent.java │ │ ├── SeekRouteListener.java │ │ ├── Server.java │ │ ├── ServerGroup.java │ │ ├── ServerSource.java │ │ ├── ServerSourceChangeEvent.java │ │ ├── ServerSourceChangeListener.java │ │ ├── algorithm │ │ ├── DefaultRoundRobinAlgorithm.java │ │ └── RoundRobinAlgorithm.java │ │ ├── loadbalancer │ │ ├── DefaultLoadBalancer.java │ │ ├── DefaultLoadBalancerContext.java │ │ ├── DefaultLoadBalancerRequestContext.java │ │ └── LoadBalancerContext.java │ │ ├── rule │ │ ├── DefaultLoadBalancerRuleFactoryManager.java │ │ ├── RoundRobinContext.java │ │ ├── RoundRobinRule.java │ │ └── WeightedRoundRobinRule.java │ │ ├── server │ │ ├── ServerStats.java │ │ ├── TimeBufferConfigCorrector.java │ │ └── TimeBufferConfigParser.java │ │ ├── serversource │ │ ├── filter │ │ │ ├── DefaultSeekRouteEvent.java │ │ │ ├── DefaultServerSourceFilter.java │ │ │ ├── ServerContextChangeEvent.java │ │ │ ├── ServerContextChangeListener.java │ │ │ └── ServerSourceFilter.java │ │ ├── manager │ │ │ ├── DefaultServerSourceManager.java │ │ │ ├── ServerSourceManager.java │ │ │ ├── ServerSourceRestoreEvent.java │ │ │ └── ServerSourceRestoreListener.java │ │ └── monitor │ │ │ ├── DefaultServerSourceMonitor.java │ │ │ ├── ServerSourceMonitor.java │ │ │ ├── ServerStatusChangeEvent.java │ │ │ └── ServerStatusChangeListener.java │ │ └── util │ │ ├── LoadBalancerRoutes.java │ │ ├── LogUtil.java │ │ ├── Math.java │ │ └── PingUtil.java │ └── test │ ├── java │ └── com │ │ └── ctrip │ │ └── soa │ │ └── caravan │ │ └── ribbon │ │ ├── DefaultPing.java │ │ ├── LoadBalancerRouteFilterTest.java │ │ ├── ServerTest.java │ │ ├── TestUtils.java │ │ ├── Threads.java │ │ ├── loadbalancer │ │ └── DefaultLoadBalancerTest.java │ │ ├── rule │ │ ├── RoundRobinRuleTest.java │ │ └── WeightedRoundRobinRuleTest.java │ │ └── serversource │ │ ├── DefaultDynamicServerSource.java │ │ ├── DefaultServerSource.java │ │ ├── filter │ │ └── DefaultServerSourceFilterTest.java │ │ ├── manager │ │ └── DefaultServerSourceManagerTest.java │ │ └── monitor │ │ └── DefaultServerSourceMonitorTest.java │ └── resources │ ├── META-INF │ └── app.properties │ └── soa.properties ├── caravan-util ├── .gitignore ├── pom.xml └── src │ ├── main │ └── java │ │ └── com │ │ └── ctrip │ │ └── soa │ │ └── caravan │ │ └── util │ │ ├── concurrent │ │ ├── DynamicScheduledThread.java │ │ └── DynamicScheduledThreadConfig.java │ │ ├── id │ │ └── UnsafeIDGenerator.java │ │ ├── net │ │ └── apache │ │ │ ├── AbstractDynamicPoolingHttpClientProvider.java │ │ │ ├── AbstractIdleConnectionMonitorThread.java │ │ │ ├── AlwaysRedirectStrategy.java │ │ │ ├── AutoCleanedPoolingHttpClientConnectionManager.java │ │ │ ├── DefaultConnectionConfig.java │ │ │ ├── DynamicPoolingHttpClientProvider.java │ │ │ ├── HttpConnectException.java │ │ │ ├── HttpRequestException.java │ │ │ ├── HttpRequestExecutors.java │ │ │ ├── HttpRequestFactory.java │ │ │ ├── IOExceptionRetryHelper.java │ │ │ ├── IdleConnectionMonitorThread.java │ │ │ ├── PoolingHttpClientFactory.java │ │ │ ├── RequestConfigs.java │ │ │ ├── async │ │ │ ├── AutoCleanedPoolingNHttpClientConnectionManager.java │ │ │ ├── DynamicPoolingHttpAsyncClientProvider.java │ │ │ ├── HttpAsyncRequestExecutors.java │ │ │ ├── HttpResponseTransformer.java │ │ │ ├── IOReactorRuntimeException.java │ │ │ ├── IdleNConnectionMonitorThread.java │ │ │ └── PoolingHttpAsyncClientFactory.java │ │ │ └── trace │ │ │ ├── DefaultLogFunc.java │ │ │ ├── LogFunc.java │ │ │ ├── TracingInputStream.java │ │ │ ├── TracingManagedHttpClientConnection.java │ │ │ ├── TracingManagedHttpClientConnectionFactory.java │ │ │ └── TracingSessionInputBufferImpl.java │ │ ├── ratelimiter │ │ ├── DefaultRateLimiter.java │ │ ├── RateLimiter.java │ │ ├── RateLimiterConfig.java │ │ ├── RateLimiterManager.java │ │ └── RateLimiterManagerConfig.java │ │ ├── safelist │ │ ├── DefaultSafeList.java │ │ ├── SafeList.java │ │ ├── SafeListChecker.java │ │ ├── SafeListConfig.java │ │ ├── SafeListManager.java │ │ ├── SafeListManagerConfig.java │ │ └── checker │ │ │ ├── BlackListChecker.java │ │ │ └── WhiteListChecker.java │ │ └── serializer │ │ ├── JacksonJsonBytesSerializer.java │ │ ├── JacksonJsonSerializer.java │ │ ├── JacksonXmlBytesSerializer.java │ │ ├── JacksonXmlSerializer.java │ │ ├── date │ │ ├── AbstractDateSerializer.java │ │ ├── ShortDateSerializer.java │ │ ├── SimpleDateSerializer.java │ │ ├── StandardDateSerializer.java │ │ ├── StandardSimpleDateSerializer.java │ │ ├── StandardWithoutMillisecondDateSerializer.java │ │ └── WcfDateSerializer.java │ │ ├── filterable │ │ ├── FilterableBeanSerializerModifier.java │ │ ├── FilterableJsonSerializer.java │ │ ├── FilterableJsonSerializerConfig.java │ │ ├── FilterableProperty.java │ │ ├── FilterableType.java │ │ └── SerializationFilter.java │ │ ├── ssjson │ │ ├── GregorianCalendarDeserializer.java │ │ ├── GregorianCalendarSerializer.java │ │ ├── SSJsonSerializer.java │ │ ├── SSJsonSerializerConfig.java │ │ ├── TypeAlias.java │ │ ├── TypeAliasIdResolver.java │ │ ├── XMLGregorianCalendarDeserializer.java │ │ └── XMLGregorianCalendarSerializer.java │ │ └── xml │ │ ├── AbstractJAXBXmlSerializer.java │ │ ├── FastInfosetSerializer.java │ │ ├── JAXBXmlSerializer.java │ │ └── XmlFilterInputStream.java │ └── test │ └── java │ └── com │ └── ctrip │ └── soa │ └── caravan │ └── util │ ├── id │ └── UnsafeIDGeneratorTest.java │ ├── net │ └── apache │ │ ├── RequetConfigsTest.java │ │ └── trace │ │ └── ClientInvocationTraceSample.java │ └── serializer │ ├── Color.java │ ├── ComplexPojo.java │ ├── DateTimePojo.java │ ├── ObjectFieldPojo.java │ ├── SimpleEnumPojo.java │ ├── SimplePojo.java │ ├── SimplePojo2.java │ ├── date │ ├── ShortDateTest.java │ ├── StandardDateTest.java │ ├── StandardSimpleDateTest.java │ ├── StandardWithoutMillisecondDataTest.java │ └── WcfDateTest.java │ ├── ssjson │ ├── SSJsonSerializerTest.java │ ├── TestEntity.java │ ├── TestEntity1.java │ └── TestEntity2.java │ └── xml │ ├── FastInfosetSerializerTest.java │ ├── ObjectFactory.java │ └── XMLPojo.java ├── caravan-web ├── .gitignore ├── pom.xml └── src │ ├── main │ └── java │ │ └── com │ │ └── ctrip │ │ └── soa │ │ └── caravan │ │ └── web │ │ ├── configuration │ │ └── source │ │ │ └── servletcontext │ │ │ ├── ServletContextConfiguration.java │ │ │ └── ServletContextConfigurationSource.java │ │ └── filter │ │ ├── CaseInsensitiveRequestParameterFilter.java │ │ ├── CrossDomainFilter.java │ │ ├── CustomFilterConfig.java │ │ └── Filters.java │ └── test │ └── java │ └── com │ └── ctrip │ └── soa │ └── caravan │ └── web │ └── configuration │ └── source │ └── servletcontext │ ├── MyServletContext.java │ ├── ServletContextConfigurationSourceTest.java │ └── ServletContextConfigurationTest.java └── pom.xml /.gitignore: -------------------------------------------------------------------------------- 1 | .project 2 | .classpath 3 | build/ 4 | target/ 5 | .settings/ 6 | bin/ 7 | .gradle 8 | .metadata 9 | *~ 10 | .recommenders 11 | 12 | .idea 13 | *.iml 14 | *.class 15 | *.lst 16 | 17 | *.versionsBackup 18 | -------------------------------------------------------------------------------- /Readme.md: -------------------------------------------------------------------------------- 1 | Caravan(Ctrip SOA 开发工具集) 2 | ================ 3 | 4 | [![License](https://img.shields.io/badge/License-Apache%202.0-blue.svg)](https://opensource.org/licenses/Apache-2.0) 5 | 6 | Caravan是携程框架部门SOA常用开发工具的集合,包含配置、熔断等高度重用组件。 7 | 8 | 更多产品介绍参见: https://github.com/ctripcorp/caravan/wiki 9 | 10 | # Features 11 | * caravan-common 12 | * 基本的工具接口和工具类 13 | 14 | * caravan-configuration 15 | * 在程序外部配置源和程序内部配置使用之间的抽象层,隔离配置源的形式和配置使用方式 16 | 17 | * caravan-hystrix 18 | * 服务依赖熔断、隔离限流组件 19 | 20 | * caravan-util 21 | * httpclient、序列化器方面的工具 22 | 23 | * caravan-web 24 | * web开发工具 25 | 26 | * caravan-protobuf 27 | * 可与protobuf-net互通的pb格式,基于pojo对象 28 | 29 | * caravan-ribbon 30 | * 负载均衡工具 31 | 32 | * caravan-etcd 33 | * etcd v2的java client 34 | 35 | # Developers 36 | * Qiang Zhao 37 | 38 | * jianwj 39 | 40 | * Dante <383124397@qq.com> 41 | 42 | * Marsqing <0124011@gmail.com> 43 | 44 | * Jinhua Liang 45 | 46 | * Alex 47 | 48 | * wanbf <513111602@qq.com> 49 | 50 | * Jodie 51 | 52 | -------------------------------------------------------------------------------- /caravan-common/.gitignore: -------------------------------------------------------------------------------- 1 | .project 2 | .classpath 3 | build/ 4 | .settings/ 5 | bin/ 6 | .gradle 7 | /target/ 8 | -------------------------------------------------------------------------------- /caravan-common/src/main/java/com/ctrip/soa/caravan/common/collect/AuditData.java: -------------------------------------------------------------------------------- 1 | package com.ctrip.soa.caravan.common.collect; 2 | 3 | /** 4 | * Created by Qiang Zhao on 10/05/2016. 5 | */ 6 | public class AuditData { 7 | 8 | private long max; 9 | private long min; 10 | private long sum; 11 | private int count; 12 | 13 | public AuditData() { 14 | 15 | } 16 | 17 | public long getMax() { 18 | return max; 19 | } 20 | 21 | public void setMax(long max) { 22 | this.max = max; 23 | } 24 | 25 | public long getMin() { 26 | return min; 27 | } 28 | 29 | public void setMin(long min) { 30 | this.min = min; 31 | } 32 | 33 | public long getSum() { 34 | return sum; 35 | } 36 | 37 | public void setSum(long sum) { 38 | this.sum = sum; 39 | } 40 | 41 | public int getCount() { 42 | return count; 43 | } 44 | 45 | public void setCount(int count) { 46 | this.count = count; 47 | } 48 | 49 | public long getAvg() { 50 | int c = this.count; 51 | if (c == 0) 52 | return 0; 53 | 54 | return Math.round((double) this.sum / c); 55 | } 56 | 57 | } 58 | -------------------------------------------------------------------------------- /caravan-common/src/main/java/com/ctrip/soa/caravan/common/concurrent/ThreadFactories.java: -------------------------------------------------------------------------------- 1 | package com.ctrip.soa.caravan.common.concurrent; 2 | 3 | import java.util.concurrent.ThreadFactory; 4 | 5 | import com.ctrip.soa.caravan.common.value.StringValues; 6 | import com.google.common.util.concurrent.ThreadFactoryBuilder; 7 | 8 | /** 9 | * Created by Qiang Zhao on 10/05/2016. 10 | */ 11 | public final class ThreadFactories { 12 | 13 | public static final ThreadFactory DEFAULT = newDaemonThreadFactory(null); 14 | 15 | private ThreadFactories() { 16 | 17 | } 18 | 19 | public static ThreadFactory newDaemonThreadFactory(String nameFormat) { 20 | ThreadFactoryBuilder builder = new ThreadFactoryBuilder(); 21 | builder.setDaemon(true); 22 | if (!StringValues.isNullOrWhitespace(nameFormat)) 23 | builder.setNameFormat(nameFormat); 24 | return builder.build(); 25 | } 26 | 27 | } 28 | -------------------------------------------------------------------------------- /caravan-common/src/main/java/com/ctrip/soa/caravan/common/concurrent/ThreadPools.java: -------------------------------------------------------------------------------- 1 | package com.ctrip.soa.caravan.common.concurrent; 2 | 3 | import java.util.concurrent.ExecutorService; 4 | import java.util.concurrent.Executors; 5 | import java.util.concurrent.ThreadFactory; 6 | 7 | /** 8 | * Created by Qiang Zhao on 10/05/2016. 9 | */ 10 | public final class ThreadPools { 11 | 12 | private ThreadPools() { 13 | 14 | } 15 | 16 | public static ExecutorService newCachedDaemonThreadPool() { 17 | return Executors.newCachedThreadPool(ThreadFactories.DEFAULT); 18 | } 19 | 20 | public static ExecutorService newCachedDaemonThreadPool(String nameFormat) { 21 | ThreadFactory threadFactory = ThreadFactories.newDaemonThreadFactory(nameFormat); 22 | return Executors.newCachedThreadPool(threadFactory); 23 | } 24 | 25 | } 26 | -------------------------------------------------------------------------------- /caravan-common/src/main/java/com/ctrip/soa/caravan/common/concurrent/Threads.java: -------------------------------------------------------------------------------- 1 | package com.ctrip.soa.caravan.common.concurrent; 2 | 3 | import org.slf4j.Logger; 4 | import org.slf4j.LoggerFactory; 5 | 6 | import com.ctrip.soa.caravan.common.value.corrector.RangeCorrector; 7 | 8 | /** 9 | * Created by Qiang Zhao on 10/05/2016. 10 | */ 11 | public final class Threads { 12 | 13 | private static final Logger _logger = LoggerFactory.getLogger(Threads.class); 14 | 15 | private static final RangeCorrector _msRangeCorrector = new RangeCorrector(0, Integer.MAX_VALUE); 16 | 17 | private static final RangeCorrector _nanosRangeCorrector = new RangeCorrector(0, 999999); 18 | 19 | private Threads() { 20 | 21 | } 22 | 23 | public static void sleep(int ms) { 24 | sleep(ms, 0); 25 | } 26 | 27 | public static void sleep(int ms, int nanos) { 28 | try { 29 | ms = _msRangeCorrector.correct(ms); 30 | nanos = _nanosRangeCorrector.correct(nanos); 31 | Thread.sleep(ms, nanos); 32 | } catch (Throwable ex) { 33 | _logger.error("Sleep failed.", ex); 34 | } 35 | } 36 | 37 | } 38 | -------------------------------------------------------------------------------- /caravan-common/src/main/java/com/ctrip/soa/caravan/common/concurrent/ValueScope.java: -------------------------------------------------------------------------------- 1 | package com.ctrip.soa.caravan.common.concurrent; 2 | 3 | import java.io.Closeable; 4 | 5 | /** 6 | * Created by Qiang Zhao on 10/05/2016. 7 | */ 8 | public class ValueScope { 9 | 10 | private T _default; 11 | 12 | private ThreadLocal _current = new ThreadLocal<>(); 13 | 14 | private CloseableScope _scope = new CloseableScope(this); 15 | 16 | public ValueScope() { 17 | this(null); 18 | } 19 | 20 | public ValueScope(T defaultValue) { 21 | _default = defaultValue; 22 | } 23 | 24 | public T current() { 25 | T current = _current.get(); 26 | return current == null ? _default : current; 27 | } 28 | 29 | public CloseableScope use(T value) { 30 | _current.set(value); 31 | return _scope; 32 | } 33 | 34 | public static class CloseableScope implements Closeable { 35 | 36 | private ValueScope _valueScope; 37 | 38 | private CloseableScope(ValueScope valueScope) { 39 | _valueScope = valueScope; 40 | } 41 | 42 | @Override 43 | public void close() { 44 | _valueScope._current.set(null); 45 | } 46 | 47 | } 48 | 49 | } 50 | -------------------------------------------------------------------------------- /caravan-common/src/main/java/com/ctrip/soa/caravan/common/concurrent/collect/circularbuffer/timebucket/PercentileBufferConfig.java: -------------------------------------------------------------------------------- 1 | package com.ctrip.soa.caravan.common.concurrent.collect.circularbuffer.timebucket; 2 | 3 | /** 4 | * Created by Qiang Zhao on 10/05/2016. 5 | */ 6 | public class PercentileBufferConfig extends TimeBufferConfig { 7 | 8 | private int _bucketCapacity; 9 | 10 | public PercentileBufferConfig(long bufferTimeWindow, long bucketTimeWindow, int bucketCapacity) { 11 | super(bufferTimeWindow, bucketTimeWindow); 12 | 13 | if (bucketCapacity <= 0) 14 | throw new IllegalArgumentException("Bucket capacity cannot be <= 0."); 15 | 16 | _bucketCapacity = bucketCapacity; 17 | } 18 | 19 | public int bucketCapacity() { 20 | return _bucketCapacity; 21 | } 22 | 23 | } 24 | -------------------------------------------------------------------------------- /caravan-common/src/main/java/com/ctrip/soa/caravan/common/concurrent/collect/circularbuffer/timebucket/TimeBucket.java: -------------------------------------------------------------------------------- 1 | package com.ctrip.soa.caravan.common.concurrent.collect.circularbuffer.timebucket; 2 | 3 | /** 4 | * Created by Qiang Zhao on 10/05/2016. 5 | */ 6 | public abstract class TimeBucket { 7 | 8 | private volatile long _startTime; 9 | 10 | protected TimeBucket(long startTime) { 11 | _startTime = startTime; 12 | } 13 | 14 | public long startTime() { 15 | return _startTime; 16 | } 17 | 18 | public void reset(long startTime) { 19 | _startTime = startTime; 20 | } 21 | 22 | } 23 | -------------------------------------------------------------------------------- /caravan-common/src/main/java/com/ctrip/soa/caravan/common/delegate/Action.java: -------------------------------------------------------------------------------- 1 | package com.ctrip.soa.caravan.common.delegate; 2 | 3 | /** 4 | * Created by Qiang Zhao on 10/05/2016. 5 | */ 6 | public interface Action { 7 | 8 | void execute(); 9 | 10 | } 11 | -------------------------------------------------------------------------------- /caravan-common/src/main/java/com/ctrip/soa/caravan/common/delegate/Action1.java: -------------------------------------------------------------------------------- 1 | package com.ctrip.soa.caravan.common.delegate; 2 | 3 | /** 4 | * Created by Qiang Zhao on 10/05/2016. 5 | */ 6 | public interface Action1 { 7 | 8 | void execute(T param); 9 | 10 | } 11 | -------------------------------------------------------------------------------- /caravan-common/src/main/java/com/ctrip/soa/caravan/common/delegate/Action2.java: -------------------------------------------------------------------------------- 1 | package com.ctrip.soa.caravan.common.delegate; 2 | 3 | /** 4 | * Created by Qiang Zhao on 10/05/2016. 5 | */ 6 | public interface Action2 { 7 | 8 | void execute(T1 param1, T2 param2); 9 | 10 | } 11 | -------------------------------------------------------------------------------- /caravan-common/src/main/java/com/ctrip/soa/caravan/common/delegate/Action3.java: -------------------------------------------------------------------------------- 1 | package com.ctrip.soa.caravan.common.delegate; 2 | 3 | /** 4 | * Created by Qiang Zhao on 10/05/2016. 5 | */ 6 | public interface Action3 { 7 | 8 | void execute(T1 param1, T2 param2, T3 param3); 9 | 10 | } 11 | -------------------------------------------------------------------------------- /caravan-common/src/main/java/com/ctrip/soa/caravan/common/delegate/Action4.java: -------------------------------------------------------------------------------- 1 | package com.ctrip.soa.caravan.common.delegate; 2 | 3 | /** 4 | * Created by Qiang Zhao on 10/05/2016. 5 | */ 6 | public interface Action4 { 7 | 8 | void execute(T1 param1, T2 param2, T3 param3, T4 param4); 9 | 10 | } 11 | -------------------------------------------------------------------------------- /caravan-common/src/main/java/com/ctrip/soa/caravan/common/delegate/Func.java: -------------------------------------------------------------------------------- 1 | package com.ctrip.soa.caravan.common.delegate; 2 | 3 | /** 4 | * Created by Qiang Zhao on 10/05/2016. 5 | */ 6 | public interface Func { 7 | 8 | V execute(); 9 | 10 | } 11 | -------------------------------------------------------------------------------- /caravan-common/src/main/java/com/ctrip/soa/caravan/common/delegate/Func1.java: -------------------------------------------------------------------------------- 1 | package com.ctrip.soa.caravan.common.delegate; 2 | 3 | /** 4 | * Created by Qiang Zhao on 10/05/2016. 5 | */ 6 | public interface Func1 { 7 | 8 | V execute(T param); 9 | 10 | } 11 | -------------------------------------------------------------------------------- /caravan-common/src/main/java/com/ctrip/soa/caravan/common/delegate/Func2.java: -------------------------------------------------------------------------------- 1 | package com.ctrip.soa.caravan.common.delegate; 2 | 3 | /** 4 | * Created by Qiang Zhao on 10/05/2016. 5 | */ 6 | public interface Func2 { 7 | 8 | V execute(T1 param1, T2 param2); 9 | 10 | } 11 | -------------------------------------------------------------------------------- /caravan-common/src/main/java/com/ctrip/soa/caravan/common/delegate/Func3.java: -------------------------------------------------------------------------------- 1 | package com.ctrip.soa.caravan.common.delegate; 2 | 3 | /** 4 | * Created by Qiang Zhao on 10/05/2016. 5 | */ 6 | public interface Func3 { 7 | 8 | V execute(T1 param1, T2 param2, T3 param3); 9 | 10 | } 11 | -------------------------------------------------------------------------------- /caravan-common/src/main/java/com/ctrip/soa/caravan/common/delegate/Func4.java: -------------------------------------------------------------------------------- 1 | package com.ctrip.soa.caravan.common.delegate; 2 | 3 | /** 4 | * Created by Qiang Zhao on 10/05/2016. 5 | */ 6 | public interface Func4 { 7 | 8 | V execute(T1 param1, T2 param2, T3 param3, T4 param4); 9 | 10 | } 11 | -------------------------------------------------------------------------------- /caravan-common/src/main/java/com/ctrip/soa/caravan/common/exception/ParseRuntimeException.java: -------------------------------------------------------------------------------- 1 | package com.ctrip.soa.caravan.common.exception; 2 | 3 | import java.text.ParseException; 4 | 5 | /** 6 | * Created by Qiang Zhao on 10/05/2016. 7 | */ 8 | public class ParseRuntimeException extends RuntimeException { 9 | 10 | private static final long serialVersionUID = 1L; 11 | 12 | public ParseRuntimeException(ParseException ex) { 13 | super(ex); 14 | } 15 | 16 | } 17 | -------------------------------------------------------------------------------- /caravan-common/src/main/java/com/ctrip/soa/caravan/common/exception/TempRuntimeException.java: -------------------------------------------------------------------------------- 1 | package com.ctrip.soa.caravan.common.exception; 2 | 3 | /** 4 | * Created by Qiang Zhao on 10/05/2016. 5 | */ 6 | public class TempRuntimeException extends RuntimeException { 7 | 8 | private static final long serialVersionUID = 1L; 9 | 10 | public TempRuntimeException(Exception ex) { 11 | super(ex); 12 | } 13 | 14 | } 15 | -------------------------------------------------------------------------------- /caravan-common/src/main/java/com/ctrip/soa/caravan/common/metric/AuditMetric.java: -------------------------------------------------------------------------------- 1 | package com.ctrip.soa.caravan.common.metric; 2 | 3 | import com.ctrip.soa.caravan.common.collect.AuditData; 4 | 5 | /** 6 | * Created by Qiang Zhao on 10/05/2016. 7 | */ 8 | public interface AuditMetric extends Metric { 9 | 10 | void addValue(double value); 11 | 12 | long getCount(); 13 | 14 | long getCountInRange(long lowerBound, long upperBound); 15 | 16 | long getPercentile(double percent); 17 | 18 | AuditData getAuditData(); 19 | 20 | } 21 | -------------------------------------------------------------------------------- /caravan-common/src/main/java/com/ctrip/soa/caravan/common/metric/AuditMetricManager.java: -------------------------------------------------------------------------------- 1 | package com.ctrip.soa.caravan.common.metric; 2 | 3 | /** 4 | * Created by w.jian on 2016/9/12. 5 | */ 6 | public interface AuditMetricManager extends MetricManager { 7 | AuditMetric getMetric(String metricId, MetricConfig metricConfig); 8 | } 9 | -------------------------------------------------------------------------------- /caravan-common/src/main/java/com/ctrip/soa/caravan/common/metric/EventMetric.java: -------------------------------------------------------------------------------- 1 | package com.ctrip.soa.caravan.common.metric; 2 | 3 | import java.util.Collection; 4 | 5 | /** 6 | * Created by Qiang Zhao on 10/05/2016. 7 | */ 8 | public interface EventMetric extends Metric { 9 | 10 | void addEvent(String eventType); 11 | 12 | Collection getEventTypes(); 13 | 14 | long getCount(); 15 | 16 | long getCount(String eventType); 17 | 18 | } 19 | -------------------------------------------------------------------------------- /caravan-common/src/main/java/com/ctrip/soa/caravan/common/metric/EventMetricManager.java: -------------------------------------------------------------------------------- 1 | package com.ctrip.soa.caravan.common.metric; 2 | 3 | /** 4 | * Created by w.jian on 2016/9/12. 5 | */ 6 | public interface EventMetricManager extends MetricManager { 7 | EventMetric getMetric(String metricId, MetricConfig metricConfig); 8 | } 9 | -------------------------------------------------------------------------------- /caravan-common/src/main/java/com/ctrip/soa/caravan/common/metric/Metric.java: -------------------------------------------------------------------------------- 1 | package com.ctrip.soa.caravan.common.metric; 2 | 3 | import java.util.Map; 4 | 5 | /** 6 | * Created by Qiang Zhao on 10/05/2016. 7 | */ 8 | public interface Metric { 9 | 10 | String metricId(); 11 | 12 | Map metadata(); 13 | 14 | } 15 | -------------------------------------------------------------------------------- /caravan-common/src/main/java/com/ctrip/soa/caravan/common/metric/MetricConfig.java: -------------------------------------------------------------------------------- 1 | package com.ctrip.soa.caravan.common.metric; 2 | 3 | import java.util.Collections; 4 | import java.util.HashMap; 5 | import java.util.Map; 6 | 7 | /** 8 | * Created by w.jian on 2016/9/12. 9 | */ 10 | public class MetricConfig { 11 | private Map _metadata; 12 | 13 | public MetricConfig(Map metadata) { 14 | if (metadata == null) 15 | metadata = new HashMap<>(); 16 | _metadata = Collections.unmodifiableMap(metadata); 17 | } 18 | 19 | public Map metadata() { 20 | return _metadata; 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /caravan-common/src/main/java/com/ctrip/soa/caravan/common/metric/MetricManager.java: -------------------------------------------------------------------------------- 1 | package com.ctrip.soa.caravan.common.metric; 2 | 3 | import java.util.Collection; 4 | 5 | /** 6 | * Created by Qiang Zhao on 10/05/2016. 7 | */ 8 | public interface MetricManager { 9 | 10 | String managerId(); 11 | 12 | MetricManagerConfig config(); 13 | 14 | Collection metrics(); 15 | 16 | } 17 | -------------------------------------------------------------------------------- /caravan-common/src/main/java/com/ctrip/soa/caravan/common/metric/MetricManagerConfig.java: -------------------------------------------------------------------------------- 1 | package com.ctrip.soa.caravan.common.metric; 2 | 3 | import com.ctrip.soa.caravan.common.value.checker.NullArgumentChecker; 4 | 5 | /** 6 | * Created by Qiang Zhao on 10/05/2016. 7 | */ 8 | public class MetricManagerConfig { 9 | 10 | public static final MetricManagerConfig NULL_EVENT_METRIC_MANAGER_CONFIG = new MetricManagerConfig<>(NullEventMetricReporter.INSTANCE); 11 | public static final MetricManagerConfig NULL_VALUE_METRIC_MANAGER_CONFIG = new MetricManagerConfig<>(NullAuditMetricReporter.INSTANCE); 12 | 13 | private MetricReporter _metricReporter; 14 | 15 | public MetricManagerConfig(MetricReporter metricReporter) { 16 | NullArgumentChecker.DEFAULT.check(metricReporter, "metricReporter"); 17 | _metricReporter = metricReporter; 18 | } 19 | 20 | public MetricReporter metricReporter() { 21 | return _metricReporter; 22 | } 23 | 24 | } 25 | -------------------------------------------------------------------------------- /caravan-common/src/main/java/com/ctrip/soa/caravan/common/metric/MetricReporter.java: -------------------------------------------------------------------------------- 1 | package com.ctrip.soa.caravan.common.metric; 2 | 3 | /** 4 | * Created by Qiang Zhao on 10/05/2016. 5 | */ 6 | public interface MetricReporter { 7 | 8 | void report(T metric); 9 | 10 | } 11 | -------------------------------------------------------------------------------- /caravan-common/src/main/java/com/ctrip/soa/caravan/common/metric/NullAuditMetricManager.java: -------------------------------------------------------------------------------- 1 | package com.ctrip.soa.caravan.common.metric; 2 | 3 | import java.util.Collection; 4 | import java.util.Collections; 5 | 6 | /** 7 | * Created by Qiang Zhao on 10/05/2016. 8 | */ 9 | public class NullAuditMetricManager implements AuditMetricManager { 10 | 11 | public static final NullAuditMetricManager INSTANCE = new NullAuditMetricManager(); 12 | 13 | private static final String NULL_MANAGER_ID = "null_audit_metric_manager"; 14 | 15 | private NullAuditMetricManager() { 16 | 17 | } 18 | 19 | @Override 20 | public String managerId() { 21 | return NULL_MANAGER_ID; 22 | } 23 | 24 | @Override 25 | public MetricManagerConfig config() { 26 | return MetricManagerConfig.NULL_VALUE_METRIC_MANAGER_CONFIG; 27 | } 28 | 29 | @Override 30 | public AuditMetric getMetric(String metricId, MetricConfig metricConfig) { 31 | return NullAuditMetric.INSTANCE; 32 | } 33 | 34 | @Override 35 | public Collection metrics() { 36 | return Collections.emptyList(); 37 | } 38 | 39 | } 40 | -------------------------------------------------------------------------------- /caravan-common/src/main/java/com/ctrip/soa/caravan/common/metric/NullAuditMetricReporter.java: -------------------------------------------------------------------------------- 1 | package com.ctrip.soa.caravan.common.metric; 2 | 3 | /** 4 | * Created by Qiang Zhao on 10/05/2016. 5 | */ 6 | public class NullAuditMetricReporter implements MetricReporter { 7 | 8 | public static final NullAuditMetricReporter INSTANCE = new NullAuditMetricReporter(); 9 | 10 | private NullAuditMetricReporter() { 11 | 12 | } 13 | 14 | @Override 15 | public void report(AuditMetric metric) { 16 | 17 | } 18 | 19 | } 20 | -------------------------------------------------------------------------------- /caravan-common/src/main/java/com/ctrip/soa/caravan/common/metric/NullEventMetric.java: -------------------------------------------------------------------------------- 1 | package com.ctrip.soa.caravan.common.metric; 2 | 3 | import java.util.Collection; 4 | import java.util.Collections; 5 | import java.util.Map; 6 | 7 | /** 8 | * Created by Qiang Zhao on 10/05/2016. 9 | */ 10 | public class NullEventMetric implements EventMetric { 11 | 12 | public static final NullEventMetric INSTANCE = new NullEventMetric(); 13 | 14 | private static final String NULL_METRIC_ID = "null_event_metric"; 15 | 16 | private Map _metadata = Collections.emptyMap(); 17 | 18 | private Collection _eventTypes = Collections.emptySet(); 19 | 20 | private NullEventMetric() { 21 | 22 | } 23 | 24 | @Override 25 | public String metricId() { 26 | return NULL_METRIC_ID; 27 | } 28 | 29 | @Override 30 | public Map metadata() { 31 | return _metadata; 32 | } 33 | 34 | @Override 35 | public void addEvent(String eventType) { 36 | 37 | } 38 | 39 | @Override 40 | public Collection getEventTypes() { 41 | return _eventTypes; 42 | } 43 | 44 | @Override 45 | public long getCount() { 46 | return 0; 47 | } 48 | 49 | @Override 50 | public long getCount(String eventType) { 51 | return 0; 52 | } 53 | 54 | } 55 | -------------------------------------------------------------------------------- /caravan-common/src/main/java/com/ctrip/soa/caravan/common/metric/NullEventMetricManager.java: -------------------------------------------------------------------------------- 1 | package com.ctrip.soa.caravan.common.metric; 2 | 3 | import java.util.Collection; 4 | import java.util.Collections; 5 | 6 | /** 7 | * Created by Qiang Zhao on 10/05/2016. 8 | */ 9 | public class NullEventMetricManager implements EventMetricManager { 10 | 11 | public static final NullEventMetricManager INSTANCE = new NullEventMetricManager(); 12 | 13 | private static final String NULL_MANAGER_ID = "null_event_metric_manager"; 14 | 15 | private NullEventMetricManager() { 16 | 17 | } 18 | 19 | @Override 20 | public String managerId() { 21 | return NULL_MANAGER_ID; 22 | } 23 | 24 | @Override 25 | public MetricManagerConfig config() { 26 | return MetricManagerConfig.NULL_EVENT_METRIC_MANAGER_CONFIG; 27 | } 28 | 29 | @Override 30 | public EventMetric getMetric(String metricId, MetricConfig metricConfig) { 31 | return NullEventMetric.INSTANCE; 32 | } 33 | 34 | @Override 35 | public Collection metrics() { 36 | return Collections.emptyList(); 37 | } 38 | 39 | } 40 | -------------------------------------------------------------------------------- /caravan-common/src/main/java/com/ctrip/soa/caravan/common/metric/NullEventMetricReporter.java: -------------------------------------------------------------------------------- 1 | package com.ctrip.soa.caravan.common.metric; 2 | 3 | /** 4 | * Created by Qiang Zhao on 10/05/2016. 5 | */ 6 | public class NullEventMetricReporter implements MetricReporter { 7 | 8 | public static final NullEventMetricReporter INSTANCE = new NullEventMetricReporter(); 9 | 10 | private NullEventMetricReporter() { 11 | 12 | } 13 | 14 | @Override 15 | public void report(EventMetric metric) { 16 | 17 | } 18 | 19 | } 20 | -------------------------------------------------------------------------------- /caravan-common/src/main/java/com/ctrip/soa/caravan/common/metric/NullStatusMetric.java: -------------------------------------------------------------------------------- 1 | package com.ctrip.soa.caravan.common.metric; 2 | 3 | import java.util.Collections; 4 | import java.util.Map; 5 | 6 | /** 7 | * Created by w.jian on 2016/9/12. 8 | */ 9 | public class NullStatusMetric implements StatusMetric { 10 | 11 | private static String metricId = "null_status_metric"; 12 | private T _status; 13 | private Map _metadata = Collections.emptyMap(); 14 | 15 | NullStatusMetric(T status) { 16 | _status = status; 17 | } 18 | 19 | @Override 20 | public T getStatus() { 21 | return _status; 22 | } 23 | 24 | @Override 25 | public String metricId() { 26 | return metricId; 27 | } 28 | 29 | @Override 30 | public Map metadata() { 31 | return _metadata; 32 | } 33 | } 34 | -------------------------------------------------------------------------------- /caravan-common/src/main/java/com/ctrip/soa/caravan/common/metric/NullStatusMetricReporter.java: -------------------------------------------------------------------------------- 1 | package com.ctrip.soa.caravan.common.metric; 2 | 3 | /** 4 | * Created by w.jian on 2016/9/12. 5 | */ 6 | public class NullStatusMetricReporter implements MetricReporter> { 7 | 8 | @SuppressWarnings("rawtypes") 9 | private static final NullStatusMetricReporter INSTANCE = new NullStatusMetricReporter(); 10 | 11 | @SuppressWarnings("unchecked") 12 | public static NullStatusMetricReporter getInstance() { 13 | return (NullStatusMetricReporter) INSTANCE; 14 | } 15 | 16 | private NullStatusMetricReporter() { 17 | } 18 | 19 | @Override 20 | public void report(StatusMetric metric) { 21 | 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /caravan-common/src/main/java/com/ctrip/soa/caravan/common/metric/StatusMetric.java: -------------------------------------------------------------------------------- 1 | package com.ctrip.soa.caravan.common.metric; 2 | 3 | /** 4 | * Created by w.jian on 2016/9/9. 5 | */ 6 | public interface StatusMetric extends Metric { 7 | 8 | T getStatus(); 9 | } 10 | -------------------------------------------------------------------------------- /caravan-common/src/main/java/com/ctrip/soa/caravan/common/metric/StatusMetricConfig.java: -------------------------------------------------------------------------------- 1 | package com.ctrip.soa.caravan.common.metric; 2 | 3 | import com.ctrip.soa.caravan.common.value.checker.NullArgumentChecker; 4 | 5 | import java.util.Map; 6 | 7 | /** 8 | * Created by w.jian on 2016/9/12. 9 | */ 10 | public class StatusMetricConfig extends MetricConfig { 11 | 12 | private StatusProvider _statusProvider; 13 | 14 | public StatusMetricConfig(StatusProvider statusProvider, Map metadata) { 15 | super(metadata); 16 | 17 | NullArgumentChecker.DEFAULT.check(statusProvider, "statusProvider"); 18 | _statusProvider = statusProvider; 19 | } 20 | 21 | public StatusProvider statusProvider() { 22 | return _statusProvider; 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /caravan-common/src/main/java/com/ctrip/soa/caravan/common/metric/StatusMetricManager.java: -------------------------------------------------------------------------------- 1 | package com.ctrip.soa.caravan.common.metric; 2 | 3 | /** 4 | * Created by w.jian on 2016/9/12. 5 | */ 6 | public interface StatusMetricManager extends MetricManager> { 7 | 8 | StatusMetric getMetric(String metricId, StatusMetricConfig metricConfig); 9 | } 10 | -------------------------------------------------------------------------------- /caravan-common/src/main/java/com/ctrip/soa/caravan/common/metric/StatusProvider.java: -------------------------------------------------------------------------------- 1 | package com.ctrip.soa.caravan.common.metric; 2 | 3 | /** 4 | * Created by w.jian on 2016/9/12. 5 | */ 6 | public interface StatusProvider { 7 | T getStatus(); 8 | } 9 | -------------------------------------------------------------------------------- /caravan-common/src/main/java/com/ctrip/soa/caravan/common/serializer/BytesSerializer.java: -------------------------------------------------------------------------------- 1 | package com.ctrip.soa.caravan.common.serializer; 2 | 3 | /** 4 | * Created by Qiang Zhao on 10/05/2016. 5 | */ 6 | public interface BytesSerializer extends Serializer { 7 | 8 | byte[] serialize(Object obj); 9 | 10 | T deserialize(byte[] is, Class clazz); 11 | 12 | } 13 | -------------------------------------------------------------------------------- /caravan-common/src/main/java/com/ctrip/soa/caravan/common/serializer/DateSerializer.java: -------------------------------------------------------------------------------- 1 | package com.ctrip.soa.caravan.common.serializer; 2 | 3 | import java.util.GregorianCalendar; 4 | 5 | /** 6 | * Created by Qiang Zhao on 10/05/2016. 7 | */ 8 | public interface DateSerializer { 9 | 10 | boolean isValid(String date); 11 | 12 | String serialize(GregorianCalendar calendar); 13 | 14 | GregorianCalendar deserialize(String date); 15 | 16 | } 17 | -------------------------------------------------------------------------------- /caravan-common/src/main/java/com/ctrip/soa/caravan/common/serializer/SerializationException.java: -------------------------------------------------------------------------------- 1 | package com.ctrip.soa.caravan.common.serializer; 2 | 3 | /** 4 | * Created by Qiang Zhao on 10/05/2016. 5 | */ 6 | public class SerializationException extends RuntimeException { 7 | 8 | private static final long serialVersionUID = 1L; 9 | 10 | public SerializationException(Exception ex) { 11 | super(ex); 12 | } 13 | 14 | public SerializationException(String message, Exception ex) { 15 | super(message, ex); 16 | } 17 | 18 | } 19 | -------------------------------------------------------------------------------- /caravan-common/src/main/java/com/ctrip/soa/caravan/common/serializer/Serializer.java: -------------------------------------------------------------------------------- 1 | package com.ctrip.soa.caravan.common.serializer; 2 | 3 | /** 4 | * Created by Qiang Zhao on 10/05/2016. 5 | */ 6 | public interface Serializer { 7 | 8 | String contentType(); 9 | 10 | } 11 | -------------------------------------------------------------------------------- /caravan-common/src/main/java/com/ctrip/soa/caravan/common/serializer/StreamSerializer.java: -------------------------------------------------------------------------------- 1 | package com.ctrip.soa.caravan.common.serializer; 2 | 3 | import java.io.InputStream; 4 | import java.io.OutputStream; 5 | 6 | /** 7 | * Created by Qiang Zhao on 10/05/2016. 8 | */ 9 | public interface StreamSerializer extends Serializer { 10 | 11 | void serialize(OutputStream os, Object obj); 12 | 13 | T deserialize(InputStream is, Class clazz); 14 | 15 | } 16 | -------------------------------------------------------------------------------- /caravan-common/src/main/java/com/ctrip/soa/caravan/common/serializer/StringSerializer.java: -------------------------------------------------------------------------------- 1 | package com.ctrip.soa.caravan.common.serializer; 2 | 3 | /** 4 | * Created by Qiang Zhao on 10/05/2016. 5 | */ 6 | public interface StringSerializer extends Serializer { 7 | 8 | String serialize(Object obj); 9 | 10 | T deserialize(String s, Class clazz); 11 | 12 | } 13 | -------------------------------------------------------------------------------- /caravan-common/src/main/java/com/ctrip/soa/caravan/common/trace/NullTraceFactory.java: -------------------------------------------------------------------------------- 1 | package com.ctrip.soa.caravan.common.trace; 2 | 3 | import java.util.Map; 4 | 5 | /** 6 | * Created by Qiang Zhao on 10/05/2016. 7 | */ 8 | public final class NullTraceFactory implements TraceFactory { 9 | 10 | public static final TraceFactory INSTANCE = new NullTraceFactory(); 11 | 12 | private NullTraceFactory() { 13 | 14 | } 15 | 16 | @Override 17 | public Trace newTrace(String identity) { 18 | return NullTrace.INSTANCE; 19 | } 20 | 21 | @Override 22 | public Trace newTrace(String identity, Map data) { 23 | return NullTrace.INSTANCE; 24 | } 25 | 26 | } 27 | -------------------------------------------------------------------------------- /caravan-common/src/main/java/com/ctrip/soa/caravan/common/trace/Trace.java: -------------------------------------------------------------------------------- 1 | package com.ctrip.soa.caravan.common.trace; 2 | 3 | import java.util.Map; 4 | 5 | /** 6 | * Created by Qiang Zhao on 10/05/2016. 7 | */ 8 | public interface Trace { 9 | 10 | void start(); 11 | 12 | void markEvent(String message); 13 | 14 | void markEvent(String message, Map data); 15 | 16 | void markSuccess(); 17 | 18 | void markSuccess(String message); 19 | 20 | void markSuccess(String message, Map data); 21 | 22 | void markFail(); 23 | 24 | void markFail(String message); 25 | 26 | void markFail(String message, Map data); 27 | 28 | void markFail(Throwable ex); 29 | 30 | void markFail(Throwable ex, Map data); 31 | 32 | void markFail(String message, Throwable ex); 33 | 34 | void markFail(String message, Throwable ex, Map data); 35 | 36 | void end(); 37 | 38 | } 39 | -------------------------------------------------------------------------------- /caravan-common/src/main/java/com/ctrip/soa/caravan/common/trace/TraceFactory.java: -------------------------------------------------------------------------------- 1 | package com.ctrip.soa.caravan.common.trace; 2 | 3 | import java.util.Map; 4 | 5 | /** 6 | * Created by Qiang Zhao on 10/05/2016. 7 | */ 8 | public interface TraceFactory { 9 | 10 | Trace newTrace(String identity); 11 | 12 | Trace newTrace(String identity, Map data); 13 | 14 | } 15 | -------------------------------------------------------------------------------- /caravan-common/src/main/java/com/ctrip/soa/caravan/common/value/ArrayValues.java: -------------------------------------------------------------------------------- 1 | package com.ctrip.soa.caravan.common.value; 2 | 3 | import java.util.Arrays; 4 | import java.util.List; 5 | 6 | /** 7 | * Created by Qiang Zhao on 10/05/2016. 8 | */ 9 | public final class ArrayValues { 10 | 11 | public static final ArrayValues DEFAULT = new ArrayValues(); 12 | 13 | private ArrayValues() { 14 | 15 | } 16 | 17 | public static boolean isNullOrEmpty(T[] array) { 18 | return array == null || array.length == 0; 19 | } 20 | 21 | public static void checkNullOrEmpty(T[] value, String valueName) { 22 | if (isNullOrEmpty(value)) 23 | throw new IllegalArgumentException("argument " + valueName + " is null or empty"); 24 | } 25 | 26 | public static List asList(T[] array) { 27 | if (array == null) 28 | return null; 29 | 30 | return Arrays.asList(array); 31 | } 32 | 33 | } 34 | -------------------------------------------------------------------------------- /caravan-common/src/main/java/com/ctrip/soa/caravan/common/value/BooleanValues.java: -------------------------------------------------------------------------------- 1 | package com.ctrip.soa.caravan.common.value; 2 | 3 | /** 4 | * Created by Qiang Zhao on 10/05/2016. 5 | */ 6 | public final class BooleanValues { 7 | 8 | public static boolean isTrue(Boolean value) { 9 | return Boolean.TRUE.equals(value); 10 | } 11 | 12 | public static boolean isFalse(Boolean value) { 13 | return Boolean.FALSE.equals(value); 14 | } 15 | 16 | private BooleanValues() { 17 | 18 | } 19 | 20 | } 21 | -------------------------------------------------------------------------------- /caravan-common/src/main/java/com/ctrip/soa/caravan/common/value/CloseableValues.java: -------------------------------------------------------------------------------- 1 | package com.ctrip.soa.caravan.common.value; 2 | 3 | import java.io.Closeable; 4 | 5 | import org.slf4j.Logger; 6 | import org.slf4j.LoggerFactory; 7 | 8 | /** 9 | * Created by Qiang Zhao on 10/05/2016. 10 | */ 11 | public final class CloseableValues { 12 | 13 | private static final Logger _logger = LoggerFactory.getLogger(CloseableValues.class); 14 | 15 | private CloseableValues() { 16 | 17 | } 18 | 19 | public static void close(Closeable closeable) { 20 | try { 21 | if (closeable == null) 22 | return; 23 | 24 | closeable.close(); 25 | } catch (Throwable ex) { 26 | _logger.warn("Close closeable object failed", ex); 27 | } 28 | } 29 | 30 | } 31 | -------------------------------------------------------------------------------- /caravan-common/src/main/java/com/ctrip/soa/caravan/common/value/CollectionValues.java: -------------------------------------------------------------------------------- 1 | package com.ctrip.soa.caravan.common.value; 2 | 3 | import java.util.Collection; 4 | 5 | /** 6 | * Created by Qiang Zhao on 10/05/2016. 7 | */ 8 | public final class CollectionValues { 9 | 10 | public static boolean isNullOrEmpty(Collection value) { 11 | return value == null || value.isEmpty(); 12 | } 13 | 14 | private CollectionValues() { 15 | 16 | } 17 | 18 | } 19 | -------------------------------------------------------------------------------- /caravan-common/src/main/java/com/ctrip/soa/caravan/common/value/DefaultValues.java: -------------------------------------------------------------------------------- 1 | package com.ctrip.soa.caravan.common.value; 2 | 3 | /** 4 | * Created by Qiang Zhao on 10/05/2016. 5 | */ 6 | public final class DefaultValues { 7 | 8 | private DefaultValues() { 9 | 10 | } 11 | 12 | public static boolean isDefault(Object value) { 13 | if (value == null) 14 | return true; 15 | 16 | if (value instanceof Number && ((Number)value).doubleValue() == 0.0) 17 | return true; 18 | 19 | return false; 20 | } 21 | } -------------------------------------------------------------------------------- /caravan-common/src/main/java/com/ctrip/soa/caravan/common/value/NullValues.java: -------------------------------------------------------------------------------- 1 | package com.ctrip.soa.caravan.common.value; 2 | 3 | /** 4 | * Created by Qiang Zhao on 10/05/2016. 5 | */ 6 | public final class NullValues { 7 | 8 | private NullValues() { 9 | 10 | } 11 | 12 | public static V NULL() { 13 | return null; 14 | } 15 | 16 | } 17 | -------------------------------------------------------------------------------- /caravan-common/src/main/java/com/ctrip/soa/caravan/common/value/checker/CollectionArgumentChecker.java: -------------------------------------------------------------------------------- 1 | package com.ctrip.soa.caravan.common.value.checker; 2 | 3 | import java.util.Collection; 4 | 5 | import com.ctrip.soa.caravan.common.value.CollectionValues; 6 | 7 | /** 8 | * Created by Qiang Zhao on 10/05/2016. 9 | */ 10 | public class CollectionArgumentChecker implements ValueChecker> { 11 | 12 | public static final CollectionArgumentChecker DEFAULT = new CollectionArgumentChecker(); 13 | 14 | @Override 15 | public void check(Collection value, String valueName) { 16 | if (CollectionValues.isNullOrEmpty(value)) 17 | throw new IllegalArgumentException("argument " + valueName + " is null or empty"); 18 | } 19 | 20 | } 21 | -------------------------------------------------------------------------------- /caravan-common/src/main/java/com/ctrip/soa/caravan/common/value/checker/MapArgumentChecker.java: -------------------------------------------------------------------------------- 1 | package com.ctrip.soa.caravan.common.value.checker; 2 | 3 | import java.util.Map; 4 | 5 | import com.ctrip.soa.caravan.common.value.MapValues; 6 | 7 | /** 8 | * Created by Qiang Zhao on 10/05/2016. 9 | */ 10 | public class MapArgumentChecker implements ValueChecker> { 11 | 12 | public static final MapArgumentChecker DEFAULT = new MapArgumentChecker(); 13 | 14 | @Override 15 | public void check(Map value, String valueName) { 16 | if (MapValues.isNullOrEmpty(value)) 17 | throw new IllegalArgumentException("argument " + valueName + " is null or empty"); 18 | } 19 | 20 | } 21 | -------------------------------------------------------------------------------- /caravan-common/src/main/java/com/ctrip/soa/caravan/common/value/checker/NullArgumentChecker.java: -------------------------------------------------------------------------------- 1 | package com.ctrip.soa.caravan.common.value.checker; 2 | 3 | /** 4 | * Created by Qiang Zhao on 10/05/2016. 5 | */ 6 | public class NullArgumentChecker implements ValueChecker { 7 | 8 | public static final NullArgumentChecker DEFAULT = new NullArgumentChecker(); 9 | 10 | @Override 11 | public void check(Object value, String valueName) { 12 | if (value == null) 13 | throw new IllegalArgumentException("argument " + valueName + " is null"); 14 | } 15 | 16 | } 17 | -------------------------------------------------------------------------------- /caravan-common/src/main/java/com/ctrip/soa/caravan/common/value/checker/StringArgumentChecker.java: -------------------------------------------------------------------------------- 1 | package com.ctrip.soa.caravan.common.value.checker; 2 | 3 | import com.ctrip.soa.caravan.common.value.StringValues; 4 | 5 | /** 6 | * Created by Qiang Zhao on 10/05/2016. 7 | */ 8 | public class StringArgumentChecker implements ValueChecker { 9 | 10 | public static final StringArgumentChecker DEFAULT = new StringArgumentChecker(); 11 | 12 | @Override 13 | public void check(String value, String valueName) { 14 | if (StringValues.isNullOrWhitespace(value)) 15 | throw new IllegalArgumentException("argument " + valueName + " is null or whitespace"); 16 | } 17 | 18 | } 19 | -------------------------------------------------------------------------------- /caravan-common/src/main/java/com/ctrip/soa/caravan/common/value/checker/ValueChecker.java: -------------------------------------------------------------------------------- 1 | package com.ctrip.soa.caravan.common.value.checker; 2 | 3 | /** 4 | * Created by Qiang Zhao on 10/05/2016. 5 | */ 6 | public interface ValueChecker { 7 | 8 | void check(T value, String valueName); 9 | 10 | } 11 | -------------------------------------------------------------------------------- /caravan-common/src/main/java/com/ctrip/soa/caravan/common/value/checker/ValueCheckers.java: -------------------------------------------------------------------------------- 1 | package com.ctrip.soa.caravan.common.value.checker; 2 | 3 | import java.util.Collection; 4 | import java.util.Map; 5 | 6 | import com.ctrip.soa.caravan.common.value.ArrayValues; 7 | 8 | /** 9 | * Created by fang_j on 2017/3/1. 10 | */ 11 | public class ValueCheckers { 12 | 13 | public static void notNull(Object value, String valueName) { 14 | NullArgumentChecker.DEFAULT.check(value, valueName); 15 | } 16 | 17 | public static void notNullOrWhiteSpace(String value, String valueName) { 18 | StringArgumentChecker.DEFAULT.check(value, valueName); 19 | } 20 | 21 | public static void notNullOrEmpty(Map value, String valueName) { 22 | MapArgumentChecker.DEFAULT.check(value, valueName); 23 | } 24 | 25 | public static void notNullOrEmpty(Collection value, String valueName) { 26 | CollectionArgumentChecker.DEFAULT.check(value, valueName); 27 | } 28 | 29 | public static void notNullOrEmpty(T[] value, String valueName) { 30 | if (ArrayValues.isNullOrEmpty(value)) 31 | throw new IllegalArgumentException("argument " + valueName + " is null or empty"); 32 | } 33 | 34 | } 35 | -------------------------------------------------------------------------------- /caravan-common/src/main/java/com/ctrip/soa/caravan/common/value/converter/MapValueConverter.java: -------------------------------------------------------------------------------- 1 | package com.ctrip.soa.caravan.common.value.converter; 2 | 3 | import java.util.HashMap; 4 | import java.util.Map; 5 | 6 | /** 7 | * Created by Qiang Zhao on 10/05/2016. 8 | */ 9 | public class MapValueConverter implements ValueConverter, Map> { 10 | 11 | private ValueConverter _valueConverter; 12 | 13 | public MapValueConverter(ValueConverter valueConverter) { 14 | _valueConverter = valueConverter; 15 | } 16 | 17 | @Override 18 | public Map convert(Map source) { 19 | if (source == null) 20 | return null; 21 | 22 | Map result = new HashMap<>(); 23 | for (Map.Entry item : source.entrySet()) { 24 | result.put(item.getKey(), _valueConverter.convert(item.getValue())); 25 | } 26 | 27 | return result; 28 | } 29 | 30 | } 31 | -------------------------------------------------------------------------------- /caravan-common/src/main/java/com/ctrip/soa/caravan/common/value/converter/ValueConverter.java: -------------------------------------------------------------------------------- 1 | package com.ctrip.soa.caravan.common.value.converter; 2 | 3 | /** 4 | * Created by Qiang Zhao on 10/05/2016. 5 | */ 6 | public interface ValueConverter { 7 | 8 | D convert(S source); 9 | 10 | } 11 | -------------------------------------------------------------------------------- /caravan-common/src/main/java/com/ctrip/soa/caravan/common/value/corrector/DefaultValueCorrector.java: -------------------------------------------------------------------------------- 1 | package com.ctrip.soa.caravan.common.value.corrector; 2 | 3 | import com.ctrip.soa.caravan.common.value.DefaultValues; 4 | 5 | /** 6 | * Created by Qiang Zhao on 10/05/2016. 7 | */ 8 | public class DefaultValueCorrector implements ValueCorrector { 9 | 10 | private T _defaultValue; 11 | 12 | public DefaultValueCorrector(T defaultValue) { 13 | _defaultValue = defaultValue; 14 | } 15 | 16 | @Override 17 | public T correct(T value) { 18 | if (DefaultValues.isDefault(value)) 19 | return _defaultValue; 20 | 21 | return value; 22 | } 23 | 24 | } 25 | -------------------------------------------------------------------------------- /caravan-common/src/main/java/com/ctrip/soa/caravan/common/value/corrector/MapValueCorrector.java: -------------------------------------------------------------------------------- 1 | package com.ctrip.soa.caravan.common.value.corrector; 2 | 3 | import java.util.HashMap; 4 | import java.util.Map; 5 | 6 | import com.ctrip.soa.caravan.common.value.checker.NullArgumentChecker; 7 | 8 | /** 9 | * Created by Qiang Zhao on 10/05/2016. 10 | */ 11 | public class MapValueCorrector implements ValueCorrector> { 12 | 13 | private ValueCorrector _valueCorrector; 14 | 15 | public MapValueCorrector(ValueCorrector valueCorrector) { 16 | NullArgumentChecker.DEFAULT.check(valueCorrector, "valueCorrector"); 17 | _valueCorrector = valueCorrector; 18 | } 19 | 20 | @Override 21 | public Map correct(Map value) { 22 | if (value == null) 23 | return null; 24 | 25 | Map result = new HashMap<>(); 26 | for (Map.Entry item : value.entrySet()) { 27 | result.put(item.getKey(), _valueCorrector.correct(item.getValue())); 28 | } 29 | 30 | return result; 31 | } 32 | 33 | } 34 | -------------------------------------------------------------------------------- /caravan-common/src/main/java/com/ctrip/soa/caravan/common/value/corrector/NullValueRangeCorrector.java: -------------------------------------------------------------------------------- 1 | package com.ctrip.soa.caravan.common.value.corrector; 2 | 3 | import com.ctrip.soa.caravan.common.value.DefaultValues; 4 | import com.ctrip.soa.caravan.common.value.StringValues; 5 | 6 | /** 7 | * Created by Qiang Zhao on 10/05/2016. 8 | */ 9 | public class NullValueRangeCorrector> implements ValueCorrector { 10 | 11 | private T _lowerBound; 12 | private T _upperBound; 13 | 14 | public NullValueRangeCorrector(T lowerBound, T upperBound) { 15 | _lowerBound = lowerBound; 16 | _upperBound = upperBound; 17 | } 18 | 19 | @Override 20 | public T correct(T value) { 21 | if (DefaultValues.isDefault(value)) 22 | return null; 23 | 24 | if (value instanceof String && StringValues.isNullOrWhitespace((String) value)) 25 | return null; 26 | 27 | if (value.compareTo(_lowerBound) < 0) 28 | return null; 29 | 30 | if (value.compareTo(_upperBound) > 0) 31 | return null; 32 | 33 | return value; 34 | } 35 | 36 | } 37 | -------------------------------------------------------------------------------- /caravan-common/src/main/java/com/ctrip/soa/caravan/common/value/corrector/PatternCorrector.java: -------------------------------------------------------------------------------- 1 | package com.ctrip.soa.caravan.common.value.corrector; 2 | 3 | import java.util.regex.Matcher; 4 | import java.util.regex.Pattern; 5 | 6 | import com.ctrip.soa.caravan.common.value.checker.NullArgumentChecker; 7 | import com.google.common.base.Strings; 8 | 9 | /** 10 | * Created by Qiang Zhao on 10/05/2016. 11 | */ 12 | public class PatternCorrector implements ValueCorrector { 13 | 14 | private Pattern _pattern; 15 | 16 | public PatternCorrector(Pattern pattern) { 17 | NullArgumentChecker.DEFAULT.check(pattern, "pattern"); 18 | _pattern = pattern; 19 | } 20 | 21 | @Override 22 | public String correct(String value) { 23 | if (Strings.isNullOrEmpty(value)) 24 | return null; 25 | Matcher matcher = _pattern.matcher(value); 26 | if (matcher.matches()) 27 | return value; 28 | else 29 | return null; 30 | } 31 | } -------------------------------------------------------------------------------- /caravan-common/src/main/java/com/ctrip/soa/caravan/common/value/corrector/Patterns.java: -------------------------------------------------------------------------------- 1 | package com.ctrip.soa.caravan.common.value.corrector; 2 | 3 | import java.util.regex.Pattern; 4 | 5 | /** 6 | * Created by Qiang Zhao on 10/05/2016. 7 | */ 8 | public class Patterns { 9 | 10 | private Patterns(){} 11 | 12 | public static final Pattern IP_ADDRESS = Pattern.compile("\\b((?!\\d\\d\\d)\\d+|1\\d\\d|2[0-4]\\d|25[0-5])\\.((?!\\d\\d\\d)\\d+|1\\d\\d|2[0-4]\\d|25[0-5])\\.((?!\\d\\d\\d)\\d+|1\\d\\d|2[0-4]\\d|25[0-5])\\.((?!\\d\\d\\d)\\d+|1\\d\\d|2[0-4]\\d|25[0-5])\\b"); 13 | 14 | public static final Pattern MAIL_ADDRESS = Pattern.compile("^([a-zA-Z0-9_\\-\\.]+)@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.)|(([a-zA-Z0-9\\-]+\\.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(\\]?)$"); 15 | } -------------------------------------------------------------------------------- /caravan-common/src/main/java/com/ctrip/soa/caravan/common/value/corrector/PipelineCorrector.java: -------------------------------------------------------------------------------- 1 | package com.ctrip.soa.caravan.common.value.corrector; 2 | 3 | import java.util.Arrays; 4 | import java.util.List; 5 | 6 | /** 7 | * Created by Qiang Zhao on 10/05/2016. 8 | */ 9 | public class PipelineCorrector implements ValueCorrector { 10 | 11 | private List> _valueCorrectors; 12 | 13 | @SafeVarargs 14 | public PipelineCorrector(ValueCorrector... valueCorrectors) { 15 | _valueCorrectors = Arrays.asList(valueCorrectors); 16 | } 17 | 18 | public PipelineCorrector(List> valueCorrectors) { 19 | _valueCorrectors = valueCorrectors; 20 | } 21 | 22 | @Override 23 | public T correct(T value) { 24 | for (ValueCorrector valueCorrector : _valueCorrectors) { 25 | value = valueCorrector.correct(value); 26 | } 27 | 28 | return value; 29 | } 30 | 31 | } 32 | -------------------------------------------------------------------------------- /caravan-common/src/main/java/com/ctrip/soa/caravan/common/value/corrector/RangeCorrector.java: -------------------------------------------------------------------------------- 1 | package com.ctrip.soa.caravan.common.value.corrector; 2 | 3 | /** 4 | * Created by Qiang Zhao on 10/05/2016. 5 | */ 6 | public class RangeCorrector> implements ValueCorrector { 7 | 8 | private T _lowerBound; 9 | private T _upperBound; 10 | 11 | public RangeCorrector(T lowerBound, T upperBound) { 12 | _lowerBound = lowerBound; 13 | _upperBound = upperBound; 14 | } 15 | 16 | @Override 17 | public T correct(T value) { 18 | if (value == null) 19 | return null; 20 | 21 | if (value.compareTo(_lowerBound) < 0) 22 | return _lowerBound; 23 | 24 | if (value.compareTo(_upperBound) > 0) 25 | return _upperBound; 26 | 27 | return value; 28 | } 29 | 30 | } 31 | -------------------------------------------------------------------------------- /caravan-common/src/main/java/com/ctrip/soa/caravan/common/value/corrector/ValueCorrector.java: -------------------------------------------------------------------------------- 1 | package com.ctrip.soa.caravan.common.value.corrector; 2 | 3 | /** 4 | * Created by Qiang Zhao on 10/05/2016. 5 | */ 6 | public interface ValueCorrector { 7 | 8 | T correct(T value); 9 | 10 | } 11 | -------------------------------------------------------------------------------- /caravan-common/src/main/java/com/ctrip/soa/caravan/common/value/parser/BooleanParser.java: -------------------------------------------------------------------------------- 1 | package com.ctrip.soa.caravan.common.value.parser; 2 | 3 | import com.ctrip.soa.caravan.common.value.StringValues; 4 | 5 | /** 6 | * Created by Qiang Zhao on 10/05/2016. 7 | */ 8 | public class BooleanParser implements ValueParser { 9 | 10 | public static final BooleanParser DEFAULT = new BooleanParser(); 11 | 12 | @Override 13 | public Boolean parse(String value) { 14 | if (StringValues.isNullOrWhitespace(value)) 15 | return null; 16 | 17 | return Boolean.parseBoolean(value.trim()); 18 | } 19 | 20 | } 21 | -------------------------------------------------------------------------------- /caravan-common/src/main/java/com/ctrip/soa/caravan/common/value/parser/IntegerParser.java: -------------------------------------------------------------------------------- 1 | package com.ctrip.soa.caravan.common.value.parser; 2 | 3 | import com.ctrip.soa.caravan.common.value.StringValues; 4 | 5 | /** 6 | * Created by Qiang Zhao on 10/05/2016. 7 | */ 8 | public class IntegerParser implements ValueParser { 9 | 10 | public static final IntegerParser DEFAULT = new IntegerParser(); 11 | 12 | @Override 13 | public Integer parse(String value) { 14 | if (StringValues.isNullOrWhitespace(value)) 15 | return null; 16 | 17 | return Integer.parseInt(value.trim()); 18 | } 19 | 20 | } 21 | -------------------------------------------------------------------------------- /caravan-common/src/main/java/com/ctrip/soa/caravan/common/value/parser/ListParser.java: -------------------------------------------------------------------------------- 1 | package com.ctrip.soa.caravan.common.value.parser; 2 | 3 | import java.util.ArrayList; 4 | import java.util.List; 5 | 6 | import com.ctrip.soa.caravan.common.value.StringValues; 7 | 8 | /** 9 | * Created by Qiang Zhao on 10/05/2016. 10 | */ 11 | public class ListParser implements ValueParser> { 12 | 13 | public static final ListParser DEFAULT = new ListParser(); 14 | 15 | @Override 16 | public List parse(String value) { 17 | if (StringValues.isNullOrWhitespace(value)) 18 | return null; 19 | 20 | List list = new ArrayList(); 21 | String[] array = value.trim().split(","); 22 | for (String str : array) { 23 | if (StringValues.isNullOrWhitespace(str)) 24 | continue; 25 | 26 | list.add(str.trim()); 27 | } 28 | 29 | return list.size() == 0 ? null : list; 30 | } 31 | 32 | } 33 | -------------------------------------------------------------------------------- /caravan-common/src/main/java/com/ctrip/soa/caravan/common/value/parser/LongParser.java: -------------------------------------------------------------------------------- 1 | package com.ctrip.soa.caravan.common.value.parser; 2 | 3 | import com.ctrip.soa.caravan.common.value.StringValues; 4 | 5 | /** 6 | * Created by Qiang Zhao on 10/05/2016. 7 | */ 8 | public class LongParser implements ValueParser { 9 | 10 | public static final LongParser DEFAULT = new LongParser(); 11 | 12 | @Override 13 | public Long parse(String value) { 14 | if (StringValues.isNullOrWhitespace(value)) 15 | return null; 16 | 17 | return Long.parseLong(value.trim()); 18 | } 19 | 20 | } 21 | -------------------------------------------------------------------------------- /caravan-common/src/main/java/com/ctrip/soa/caravan/common/value/parser/MapParser.java: -------------------------------------------------------------------------------- 1 | package com.ctrip.soa.caravan.common.value.parser; 2 | 3 | import java.util.HashMap; 4 | import java.util.Map; 5 | 6 | import com.ctrip.soa.caravan.common.collect.KeyValuePair; 7 | import com.ctrip.soa.caravan.common.value.StringValues; 8 | 9 | /** 10 | * Created by Qiang Zhao on 10/05/2016. 11 | */ 12 | public class MapParser implements ValueParser> { 13 | 14 | public static final MapParser DEFAULT = new MapParser(); 15 | 16 | @Override 17 | public Map parse(String value) { 18 | if (StringValues.isNullOrWhitespace(value)) 19 | return null; 20 | 21 | Map map = new HashMap(); 22 | String[] pairValues = value.trim().split(","); 23 | for (String pairValue : pairValues) { 24 | KeyValuePair pair = StringValues.toKeyValuePair(pairValue); 25 | if (pair == null) 26 | continue; 27 | 28 | map.put(pair.getKey(), pair.getValue()); 29 | } 30 | 31 | return map.size() == 0 ? null : map; 32 | } 33 | 34 | } 35 | -------------------------------------------------------------------------------- /caravan-common/src/main/java/com/ctrip/soa/caravan/common/value/parser/StringParser.java: -------------------------------------------------------------------------------- 1 | package com.ctrip.soa.caravan.common.value.parser; 2 | 3 | /** 4 | * Created by Qiang Zhao on 10/05/2016. 5 | */ 6 | public class StringParser implements ValueParser { 7 | 8 | public static final StringParser DEFAULT = new StringParser(); 9 | 10 | @Override 11 | public String parse(String value) { 12 | return value; 13 | } 14 | 15 | } 16 | -------------------------------------------------------------------------------- /caravan-common/src/main/java/com/ctrip/soa/caravan/common/value/parser/ValueParser.java: -------------------------------------------------------------------------------- 1 | package com.ctrip.soa.caravan.common.value.parser; 2 | 3 | /** 4 | * Created by Qiang Zhao on 10/05/2016. 5 | */ 6 | public interface ValueParser { 7 | 8 | T parse(String value); 9 | 10 | } 11 | -------------------------------------------------------------------------------- /caravan-common/src/test/java/com/ctrip/soa/caravan/common/value/DefaultValuesTest.java: -------------------------------------------------------------------------------- 1 | package com.ctrip.soa.caravan.common.value; 2 | 3 | import org.junit.Assert; 4 | import org.junit.Test; 5 | 6 | /** 7 | * Created by Qiang Zhao on 10/05/2016. 8 | */ 9 | public class DefaultValuesTest { 10 | 11 | @Test 12 | public void isDefaultTest() { 13 | Assert.assertTrue(DefaultValues.isDefault(0)); 14 | Assert.assertTrue(DefaultValues.isDefault(0.0)); 15 | Assert.assertTrue(DefaultValues.isDefault(null)); 16 | 17 | Assert.assertFalse(DefaultValues.isDefault(0.1)); 18 | Assert.assertFalse(DefaultValues.isDefault(1)); 19 | Assert.assertFalse(DefaultValues.isDefault(true)); 20 | Assert.assertFalse(DefaultValues.isDefault(false)); 21 | } 22 | 23 | } 24 | -------------------------------------------------------------------------------- /caravan-common/src/test/java/com/ctrip/soa/caravan/common/value/StringValuesTest.java: -------------------------------------------------------------------------------- 1 | package com.ctrip.soa.caravan.common.value; 2 | 3 | import org.junit.Assert; 4 | import org.junit.Test; 5 | 6 | /** 7 | * Created by Qiang Zhao on 10/05/2016. 8 | */ 9 | public class StringValuesTest { 10 | 11 | @Test 12 | public void toStringTest() { 13 | Object obj = null; 14 | String value = String.valueOf(obj); 15 | Assert.assertFalse(value == null); 16 | 17 | value = StringValues.toString(obj); 18 | Assert.assertTrue(value == null); 19 | } 20 | 21 | } 22 | -------------------------------------------------------------------------------- /caravan-configuration/.gitignore: -------------------------------------------------------------------------------- 1 | .project 2 | .classpath 3 | build/ 4 | .settings/ 5 | bin/ 6 | .gradle 7 | /target/ 8 | -------------------------------------------------------------------------------- /caravan-configuration/src/main/java/com/ctrip/soa/caravan/configuration/AbstractConfigurationSource.java: -------------------------------------------------------------------------------- 1 | package com.ctrip.soa.caravan.configuration; 2 | 3 | import com.ctrip.soa.caravan.common.value.checker.StringArgumentChecker; 4 | 5 | /** 6 | * Created by Qiang Zhao on 10/05/2016. 7 | */ 8 | public abstract class AbstractConfigurationSource implements ConfigurationSource { 9 | 10 | private int _priority; 11 | private String _sourceId; 12 | 13 | public AbstractConfigurationSource(int priority, String sourceId) { 14 | StringArgumentChecker.DEFAULT.check(sourceId, "sourceId"); 15 | 16 | _priority = priority; 17 | _sourceId = sourceId; 18 | } 19 | 20 | @Override 21 | public int priority() { 22 | return _priority; 23 | } 24 | 25 | @Override 26 | public String sourceId() { 27 | return _sourceId; 28 | } 29 | 30 | @Override 31 | public abstract Configuration configuration(); 32 | 33 | } 34 | -------------------------------------------------------------------------------- /caravan-configuration/src/main/java/com/ctrip/soa/caravan/configuration/Configuration.java: -------------------------------------------------------------------------------- 1 | package com.ctrip.soa.caravan.configuration; 2 | 3 | /** 4 | * Created by Qiang Zhao on 10/05/2016. 5 | */ 6 | public interface Configuration { 7 | 8 | String getPropertyValue(String key); 9 | 10 | } 11 | -------------------------------------------------------------------------------- /caravan-configuration/src/main/java/com/ctrip/soa/caravan/configuration/ConfigurationManager.java: -------------------------------------------------------------------------------- 1 | package com.ctrip.soa.caravan.configuration; 2 | 3 | import java.util.Collection; 4 | 5 | /** 6 | * Created by Qiang Zhao on 10/05/2016. 7 | */ 8 | public interface ConfigurationManager { 9 | 10 | String getPropertyValue(String key); 11 | 12 | Property getProperty(String key); 13 | 14 | Collection sources(); 15 | 16 | } 17 | -------------------------------------------------------------------------------- /caravan-configuration/src/main/java/com/ctrip/soa/caravan/configuration/ConfigurationSource.java: -------------------------------------------------------------------------------- 1 | package com.ctrip.soa.caravan.configuration; 2 | 3 | /** 4 | * Created by Qiang Zhao on 10/05/2016. 5 | */ 6 | public interface ConfigurationSource { 7 | 8 | int priority(); 9 | 10 | String sourceId(); 11 | 12 | Configuration configuration(); 13 | 14 | } 15 | -------------------------------------------------------------------------------- /caravan-configuration/src/main/java/com/ctrip/soa/caravan/configuration/DefaultProperty.java: -------------------------------------------------------------------------------- 1 | package com.ctrip.soa.caravan.configuration; 2 | 3 | import com.ctrip.soa.caravan.common.value.checker.NullArgumentChecker; 4 | 5 | /** 6 | * Created by Qiang Zhao on 10/05/2016. 7 | */ 8 | public class DefaultProperty implements Property { 9 | 10 | private ConfigurationManager _manager; 11 | private String _key; 12 | 13 | public DefaultProperty(ConfigurationManager manager, String key) { 14 | NullArgumentChecker.DEFAULT.check(manager, "manager"); 15 | NullArgumentChecker.DEFAULT.check(key, "key"); 16 | 17 | _manager = manager; 18 | _key = key; 19 | } 20 | 21 | protected ConfigurationManager manager() { 22 | return _manager; 23 | } 24 | 25 | @Override 26 | public String key() { 27 | return _key; 28 | } 29 | 30 | @Override 31 | public String value() { 32 | return manager().getPropertyValue(key()); 33 | } 34 | 35 | @Override 36 | public String toString() { 37 | return String.format("{ key: %s, value: %s }", key(), value()); 38 | } 39 | 40 | } -------------------------------------------------------------------------------- /caravan-configuration/src/main/java/com/ctrip/soa/caravan/configuration/NullProperty.java: -------------------------------------------------------------------------------- 1 | package com.ctrip.soa.caravan.configuration; 2 | 3 | /** 4 | * Created by Qiang Zhao on 10/05/2016. 5 | */ 6 | public final class NullProperty implements Property { 7 | 8 | public static final String NULL_KEY = "null_property_key"; 9 | 10 | private String _key; 11 | 12 | public static final NullProperty INSTANCE = new NullProperty(); 13 | 14 | private NullProperty() { 15 | _key = NULL_KEY; 16 | } 17 | 18 | @Override 19 | public String key() { 20 | return _key; 21 | } 22 | 23 | @Override 24 | public String value() { 25 | return null; 26 | } 27 | 28 | @Override 29 | public String toString() { 30 | return "key: null, value: null"; 31 | } 32 | 33 | } -------------------------------------------------------------------------------- /caravan-configuration/src/main/java/com/ctrip/soa/caravan/configuration/Property.java: -------------------------------------------------------------------------------- 1 | package com.ctrip.soa.caravan.configuration; 2 | 3 | /** 4 | * Created by Qiang Zhao on 10/05/2016. 5 | */ 6 | public interface Property { 7 | 8 | String key(); 9 | 10 | String value(); 11 | 12 | } 13 | -------------------------------------------------------------------------------- /caravan-configuration/src/main/java/com/ctrip/soa/caravan/configuration/cached/CachedConfigurationManager.java: -------------------------------------------------------------------------------- 1 | package com.ctrip.soa.caravan.configuration.cached; 2 | 3 | import com.ctrip.soa.caravan.configuration.ConfigurationManager; 4 | 5 | /** 6 | * Created by Qiang Zhao on 10/05/2016. 7 | */ 8 | public interface CachedConfigurationManager extends ConfigurationManager { 9 | 10 | CachedProperty getProperty(String key); 11 | 12 | } -------------------------------------------------------------------------------- /caravan-configuration/src/main/java/com/ctrip/soa/caravan/configuration/cached/CachedProperty.java: -------------------------------------------------------------------------------- 1 | package com.ctrip.soa.caravan.configuration.cached; 2 | 3 | import com.ctrip.soa.caravan.configuration.Property; 4 | 5 | /** 6 | * Created by Qiang Zhao on 10/05/2016. 7 | */ 8 | public interface CachedProperty extends Property { 9 | 10 | void refresh(); 11 | 12 | } -------------------------------------------------------------------------------- /caravan-configuration/src/main/java/com/ctrip/soa/caravan/configuration/cached/DefaultCachedConfigurationManager.java: -------------------------------------------------------------------------------- 1 | package com.ctrip.soa.caravan.configuration.cached; 2 | 3 | import com.ctrip.soa.caravan.configuration.ConfigurationManager; 4 | import com.ctrip.soa.caravan.configuration.wrapper.ConfigurationManagerWrapper; 5 | 6 | /** 7 | * Created by Qiang Zhao on 10/05/2016. 8 | */ 9 | public class DefaultCachedConfigurationManager extends ConfigurationManagerWrapper implements CachedConfigurationManager { 10 | 11 | public DefaultCachedConfigurationManager(ConfigurationManager manager) { 12 | super(manager); 13 | } 14 | 15 | @Override 16 | public CachedProperty getProperty(String key) { 17 | return new DefaultCachedProperty(super.getProperty(key)); 18 | } 19 | } -------------------------------------------------------------------------------- /caravan-configuration/src/main/java/com/ctrip/soa/caravan/configuration/cached/corrected/CachedCorrectedConfigurationManager.java: -------------------------------------------------------------------------------- 1 | package com.ctrip.soa.caravan.configuration.cached.corrected; 2 | 3 | import com.ctrip.soa.caravan.common.value.corrector.ValueCorrector; 4 | import com.ctrip.soa.caravan.configuration.cached.CachedConfigurationManager; 5 | import com.ctrip.soa.caravan.configuration.corrected.CorrectedConfigurationManager; 6 | 7 | /** 8 | * Created by Qiang Zhao on 10/05/2016. 9 | */ 10 | public interface CachedCorrectedConfigurationManager extends CachedConfigurationManager, CorrectedConfigurationManager { 11 | 12 | CachedCorrectedProperty getProperty(String key, ValueCorrector valueCorrector); 13 | 14 | } 15 | -------------------------------------------------------------------------------- /caravan-configuration/src/main/java/com/ctrip/soa/caravan/configuration/cached/corrected/CachedCorrectedProperty.java: -------------------------------------------------------------------------------- 1 | package com.ctrip.soa.caravan.configuration.cached.corrected; 2 | 3 | import com.ctrip.soa.caravan.configuration.cached.CachedProperty; 4 | import com.ctrip.soa.caravan.configuration.corrected.CorrectedProperty; 5 | 6 | /** 7 | * Created by Qiang Zhao on 10/05/2016. 8 | */ 9 | public interface CachedCorrectedProperty extends CorrectedProperty, CachedProperty { 10 | 11 | } 12 | -------------------------------------------------------------------------------- /caravan-configuration/src/main/java/com/ctrip/soa/caravan/configuration/cached/corrected/DefaultCachedCorrectedConfigurationManager.java: -------------------------------------------------------------------------------- 1 | package com.ctrip.soa.caravan.configuration.cached.corrected; 2 | 3 | import com.ctrip.soa.caravan.common.value.corrector.ValueCorrector; 4 | import com.ctrip.soa.caravan.configuration.cached.DefaultCachedConfigurationManager; 5 | import com.ctrip.soa.caravan.configuration.corrected.CorrectedConfigurationManager; 6 | import com.ctrip.soa.caravan.configuration.corrected.CorrectedProperty; 7 | 8 | /** 9 | * Created by Qiang Zhao on 10/05/2016. 10 | */ 11 | public class DefaultCachedCorrectedConfigurationManager extends DefaultCachedConfigurationManager implements CachedCorrectedConfigurationManager { 12 | 13 | public DefaultCachedCorrectedConfigurationManager(CorrectedConfigurationManager manager) { 14 | super(manager); 15 | } 16 | 17 | @Override 18 | public CorrectedConfigurationManager manager() { 19 | return (CorrectedConfigurationManager)super.manager(); 20 | } 21 | 22 | public CachedCorrectedProperty getProperty(String key, ValueCorrector valueCorrector) { 23 | CorrectedProperty property = manager().getProperty(key, valueCorrector); 24 | return new DefaultCachedCorrectedProperty(property); 25 | } 26 | 27 | } 28 | -------------------------------------------------------------------------------- /caravan-configuration/src/main/java/com/ctrip/soa/caravan/configuration/cached/corrected/DefaultCachedCorrectedProperty.java: -------------------------------------------------------------------------------- 1 | package com.ctrip.soa.caravan.configuration.cached.corrected; 2 | 3 | import com.ctrip.soa.caravan.configuration.cached.DefaultCachedProperty; 4 | import com.ctrip.soa.caravan.configuration.corrected.CorrectedProperty; 5 | 6 | /** 7 | * Created by Qiang Zhao on 10/05/2016. 8 | */ 9 | public class DefaultCachedCorrectedProperty extends DefaultCachedProperty implements CachedCorrectedProperty { 10 | 11 | public DefaultCachedCorrectedProperty(CorrectedProperty property) { 12 | super(property); 13 | } 14 | 15 | } 16 | -------------------------------------------------------------------------------- /caravan-configuration/src/main/java/com/ctrip/soa/caravan/configuration/corrected/CorrectedConfigurationManager.java: -------------------------------------------------------------------------------- 1 | package com.ctrip.soa.caravan.configuration.corrected; 2 | 3 | import com.ctrip.soa.caravan.common.value.corrector.ValueCorrector; 4 | import com.ctrip.soa.caravan.configuration.ConfigurationManager; 5 | 6 | /** 7 | * Created by Qiang Zhao on 10/05/2016. 8 | */ 9 | public interface CorrectedConfigurationManager extends ConfigurationManager { 10 | 11 | CorrectedProperty getProperty(String key, ValueCorrector valueCorrector); 12 | 13 | } 14 | -------------------------------------------------------------------------------- /caravan-configuration/src/main/java/com/ctrip/soa/caravan/configuration/corrected/CorrectedProperty.java: -------------------------------------------------------------------------------- 1 | package com.ctrip.soa.caravan.configuration.corrected; 2 | 3 | import com.ctrip.soa.caravan.configuration.Property; 4 | 5 | /** 6 | * Created by Qiang Zhao on 10/05/2016. 7 | */ 8 | public interface CorrectedProperty extends Property { 9 | 10 | } 11 | -------------------------------------------------------------------------------- /caravan-configuration/src/main/java/com/ctrip/soa/caravan/configuration/corrected/DefaultCorrectedConfigurationManager.java: -------------------------------------------------------------------------------- 1 | package com.ctrip.soa.caravan.configuration.corrected; 2 | 3 | import com.ctrip.soa.caravan.common.value.corrector.ValueCorrector; 4 | import com.ctrip.soa.caravan.configuration.ConfigurationManager; 5 | import com.ctrip.soa.caravan.configuration.Property; 6 | import com.ctrip.soa.caravan.configuration.wrapper.ConfigurationManagerWrapper; 7 | 8 | /** 9 | * Created by Qiang Zhao on 10/05/2016. 10 | */ 11 | public class DefaultCorrectedConfigurationManager extends ConfigurationManagerWrapper implements CorrectedConfigurationManager { 12 | 13 | public DefaultCorrectedConfigurationManager(ConfigurationManager manager) { 14 | super(manager); 15 | } 16 | 17 | @Override 18 | public CorrectedProperty getProperty(String key, ValueCorrector valueCorrector) { 19 | Property property = getProperty(key); 20 | return new DefaultCorrectedProperty(property, valueCorrector); 21 | } 22 | 23 | } 24 | -------------------------------------------------------------------------------- /caravan-configuration/src/main/java/com/ctrip/soa/caravan/configuration/corrected/DefaultCorrectedProperty.java: -------------------------------------------------------------------------------- 1 | package com.ctrip.soa.caravan.configuration.corrected; 2 | 3 | import com.ctrip.soa.caravan.common.value.checker.NullArgumentChecker; 4 | import com.ctrip.soa.caravan.common.value.corrector.ValueCorrector; 5 | import com.ctrip.soa.caravan.configuration.Property; 6 | import com.ctrip.soa.caravan.configuration.wrapper.PropertyWrapper; 7 | 8 | /** 9 | * Created by Qiang Zhao on 10/05/2016. 10 | */ 11 | public class DefaultCorrectedProperty extends PropertyWrapper implements CorrectedProperty { 12 | 13 | private ValueCorrector _valueCorrector; 14 | 15 | public DefaultCorrectedProperty(Property property, ValueCorrector valueCorrector) { 16 | super(property); 17 | NullArgumentChecker.DEFAULT.check(valueCorrector, "valueCorrector"); 18 | _valueCorrector = valueCorrector; 19 | } 20 | 21 | @Override 22 | public String value() { 23 | return _valueCorrector.correct(super.value()); 24 | } 25 | 26 | } 27 | -------------------------------------------------------------------------------- /caravan-configuration/src/main/java/com/ctrip/soa/caravan/configuration/defaultvalue/DefaultValueConfigurationManager.java: -------------------------------------------------------------------------------- 1 | package com.ctrip.soa.caravan.configuration.defaultvalue; 2 | 3 | import com.ctrip.soa.caravan.configuration.ConfigurationManager; 4 | import com.ctrip.soa.caravan.configuration.Property; 5 | import com.ctrip.soa.caravan.configuration.wrapper.ConfigurationManagerWrapper; 6 | 7 | /** 8 | * Created by Qiang Zhao on 10/05/2016. 9 | */ 10 | public class DefaultValueConfigurationManager extends ConfigurationManagerWrapper { 11 | 12 | public DefaultValueConfigurationManager(ConfigurationManager manager) { 13 | super(manager); 14 | } 15 | 16 | public String getPropertyValue(String key, String defaultValue) { 17 | String value = super.getPropertyValue(key); 18 | if (value == null) 19 | return defaultValue; 20 | return value; 21 | } 22 | 23 | public Property getProperty(String key, String defaultValue) { 24 | return new DefaultValueWrapper(super.getProperty(key), defaultValue); 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /caravan-configuration/src/main/java/com/ctrip/soa/caravan/configuration/defaultvalue/DefaultValueWrapper.java: -------------------------------------------------------------------------------- 1 | package com.ctrip.soa.caravan.configuration.defaultvalue; 2 | 3 | import com.ctrip.soa.caravan.configuration.Property; 4 | import com.ctrip.soa.caravan.configuration.wrapper.PropertyWrapper; 5 | 6 | /** 7 | * Created by Qiang Zhao on 10/05/2016. 8 | */ 9 | public class DefaultValueWrapper extends PropertyWrapper { 10 | 11 | private String _defaultValue; 12 | 13 | public DefaultValueWrapper(Property property, String defaultValue) { 14 | super(property); 15 | _defaultValue = defaultValue; 16 | } 17 | 18 | @Override 19 | public String value() { 20 | String value = super.value(); 21 | if (value == null) 22 | return _defaultValue; 23 | return value; 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /caravan-configuration/src/main/java/com/ctrip/soa/caravan/configuration/dynamic/ChangeEvent.java: -------------------------------------------------------------------------------- 1 | package com.ctrip.soa.caravan.configuration.dynamic; 2 | 3 | /** 4 | * Created by Qiang Zhao on 10/05/2016. 5 | */ 6 | public interface ChangeEvent { 7 | 8 | long changedTimeInMs(); 9 | 10 | } 11 | -------------------------------------------------------------------------------- /caravan-configuration/src/main/java/com/ctrip/soa/caravan/configuration/dynamic/ConfigurationSourceChangeEvent.java: -------------------------------------------------------------------------------- 1 | package com.ctrip.soa.caravan.configuration.dynamic; 2 | 3 | import java.util.List; 4 | 5 | import com.ctrip.soa.caravan.configuration.ConfigurationSource; 6 | 7 | /** 8 | * Created by Qiang Zhao on 10/05/2016. 9 | */ 10 | public interface ConfigurationSourceChangeEvent extends ChangeEvent { 11 | 12 | ConfigurationSource source(); 13 | 14 | List propertyChangeEvents(); 15 | 16 | } 17 | -------------------------------------------------------------------------------- /caravan-configuration/src/main/java/com/ctrip/soa/caravan/configuration/dynamic/ConfigurationSourceChangeListener.java: -------------------------------------------------------------------------------- 1 | package com.ctrip.soa.caravan.configuration.dynamic; 2 | 3 | /** 4 | * Created by Qiang Zhao on 10/05/2016. 5 | */ 6 | public interface ConfigurationSourceChangeListener { 7 | 8 | void onChange(ConfigurationSourceChangeEvent event); 9 | 10 | } 11 | -------------------------------------------------------------------------------- /caravan-configuration/src/main/java/com/ctrip/soa/caravan/configuration/dynamic/DefaultDynamicProperty.java: -------------------------------------------------------------------------------- 1 | package com.ctrip.soa.caravan.configuration.dynamic; 2 | 3 | import com.ctrip.soa.caravan.common.value.checker.NullArgumentChecker; 4 | import com.ctrip.soa.caravan.configuration.Property; 5 | import com.ctrip.soa.caravan.configuration.wrapper.PropertyWrapper; 6 | 7 | /** 8 | * Created by Qiang Zhao on 10/05/2016. 9 | */ 10 | public class DefaultDynamicProperty extends PropertyWrapper implements DynamicProperty { 11 | 12 | private DynamicConfigurationManager _manager; 13 | 14 | public DefaultDynamicProperty(DynamicConfigurationManager manager, Property property) { 15 | super(property); 16 | NullArgumentChecker.DEFAULT.check(manager, "manager"); 17 | _manager = manager; 18 | } 19 | 20 | @Override 21 | public void addChangeListener(PropertyChangeListener listener) { 22 | _manager.addPropertyChangeListener(key(), listener); 23 | } 24 | 25 | } 26 | -------------------------------------------------------------------------------- /caravan-configuration/src/main/java/com/ctrip/soa/caravan/configuration/dynamic/DefaultPropertyChangeEvent.java: -------------------------------------------------------------------------------- 1 | package com.ctrip.soa.caravan.configuration.dynamic; 2 | 3 | /** 4 | * Created by Qiang Zhao on 10/05/2016. 5 | */ 6 | public class DefaultPropertyChangeEvent implements PropertyChangeEvent { 7 | 8 | private long _changedTimeInMs; 9 | private String _key; 10 | private String _oldValue; 11 | private String _newValue; 12 | 13 | public DefaultPropertyChangeEvent(String key, String oldValue, String newValue) { 14 | this(key, oldValue, newValue, System.currentTimeMillis()); 15 | } 16 | 17 | public DefaultPropertyChangeEvent(String key, String oldValue, String newValue, long changedTimeInMs) { 18 | _key = key; 19 | _oldValue = oldValue; 20 | _newValue = newValue; 21 | _changedTimeInMs = changedTimeInMs; 22 | } 23 | 24 | @Override 25 | public long changedTimeInMs() { 26 | return _changedTimeInMs; 27 | } 28 | 29 | @Override 30 | public String key() { 31 | return _key; 32 | } 33 | 34 | @Override 35 | public String oldValue() { 36 | return _oldValue; 37 | } 38 | 39 | @Override 40 | public String newValue() { 41 | return _newValue; 42 | } 43 | 44 | } 45 | -------------------------------------------------------------------------------- /caravan-configuration/src/main/java/com/ctrip/soa/caravan/configuration/dynamic/DynamicConfigurationManager.java: -------------------------------------------------------------------------------- 1 | package com.ctrip.soa.caravan.configuration.dynamic; 2 | 3 | import com.ctrip.soa.caravan.configuration.ConfigurationManager; 4 | 5 | /** 6 | * Created by Qiang Zhao on 10/05/2016. 7 | */ 8 | public interface DynamicConfigurationManager extends ConfigurationManager { 9 | 10 | DynamicProperty getProperty(String key); 11 | 12 | void addPropertyChangeListener(PropertyChangeListener listener); 13 | 14 | void addPropertyChangeListener(String key, PropertyChangeListener listener); 15 | 16 | } 17 | -------------------------------------------------------------------------------- /caravan-configuration/src/main/java/com/ctrip/soa/caravan/configuration/dynamic/DynamicConfigurationSource.java: -------------------------------------------------------------------------------- 1 | package com.ctrip.soa.caravan.configuration.dynamic; 2 | 3 | import com.ctrip.soa.caravan.configuration.ConfigurationSource; 4 | 5 | /** 6 | * Created by Qiang Zhao on 10/05/2016. 7 | */ 8 | public interface DynamicConfigurationSource extends ConfigurationSource { 9 | 10 | void addSourceChangeListener(ConfigurationSourceChangeListener listener); 11 | 12 | } 13 | -------------------------------------------------------------------------------- /caravan-configuration/src/main/java/com/ctrip/soa/caravan/configuration/dynamic/DynamicProperty.java: -------------------------------------------------------------------------------- 1 | package com.ctrip.soa.caravan.configuration.dynamic; 2 | 3 | import com.ctrip.soa.caravan.configuration.Property; 4 | 5 | /** 6 | * Created by Qiang Zhao on 10/05/2016. 7 | */ 8 | public interface DynamicProperty extends Property { 9 | 10 | void addChangeListener(PropertyChangeListener listener); 11 | 12 | } 13 | -------------------------------------------------------------------------------- /caravan-configuration/src/main/java/com/ctrip/soa/caravan/configuration/dynamic/PropertyChangeEvent.java: -------------------------------------------------------------------------------- 1 | package com.ctrip.soa.caravan.configuration.dynamic; 2 | 3 | /** 4 | * Created by Qiang Zhao on 10/05/2016. 5 | */ 6 | public interface PropertyChangeEvent extends ChangeEvent { 7 | 8 | String key(); 9 | 10 | String oldValue(); 11 | 12 | String newValue(); 13 | 14 | } 15 | -------------------------------------------------------------------------------- /caravan-configuration/src/main/java/com/ctrip/soa/caravan/configuration/dynamic/PropertyChangeListener.java: -------------------------------------------------------------------------------- 1 | package com.ctrip.soa.caravan.configuration.dynamic; 2 | 3 | /** 4 | * Created by Qiang Zhao on 10/05/2016. 5 | */ 6 | public interface PropertyChangeListener { 7 | 8 | void onChange(PropertyChangeEvent event); 9 | 10 | } 11 | -------------------------------------------------------------------------------- /caravan-configuration/src/main/java/com/ctrip/soa/caravan/configuration/dynamic/WeakReferencePropertyChangeListener.java: -------------------------------------------------------------------------------- 1 | package com.ctrip.soa.caravan.configuration.dynamic; 2 | 3 | import java.lang.ref.WeakReference; 4 | 5 | /** 6 | * Created by Qiang Zhao on 10/05/2016. 7 | */ 8 | public abstract class WeakReferencePropertyChangeListener implements PropertyChangeListener { 9 | 10 | private WeakReference _weakReference; 11 | 12 | public WeakReferencePropertyChangeListener(T data) { 13 | _weakReference = new WeakReference<>(data); 14 | } 15 | 16 | protected T data() { 17 | return _weakReference.get(); 18 | } 19 | 20 | public boolean hasData() { 21 | return _weakReference.get() != null; 22 | } 23 | 24 | } 25 | -------------------------------------------------------------------------------- /caravan-configuration/src/main/java/com/ctrip/soa/caravan/configuration/dynamic/cached/CachedPropertyWeakReferencePropertyChangeListener.java: -------------------------------------------------------------------------------- 1 | package com.ctrip.soa.caravan.configuration.dynamic.cached; 2 | 3 | import com.ctrip.soa.caravan.configuration.cached.CachedProperty; 4 | import com.ctrip.soa.caravan.configuration.dynamic.PropertyChangeEvent; 5 | import com.ctrip.soa.caravan.configuration.dynamic.WeakReferencePropertyChangeListener; 6 | 7 | /** 8 | * Created by Qiang Zhao on 10/05/2016. 9 | */ 10 | public class CachedPropertyWeakReferencePropertyChangeListener extends WeakReferencePropertyChangeListener { 11 | 12 | public CachedPropertyWeakReferencePropertyChangeListener(CachedProperty data) { 13 | super(data); 14 | } 15 | 16 | @Override 17 | public void onChange(PropertyChangeEvent e) { 18 | CachedProperty cachedProperty = data(); 19 | if (cachedProperty == null) 20 | return; 21 | 22 | cachedProperty.refresh(); 23 | } 24 | 25 | } 26 | -------------------------------------------------------------------------------- /caravan-configuration/src/main/java/com/ctrip/soa/caravan/configuration/dynamic/cached/DefaultDynamicCachedConfigurationManager.java: -------------------------------------------------------------------------------- 1 | package com.ctrip.soa.caravan.configuration.dynamic.cached; 2 | 3 | import com.ctrip.soa.caravan.configuration.ConfigurationManager; 4 | import com.ctrip.soa.caravan.configuration.dynamic.DefaultDynamicConfigurationManager; 5 | 6 | /** 7 | * Created by Qiang Zhao on 10/05/2016. 8 | */ 9 | public class DefaultDynamicCachedConfigurationManager extends DefaultDynamicConfigurationManager 10 | implements DynamicCachedConfigurationManager { 11 | 12 | public DefaultDynamicCachedConfigurationManager(ConfigurationManager manager) { 13 | super(manager); 14 | } 15 | 16 | @Override 17 | public DynamicCachedProperty getProperty(String key) { 18 | return new DefaultDynamicCachedProperty(super.getProperty(key)); 19 | } 20 | 21 | } 22 | -------------------------------------------------------------------------------- /caravan-configuration/src/main/java/com/ctrip/soa/caravan/configuration/dynamic/cached/DefaultDynamicCachedProperty.java: -------------------------------------------------------------------------------- 1 | package com.ctrip.soa.caravan.configuration.dynamic.cached; 2 | 3 | import com.ctrip.soa.caravan.configuration.cached.DefaultCachedProperty; 4 | import com.ctrip.soa.caravan.configuration.dynamic.DynamicProperty; 5 | import com.ctrip.soa.caravan.configuration.dynamic.PropertyChangeListener; 6 | 7 | /** 8 | * Created by Qiang Zhao on 10/05/2016. 9 | */ 10 | public class DefaultDynamicCachedProperty extends DefaultCachedProperty implements DynamicCachedProperty { 11 | 12 | public DefaultDynamicCachedProperty(DynamicProperty property) { 13 | super(property); 14 | 15 | property().addChangeListener(new CachedPropertyWeakReferencePropertyChangeListener(this)); 16 | } 17 | 18 | @Override 19 | protected DynamicProperty property() { 20 | return (DynamicProperty) super.property(); 21 | } 22 | 23 | @Override 24 | public void addChangeListener(PropertyChangeListener listener) { 25 | property().addChangeListener(listener); 26 | } 27 | 28 | } 29 | -------------------------------------------------------------------------------- /caravan-configuration/src/main/java/com/ctrip/soa/caravan/configuration/dynamic/cached/DynamicCachedConfigurationManager.java: -------------------------------------------------------------------------------- 1 | package com.ctrip.soa.caravan.configuration.dynamic.cached; 2 | 3 | import com.ctrip.soa.caravan.configuration.cached.CachedConfigurationManager; 4 | import com.ctrip.soa.caravan.configuration.dynamic.DynamicConfigurationManager; 5 | 6 | /** 7 | * Created by Qiang Zhao on 10/05/2016. 8 | */ 9 | public interface DynamicCachedConfigurationManager extends DynamicConfigurationManager, CachedConfigurationManager { 10 | 11 | DynamicCachedProperty getProperty(String key); 12 | 13 | } 14 | -------------------------------------------------------------------------------- /caravan-configuration/src/main/java/com/ctrip/soa/caravan/configuration/dynamic/cached/DynamicCachedProperty.java: -------------------------------------------------------------------------------- 1 | package com.ctrip.soa.caravan.configuration.dynamic.cached; 2 | 3 | import com.ctrip.soa.caravan.configuration.cached.CachedProperty; 4 | import com.ctrip.soa.caravan.configuration.dynamic.DynamicProperty; 5 | 6 | /** 7 | * Created by Qiang Zhao on 10/05/2016. 8 | */ 9 | public interface DynamicCachedProperty extends CachedProperty, DynamicProperty { 10 | 11 | } 12 | -------------------------------------------------------------------------------- /caravan-configuration/src/main/java/com/ctrip/soa/caravan/configuration/dynamic/cached/corrected/DefaultDynamicCachedCorrectedProperty.java: -------------------------------------------------------------------------------- 1 | package com.ctrip.soa.caravan.configuration.dynamic.cached.corrected; 2 | 3 | import com.ctrip.soa.caravan.configuration.dynamic.cached.DefaultDynamicCachedProperty; 4 | import com.ctrip.soa.caravan.configuration.dynamic.corrected.DynamicCorrectedProperty; 5 | 6 | /** 7 | * Created by Qiang Zhao on 10/05/2016. 8 | */ 9 | public class DefaultDynamicCachedCorrectedProperty extends DefaultDynamicCachedProperty implements DynamicCachedCorrectedProperty { 10 | 11 | public DefaultDynamicCachedCorrectedProperty(DynamicCorrectedProperty property) { 12 | super(property); 13 | } 14 | 15 | } 16 | -------------------------------------------------------------------------------- /caravan-configuration/src/main/java/com/ctrip/soa/caravan/configuration/dynamic/cached/corrected/DynamicCachedCorrectedConfigurationManager.java: -------------------------------------------------------------------------------- 1 | package com.ctrip.soa.caravan.configuration.dynamic.cached.corrected; 2 | 3 | import com.ctrip.soa.caravan.common.value.corrector.ValueCorrector; 4 | import com.ctrip.soa.caravan.configuration.cached.corrected.CachedCorrectedConfigurationManager; 5 | import com.ctrip.soa.caravan.configuration.dynamic.cached.DynamicCachedConfigurationManager; 6 | 7 | /** 8 | * Created by Qiang Zhao on 10/05/2016. 9 | */ 10 | public interface DynamicCachedCorrectedConfigurationManager 11 | extends DynamicCachedConfigurationManager, CachedCorrectedConfigurationManager { 12 | 13 | DynamicCachedCorrectedProperty getProperty(String key, ValueCorrector valueCorrector); 14 | 15 | } 16 | -------------------------------------------------------------------------------- /caravan-configuration/src/main/java/com/ctrip/soa/caravan/configuration/dynamic/cached/corrected/DynamicCachedCorrectedProperty.java: -------------------------------------------------------------------------------- 1 | package com.ctrip.soa.caravan.configuration.dynamic.cached.corrected; 2 | 3 | import com.ctrip.soa.caravan.configuration.cached.corrected.CachedCorrectedProperty; 4 | import com.ctrip.soa.caravan.configuration.dynamic.cached.DynamicCachedProperty; 5 | 6 | /** 7 | * Created by Qiang Zhao on 10/05/2016. 8 | */ 9 | public interface DynamicCachedCorrectedProperty extends CachedCorrectedProperty, DynamicCachedProperty { 10 | 11 | } -------------------------------------------------------------------------------- /caravan-configuration/src/main/java/com/ctrip/soa/caravan/configuration/dynamic/corrected/DefaultDynamicCorrectedConfigurationManager.java: -------------------------------------------------------------------------------- 1 | package com.ctrip.soa.caravan.configuration.dynamic.corrected; 2 | 3 | import com.ctrip.soa.caravan.common.value.corrector.ValueCorrector; 4 | import com.ctrip.soa.caravan.configuration.corrected.CorrectedConfigurationManager; 5 | import com.ctrip.soa.caravan.configuration.dynamic.DefaultDynamicConfigurationManager; 6 | 7 | /** 8 | * Created by Qiang Zhao on 10/05/2016. 9 | */ 10 | public class DefaultDynamicCorrectedConfigurationManager extends DefaultDynamicConfigurationManager implements DynamicCorrectedConfigurationManager { 11 | 12 | public DefaultDynamicCorrectedConfigurationManager(CorrectedConfigurationManager manager) { 13 | super(manager); 14 | } 15 | 16 | @Override 17 | protected CorrectedConfigurationManager manager() { 18 | return (CorrectedConfigurationManager)super.manager(); 19 | } 20 | 21 | @Override 22 | public DynamicCorrectedProperty getProperty(String key, ValueCorrector valueCorrector) { 23 | return new DefaultDynamicCorrectedProperty(this, manager().getProperty(key, valueCorrector)); 24 | } 25 | 26 | } 27 | -------------------------------------------------------------------------------- /caravan-configuration/src/main/java/com/ctrip/soa/caravan/configuration/dynamic/corrected/DefaultDynamicCorrectedProperty.java: -------------------------------------------------------------------------------- 1 | package com.ctrip.soa.caravan.configuration.dynamic.corrected; 2 | 3 | import com.ctrip.soa.caravan.configuration.corrected.CorrectedProperty; 4 | import com.ctrip.soa.caravan.configuration.dynamic.DefaultDynamicProperty; 5 | import com.ctrip.soa.caravan.configuration.dynamic.DynamicConfigurationManager; 6 | 7 | /** 8 | * Created by Qiang Zhao on 10/05/2016. 9 | */ 10 | public class DefaultDynamicCorrectedProperty extends DefaultDynamicProperty implements DynamicCorrectedProperty { 11 | 12 | public DefaultDynamicCorrectedProperty(DynamicConfigurationManager manager, CorrectedProperty property) { 13 | super(manager, property); 14 | } 15 | 16 | } 17 | -------------------------------------------------------------------------------- /caravan-configuration/src/main/java/com/ctrip/soa/caravan/configuration/dynamic/corrected/DynamicCorrectedConfigurationManager.java: -------------------------------------------------------------------------------- 1 | package com.ctrip.soa.caravan.configuration.dynamic.corrected; 2 | 3 | import com.ctrip.soa.caravan.common.value.corrector.ValueCorrector; 4 | import com.ctrip.soa.caravan.configuration.corrected.CorrectedConfigurationManager; 5 | import com.ctrip.soa.caravan.configuration.dynamic.DynamicConfigurationManager; 6 | 7 | /** 8 | * Created by Qiang Zhao on 10/05/2016. 9 | */ 10 | public interface DynamicCorrectedConfigurationManager 11 | extends DynamicConfigurationManager, CorrectedConfigurationManager { 12 | 13 | DynamicCorrectedProperty getProperty(String key, ValueCorrector valueCorrector); 14 | 15 | } 16 | -------------------------------------------------------------------------------- /caravan-configuration/src/main/java/com/ctrip/soa/caravan/configuration/dynamic/corrected/DynamicCorrectedProperty.java: -------------------------------------------------------------------------------- 1 | package com.ctrip.soa.caravan.configuration.dynamic.corrected; 2 | 3 | import com.ctrip.soa.caravan.configuration.corrected.CorrectedProperty; 4 | import com.ctrip.soa.caravan.configuration.dynamic.DynamicProperty; 5 | 6 | /** 7 | * Created by Qiang Zhao on 10/05/2016. 8 | */ 9 | public interface DynamicCorrectedProperty extends DynamicProperty, CorrectedProperty { 10 | 11 | } 12 | -------------------------------------------------------------------------------- /caravan-configuration/src/main/java/com/ctrip/soa/caravan/configuration/source/defaultvalue/DefaultValueConfigurationSource.java: -------------------------------------------------------------------------------- 1 | package com.ctrip.soa.caravan.configuration.source.defaultvalue; 2 | 3 | import java.util.Map; 4 | 5 | import com.ctrip.soa.caravan.configuration.AbstractConfigurationSource; 6 | 7 | /** 8 | * Created by w.jian on 2016/5/17. 9 | */ 10 | public final class DefaultValueConfigurationSource extends AbstractConfigurationSource { 11 | 12 | private final DefaultValueConfiguration _defaultValueConfiguration; 13 | 14 | public DefaultValueConfigurationSource(Map keyValueMap) { 15 | super(Integer.MIN_VALUE, "DefaultValue"); 16 | _defaultValueConfiguration = new DefaultValueConfiguration(keyValueMap); 17 | } 18 | 19 | @Override 20 | public DefaultValueConfiguration configuration() { 21 | return _defaultValueConfiguration; 22 | } 23 | 24 | } 25 | -------------------------------------------------------------------------------- /caravan-configuration/src/main/java/com/ctrip/soa/caravan/configuration/source/environmentvariable/EnvironmentVariableConfiguration.java: -------------------------------------------------------------------------------- 1 | package com.ctrip.soa.caravan.configuration.source.environmentvariable; 2 | 3 | import org.slf4j.Logger; 4 | import org.slf4j.LoggerFactory; 5 | 6 | import com.ctrip.soa.caravan.configuration.Configuration; 7 | import com.google.common.base.Strings; 8 | 9 | /** 10 | * Created by Qiang Zhao on 10/05/2016. 11 | */ 12 | public class EnvironmentVariableConfiguration implements Configuration { 13 | 14 | private static final Logger _logger = LoggerFactory.getLogger(EnvironmentVariableConfiguration.class); 15 | 16 | @Override 17 | public String getPropertyValue(String key) { 18 | if (Strings.isNullOrEmpty(key)) { 19 | _logger.warn("ENV key is null or empty!"); 20 | return null; 21 | } 22 | String value = System.getProperty(key); 23 | return value; 24 | } 25 | } -------------------------------------------------------------------------------- /caravan-configuration/src/main/java/com/ctrip/soa/caravan/configuration/source/environmentvariable/EnvironmentVariableConfigurationSource.java: -------------------------------------------------------------------------------- 1 | package com.ctrip.soa.caravan.configuration.source.environmentvariable; 2 | 3 | import com.ctrip.soa.caravan.configuration.AbstractConfigurationSource; 4 | import com.ctrip.soa.caravan.configuration.Configuration; 5 | 6 | /** 7 | * Created by Qiang Zhao on 10/05/2016. 8 | */ 9 | public class EnvironmentVariableConfigurationSource extends AbstractConfigurationSource { 10 | 11 | private EnvironmentVariableConfiguration _configuration = new EnvironmentVariableConfiguration(); 12 | 13 | public EnvironmentVariableConfigurationSource(final int priority) { 14 | super(priority, "EnvironmentVariable"); 15 | } 16 | 17 | @Override 18 | public Configuration configuration() { 19 | return _configuration; 20 | } 21 | 22 | } -------------------------------------------------------------------------------- /caravan-configuration/src/main/java/com/ctrip/soa/caravan/configuration/source/memory/MemoryConfigurationSource.java: -------------------------------------------------------------------------------- 1 | package com.ctrip.soa.caravan.configuration.source.memory; 2 | 3 | import com.ctrip.soa.caravan.common.value.checker.NullArgumentChecker; 4 | import com.ctrip.soa.caravan.configuration.AbstractConfigurationSource; 5 | import com.ctrip.soa.caravan.configuration.dynamic.ConfigurationSourceChangeListener; 6 | import com.ctrip.soa.caravan.configuration.dynamic.DynamicConfigurationSource; 7 | 8 | /** 9 | * Created by w.jian on 2016/5/18. 10 | */ 11 | public class MemoryConfigurationSource extends AbstractConfigurationSource implements DynamicConfigurationSource { 12 | 13 | private final MemoryConfiguration _memoryConfiguration; 14 | 15 | public MemoryConfigurationSource(int priority, String sourceId) { 16 | super(priority, sourceId); 17 | _memoryConfiguration = new MemoryConfiguration(this); 18 | } 19 | 20 | @Override 21 | public MemoryConfiguration configuration() { 22 | return _memoryConfiguration; 23 | } 24 | 25 | @Override 26 | public void addSourceChangeListener(ConfigurationSourceChangeListener listener) { 27 | NullArgumentChecker.DEFAULT.check(listener, "listener"); 28 | _memoryConfiguration.addSourceChangeListener(listener); 29 | } 30 | } -------------------------------------------------------------------------------- /caravan-configuration/src/main/java/com/ctrip/soa/caravan/configuration/source/properties/PropertiesConfigurationSource.java: -------------------------------------------------------------------------------- 1 | package com.ctrip.soa.caravan.configuration.source.properties; 2 | 3 | import com.ctrip.soa.caravan.configuration.AbstractConfigurationSource; 4 | import com.ctrip.soa.caravan.configuration.Configuration; 5 | 6 | /** 7 | * Created by Qiang Zhao on 10/05/2016. 8 | */ 9 | public class PropertiesConfigurationSource extends AbstractConfigurationSource { 10 | 11 | private PropertiesConfiguration _configuration; 12 | 13 | public PropertiesConfigurationSource(final int priority, final String fileName) { 14 | super(priority, PropertiesConfiguration.getPropertiesFileName(fileName)); 15 | _configuration = new PropertiesConfiguration(fileName); 16 | } 17 | 18 | @Override 19 | public Configuration configuration() { 20 | return _configuration; 21 | } 22 | } -------------------------------------------------------------------------------- /caravan-configuration/src/main/java/com/ctrip/soa/caravan/configuration/typed/DefaultTypedConfigurationManager.java: -------------------------------------------------------------------------------- 1 | package com.ctrip.soa.caravan.configuration.typed; 2 | 3 | import com.ctrip.soa.caravan.common.value.parser.ValueParser; 4 | import com.ctrip.soa.caravan.configuration.ConfigurationManager; 5 | import com.ctrip.soa.caravan.configuration.wrapper.ConfigurationManagerWrapper; 6 | 7 | /** 8 | * Created by Qiang Zhao on 10/05/2016. 9 | */ 10 | public class DefaultTypedConfigurationManager extends ConfigurationManagerWrapper implements TypedConfigurationManager { 11 | 12 | public DefaultTypedConfigurationManager(ConfigurationManager manager) { 13 | super(manager); 14 | } 15 | 16 | @Override 17 | public TypedProperty getProperty(String key, ValueParser valueParser) { 18 | return new DefaultTypedProperty(getProperty(key), valueParser); 19 | } 20 | 21 | } -------------------------------------------------------------------------------- /caravan-configuration/src/main/java/com/ctrip/soa/caravan/configuration/typed/TypedConfigurationManager.java: -------------------------------------------------------------------------------- 1 | package com.ctrip.soa.caravan.configuration.typed; 2 | 3 | import com.ctrip.soa.caravan.common.value.parser.ValueParser; 4 | import com.ctrip.soa.caravan.configuration.ConfigurationManager; 5 | 6 | /** 7 | * Created by Qiang Zhao on 10/05/2016. 8 | */ 9 | public interface TypedConfigurationManager extends ConfigurationManager { 10 | 11 | TypedProperty getProperty(String key, ValueParser valueParser); 12 | 13 | } -------------------------------------------------------------------------------- /caravan-configuration/src/main/java/com/ctrip/soa/caravan/configuration/typed/TypedProperty.java: -------------------------------------------------------------------------------- 1 | package com.ctrip.soa.caravan.configuration.typed; 2 | 3 | import com.ctrip.soa.caravan.configuration.Property; 4 | 5 | /** 6 | * Created by Qiang Zhao on 10/05/2016. 7 | */ 8 | public interface TypedProperty extends Property { 9 | 10 | T typedValue(); 11 | 12 | } 13 | -------------------------------------------------------------------------------- /caravan-configuration/src/main/java/com/ctrip/soa/caravan/configuration/typed/cached/DefaultTypedCachedProperty.java: -------------------------------------------------------------------------------- 1 | package com.ctrip.soa.caravan.configuration.typed.cached; 2 | 3 | import com.ctrip.soa.caravan.common.value.parser.ValueParser; 4 | import com.ctrip.soa.caravan.configuration.cached.CachedProperty; 5 | import com.ctrip.soa.caravan.configuration.typed.DefaultTypedProperty; 6 | 7 | /** 8 | * Created by Qiang Zhao on 10/05/2016. 9 | */ 10 | public class DefaultTypedCachedProperty extends DefaultTypedProperty implements TypedCachedProperty { 11 | 12 | protected volatile T _value; 13 | 14 | public DefaultTypedCachedProperty(CachedProperty property, ValueParser valueParser) { 15 | super(property, valueParser); 16 | refresh(); 17 | } 18 | 19 | @Override 20 | protected CachedProperty property() { 21 | return (CachedProperty) super.property(); 22 | } 23 | 24 | @Override 25 | public T typedValue() { 26 | return _value; 27 | } 28 | 29 | @Override 30 | public void refresh() { 31 | property().refresh(); 32 | _value = super.typedValue(); 33 | } 34 | } -------------------------------------------------------------------------------- /caravan-configuration/src/main/java/com/ctrip/soa/caravan/configuration/typed/cached/TypedCachedConfigurationManager.java: -------------------------------------------------------------------------------- 1 | package com.ctrip.soa.caravan.configuration.typed.cached; 2 | 3 | import com.ctrip.soa.caravan.common.value.parser.ValueParser; 4 | import com.ctrip.soa.caravan.configuration.cached.CachedConfigurationManager; 5 | import com.ctrip.soa.caravan.configuration.typed.TypedConfigurationManager; 6 | 7 | /** 8 | * Created by Qiang Zhao on 10/05/2016. 9 | */ 10 | public interface TypedCachedConfigurationManager extends TypedConfigurationManager, CachedConfigurationManager { 11 | 12 | TypedCachedProperty getProperty(String key, ValueParser valueParser); 13 | 14 | } 15 | -------------------------------------------------------------------------------- /caravan-configuration/src/main/java/com/ctrip/soa/caravan/configuration/typed/cached/TypedCachedProperty.java: -------------------------------------------------------------------------------- 1 | package com.ctrip.soa.caravan.configuration.typed.cached; 2 | 3 | import com.ctrip.soa.caravan.configuration.cached.CachedProperty; 4 | import com.ctrip.soa.caravan.configuration.typed.TypedProperty; 5 | 6 | /** 7 | * Created by Qiang Zhao on 10/05/2016. 8 | */ 9 | public interface TypedCachedProperty extends TypedProperty, CachedProperty { 10 | 11 | } 12 | -------------------------------------------------------------------------------- /caravan-configuration/src/main/java/com/ctrip/soa/caravan/configuration/typed/cached/corrected/TypedCachedCorrectedConfigurationManager.java: -------------------------------------------------------------------------------- 1 | package com.ctrip.soa.caravan.configuration.typed.cached.corrected; 2 | 3 | import com.ctrip.soa.caravan.common.value.corrector.ValueCorrector; 4 | import com.ctrip.soa.caravan.common.value.parser.ValueParser; 5 | import com.ctrip.soa.caravan.configuration.typed.cached.TypedCachedConfigurationManager; 6 | import com.ctrip.soa.caravan.configuration.typed.corrected.TypedCorrectedConfigurationManager; 7 | 8 | /** 9 | * Created by Qiang Zhao on 10/05/2016. 10 | */ 11 | public interface TypedCachedCorrectedConfigurationManager 12 | extends TypedCachedConfigurationManager, TypedCorrectedConfigurationManager { 13 | 14 | TypedCachedCorrectedProperty getProperty(String key, ValueParser valueParser, ValueCorrector valueCorrector); 15 | 16 | } 17 | -------------------------------------------------------------------------------- /caravan-configuration/src/main/java/com/ctrip/soa/caravan/configuration/typed/cached/corrected/TypedCachedCorrectedProperty.java: -------------------------------------------------------------------------------- 1 | package com.ctrip.soa.caravan.configuration.typed.cached.corrected; 2 | 3 | import com.ctrip.soa.caravan.configuration.typed.cached.TypedCachedProperty; 4 | import com.ctrip.soa.caravan.configuration.typed.corrected.TypedCorrectedProperty; 5 | 6 | /** 7 | * Created by Qiang Zhao on 10/05/2016. 8 | */ 9 | public interface TypedCachedCorrectedProperty extends TypedCachedProperty, TypedCorrectedProperty { 10 | 11 | } 12 | -------------------------------------------------------------------------------- /caravan-configuration/src/main/java/com/ctrip/soa/caravan/configuration/typed/corrected/DefaultTypedCorrectedProperty.java: -------------------------------------------------------------------------------- 1 | package com.ctrip.soa.caravan.configuration.typed.corrected; 2 | 3 | import com.ctrip.soa.caravan.common.value.checker.NullArgumentChecker; 4 | import com.ctrip.soa.caravan.common.value.corrector.ValueCorrector; 5 | import com.ctrip.soa.caravan.common.value.parser.ValueParser; 6 | import com.ctrip.soa.caravan.configuration.Property; 7 | import com.ctrip.soa.caravan.configuration.typed.DefaultTypedProperty; 8 | 9 | /** 10 | * Created by Qiang Zhao on 10/05/2016. 11 | */ 12 | public class DefaultTypedCorrectedProperty extends DefaultTypedProperty implements TypedCorrectedProperty { 13 | 14 | private ValueCorrector _valueCorrector; 15 | 16 | public DefaultTypedCorrectedProperty(Property property, ValueParser valueParser, ValueCorrector valueCorrector) { 17 | super(property, valueParser); 18 | NullArgumentChecker.DEFAULT.check(valueCorrector, "valueCorrector"); 19 | _valueCorrector = valueCorrector; 20 | } 21 | 22 | @Override 23 | public T typedValue() { 24 | T value = super.typedValue(); 25 | return _valueCorrector.correct(value); 26 | } 27 | } -------------------------------------------------------------------------------- /caravan-configuration/src/main/java/com/ctrip/soa/caravan/configuration/typed/corrected/TypedCorrectedConfigurationManager.java: -------------------------------------------------------------------------------- 1 | package com.ctrip.soa.caravan.configuration.typed.corrected; 2 | 3 | import com.ctrip.soa.caravan.common.value.corrector.ValueCorrector; 4 | import com.ctrip.soa.caravan.common.value.parser.ValueParser; 5 | import com.ctrip.soa.caravan.configuration.corrected.CorrectedConfigurationManager; 6 | import com.ctrip.soa.caravan.configuration.typed.TypedConfigurationManager; 7 | 8 | /** 9 | * Created by Qiang Zhao on 10/05/2016. 10 | */ 11 | public interface TypedCorrectedConfigurationManager extends TypedConfigurationManager, CorrectedConfigurationManager { 12 | 13 | TypedCorrectedProperty getProperty(String key, ValueParser valueParser, ValueCorrector valueCorrector); 14 | 15 | } -------------------------------------------------------------------------------- /caravan-configuration/src/main/java/com/ctrip/soa/caravan/configuration/typed/corrected/TypedCorrectedProperty.java: -------------------------------------------------------------------------------- 1 | package com.ctrip.soa.caravan.configuration.typed.corrected; 2 | 3 | import com.ctrip.soa.caravan.configuration.corrected.CorrectedProperty; 4 | import com.ctrip.soa.caravan.configuration.typed.TypedProperty; 5 | 6 | /** 7 | * Created by Qiang Zhao on 10/05/2016. 8 | */ 9 | public interface TypedCorrectedProperty extends TypedProperty, CorrectedProperty { 10 | 11 | } -------------------------------------------------------------------------------- /caravan-configuration/src/main/java/com/ctrip/soa/caravan/configuration/typed/dynamic/DefaultTypedDynamicProperty.java: -------------------------------------------------------------------------------- 1 | package com.ctrip.soa.caravan.configuration.typed.dynamic; 2 | 3 | import com.ctrip.soa.caravan.common.value.parser.ValueParser; 4 | import com.ctrip.soa.caravan.configuration.dynamic.DynamicProperty; 5 | import com.ctrip.soa.caravan.configuration.dynamic.PropertyChangeListener; 6 | import com.ctrip.soa.caravan.configuration.typed.DefaultTypedProperty; 7 | 8 | /** 9 | * Created by Qiang Zhao on 10/05/2016. 10 | */ 11 | public class DefaultTypedDynamicProperty extends DefaultTypedProperty implements TypedDynamicProperty { 12 | 13 | public DefaultTypedDynamicProperty(DynamicProperty property, ValueParser valueParser) { 14 | super(property, valueParser); 15 | } 16 | 17 | @Override 18 | protected DynamicProperty property() { 19 | return (DynamicProperty) super.property(); 20 | } 21 | 22 | @Override 23 | public void addChangeListener(PropertyChangeListener listener) { 24 | property().addChangeListener(listener); 25 | } 26 | 27 | } -------------------------------------------------------------------------------- /caravan-configuration/src/main/java/com/ctrip/soa/caravan/configuration/typed/dynamic/TypedDynamicConfigurationManager.java: -------------------------------------------------------------------------------- 1 | package com.ctrip.soa.caravan.configuration.typed.dynamic; 2 | 3 | import com.ctrip.soa.caravan.common.value.parser.ValueParser; 4 | import com.ctrip.soa.caravan.configuration.dynamic.DynamicConfigurationManager; 5 | import com.ctrip.soa.caravan.configuration.typed.TypedConfigurationManager; 6 | 7 | /** 8 | * Created by Qiang Zhao on 10/05/2016. 9 | */ 10 | public interface TypedDynamicConfigurationManager extends TypedConfigurationManager, DynamicConfigurationManager { 11 | 12 | TypedDynamicProperty getProperty(String key, ValueParser valueParser); 13 | 14 | } 15 | -------------------------------------------------------------------------------- /caravan-configuration/src/main/java/com/ctrip/soa/caravan/configuration/typed/dynamic/TypedDynamicProperty.java: -------------------------------------------------------------------------------- 1 | package com.ctrip.soa.caravan.configuration.typed.dynamic; 2 | 3 | import com.ctrip.soa.caravan.configuration.dynamic.DynamicProperty; 4 | import com.ctrip.soa.caravan.configuration.typed.TypedProperty; 5 | 6 | /** 7 | * Created by Qiang Zhao on 10/05/2016. 8 | */ 9 | public interface TypedDynamicProperty extends TypedProperty, DynamicProperty { 10 | 11 | } 12 | -------------------------------------------------------------------------------- /caravan-configuration/src/main/java/com/ctrip/soa/caravan/configuration/typed/dynamic/cached/TypedDynamicCachedConfigurationManager.java: -------------------------------------------------------------------------------- 1 | package com.ctrip.soa.caravan.configuration.typed.dynamic.cached; 2 | 3 | import com.ctrip.soa.caravan.common.value.parser.ValueParser; 4 | import com.ctrip.soa.caravan.configuration.dynamic.cached.DynamicCachedConfigurationManager; 5 | import com.ctrip.soa.caravan.configuration.typed.dynamic.TypedDynamicConfigurationManager; 6 | 7 | /** 8 | * Created by Qiang Zhao on 10/05/2016. 9 | */ 10 | public interface TypedDynamicCachedConfigurationManager extends TypedDynamicConfigurationManager, DynamicCachedConfigurationManager { 11 | 12 | TypedDynamicCachedProperty getProperty(String key, ValueParser valueParser); 13 | 14 | } 15 | -------------------------------------------------------------------------------- /caravan-configuration/src/main/java/com/ctrip/soa/caravan/configuration/typed/dynamic/cached/TypedDynamicCachedProperty.java: -------------------------------------------------------------------------------- 1 | package com.ctrip.soa.caravan.configuration.typed.dynamic.cached; 2 | 3 | import com.ctrip.soa.caravan.configuration.dynamic.cached.DynamicCachedProperty; 4 | import com.ctrip.soa.caravan.configuration.typed.dynamic.TypedDynamicProperty; 5 | 6 | /** 7 | * Created by Qiang Zhao on 10/05/2016. 8 | */ 9 | public interface TypedDynamicCachedProperty extends TypedDynamicProperty, DynamicCachedProperty { 10 | 11 | } 12 | -------------------------------------------------------------------------------- /caravan-configuration/src/main/java/com/ctrip/soa/caravan/configuration/typed/dynamic/cached/corrected/TypedDynamicCachedCorrectedConfigurationManager.java: -------------------------------------------------------------------------------- 1 | package com.ctrip.soa.caravan.configuration.typed.dynamic.cached.corrected; 2 | 3 | import com.ctrip.soa.caravan.common.value.corrector.ValueCorrector; 4 | import com.ctrip.soa.caravan.common.value.parser.ValueParser; 5 | import com.ctrip.soa.caravan.configuration.dynamic.cached.corrected.DynamicCachedCorrectedConfigurationManager; 6 | import com.ctrip.soa.caravan.configuration.typed.dynamic.cached.TypedDynamicCachedConfigurationManager; 7 | 8 | /** 9 | * Created by Qiang Zhao on 10/05/2016. 10 | */ 11 | public interface TypedDynamicCachedCorrectedConfigurationManager 12 | extends TypedDynamicCachedConfigurationManager, DynamicCachedCorrectedConfigurationManager { 13 | 14 | TypedDynamicCachedCorrectedProperty getProperty(String key, ValueParser valueParser, 15 | ValueCorrector valueCorrector); 16 | 17 | } 18 | -------------------------------------------------------------------------------- /caravan-configuration/src/main/java/com/ctrip/soa/caravan/configuration/typed/dynamic/cached/corrected/TypedDynamicCachedCorrectedProperty.java: -------------------------------------------------------------------------------- 1 | package com.ctrip.soa.caravan.configuration.typed.dynamic.cached.corrected; 2 | 3 | import com.ctrip.soa.caravan.configuration.dynamic.cached.corrected.DynamicCachedCorrectedProperty; 4 | import com.ctrip.soa.caravan.configuration.typed.dynamic.cached.TypedDynamicCachedProperty; 5 | 6 | /** 7 | * Created by Qiang Zhao on 10/05/2016. 8 | */ 9 | public interface TypedDynamicCachedCorrectedProperty extends TypedDynamicCachedProperty, DynamicCachedCorrectedProperty { 10 | 11 | } 12 | -------------------------------------------------------------------------------- /caravan-configuration/src/main/java/com/ctrip/soa/caravan/configuration/typed/dynamic/corrected/DefaultTypedDynamicCorrectedProperty.java: -------------------------------------------------------------------------------- 1 | package com.ctrip.soa.caravan.configuration.typed.dynamic.corrected; 2 | 3 | import com.ctrip.soa.caravan.common.value.checker.NullArgumentChecker; 4 | import com.ctrip.soa.caravan.common.value.corrector.ValueCorrector; 5 | import com.ctrip.soa.caravan.common.value.parser.ValueParser; 6 | import com.ctrip.soa.caravan.configuration.dynamic.DynamicProperty; 7 | import com.ctrip.soa.caravan.configuration.typed.dynamic.DefaultTypedDynamicProperty; 8 | 9 | /** 10 | * Created by Qiang Zhao on 10/05/2016. 11 | */ 12 | public class DefaultTypedDynamicCorrectedProperty extends DefaultTypedDynamicProperty 13 | implements TypedDynamicCorrectedProperty { 14 | 15 | private ValueCorrector _valueCorrector; 16 | 17 | public DefaultTypedDynamicCorrectedProperty(DynamicProperty property, ValueParser valueParser, 18 | ValueCorrector valueCorrector) { 19 | super(property, valueParser); 20 | NullArgumentChecker.DEFAULT.check(valueCorrector, "valueCorrector"); 21 | _valueCorrector = valueCorrector; 22 | } 23 | 24 | @Override 25 | public T typedValue() { 26 | return _valueCorrector.correct(super.typedValue()); 27 | } 28 | 29 | } -------------------------------------------------------------------------------- /caravan-configuration/src/main/java/com/ctrip/soa/caravan/configuration/typed/dynamic/corrected/TypedDynamicCorrectedConfigurationManager.java: -------------------------------------------------------------------------------- 1 | package com.ctrip.soa.caravan.configuration.typed.dynamic.corrected; 2 | 3 | import com.ctrip.soa.caravan.common.value.corrector.ValueCorrector; 4 | import com.ctrip.soa.caravan.common.value.parser.ValueParser; 5 | import com.ctrip.soa.caravan.configuration.dynamic.corrected.DynamicCorrectedConfigurationManager; 6 | import com.ctrip.soa.caravan.configuration.typed.dynamic.TypedDynamicConfigurationManager; 7 | 8 | /** 9 | * Created by Qiang Zhao on 10/05/2016. 10 | */ 11 | public interface TypedDynamicCorrectedConfigurationManager 12 | extends TypedDynamicConfigurationManager, DynamicCorrectedConfigurationManager { 13 | 14 | TypedDynamicCorrectedProperty getProperty(String key, ValueParser valueParser, 15 | ValueCorrector valueCorrector); 16 | 17 | } 18 | -------------------------------------------------------------------------------- /caravan-configuration/src/main/java/com/ctrip/soa/caravan/configuration/typed/dynamic/corrected/TypedDynamicCorrectedProperty.java: -------------------------------------------------------------------------------- 1 | package com.ctrip.soa.caravan.configuration.typed.dynamic.corrected; 2 | 3 | import com.ctrip.soa.caravan.configuration.dynamic.corrected.DynamicCorrectedProperty; 4 | import com.ctrip.soa.caravan.configuration.typed.dynamic.TypedDynamicProperty; 5 | 6 | /** 7 | * Created by Qiang Zhao on 10/05/2016. 8 | */ 9 | public interface TypedDynamicCorrectedProperty extends TypedDynamicProperty, DynamicCorrectedProperty { 10 | 11 | } 12 | -------------------------------------------------------------------------------- /caravan-configuration/src/main/java/com/ctrip/soa/caravan/configuration/util/ConfigurationSourceComparator.java: -------------------------------------------------------------------------------- 1 | package com.ctrip.soa.caravan.configuration.util; 2 | 3 | import java.util.Comparator; 4 | 5 | import com.ctrip.soa.caravan.configuration.ConfigurationSource; 6 | 7 | /** 8 | * Created by Qiang Zhao on 10/05/2016. 9 | */ 10 | public class ConfigurationSourceComparator implements Comparator { 11 | 12 | public static final ConfigurationSourceComparator DEFAULT = new ConfigurationSourceComparator(); 13 | 14 | @Override 15 | public int compare(ConfigurationSource o1, ConfigurationSource o2) { 16 | if (o1 == o2) 17 | return 0; 18 | 19 | if (o1 == null) 20 | return 1; 21 | 22 | if (o2 == null) 23 | return -1; 24 | 25 | if (o1.priority() == o2.priority()) 26 | return 0; 27 | 28 | return o1.priority() < o2.priority() ? 1 : -1; 29 | } 30 | 31 | } 32 | -------------------------------------------------------------------------------- /caravan-configuration/src/main/java/com/ctrip/soa/caravan/configuration/util/PropertyComparator.java: -------------------------------------------------------------------------------- 1 | package com.ctrip.soa.caravan.configuration.util; 2 | 3 | import java.util.Comparator; 4 | 5 | import com.ctrip.soa.caravan.common.value.StringValues; 6 | import com.ctrip.soa.caravan.configuration.Property; 7 | 8 | /** 9 | * Created by Qiang Zhao on 10/05/2016. 10 | */ 11 | public class PropertyComparator implements Comparator { 12 | 13 | public static final PropertyComparator DEFAULT = new PropertyComparator(); 14 | 15 | @Override 16 | public int compare(Property o1, Property o2) { 17 | if (o1 == o2) 18 | return 0; 19 | 20 | if (StringValues.isNullOrWhitespace(o1.key())) 21 | return -1; 22 | 23 | if (StringValues.isNullOrWhitespace(o2.key())) 24 | return 1; 25 | 26 | return o1.key().compareTo(o2.key()); 27 | } 28 | 29 | } 30 | -------------------------------------------------------------------------------- /caravan-configuration/src/main/java/com/ctrip/soa/caravan/configuration/util/RangePropertyConfig.java: -------------------------------------------------------------------------------- 1 | package com.ctrip.soa.caravan.configuration.util; 2 | 3 | /** 4 | * Created by Qiang Zhao on 10/05/2016. 5 | */ 6 | public class RangePropertyConfig> { 7 | 8 | private T _defaultValue; 9 | private T _lowerBound; 10 | private T _upperBound; 11 | 12 | public RangePropertyConfig(T defaultValue, T lowerBound, T upperBound) { 13 | _defaultValue = defaultValue; 14 | _lowerBound = lowerBound; 15 | _upperBound = upperBound; 16 | } 17 | 18 | public T defaultValue() { 19 | return _defaultValue; 20 | } 21 | 22 | public T lowerBound() { 23 | return _lowerBound; 24 | } 25 | 26 | public T upperBound() { 27 | return _upperBound; 28 | } 29 | 30 | } 31 | -------------------------------------------------------------------------------- /caravan-configuration/src/main/java/com/ctrip/soa/caravan/configuration/wrapper/PropertyWrapper.java: -------------------------------------------------------------------------------- 1 | package com.ctrip.soa.caravan.configuration.wrapper; 2 | 3 | import com.ctrip.soa.caravan.common.value.checker.NullArgumentChecker; 4 | import com.ctrip.soa.caravan.configuration.Property; 5 | 6 | /** 7 | * Created by Qiang Zhao on 10/05/2016. 8 | */ 9 | public class PropertyWrapper implements Property { 10 | 11 | private Property _property; 12 | 13 | protected Property property() { 14 | return _property; 15 | } 16 | 17 | public PropertyWrapper(Property property) { 18 | NullArgumentChecker.DEFAULT.check(property, "property"); 19 | _property = property; 20 | } 21 | 22 | @Override 23 | public String key() { 24 | return property().key(); 25 | } 26 | 27 | @Override 28 | public String value() { 29 | return property().value(); 30 | } 31 | 32 | @Override 33 | public String toString() { 34 | return property().toString(); 35 | } 36 | 37 | } 38 | -------------------------------------------------------------------------------- /caravan-configuration/src/test/java/com/ctrip/soa/caravan/configuration/DefaultConfigurationManagerTest.java: -------------------------------------------------------------------------------- 1 | package com.ctrip.soa.caravan.configuration; 2 | 3 | import org.junit.Test; 4 | 5 | /** 6 | * Created by Qiang Zhao on 10/05/2016. 7 | */ 8 | public class DefaultConfigurationManagerTest { 9 | 10 | @Test 11 | public void testInit() { 12 | MyConfigurationSource mcs1 = new MyConfigurationSource(1); 13 | MyConfigurationSource mcs2 = new MyConfigurationSource(2); 14 | MyConfigurationSource mcs3 = new MyConfigurationSource(3); 15 | MyConfigurationSource mcs4 = new MyConfigurationSource(4); 16 | MyConfigurationSource mcs5 = new MyConfigurationSource(5); 17 | MyConfigurationSource[] testCSArray = {mcs4, mcs3, mcs5, mcs1, mcs2}; 18 | DefaultConfigurationManager manager = new DefaultConfigurationManager(testCSArray); 19 | for (ConfigurationSource cs : manager.sources()) { 20 | System.out.println("The source value: " + cs.configuration().getPropertyValue("key")); 21 | } 22 | System.out.println("The default first priority source value: " + manager.getPropertyValue("key")); 23 | } 24 | } -------------------------------------------------------------------------------- /caravan-configuration/src/test/java/com/ctrip/soa/caravan/configuration/MyConfiguration.java: -------------------------------------------------------------------------------- 1 | package com.ctrip.soa.caravan.configuration; 2 | 3 | /** 4 | * Created by Qiang Zhao on 10/05/2016. 5 | */ 6 | public class MyConfiguration implements Configuration { 7 | 8 | private String _value; 9 | 10 | public MyConfiguration(final String value) { 11 | _value = value; 12 | } 13 | 14 | @Override 15 | public String getPropertyValue(String key) { 16 | return _value; 17 | } 18 | } -------------------------------------------------------------------------------- /caravan-configuration/src/test/java/com/ctrip/soa/caravan/configuration/MyConfigurationSource.java: -------------------------------------------------------------------------------- 1 | package com.ctrip.soa.caravan.configuration; 2 | 3 | /** 4 | * Created by Qiang Zhao on 10/05/2016. 5 | */ 6 | public class MyConfigurationSource implements ConfigurationSource { 7 | 8 | private int _priority = 0; 9 | 10 | public MyConfigurationSource(final int priority) { 11 | _priority = priority; 12 | } 13 | 14 | @Override 15 | public int priority() { 16 | return _priority; 17 | } 18 | 19 | @Override 20 | public Configuration configuration() { 21 | return new MyConfiguration("my: " + _priority); 22 | } 23 | 24 | @Override 25 | public String sourceId() { 26 | return null; 27 | } 28 | } -------------------------------------------------------------------------------- /caravan-configuration/src/test/java/com/ctrip/soa/caravan/configuration/MyProperty.java: -------------------------------------------------------------------------------- 1 | package com.ctrip.soa.caravan.configuration; 2 | 3 | /** 4 | * Created by Qiang Zhao on 10/05/2016. 5 | */ 6 | public class MyProperty implements Property { 7 | 8 | String _k = null; 9 | 10 | String _v = null; 11 | 12 | public MyProperty(String k, String v) { 13 | _k = k; 14 | _v = v; 15 | } 16 | 17 | @Override 18 | public String key() { 19 | return _k; 20 | } 21 | 22 | @Override 23 | public String value() { 24 | return _v; 25 | } 26 | } -------------------------------------------------------------------------------- /caravan-configuration/src/test/java/com/ctrip/soa/caravan/configuration/cached/DefaultCachedConfigurationManagerTest.java: -------------------------------------------------------------------------------- 1 | package com.ctrip.soa.caravan.configuration.cached; 2 | 3 | import static org.junit.Assert.assertEquals; 4 | 5 | import org.junit.Test; 6 | 7 | import com.ctrip.soa.caravan.configuration.MyConfigurationSource; 8 | import com.ctrip.soa.caravan.configuration.facade.ConfigurationManagers; 9 | 10 | /** 11 | * Created by Qiang Zhao on 10/05/2016. 12 | */ 13 | public class DefaultCachedConfigurationManagerTest { 14 | 15 | @Test 16 | public void testGetPropertyString() { 17 | MyConfigurationSource mcs1 = new MyConfigurationSource(1); 18 | MyConfigurationSource mcs2 = new MyConfigurationSource(2); 19 | MyConfigurationSource[] mcsArray = {mcs1, mcs2}; 20 | DefaultCachedConfigurationManager m = (DefaultCachedConfigurationManager) ConfigurationManagers.newCachedManager(mcsArray); 21 | assertEquals(m.getPropertyValue("k1"), "my: 2"); 22 | } 23 | } -------------------------------------------------------------------------------- /caravan-configuration/src/test/java/com/ctrip/soa/caravan/configuration/cached/DefaultCachedPropertyTest.java: -------------------------------------------------------------------------------- 1 | package com.ctrip.soa.caravan.configuration.cached; 2 | 3 | import static org.junit.Assert.assertEquals; 4 | 5 | import org.junit.Test; 6 | 7 | import com.ctrip.soa.caravan.configuration.MyProperty; 8 | 9 | /** 10 | * Created by Qiang Zhao on 10/05/2016. 11 | */ 12 | public class DefaultCachedPropertyTest { 13 | 14 | @Test 15 | public void testValue() { 16 | MyProperty mp = new MyProperty("k1", "v1"); 17 | DefaultCachedProperty dcp = new DefaultCachedProperty(mp); 18 | assertEquals(dcp.value(), "v1"); 19 | } 20 | 21 | @Test 22 | public void testRefresh() { 23 | MyProperty mp = new MyProperty("k1", "v1"); 24 | DefaultCachedProperty dcp = new DefaultCachedProperty(mp); 25 | dcp.refresh(); 26 | } 27 | } -------------------------------------------------------------------------------- /caravan-configuration/src/test/java/com/ctrip/soa/caravan/configuration/source/environmentvariable/EnvironmentVariableConfigurationTest.java: -------------------------------------------------------------------------------- 1 | package com.ctrip.soa.caravan.configuration.source.environmentvariable; 2 | 3 | import static org.junit.Assert.assertEquals; 4 | import static org.junit.Assert.assertNull; 5 | 6 | import org.junit.Test; 7 | 8 | /** 9 | * Created by Qiang Zhao on 10/05/2016. 10 | */ 11 | public class EnvironmentVariableConfigurationTest { 12 | 13 | @Test 14 | public void testGetPropertyValue() { 15 | EnvironmentVariableConfiguration configuration = new EnvironmentVariableConfiguration(); 16 | assertNull(configuration.getPropertyValue(null)); 17 | assertNull(configuration.getPropertyValue("")); 18 | assertNull(configuration.getPropertyValue("test")); 19 | assertEquals("HotSpot 64-Bit Tiered Compilers", configuration.getPropertyValue("sun.management.compiler")); 20 | } 21 | } -------------------------------------------------------------------------------- /caravan-etcd/.gitignore: -------------------------------------------------------------------------------- 1 | /target/ 2 | -------------------------------------------------------------------------------- /caravan-etcd/src/main/java/com/ctrip/soa/caravan/etcd/v2/EtcdClientConfig.java: -------------------------------------------------------------------------------- 1 | package com.ctrip.soa.caravan.etcd.v2; 2 | 3 | import com.ctrip.soa.caravan.common.value.StringValues; 4 | import com.ctrip.soa.caravan.common.value.checker.NullArgumentChecker; 5 | import com.ctrip.soa.caravan.common.value.checker.StringArgumentChecker; 6 | import com.ctrip.soa.caravan.util.net.apache.DynamicPoolingHttpClientProvider; 7 | 8 | /** 9 | * Created by Qiang Zhao on 10/05/2016. 10 | */ 11 | public class EtcdClientConfig { 12 | 13 | private String _etcdServiceUrl; 14 | private DynamicPoolingHttpClientProvider _clientProvider; 15 | 16 | public EtcdClientConfig(String etcdServiceUrl, DynamicPoolingHttpClientProvider clientProvider) { 17 | StringArgumentChecker.DEFAULT.check(etcdServiceUrl, "etcdServiceUrl"); 18 | NullArgumentChecker.DEFAULT.check(clientProvider, "clientProvider"); 19 | _etcdServiceUrl = StringValues.trim(etcdServiceUrl); 20 | _clientProvider = clientProvider; 21 | } 22 | 23 | public String etcdServiceUrl() { 24 | return _etcdServiceUrl; 25 | } 26 | 27 | public DynamicPoolingHttpClientProvider clientProvider() { 28 | return _clientProvider; 29 | } 30 | 31 | } 32 | -------------------------------------------------------------------------------- /caravan-etcd/src/main/java/com/ctrip/soa/caravan/etcd/v2/EtcdClientException.java: -------------------------------------------------------------------------------- 1 | package com.ctrip.soa.caravan.etcd.v2; 2 | 3 | import com.ctrip.soa.caravan.common.value.checker.NullArgumentChecker; 4 | 5 | /** 6 | * Created by Qiang Zhao on 10/05/2016. 7 | */ 8 | public class EtcdClientException extends RuntimeException { 9 | 10 | private static final long serialVersionUID = 1L; 11 | 12 | private EtcdResult _result; 13 | 14 | public EtcdClientException(EtcdResult result) { 15 | super(toErrorMessage(result)); 16 | _result = result; 17 | } 18 | 19 | private static String toErrorMessage(EtcdResult result) { 20 | NullArgumentChecker.DEFAULT.check(result, "result"); 21 | return "Request failed. Details: \n" + result.toString(); 22 | } 23 | 24 | public EtcdResult result() { 25 | return _result; 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /caravan-hystrix/.gitignore: -------------------------------------------------------------------------------- 1 | /target/ 2 | -------------------------------------------------------------------------------- /caravan-hystrix/src/main/java/com/ctrip/soa/caravan/hystrix/ExecutionCommand.java: -------------------------------------------------------------------------------- 1 | package com.ctrip.soa.caravan.hystrix; 2 | 3 | import com.ctrip.soa.caravan.hystrix.circuitbreaker.CircuitBreaker; 4 | import com.ctrip.soa.caravan.hystrix.config.CommandConfig; 5 | import com.ctrip.soa.caravan.hystrix.isolator.Isolator; 6 | import com.ctrip.soa.caravan.hystrix.metrics.ExecutionMetrics; 7 | 8 | /** 9 | * Created by Qiang Zhao on 10/05/2016. 10 | */ 11 | public interface ExecutionCommand { 12 | 13 | String managerId(); 14 | 15 | String groupId(); 16 | 17 | String commandId(); 18 | 19 | String commandKey(); 20 | 21 | CommandConfig config(); 22 | 23 | ExecutionMetrics metrics(); 24 | 25 | CircuitBreaker circuitBreaker(); 26 | 27 | Isolator isolator(); 28 | 29 | ExecutionContext newExecutionContext(); 30 | 31 | } 32 | -------------------------------------------------------------------------------- /caravan-hystrix/src/main/java/com/ctrip/soa/caravan/hystrix/ExecutionCommandManager.java: -------------------------------------------------------------------------------- 1 | package com.ctrip.soa.caravan.hystrix; 2 | 3 | import java.util.Collection; 4 | 5 | /** 6 | * Created by Qiang Zhao on 10/05/2016. 7 | */ 8 | public interface ExecutionCommandManager { 9 | 10 | String managerId(); 11 | 12 | ExecutionCommand getCommand(String commandId); 13 | 14 | ExecutionCommand getCommand(String commandId, String groupId); 15 | 16 | Collection commands(); 17 | 18 | void reset(); 19 | 20 | } 21 | -------------------------------------------------------------------------------- /caravan-hystrix/src/main/java/com/ctrip/soa/caravan/hystrix/ExecutionContext.java: -------------------------------------------------------------------------------- 1 | package com.ctrip.soa.caravan.hystrix; 2 | 3 | /** 4 | * Created by Qiang Zhao on 10/05/2016. 5 | */ 6 | public interface ExecutionContext { 7 | 8 | void startExecution(); 9 | 10 | boolean tryStartExecution(); 11 | 12 | void markSuccess(); 13 | 14 | void markFail(); 15 | 16 | void markValidationFail(); 17 | 18 | void endExecution(); 19 | 20 | ExecutionEvent executionEvent(); 21 | 22 | } 23 | -------------------------------------------------------------------------------- /caravan-hystrix/src/main/java/com/ctrip/soa/caravan/hystrix/ExecutionEvent.java: -------------------------------------------------------------------------------- 1 | package com.ctrip.soa.caravan.hystrix; 2 | 3 | public enum ExecutionEvent { 4 | 5 | SUCCESS, VALIDATION_FAIL, FAILED, TIMEOUT, SHORT_CIRCUITED, REJECTED 6 | 7 | } 8 | -------------------------------------------------------------------------------- /caravan-hystrix/src/main/java/com/ctrip/soa/caravan/hystrix/ValidationFailChecker.java: -------------------------------------------------------------------------------- 1 | package com.ctrip.soa.caravan.hystrix; 2 | 3 | /** 4 | * Created by Qiang Zhao on 10/05/2016. 5 | */ 6 | public interface ValidationFailChecker { 7 | 8 | boolean isValidationFail(Throwable ex); 9 | 10 | } 11 | -------------------------------------------------------------------------------- /caravan-hystrix/src/main/java/com/ctrip/soa/caravan/hystrix/circuitbreaker/CircuitBreaker.java: -------------------------------------------------------------------------------- 1 | package com.ctrip.soa.caravan.hystrix.circuitbreaker; 2 | 3 | /** 4 | * Created by Qiang Zhao on 10/05/2016. 5 | */ 6 | public interface CircuitBreaker { 7 | 8 | boolean allowExecution(); 9 | 10 | void markSuccess(); 11 | 12 | boolean isOpen(); 13 | 14 | } 15 | -------------------------------------------------------------------------------- /caravan-hystrix/src/main/java/com/ctrip/soa/caravan/hystrix/config/CircuitBreakerConfig.java: -------------------------------------------------------------------------------- 1 | package com.ctrip.soa.caravan.hystrix.config; 2 | 3 | /** 4 | * Created by Qiang Zhao on 10/05/2016. 5 | */ 6 | public interface CircuitBreakerConfig { 7 | 8 | String ENABLED_PROPERTY_KEY = "execution.circuit-breaker.enabled"; 9 | String FORCE_OPEN_PROPERTY_KEY = "execution.circuit-breaker.force-open"; 10 | String FORCE_CLOSED_PROPERTY_KEY = "execution.circuit-breaker.force-closed"; 11 | String EXECUTION_TIMEOUT_PROPERTY_KEY = "execution.circuit-breaker.execution-timeout"; 12 | String EXECUTION_COUNT_THRESHOLD_PROPERTY_KEY = "execution.circuit-breaker.execution-count-threshold"; 13 | String ERROR_PERCENTAGE_THRESHOLD_PROPERTY_KEY = "execution.circuit-breaker.error-percentage-threshold"; 14 | String RETRY_INTERVAL_PROPERTY_KEY = "execution.circuit-breaker.retry-interval"; 15 | 16 | boolean enabled(); 17 | 18 | boolean forceOpen(); 19 | 20 | boolean forceClosed(); 21 | 22 | long executionTimeout(); 23 | 24 | long executionCountThreshold(); 25 | 26 | int errorPercentageThreshold(); 27 | 28 | long retryInterval(); 29 | 30 | } 31 | -------------------------------------------------------------------------------- /caravan-hystrix/src/main/java/com/ctrip/soa/caravan/hystrix/config/CommandConfig.java: -------------------------------------------------------------------------------- 1 | package com.ctrip.soa.caravan.hystrix.config; 2 | 3 | /** 4 | * Created by Qiang Zhao on 10/05/2016. 5 | */ 6 | public interface CommandConfig { 7 | 8 | MetricsConfig metricsConfig(); 9 | 10 | CircuitBreakerConfig circuitBreakerConfig(); 11 | 12 | IsolatorConfig isolatorConfig(); 13 | 14 | } 15 | -------------------------------------------------------------------------------- /caravan-hystrix/src/main/java/com/ctrip/soa/caravan/hystrix/config/IsolatorConfig.java: -------------------------------------------------------------------------------- 1 | package com.ctrip.soa.caravan.hystrix.config; 2 | 3 | /** 4 | * Created by Qiang Zhao on 10/05/2016. 5 | */ 6 | public interface IsolatorConfig { 7 | 8 | String MAX_CONCURRENT_COUNT_PROPERTY_KEY = "execution.isolator.max-concurrent-count"; 9 | 10 | long maxConcurrentCount(); 11 | 12 | } 13 | -------------------------------------------------------------------------------- /caravan-hystrix/src/main/java/com/ctrip/soa/caravan/hystrix/config/MetricsConfig.java: -------------------------------------------------------------------------------- 1 | package com.ctrip.soa.caravan.hystrix.config; 2 | 3 | import com.ctrip.soa.caravan.common.concurrent.collect.circularbuffer.timebucket.PercentileBufferConfig; 4 | import com.ctrip.soa.caravan.common.concurrent.collect.circularbuffer.timebucket.TimeBufferConfig; 5 | 6 | /** 7 | * Created by Qiang Zhao on 10/05/2016. 8 | */ 9 | public interface MetricsConfig { 10 | 11 | String HEALTH_SNAPSHOT_INTERVAL_PROPERTY_KEY = "execution.metrics.health-snapshot-interval"; 12 | 13 | TimeBufferConfig eventCounterConfig(); 14 | 15 | long healthSnapshotInterval(); 16 | 17 | PercentileBufferConfig executionLatencyConfig(); 18 | 19 | } 20 | -------------------------------------------------------------------------------- /caravan-hystrix/src/main/java/com/ctrip/soa/caravan/hystrix/exception/IsolationException.java: -------------------------------------------------------------------------------- 1 | package com.ctrip.soa.caravan.hystrix.exception; 2 | 3 | /** 4 | * Created by Qiang Zhao on 10/05/2016. 5 | */ 6 | public class IsolationException extends RuntimeException { 7 | 8 | private static final long serialVersionUID = 1L; 9 | 10 | public IsolationException() { 11 | 12 | } 13 | 14 | public IsolationException(String message) { 15 | super(message); 16 | } 17 | 18 | public IsolationException(String message, Exception cause) { 19 | super(message, cause); 20 | } 21 | 22 | } 23 | -------------------------------------------------------------------------------- /caravan-hystrix/src/main/java/com/ctrip/soa/caravan/hystrix/exception/ShortCircuitException.java: -------------------------------------------------------------------------------- 1 | package com.ctrip.soa.caravan.hystrix.exception; 2 | 3 | /** 4 | * Created by Qiang Zhao on 10/05/2016. 5 | */ 6 | public class ShortCircuitException extends RuntimeException { 7 | 8 | private static final long serialVersionUID = 1L; 9 | 10 | public ShortCircuitException() { 11 | 12 | } 13 | 14 | public ShortCircuitException(String message) { 15 | super(message); 16 | } 17 | 18 | public ShortCircuitException(String message, Exception cause) { 19 | super(message, cause); 20 | } 21 | 22 | } 23 | -------------------------------------------------------------------------------- /caravan-hystrix/src/main/java/com/ctrip/soa/caravan/hystrix/isolator/DefaultIsolator.java: -------------------------------------------------------------------------------- 1 | package com.ctrip.soa.caravan.hystrix.isolator; 2 | 3 | import java.util.concurrent.atomic.AtomicInteger; 4 | 5 | import com.ctrip.soa.caravan.common.value.checker.NullArgumentChecker; 6 | import com.ctrip.soa.caravan.hystrix.ExecutionCommand; 7 | 8 | /** 9 | * Created by Qiang Zhao on 10/05/2016. 10 | */ 11 | public class DefaultIsolator implements Isolator { 12 | 13 | private ExecutionCommand _command; 14 | private AtomicInteger _concurrentCount = new AtomicInteger(); 15 | 16 | public DefaultIsolator(ExecutionCommand command) { 17 | NullArgumentChecker.DEFAULT.check(command, "command"); 18 | _command = command; 19 | } 20 | 21 | @Override 22 | public boolean allowExecution() { 23 | int concurrentCount = _concurrentCount.incrementAndGet(); 24 | if (concurrentCount <= _command.config().isolatorConfig().maxConcurrentCount()) 25 | return true; 26 | 27 | markComplete(); 28 | return false; 29 | } 30 | 31 | @Override 32 | public void markComplete() { 33 | _concurrentCount.decrementAndGet(); 34 | } 35 | 36 | @Override 37 | public long concurrentCount() { 38 | return _concurrentCount.get(); 39 | } 40 | 41 | } 42 | -------------------------------------------------------------------------------- /caravan-hystrix/src/main/java/com/ctrip/soa/caravan/hystrix/isolator/Isolator.java: -------------------------------------------------------------------------------- 1 | package com.ctrip.soa.caravan.hystrix.isolator; 2 | 3 | /** 4 | * Created by Qiang Zhao on 10/05/2016. 5 | */ 6 | public interface Isolator { 7 | 8 | boolean allowExecution(); 9 | 10 | void markComplete(); 11 | 12 | long concurrentCount(); 13 | 14 | } 15 | -------------------------------------------------------------------------------- /caravan-hystrix/src/main/java/com/ctrip/soa/caravan/hystrix/metrics/ExecutionMetrics.java: -------------------------------------------------------------------------------- 1 | package com.ctrip.soa.caravan.hystrix.metrics; 2 | 3 | import com.ctrip.soa.caravan.common.collect.AuditData; 4 | import com.ctrip.soa.caravan.hystrix.ExecutionEvent; 5 | 6 | /** 7 | * Created by Qiang Zhao on 10/05/2016. 8 | */ 9 | public interface ExecutionMetrics { 10 | 11 | void markEvent(ExecutionEvent event); 12 | 13 | long getEventCount(ExecutionEvent event); 14 | 15 | HealthSnapshot getHealthSnapshot(); 16 | 17 | void markExecutionLatency(long latency); 18 | 19 | long getLatencyPercentile(double pencent); 20 | 21 | AuditData getLatencyAuditData(); 22 | 23 | long getLatencyCountInRange(long low, long high); 24 | 25 | void reset(); 26 | 27 | } 28 | -------------------------------------------------------------------------------- /caravan-hystrix/src/main/java/com/ctrip/soa/caravan/hystrix/metrics/HealthSnapshot.java: -------------------------------------------------------------------------------- 1 | package com.ctrip.soa.caravan.hystrix.metrics; 2 | 3 | /** 4 | * Created by Qiang Zhao on 10/05/2016. 5 | */ 6 | public interface HealthSnapshot { 7 | 8 | long totalCount(); 9 | 10 | int errorPercentage(); 11 | 12 | } 13 | -------------------------------------------------------------------------------- /caravan-protobuf/.gitignore: -------------------------------------------------------------------------------- 1 | .project 2 | .classpath 3 | build/ 4 | .settings/ 5 | bin/ 6 | .gradle 7 | /target/ 8 | -------------------------------------------------------------------------------- /caravan-protobuf/src/main/java/com/ctrip/soa/caravan/protobuf/v2/ProtobufConfig.java: -------------------------------------------------------------------------------- 1 | package com.ctrip.soa.caravan.protobuf.v2; 2 | 3 | public class ProtobufConfig { 4 | 5 | private EnumMode enumMode; 6 | 7 | public EnumMode getEnumMode() { 8 | return enumMode; 9 | } 10 | 11 | public void setEnumMode(EnumMode enumMode) { 12 | this.enumMode = enumMode; 13 | } 14 | 15 | public enum EnumMode { 16 | ByOrdinal, ByValue 17 | } 18 | 19 | } 20 | -------------------------------------------------------------------------------- /caravan-protobuf/src/main/java/com/ctrip/soa/caravan/protobuf/v2/customization/CustomProtobufFactory.java: -------------------------------------------------------------------------------- 1 | package com.ctrip.soa.caravan.protobuf.v2.customization; 2 | 3 | import com.fasterxml.jackson.core.io.IOContext; 4 | import com.fasterxml.jackson.dataformat.protobuf.ProtobufFactory; 5 | import com.fasterxml.jackson.dataformat.protobuf.ProtobufParser; 6 | import java.io.IOException; 7 | import java.io.InputStream; 8 | 9 | /** 10 | * Created by marsqing on 22/03/2017. 11 | */ 12 | public class CustomProtobufFactory extends ProtobufFactory { 13 | 14 | private static final long serialVersionUID = 1L; 15 | 16 | @Override 17 | protected ProtobufParser _createParser(InputStream in, IOContext ctxt) throws IOException { 18 | byte[] buf = ctxt.allocReadIOBuffer(); 19 | return new CustomProtobufParser(ctxt, _parserFeatures, 20 | _objectCodec, in, buf, 0, 0, true); 21 | } 22 | 23 | @Override 24 | protected ProtobufParser _createParser(byte[] data, int offset, int len, IOContext ctxt) throws IOException { 25 | return new CustomProtobufParser(ctxt, _parserFeatures, 26 | _objectCodec, null, data, offset, len, false); 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /caravan-protobuf/src/main/java/com/ctrip/soa/caravan/protobuf/v2/customization/TypeCustomizationFactory.java: -------------------------------------------------------------------------------- 1 | package com.ctrip.soa.caravan.protobuf.v2.customization; 2 | 3 | import com.fasterxml.jackson.databind.JsonDeserializer; 4 | import com.fasterxml.jackson.databind.JsonSerializer; 5 | import com.fasterxml.jackson.dataformat.protobuf.protoparser.protoparser.DataType; 6 | import com.fasterxml.jackson.dataformat.protobuf.protoparser.protoparser.MessageElement; 7 | 8 | /** 9 | * Created by marsqing on 17/03/2017. 10 | */ 11 | public interface TypeCustomizationFactory { 12 | 13 | Class[] getTargetClasses(); 14 | 15 | DataType getTargetProtobufDataType(); 16 | 17 | MessageElement.Builder getMessageElementBuilder(); 18 | 19 | JsonSerializer createSerializer(); 20 | 21 | JsonDeserializer createDeserializer(); 22 | 23 | } 24 | -------------------------------------------------------------------------------- /caravan-protobuf/src/main/java/com/ctrip/soa/caravan/protobuf/v2/customization/array/ArrayProvider.java: -------------------------------------------------------------------------------- 1 | package com.ctrip.soa.caravan.protobuf.v2.customization.array; 2 | 3 | import com.ctrip.soa.caravan.protobuf.v2.customization.TypeCustomizationFactory; 4 | 5 | /** 6 | * Created by marsqing on 20/04/2017. 7 | */ 8 | public interface ArrayProvider { 9 | 10 | @SuppressWarnings("rawtypes") 11 | TypeCustomizationFactory factoryForArrayOf(Class elementClass); 12 | 13 | } 14 | -------------------------------------------------------------------------------- /caravan-protobuf/src/main/java/com/ctrip/soa/caravan/protobuf/v2/customization/bigdecimal/DotNetDecimalProtobuf.java: -------------------------------------------------------------------------------- 1 | package com.ctrip.soa.caravan.protobuf.v2.customization.bigdecimal; 2 | 3 | import com.fasterxml.jackson.annotation.JsonPropertyOrder; 4 | 5 | /** 6 | * Created by marsqing on 21/03/2017. 7 | */ 8 | @JsonPropertyOrder({"low", "high", "signScale"}) 9 | public class DotNetDecimalProtobuf { 10 | 11 | private long low; 12 | private int high; 13 | private int signScale; 14 | 15 | public DotNetDecimalProtobuf() { 16 | } 17 | 18 | public DotNetDecimalProtobuf(long low, int high, int signScale) { 19 | this.low = low; 20 | this.high = high; 21 | this.signScale = signScale; 22 | } 23 | 24 | public long getLow() { 25 | return low; 26 | } 27 | 28 | public void setLow(long low) { 29 | this.low = low; 30 | } 31 | 32 | public int getHigh() { 33 | return high; 34 | } 35 | 36 | public void setHigh(int high) { 37 | this.high = high; 38 | } 39 | 40 | public int getSignScale() { 41 | return signScale; 42 | } 43 | 44 | public void setSignScale(int signScale) { 45 | this.signScale = signScale; 46 | } 47 | } 48 | -------------------------------------------------------------------------------- /caravan-protobuf/src/main/java/com/ctrip/soa/caravan/protobuf/v2/customization/map/ClassPair.java: -------------------------------------------------------------------------------- 1 | package com.ctrip.soa.caravan.protobuf.v2.customization.map; 2 | 3 | public class ClassPair { 4 | 5 | Class keyClass; 6 | Class valueClass; 7 | 8 | public ClassPair(Class keyClass, Class valueClass) { 9 | this.keyClass = keyClass; 10 | this.valueClass = valueClass; 11 | } 12 | 13 | @Override 14 | public boolean equals(Object o) { 15 | if (this == o) { 16 | return true; 17 | } 18 | if (o == null || getClass() != o.getClass()) { 19 | return false; 20 | } 21 | 22 | ClassPair pair = (ClassPair) o; 23 | 24 | if (keyClass != null ? !keyClass.equals(pair.keyClass) : pair.keyClass != null) { 25 | return false; 26 | } 27 | return valueClass != null ? valueClass.equals(pair.valueClass) : pair.valueClass == null; 28 | } 29 | 30 | @Override 31 | public int hashCode() { 32 | int result = keyClass != null ? keyClass.hashCode() : 0; 33 | result = 31 * result + (valueClass != null ? valueClass.hashCode() : 0); 34 | return result; 35 | } 36 | } -------------------------------------------------------------------------------- /caravan-protobuf/src/main/java/com/ctrip/soa/caravan/protobuf/v2/customization/map/KVPair.java: -------------------------------------------------------------------------------- 1 | package com.ctrip.soa.caravan.protobuf.v2.customization.map; 2 | 3 | /** 4 | * Created by marsqing on 24/04/2017. 5 | */ 6 | public interface KVPair { 7 | 8 | Object key(); 9 | 10 | Object value(); 11 | 12 | void key(Object key); 13 | 14 | void value(Object value); 15 | 16 | } 17 | -------------------------------------------------------------------------------- /caravan-protobuf/src/main/java/com/ctrip/soa/caravan/protobuf/v2/customization/timerelated/DotNetTimeRelatedProtobuf.java: -------------------------------------------------------------------------------- 1 | package com.ctrip.soa.caravan.protobuf.v2.customization.timerelated; 2 | 3 | import com.fasterxml.jackson.annotation.JsonPropertyOrder; 4 | 5 | /** 6 | * Created by marsqing on 21/03/2017. 7 | */ 8 | @JsonPropertyOrder({"value", "scale"}) 9 | public class DotNetTimeRelatedProtobuf { 10 | 11 | private long value; 12 | private int scale; 13 | 14 | public DotNetTimeRelatedProtobuf() { 15 | } 16 | 17 | public DotNetTimeRelatedProtobuf(long value, int scale) { 18 | this.value = value; 19 | this.scale = scale; 20 | } 21 | 22 | public long getValue() { 23 | return value; 24 | } 25 | 26 | public void setValue(long value) { 27 | this.value = value; 28 | } 29 | 30 | public int getScale() { 31 | return scale; 32 | } 33 | 34 | public void setScale(int scale) { 35 | this.scale = scale; 36 | } 37 | } 38 | -------------------------------------------------------------------------------- /caravan-protobuf/src/main/java/com/ctrip/soa/caravan/protobuf/v2/customization/timerelated/calendar/CalendarSerializer.java: -------------------------------------------------------------------------------- 1 | package com.ctrip.soa.caravan.protobuf.v2.customization.timerelated.calendar; 2 | 3 | import com.ctrip.soa.caravan.protobuf.v2.customization.AbstractBeanSerializer; 4 | import com.ctrip.soa.caravan.protobuf.v2.customization.timerelated.TimeRelatedConverter; 5 | import com.fasterxml.jackson.databind.JavaType; 6 | import com.fasterxml.jackson.databind.ser.BeanPropertyWriter; 7 | import com.fasterxml.jackson.databind.ser.BeanSerializerBuilder; 8 | import java.util.Calendar; 9 | 10 | /** 11 | * Created by marsqing on 21/03/2017. 12 | */ 13 | public class CalendarSerializer extends AbstractBeanSerializer { 14 | 15 | private static final long serialVersionUID = 1L; 16 | 17 | public CalendarSerializer(JavaType type, BeanSerializerBuilder builder, 18 | BeanPropertyWriter[] properties, BeanPropertyWriter[] filteredProperties) { 19 | super(type, builder, properties, filteredProperties); 20 | } 21 | 22 | @Override 23 | protected Object convertBeanToSerialize(Object bean) { 24 | return TimeRelatedConverter.calendarToNetDateTime((Calendar) bean); 25 | } 26 | 27 | } 28 | -------------------------------------------------------------------------------- /caravan-protobuf/src/main/java/com/ctrip/soa/caravan/protobuf/v2/customization/timerelated/duration/DurationDeserializer.java: -------------------------------------------------------------------------------- 1 | package com.ctrip.soa.caravan.protobuf.v2.customization.timerelated.duration; 2 | 3 | import com.ctrip.soa.caravan.protobuf.v2.customization.AbstractBeanDeserializer; 4 | import com.fasterxml.jackson.databind.BeanDescription; 5 | import com.fasterxml.jackson.databind.deser.BeanDeserializerBuilder; 6 | import com.fasterxml.jackson.databind.deser.SettableBeanProperty; 7 | import com.fasterxml.jackson.databind.deser.impl.BeanPropertyMap; 8 | import java.util.HashSet; 9 | import java.util.Map; 10 | 11 | /** 12 | * Created by marsqing on 24/03/2017. 13 | */ 14 | public class DurationDeserializer extends AbstractBeanDeserializer { 15 | 16 | private static final long serialVersionUID = 1L; 17 | 18 | public DurationDeserializer(BeanDeserializerBuilder builder, BeanDescription beanDesc, 19 | BeanPropertyMap properties, Map backRefs, 20 | HashSet ignorableProps, boolean ignoreAllUnknown, boolean hasViews) { 21 | super(builder, beanDesc, properties, backRefs, ignorableProps, ignoreAllUnknown, hasViews); 22 | } 23 | 24 | @Override 25 | protected Object convertDeserializedToActualFieldValue(Object deserializedBean) { 26 | return null; 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /caravan-protobuf/src/main/java/com/ctrip/soa/caravan/protobuf/v2/customization/timerelated/duration/DurationSerializer.java: -------------------------------------------------------------------------------- 1 | package com.ctrip.soa.caravan.protobuf.v2.customization.timerelated.duration; 2 | 3 | import com.ctrip.soa.caravan.protobuf.v2.customization.AbstractBeanSerializer; 4 | import com.fasterxml.jackson.databind.JavaType; 5 | import com.fasterxml.jackson.databind.ser.BeanPropertyWriter; 6 | import com.fasterxml.jackson.databind.ser.BeanSerializerBuilder; 7 | 8 | /** 9 | * Created by marsqing on 24/03/2017. 10 | */ 11 | public class DurationSerializer extends AbstractBeanSerializer { 12 | 13 | private static final long serialVersionUID = 1L; 14 | 15 | public DurationSerializer(JavaType type, BeanSerializerBuilder builder, BeanPropertyWriter[] properties, 16 | BeanPropertyWriter[] filteredProperties) { 17 | super(type, builder, properties, filteredProperties); 18 | } 19 | 20 | @Override 21 | protected Object convertBeanToSerialize(Object bean) { 22 | return null; 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /caravan-protobuf/src/main/java/com/ctrip/soa/caravan/protobuf/v2/customization/timerelated/xmlgregoriancalendar/XMLGregorianCalendarSerializer.java: -------------------------------------------------------------------------------- 1 | package com.ctrip.soa.caravan.protobuf.v2.customization.timerelated.xmlgregoriancalendar; 2 | 3 | import com.ctrip.soa.caravan.protobuf.v2.customization.AbstractBeanSerializer; 4 | import com.ctrip.soa.caravan.protobuf.v2.customization.timerelated.TimeRelatedConverter; 5 | import com.fasterxml.jackson.databind.JavaType; 6 | import com.fasterxml.jackson.databind.ser.BeanPropertyWriter; 7 | import com.fasterxml.jackson.databind.ser.BeanSerializerBuilder; 8 | import javax.xml.datatype.XMLGregorianCalendar; 9 | 10 | /** 11 | * Created by marsqing on 21/03/2017. 12 | */ 13 | public class XMLGregorianCalendarSerializer extends AbstractBeanSerializer { 14 | 15 | private static final long serialVersionUID = 1L; 16 | 17 | public XMLGregorianCalendarSerializer(JavaType type, BeanSerializerBuilder builder, 18 | BeanPropertyWriter[] properties, BeanPropertyWriter[] filteredProperties) { 19 | super(type, builder, properties, filteredProperties); 20 | } 21 | 22 | @Override 23 | protected Object convertBeanToSerialize(Object bean) { 24 | return TimeRelatedConverter.xmlGregorianCalendarToNetDateTime((XMLGregorianCalendar) bean); 25 | } 26 | 27 | } 28 | -------------------------------------------------------------------------------- /caravan-protobuf/src/test/java/com/ctrip/soa/caravan/protobuf/Color.java: -------------------------------------------------------------------------------- 1 | package com.ctrip.soa.caravan.protobuf; 2 | 3 | import com.fasterxml.jackson.annotation.JsonCreator; 4 | import com.fasterxml.jackson.annotation.JsonValue; 5 | 6 | /** 7 | * Created by w.jian on 2017/2/28. 8 | */ 9 | public enum Color { 10 | 11 | RED("Red"), 12 | 13 | GREEN("Green"), 14 | 15 | BLUE("Blue"); 16 | 17 | private final String value; 18 | 19 | Color(String value) { 20 | this.value = value; 21 | } 22 | 23 | @JsonValue 24 | public String value() { 25 | return value; 26 | } 27 | 28 | @JsonCreator 29 | public static Color fromValue(String v) { 30 | for (Color c: Color.values()) { 31 | if (c.value.equals(v)) { 32 | return c; 33 | } 34 | } 35 | throw new IllegalArgumentException(v); 36 | } 37 | } 38 | -------------------------------------------------------------------------------- /caravan-protobuf/src/test/java/com/ctrip/soa/caravan/protobuf/DateTimePojo.java: -------------------------------------------------------------------------------- 1 | package com.ctrip.soa.caravan.protobuf; 2 | 3 | import java.util.GregorianCalendar; 4 | 5 | import javax.xml.datatype.XMLGregorianCalendar; 6 | 7 | import com.ctrip.soa.caravan.common.value.XMLValues; 8 | 9 | public class DateTimePojo { 10 | 11 | public static final DateTimePojo SAMPLE; 12 | 13 | static { 14 | SAMPLE = new DateTimePojo(); 15 | // 2017-02-14 00:00:00, month is 0 based 16 | GregorianCalendar calendar = new GregorianCalendar(2017, 1, 14, 0, 0, 0); 17 | SAMPLE.setTime(XMLValues.toXMLGregorianCalendar(calendar)); 18 | } 19 | 20 | private XMLGregorianCalendar time; 21 | 22 | public XMLGregorianCalendar getTime() { 23 | return time; 24 | } 25 | 26 | public void setTime(XMLGregorianCalendar time) { 27 | this.time = time; 28 | } 29 | 30 | } 31 | -------------------------------------------------------------------------------- /caravan-protobuf/src/test/java/com/ctrip/soa/caravan/protobuf/SimpleEnumPojo.java: -------------------------------------------------------------------------------- 1 | package com.ctrip.soa.caravan.protobuf; 2 | 3 | /** 4 | * Created by w.jian on 2017/2/28. 5 | */ 6 | public class SimpleEnumPojo { 7 | 8 | private Color color; 9 | 10 | public Color getColor() { 11 | return color; 12 | } 13 | 14 | public void setColor(Color color) { 15 | this.color = color; 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /caravan-protobuf/src/test/java/com/ctrip/soa/caravan/protobuf/v2/Embed.java: -------------------------------------------------------------------------------- 1 | package com.ctrip.soa.caravan.protobuf.v2; 2 | 3 | /** 4 | * Created by marsqing on 20/04/2017. 5 | */ 6 | public class Embed { 7 | 8 | public Embed(int i) { 9 | this.i = i; 10 | } 11 | 12 | public Embed() { 13 | } 14 | 15 | private int i; 16 | 17 | public int getI() { 18 | return i; 19 | } 20 | 21 | public void setI(int i) { 22 | this.i = i; 23 | } 24 | 25 | @Override 26 | public boolean equals(Object o) { 27 | if (this == o) { 28 | return true; 29 | } 30 | if (o == null || getClass() != o.getClass()) { 31 | return false; 32 | } 33 | 34 | Embed embed = (Embed) o; 35 | 36 | return i == embed.i; 37 | } 38 | 39 | @Override 40 | public int hashCode() { 41 | return i; 42 | } 43 | } 44 | -------------------------------------------------------------------------------- /caravan-protobuf/src/test/java/com/ctrip/soa/caravan/protobuf/v2/PerfTest.java: -------------------------------------------------------------------------------- 1 | package com.ctrip.soa.caravan.protobuf.v2; 2 | 3 | import java.io.ByteArrayOutputStream; 4 | import org.junit.Test; 5 | 6 | /** 7 | * Created by marsqing on 25/04/2017. 8 | */ 9 | public class PerfTest { 10 | 11 | @Test 12 | public void test() throws InterruptedException { 13 | 14 | StringBuilder sb = new StringBuilder(); 15 | for (int i = 0; i < 1000; i++) { 16 | sb.append("A"); 17 | } 18 | 19 | ByteArrayOutputStream bout = new ByteArrayOutputStream(); 20 | Pojo p = new Pojo(); 21 | p.setStr(sb.toString()); 22 | 23 | JacksonProtobuf2Serializer.INSTANCE.serialize(bout, p); 24 | 25 | for (int i = 0; i < 10000; i++) { 26 | JacksonProtobuf2Serializer.INSTANCE.serialize(bout, p); 27 | } 28 | 29 | long start = System.currentTimeMillis(); 30 | for (int i = 0; i < 1000; i++) { 31 | JacksonProtobuf2Serializer.INSTANCE.serialize(bout, p); 32 | } 33 | System.out.println(System.currentTimeMillis() - start); 34 | 35 | } 36 | 37 | public static class Pojo { 38 | 39 | private String str; 40 | 41 | public String getStr() { 42 | return str; 43 | } 44 | 45 | public void setStr(String str) { 46 | this.str = str; 47 | } 48 | } 49 | 50 | } 51 | -------------------------------------------------------------------------------- /caravan-protobuf/src/test/java/com/ctrip/soa/caravan/protobuf/v2/Pojo10.java: -------------------------------------------------------------------------------- 1 | package com.ctrip.soa.caravan.protobuf.v2; 2 | 3 | import java.math.BigDecimal; 4 | 5 | /** 6 | * Created by marsqing on 03/05/2017. 7 | */ 8 | public class Pojo10 { 9 | 10 | private BigDecimal bigDecimal; 11 | 12 | public BigDecimal getBigDecimal() { 13 | return bigDecimal; 14 | } 15 | 16 | public void setBigDecimal(BigDecimal bigDecimal) { 17 | this.bigDecimal = bigDecimal; 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /caravan-protobuf/src/test/java/com/ctrip/soa/caravan/protobuf/v2/Pojo11.java: -------------------------------------------------------------------------------- 1 | package com.ctrip.soa.caravan.protobuf.v2; 2 | 3 | /** 4 | * Created by marsqing on 04/05/2017. 5 | */ 6 | public class Pojo11 { 7 | 8 | private int value; 9 | 10 | public int getValue() { 11 | return value; 12 | } 13 | 14 | public void setValue(int value) { 15 | this.value = value; 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /caravan-protobuf/src/test/java/com/ctrip/soa/caravan/protobuf/v2/Pojo12.java: -------------------------------------------------------------------------------- 1 | package com.ctrip.soa.caravan.protobuf.v2; 2 | 3 | /** 4 | * Created by marsqing on 04/05/2017. 5 | */ 6 | public class Pojo12 { 7 | 8 | private byte value; 9 | 10 | public byte getValue() { 11 | return value; 12 | } 13 | 14 | public void setValue(byte value) { 15 | this.value = value; 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /caravan-protobuf/src/test/java/com/ctrip/soa/caravan/protobuf/v2/Pojo13.java: -------------------------------------------------------------------------------- 1 | package com.ctrip.soa.caravan.protobuf.v2; 2 | 3 | /** 4 | * Created by marsqing on 04/05/2017. 5 | */ 6 | public class Pojo13 { 7 | 8 | private int value; 9 | 10 | public int getValue() { 11 | return value; 12 | } 13 | 14 | public void setValue(int value) { 15 | this.value = value; 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /caravan-protobuf/src/test/java/com/ctrip/soa/caravan/protobuf/v2/Pojo14.java: -------------------------------------------------------------------------------- 1 | package com.ctrip.soa.caravan.protobuf.v2; 2 | 3 | import java.util.List; 4 | import java.util.Map; 5 | 6 | /** 7 | * Created by marsqing on 17/06/2017. 8 | */ 9 | public class Pojo14 { 10 | 11 | public enum SomeEnum { 12 | Enum1, Enum2, Enum3 13 | } 14 | 15 | private List list; 16 | private SomeEnum[] array; 17 | private Map keyOfMap; 18 | private Map valueOfMap; 19 | 20 | public List getList() { 21 | return list; 22 | } 23 | 24 | public void setList(List list) { 25 | this.list = list; 26 | } 27 | 28 | public SomeEnum[] getArray() { 29 | return array; 30 | } 31 | 32 | public void setArray(SomeEnum[] array) { 33 | this.array = array; 34 | } 35 | 36 | public Map getKeyOfMap() { 37 | return keyOfMap; 38 | } 39 | 40 | public void setKeyOfMap(Map keyOfMap) { 41 | this.keyOfMap = keyOfMap; 42 | } 43 | 44 | public Map getValueOfMap() { 45 | return valueOfMap; 46 | } 47 | 48 | public void setValueOfMap(Map valueOfMap) { 49 | this.valueOfMap = valueOfMap; 50 | } 51 | } 52 | -------------------------------------------------------------------------------- /caravan-protobuf/src/test/java/com/ctrip/soa/caravan/protobuf/v2/Pojo2.java: -------------------------------------------------------------------------------- 1 | package com.ctrip.soa.caravan.protobuf.v2; 2 | 3 | /** 4 | * Created by marsqing on 16/03/2017. 5 | */ 6 | public class Pojo2 { 7 | 8 | public static class Embed { 9 | 10 | private int a; 11 | private int b; 12 | 13 | public int getA() { 14 | return a; 15 | } 16 | 17 | public void setA(int a) { 18 | this.a = a; 19 | } 20 | 21 | public int getB() { 22 | return b; 23 | } 24 | 25 | public void setB(int b) { 26 | this.b = b; 27 | } 28 | } 29 | 30 | private int i; 31 | 32 | private Embed pe; 33 | 34 | private int j; 35 | 36 | public int getI() { 37 | return i; 38 | } 39 | 40 | public void setI(int i) { 41 | this.i = i; 42 | } 43 | 44 | public Embed getPe() { 45 | return pe; 46 | } 47 | 48 | public void setPe(Embed pe) { 49 | this.pe = pe; 50 | } 51 | 52 | public int getJ() { 53 | return j; 54 | } 55 | 56 | public void setJ(int j) { 57 | this.j = j; 58 | } 59 | } 60 | -------------------------------------------------------------------------------- /caravan-protobuf/src/test/java/com/ctrip/soa/caravan/protobuf/v2/Pojo3.java: -------------------------------------------------------------------------------- 1 | package com.ctrip.soa.caravan.protobuf.v2; 2 | 3 | /** 4 | * Created by marsqing on 16/03/2017. 5 | */ 6 | public class Pojo3 { 7 | 8 | private String[] ss; 9 | 10 | public String[] getSs() { 11 | return ss; 12 | } 13 | 14 | public void setSs(String[] ss) { 15 | this.ss = ss; 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /caravan-protobuf/src/test/java/com/ctrip/soa/caravan/protobuf/v2/Pojo5.java: -------------------------------------------------------------------------------- 1 | package com.ctrip.soa.caravan.protobuf.v2; 2 | 3 | import java.util.Map; 4 | 5 | /** 6 | * Created by marsqing on 20/04/2017. 7 | */ 8 | public class Pojo5 { 9 | 10 | private Map map; 11 | 12 | public Map getMap() { 13 | return map; 14 | } 15 | 16 | public void setMap(Map map) { 17 | this.map = map; 18 | } 19 | 20 | } 21 | -------------------------------------------------------------------------------- /caravan-protobuf/src/test/java/com/ctrip/soa/caravan/protobuf/v2/Pojo6.java: -------------------------------------------------------------------------------- 1 | package com.ctrip.soa.caravan.protobuf.v2; 2 | 3 | import java.util.List; 4 | 5 | /** 6 | * Created by marsqing on 20/04/2017. 7 | */ 8 | public class Pojo6 { 9 | 10 | private List embeds; 11 | 12 | public List getEmbeds() { 13 | return embeds; 14 | } 15 | 16 | public void setEmbeds(List embeds) { 17 | this.embeds = embeds; 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /caravan-protobuf/src/test/java/com/ctrip/soa/caravan/protobuf/v2/Pojo7.java: -------------------------------------------------------------------------------- 1 | package com.ctrip.soa.caravan.protobuf.v2; 2 | 3 | import com.ctrip.soa.framework.soa.testservice.v1.BasicTypes1; 4 | import java.util.Map; 5 | 6 | /** 7 | * Created by marsqing on 20/04/2017. 8 | */ 9 | public class Pojo7 { 10 | 11 | private Map map; 12 | 13 | public Map getMap() { 14 | return map; 15 | } 16 | 17 | public void setMap(Map map) { 18 | this.map = map; 19 | } 20 | 21 | } 22 | -------------------------------------------------------------------------------- /caravan-protobuf/src/test/java/com/ctrip/soa/caravan/protobuf/v2/Pojo8.java: -------------------------------------------------------------------------------- 1 | package com.ctrip.soa.caravan.protobuf.v2; 2 | 3 | import com.ctrip.soa.framework.soa.testservice.v1.BasicTypes1; 4 | import java.util.Map; 5 | 6 | /** 7 | * Created by marsqing on 20/04/2017. 8 | */ 9 | public class Pojo8 { 10 | 11 | private Map map; 12 | 13 | public Map getMap() { 14 | return map; 15 | } 16 | 17 | public void setMap(Map map) { 18 | this.map = map; 19 | } 20 | 21 | } 22 | -------------------------------------------------------------------------------- /caravan-protobuf/src/test/java/com/ctrip/soa/caravan/protobuf/v2/Pojo9.java: -------------------------------------------------------------------------------- 1 | package com.ctrip.soa.caravan.protobuf.v2; 2 | 3 | /** 4 | * Created by marsqing on 03/05/2017. 5 | */ 6 | public class Pojo9 { 7 | 8 | private float floatValue; 9 | 10 | public float getFloatValue() { 11 | return floatValue; 12 | } 13 | 14 | public void setFloatValue(float floatValue) { 15 | this.floatValue = floatValue; 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /caravan-protobuf/src/test/java/com/ctrip/soa/caravan/protobuf/v2/PojoDate.java: -------------------------------------------------------------------------------- 1 | package com.ctrip.soa.caravan.protobuf.v2; 2 | 3 | import java.util.Date; 4 | 5 | /** 6 | * Created by marsqing on 16/03/2017. 7 | */ 8 | public class PojoDate { 9 | 10 | private Date pDate; 11 | 12 | public Date getpDate() { 13 | return pDate; 14 | } 15 | 16 | public void setpDate(Date pDate) { 17 | this.pDate = pDate; 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /caravan-protobuf/src/test/java/com/ctrip/soa/framework/soa/testservice/v1/EmbedType1.java: -------------------------------------------------------------------------------- 1 | package com.ctrip.soa.framework.soa.testservice.v1; 2 | 3 | /** 4 | * Created by marsqing on 22/03/2017. 5 | */ 6 | public class EmbedType1 { 7 | 8 | private EnumType1 type1; 9 | 10 | public EnumType1 getType1() { 11 | return type1; 12 | } 13 | 14 | public void setType1(EnumType1 type1) { 15 | this.type1 = type1; 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /caravan-protobuf/src/test/java/com/ctrip/soa/framework/soa/testservice/v1/EnumType2.java: -------------------------------------------------------------------------------- 1 | 2 | package com.ctrip.soa.framework.soa.testservice.v1; 3 | 4 | import javax.xml.bind.annotation.XmlEnum; 5 | import javax.xml.bind.annotation.XmlType; 6 | 7 | 8 | /** 9 | *

EnumType2的 Java 类。 10 | * 11 | *

以下模式片段指定包含在此类中的预期内容。 12 | *

13 | *

14 |  * <simpleType name="EnumType2">
15 |  *   <restriction base="{http://www.w3.org/2001/XMLSchema}string">
16 |  *     <enumeration value="OK"/>
17 |  *   </restriction>
18 |  * </simpleType>
19 |  * 
20 | * 21 | */ 22 | @XmlType(name = "EnumType2") 23 | @XmlEnum 24 | public enum EnumType2 { 25 | 26 | OK; 27 | 28 | public String value() { 29 | return name(); 30 | } 31 | 32 | public static EnumType2 fromValue(String v) { 33 | return valueOf(v); 34 | } 35 | 36 | } 37 | -------------------------------------------------------------------------------- /caravan-protobuf/src/test/java/com/ctrip/soa/framework/soa/testservice/v1/Level1.java: -------------------------------------------------------------------------------- 1 | package com.ctrip.soa.framework.soa.testservice.v1; 2 | 3 | /** 4 | * Created by marsqing on 22/03/2017. 5 | */ 6 | public class Level1 { 7 | 8 | private int value; 9 | 10 | private Level2 level2; 11 | 12 | public int getValue() { 13 | return value; 14 | } 15 | 16 | public void setValue(int value) { 17 | this.value = value; 18 | } 19 | 20 | public Level2 getLevel2() { 21 | return level2; 22 | } 23 | 24 | public void setLevel2(Level2 level2) { 25 | this.level2 = level2; 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /caravan-protobuf/src/test/java/com/ctrip/soa/framework/soa/testservice/v1/Level2.java: -------------------------------------------------------------------------------- 1 | package com.ctrip.soa.framework.soa.testservice.v1; 2 | 3 | /** 4 | * Created by marsqing on 22/03/2017. 5 | */ 6 | public class Level2 { 7 | 8 | private int value; 9 | private Level3 level3; 10 | 11 | public int getValue() { 12 | return value; 13 | } 14 | 15 | public void setValue(int value) { 16 | this.value = value; 17 | } 18 | 19 | public Level3 getLevel3() { 20 | return level3; 21 | } 22 | 23 | public void setLevel3(Level3 level3) { 24 | this.level3 = level3; 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /caravan-protobuf/src/test/java/com/ctrip/soa/framework/soa/testservice/v1/Level3.java: -------------------------------------------------------------------------------- 1 | package com.ctrip.soa.framework.soa.testservice.v1; 2 | 3 | /** 4 | * Created by marsqing on 22/03/2017. 5 | */ 6 | public class Level3 { 7 | 8 | private int value; 9 | 10 | public int getValue() { 11 | return value; 12 | } 13 | 14 | public void setValue(int value) { 15 | this.value = value; 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /caravan-protobuf/src/test/java/com/ctrip/soa/framework/soa/testservice/v1/TypeWithEnum.java: -------------------------------------------------------------------------------- 1 | package com.ctrip.soa.framework.soa.testservice.v1; 2 | 3 | import com.fasterxml.jackson.annotation.JsonProperty; 4 | 5 | /** 6 | * Created by marsqing on 22/03/2017. 7 | */ 8 | public class TypeWithEnum { 9 | 10 | @JsonProperty("Type1") 11 | private EnumType1 Type1; 12 | 13 | private EnumType2 type2; 14 | 15 | private EmbedType1 embed; 16 | 17 | public EnumType1 getType1() { 18 | return Type1; 19 | } 20 | 21 | public void setType1(EnumType1 type1) { 22 | this.Type1 = type1; 23 | } 24 | 25 | public EnumType2 getType2() { 26 | return type2; 27 | } 28 | 29 | public void setType2(EnumType2 type2) { 30 | this.type2 = type2; 31 | } 32 | 33 | public EmbedType1 getEmbed() { 34 | return embed; 35 | } 36 | 37 | public void setEmbed(EmbedType1 embed) { 38 | this.embed = embed; 39 | } 40 | } 41 | -------------------------------------------------------------------------------- /caravan-protobuf/src/test/java/com/ctrip/soa/framework/soa/testservice/v1/package-info.java: -------------------------------------------------------------------------------- 1 | @javax.xml.bind.annotation.XmlSchema(namespace = "http://soa.ctrip.com/framework/soa/testservice/v1", elementFormDefault = javax.xml.bind.annotation.XmlNsForm.QUALIFIED) 2 | package com.ctrip.soa.framework.soa.testservice.v1; 3 | -------------------------------------------------------------------------------- /caravan-ribbon/.gitignore: -------------------------------------------------------------------------------- 1 | /target/ 2 | -------------------------------------------------------------------------------- /caravan-ribbon/src/main/java/com/ctrip/soa/caravan/ribbon/ConfigurationKeys.java: -------------------------------------------------------------------------------- 1 | package com.ctrip.soa.caravan.ribbon; 2 | 3 | /** 4 | * Created by w.jian on 2017/2/25. 5 | */ 6 | public class ConfigurationKeys { 7 | 8 | public static final String DataFolder = "ribbon.local-cache.data-folder"; 9 | 10 | public static final String CheckInterval = "ribbon.check-interval-in-millisecond"; 11 | 12 | public static final String FailureThresholdPercentage = "ribbon.failure-threshold-percentage"; 13 | 14 | public static final String CounterBuffer = "ribbon.counter-buffer"; 15 | 16 | public static final String LoadBalancerRuleName = "ribbon.lb.rule.name"; 17 | 18 | public static final String MinAvailableServerCount = "ribbon.min-available-server-count"; 19 | 20 | public static final String CheckHealthCount = "ribbon.checkhealth.thread-count"; 21 | } 22 | -------------------------------------------------------------------------------- /caravan-ribbon/src/main/java/com/ctrip/soa/caravan/ribbon/DynamicServerSource.java: -------------------------------------------------------------------------------- 1 | package com.ctrip.soa.caravan.ribbon; 2 | 3 | /** 4 | * Created by w.jian on 2016/7/18. 5 | */ 6 | public interface DynamicServerSource extends ServerSource { 7 | 8 | void registerServerSourceChangeListener(ServerSourceChangeListener listener); 9 | } 10 | -------------------------------------------------------------------------------- /caravan-ribbon/src/main/java/com/ctrip/soa/caravan/ribbon/LoadBalancer.java: -------------------------------------------------------------------------------- 1 | package com.ctrip.soa.caravan.ribbon; 2 | 3 | /** 4 | * Created by w.jian on 2016/6/14. 5 | */ 6 | public interface LoadBalancer { 7 | 8 | LoadBalancerRequestContext getRequestContext(LoadBalancerRequestConfig loadBalancerRequestConfig); 9 | } 10 | -------------------------------------------------------------------------------- /caravan-ribbon/src/main/java/com/ctrip/soa/caravan/ribbon/LoadBalancerRequestContext.java: -------------------------------------------------------------------------------- 1 | package com.ctrip.soa.caravan.ribbon; 2 | 3 | /** 4 | * Created by w.jian on 2016/7/13. 5 | */ 6 | public interface LoadBalancerRequestContext { 7 | 8 | Server getServer(); 9 | 10 | void markServerAvailable(); 11 | 12 | void markServerUnavailable(); 13 | } 14 | -------------------------------------------------------------------------------- /caravan-ribbon/src/main/java/com/ctrip/soa/caravan/ribbon/LoadBalancerRule.java: -------------------------------------------------------------------------------- 1 | package com.ctrip.soa.caravan.ribbon; 2 | 3 | /** 4 | * Created by w.jian on 2016/6/14. 5 | */ 6 | public interface LoadBalancerRule { 7 | 8 | String getRuleId(); 9 | 10 | String getDescription(); 11 | 12 | Server choose(LoadBalancerRoute loadBalancerRoute); 13 | } 14 | -------------------------------------------------------------------------------- /caravan-ribbon/src/main/java/com/ctrip/soa/caravan/ribbon/LoadBalancerRuleFactoryManager.java: -------------------------------------------------------------------------------- 1 | package com.ctrip.soa.caravan.ribbon; 2 | 3 | import com.ctrip.soa.caravan.common.delegate.Func; 4 | 5 | public interface LoadBalancerRuleFactoryManager { 6 | 7 | LoadBalancerRule getLoadBalancerRule(String ruleId); 8 | 9 | Func getLoadBalancerRuleFactory(); 10 | 11 | void registerLoadBalancerRuleFactory(Func rule); 12 | } 13 | -------------------------------------------------------------------------------- /caravan-ribbon/src/main/java/com/ctrip/soa/caravan/ribbon/Ping.java: -------------------------------------------------------------------------------- 1 | package com.ctrip.soa.caravan.ribbon; 2 | 3 | /** 4 | * Created by w.jian on 2016/6/14. 5 | */ 6 | public interface Ping { 7 | 8 | boolean isAlive(Server server); 9 | } 10 | -------------------------------------------------------------------------------- /caravan-ribbon/src/main/java/com/ctrip/soa/caravan/ribbon/SeekRouteEvent.java: -------------------------------------------------------------------------------- 1 | package com.ctrip.soa.caravan.ribbon; 2 | 3 | /** 4 | * Created by w.jian on 2017/6/7. 5 | */ 6 | public interface SeekRouteEvent { 7 | 8 | LoadBalancerRoute getRoute(); 9 | 10 | void setRoute(LoadBalancerRoute route); 11 | } 12 | -------------------------------------------------------------------------------- /caravan-ribbon/src/main/java/com/ctrip/soa/caravan/ribbon/SeekRouteListener.java: -------------------------------------------------------------------------------- 1 | package com.ctrip.soa.caravan.ribbon; 2 | 3 | /** 4 | * Created by w.jian on 2017/6/7. 5 | */ 6 | public interface SeekRouteListener { 7 | 8 | void onSeekRoute(SeekRouteEvent event); 9 | } 10 | -------------------------------------------------------------------------------- /caravan-ribbon/src/main/java/com/ctrip/soa/caravan/ribbon/ServerSource.java: -------------------------------------------------------------------------------- 1 | package com.ctrip.soa.caravan.ribbon; 2 | 3 | import java.util.List; 4 | 5 | /** 6 | * Created by w.jian on 2016/6/15. 7 | */ 8 | public interface ServerSource { 9 | 10 | List getLoadBalancerRoutes(); 11 | } 12 | -------------------------------------------------------------------------------- /caravan-ribbon/src/main/java/com/ctrip/soa/caravan/ribbon/ServerSourceChangeEvent.java: -------------------------------------------------------------------------------- 1 | package com.ctrip.soa.caravan.ribbon; 2 | 3 | /** 4 | * Created by w.jian on 2016/7/18. 5 | */ 6 | public interface ServerSourceChangeEvent { 7 | } 8 | -------------------------------------------------------------------------------- /caravan-ribbon/src/main/java/com/ctrip/soa/caravan/ribbon/ServerSourceChangeListener.java: -------------------------------------------------------------------------------- 1 | package com.ctrip.soa.caravan.ribbon; 2 | 3 | /** 4 | * Created by w.jian on 2016/7/18. 5 | */ 6 | public interface ServerSourceChangeListener { 7 | 8 | void onChange(ServerSourceChangeEvent event); 9 | } 10 | -------------------------------------------------------------------------------- /caravan-ribbon/src/main/java/com/ctrip/soa/caravan/ribbon/algorithm/DefaultRoundRobinAlgorithm.java: -------------------------------------------------------------------------------- 1 | package com.ctrip.soa.caravan.ribbon.algorithm; 2 | 3 | import java.util.List; 4 | import java.util.Random; 5 | import java.util.concurrent.atomic.AtomicInteger; 6 | 7 | /** 8 | * Created by w.jian on 2017/2/25. 9 | */ 10 | public class DefaultRoundRobinAlgorithm implements RoundRobinAlgorithm { 11 | 12 | private static final int COUNTER_LIMIT = Integer.MAX_VALUE / 2; 13 | 14 | private AtomicInteger _counter; 15 | 16 | public DefaultRoundRobinAlgorithm() { 17 | _counter = new AtomicInteger(new Random().nextInt(COUNTER_LIMIT)); 18 | } 19 | 20 | @Override 21 | public T choose(List source) { 22 | int count = source.size(); 23 | if (count == 0) { 24 | return null; 25 | } 26 | 27 | int counterValue = _counter.getAndIncrement(); 28 | if (counterValue > COUNTER_LIMIT) 29 | _counter.set(0); 30 | 31 | int index = counterValue % count; 32 | return source.get(index); 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /caravan-ribbon/src/main/java/com/ctrip/soa/caravan/ribbon/algorithm/RoundRobinAlgorithm.java: -------------------------------------------------------------------------------- 1 | package com.ctrip.soa.caravan.ribbon.algorithm; 2 | 3 | import java.util.List; 4 | 5 | /** 6 | * Created by w.jian on 2017/2/25. 7 | */ 8 | public interface RoundRobinAlgorithm { 9 | T choose(List source); 10 | } 11 | -------------------------------------------------------------------------------- /caravan-ribbon/src/main/java/com/ctrip/soa/caravan/ribbon/rule/RoundRobinContext.java: -------------------------------------------------------------------------------- 1 | package com.ctrip.soa.caravan.ribbon.rule; 2 | 3 | import com.ctrip.soa.caravan.ribbon.Server; 4 | import com.ctrip.soa.caravan.ribbon.ServerGroup; 5 | import com.ctrip.soa.caravan.ribbon.algorithm.DefaultRoundRobinAlgorithm; 6 | import com.ctrip.soa.caravan.ribbon.algorithm.RoundRobinAlgorithm; 7 | 8 | /** 9 | * Created by w.jian on 2017/3/5. 10 | */ 11 | class RoundRobinContext { 12 | 13 | private ServerGroup serverGroup; 14 | private RoundRobinAlgorithm roundRobinAlgorithm; 15 | 16 | public RoundRobinContext(ServerGroup serverGroup) { 17 | this.serverGroup = serverGroup; 18 | this.roundRobinAlgorithm = new DefaultRoundRobinAlgorithm<>(); 19 | } 20 | 21 | public ServerGroup getServerGroup() { 22 | return serverGroup; 23 | } 24 | 25 | public Server choose() { 26 | return roundRobinAlgorithm.choose(serverGroup.getAvailableServers()); 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /caravan-ribbon/src/main/java/com/ctrip/soa/caravan/ribbon/serversource/filter/DefaultSeekRouteEvent.java: -------------------------------------------------------------------------------- 1 | package com.ctrip.soa.caravan.ribbon.serversource.filter; 2 | 3 | import com.ctrip.soa.caravan.ribbon.LoadBalancerRoute; 4 | import com.ctrip.soa.caravan.ribbon.SeekRouteEvent; 5 | 6 | /** 7 | * Created by w.jian on 2017/6/7. 8 | */ 9 | class DefaultSeekRouteEvent implements SeekRouteEvent { 10 | 11 | private LoadBalancerRoute route; 12 | 13 | public DefaultSeekRouteEvent(LoadBalancerRoute route) { 14 | this.route = route; 15 | } 16 | 17 | @Override 18 | public LoadBalancerRoute getRoute() { 19 | return route; 20 | } 21 | 22 | @Override 23 | public void setRoute(LoadBalancerRoute route) { 24 | this.route = route; 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /caravan-ribbon/src/main/java/com/ctrip/soa/caravan/ribbon/serversource/filter/ServerContextChangeEvent.java: -------------------------------------------------------------------------------- 1 | package com.ctrip.soa.caravan.ribbon.serversource.filter; 2 | 3 | /** 4 | * Created by w.jian on 2016/7/26. 5 | */ 6 | public class ServerContextChangeEvent { 7 | } 8 | -------------------------------------------------------------------------------- /caravan-ribbon/src/main/java/com/ctrip/soa/caravan/ribbon/serversource/filter/ServerContextChangeListener.java: -------------------------------------------------------------------------------- 1 | package com.ctrip.soa.caravan.ribbon.serversource.filter; 2 | 3 | /** 4 | * Created by w.jian on 2016/7/26. 5 | */ 6 | public interface ServerContextChangeListener { 7 | 8 | void onChange(ServerContextChangeEvent event); 9 | } 10 | -------------------------------------------------------------------------------- /caravan-ribbon/src/main/java/com/ctrip/soa/caravan/ribbon/serversource/filter/ServerSourceFilter.java: -------------------------------------------------------------------------------- 1 | package com.ctrip.soa.caravan.ribbon.serversource.filter; 2 | 3 | import com.ctrip.soa.caravan.ribbon.LoadBalancerRoute; 4 | import com.ctrip.soa.caravan.ribbon.LoadBalancerRequestConfig; 5 | import com.ctrip.soa.caravan.ribbon.SeekRouteListener; 6 | 7 | import java.util.List; 8 | 9 | /** 10 | * Created by w.jian on 2016/7/26. 11 | */ 12 | public interface ServerSourceFilter { 13 | 14 | List getLoadBalancerRoutes(); 15 | 16 | void setLoadBalancerRoutes(List loadBalancerRoutes); 17 | 18 | LoadBalancerRoute getLoadBalancerRoute(LoadBalancerRequestConfig loadBalancerRequestConfig); 19 | 20 | void refresh(); 21 | 22 | void addServerContextChangeListener(ServerContextChangeListener listener); 23 | 24 | void addSeekRouteListener(SeekRouteListener listener); 25 | } 26 | -------------------------------------------------------------------------------- /caravan-ribbon/src/main/java/com/ctrip/soa/caravan/ribbon/serversource/manager/ServerSourceManager.java: -------------------------------------------------------------------------------- 1 | package com.ctrip.soa.caravan.ribbon.serversource.manager; 2 | 3 | import com.ctrip.soa.caravan.ribbon.LoadBalancerRoute; 4 | 5 | import java.util.List; 6 | 7 | /** 8 | * Created by w.jian on 2016/7/18. 9 | */ 10 | public interface ServerSourceManager { 11 | 12 | void backup(List routes); 13 | 14 | List restore(); 15 | 16 | void addRestoreListener(ServerSourceRestoreListener listener); 17 | } 18 | -------------------------------------------------------------------------------- /caravan-ribbon/src/main/java/com/ctrip/soa/caravan/ribbon/serversource/manager/ServerSourceRestoreEvent.java: -------------------------------------------------------------------------------- 1 | package com.ctrip.soa.caravan.ribbon.serversource.manager; 2 | 3 | import com.ctrip.soa.caravan.ribbon.LoadBalancerRoute; 4 | 5 | import java.util.List; 6 | 7 | /** 8 | * Created by w.jian on 2017/4/27. 9 | */ 10 | public class ServerSourceRestoreEvent { 11 | 12 | private List routes; 13 | 14 | ServerSourceRestoreEvent(List routes) { 15 | this.routes = routes; 16 | } 17 | 18 | public List getRoutes() { 19 | return routes; 20 | } 21 | 22 | public void setRoutes(List routes) { 23 | this.routes = routes; 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /caravan-ribbon/src/main/java/com/ctrip/soa/caravan/ribbon/serversource/manager/ServerSourceRestoreListener.java: -------------------------------------------------------------------------------- 1 | package com.ctrip.soa.caravan.ribbon.serversource.manager; 2 | 3 | /** 4 | * Created by w.jian on 2017/4/27. 5 | */ 6 | public interface ServerSourceRestoreListener { 7 | 8 | void onServerSourceRestore(ServerSourceRestoreEvent event); 9 | } 10 | -------------------------------------------------------------------------------- /caravan-ribbon/src/main/java/com/ctrip/soa/caravan/ribbon/serversource/monitor/ServerSourceMonitor.java: -------------------------------------------------------------------------------- 1 | package com.ctrip.soa.caravan.ribbon.serversource.monitor; 2 | 3 | /** 4 | * Created by w.jian on 2016/6/21. 5 | */ 6 | public interface ServerSourceMonitor { 7 | 8 | void monitorServers(); 9 | 10 | boolean isMonitoring(); 11 | 12 | void addServerStatusChangeListener(ServerStatusChangeListener listener); 13 | } 14 | -------------------------------------------------------------------------------- /caravan-ribbon/src/main/java/com/ctrip/soa/caravan/ribbon/serversource/monitor/ServerStatusChangeEvent.java: -------------------------------------------------------------------------------- 1 | package com.ctrip.soa.caravan.ribbon.serversource.monitor; 2 | 3 | /** 4 | * Created by w.jian on 2016/7/26. 5 | */ 6 | public class ServerStatusChangeEvent { 7 | } 8 | -------------------------------------------------------------------------------- /caravan-ribbon/src/main/java/com/ctrip/soa/caravan/ribbon/serversource/monitor/ServerStatusChangeListener.java: -------------------------------------------------------------------------------- 1 | package com.ctrip.soa.caravan.ribbon.serversource.monitor; 2 | 3 | /** 4 | * Created by w.jian on 2016/7/26. 5 | */ 6 | public interface ServerStatusChangeListener { 7 | 8 | void onChange(ServerStatusChangeEvent e); 9 | } 10 | -------------------------------------------------------------------------------- /caravan-ribbon/src/main/java/com/ctrip/soa/caravan/ribbon/util/Math.java: -------------------------------------------------------------------------------- 1 | package com.ctrip.soa.caravan.ribbon.util; 2 | 3 | /** 4 | * Created by w.jian on 2017/2/27. 5 | */ 6 | public class Math { 7 | public static int GCD(int a, int b) { 8 | int c; 9 | while (b != 0) 10 | { 11 | c = b; 12 | b = a % b; 13 | a = c; 14 | } 15 | return a; 16 | } 17 | } -------------------------------------------------------------------------------- /caravan-ribbon/src/test/java/com/ctrip/soa/caravan/ribbon/DefaultPing.java: -------------------------------------------------------------------------------- 1 | package com.ctrip.soa.caravan.ribbon; 2 | 3 | /** 4 | * Created by w.jian on 2016/12/24. 5 | */ 6 | public class DefaultPing implements Ping { 7 | 8 | private boolean success; 9 | 10 | public DefaultPing() { } 11 | 12 | public DefaultPing(boolean success) { 13 | this.success = success; 14 | } 15 | 16 | @Override 17 | public boolean isAlive(Server server) { 18 | return isSuccess(); 19 | } 20 | 21 | public boolean isSuccess() { 22 | return success; 23 | } 24 | 25 | public void setSuccess(boolean success) { 26 | this.success = success; 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /caravan-ribbon/src/test/java/com/ctrip/soa/caravan/ribbon/TestUtils.java: -------------------------------------------------------------------------------- 1 | package com.ctrip.soa.caravan.ribbon; 2 | 3 | import com.ctrip.soa.caravan.configuration.facade.ConfigurationManagers; 4 | import com.ctrip.soa.caravan.configuration.facade.TypedDynamicCachedCorrectedProperties; 5 | import com.ctrip.soa.caravan.configuration.source.properties.PropertiesConfigurationSource; 6 | import com.ctrip.soa.caravan.configuration.typed.dynamic.cached.corrected.TypedDynamicCachedCorrectedConfigurationManager; 7 | 8 | /** 9 | * Created by w.jian on 2016/7/19. 10 | */ 11 | public class TestUtils { 12 | 13 | public static TypedDynamicCachedCorrectedProperties getProperties() { 14 | PropertiesConfigurationSource propertiesConfigurationSource = new PropertiesConfigurationSource(0, "soa"); 15 | TypedDynamicCachedCorrectedConfigurationManager manager; 16 | manager = ConfigurationManagers.newTypedDynamicCachedCorrectedManager(propertiesConfigurationSource); 17 | return new TypedDynamicCachedCorrectedProperties(manager); 18 | } 19 | 20 | public static LoadBalancerManagerConfig getLoadBalancerManagerConfig() { 21 | return new LoadBalancerManagerConfig(getProperties()); 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /caravan-ribbon/src/test/java/com/ctrip/soa/caravan/ribbon/Threads.java: -------------------------------------------------------------------------------- 1 | package com.ctrip.soa.caravan.ribbon; 2 | 3 | /** 4 | * Created by w.jian on 2016/6/23. 5 | */ 6 | public class Threads { 7 | 8 | public static void wait(Thread[] threads, int interval) { 9 | try { 10 | boolean isAlive = true; 11 | while (isAlive) { 12 | isAlive = false; 13 | for (int i = 0; i < threads.length; i++) { 14 | if (threads[i].isAlive()) { 15 | isAlive = true; 16 | break; 17 | } 18 | } 19 | Thread.sleep(interval); 20 | } 21 | } catch (InterruptedException e) { 22 | Thread.currentThread().interrupt(); 23 | } 24 | } 25 | 26 | public static void sleep(long millis) { 27 | try { 28 | Thread.sleep(millis); 29 | } catch (InterruptedException e) { 30 | Thread.currentThread().interrupt(); 31 | } 32 | } 33 | } 34 | -------------------------------------------------------------------------------- /caravan-ribbon/src/test/resources/META-INF/app.properties: -------------------------------------------------------------------------------- 1 | app.id=921804 2 | -------------------------------------------------------------------------------- /caravan-ribbon/src/test/resources/soa.properties: -------------------------------------------------------------------------------- 1 | soa.monitorWithPingStatusTest.ribbon.local-cache.data-folder=/opt/data/ 2 | soa.backupRestoreTest.ribbon.local-cache.data-folder=/opt/data/ 3 | soa.serverSourceRestoreEventTest.ribbon.local-cache.data-folder=/opt/data/ 4 | 5 | soa.FilterInvalidEntitiesTest1.ribbon.local-cache.data-folder=/opt/data/ 6 | soa.FilterInvalidEntitiesTest2.ribbon.local-cache.data-folder=/opt/data/ 7 | soa.FilterInvalidEntitiesTest3.ribbon.local-cache.data-folder=/opt/data/ 8 | soa.FilterInvalidEntitiesTest4.ribbon.local-cache.data-folder=/opt/data/ 9 | 10 | soa.updateServerList_NotPingMinAvailableServerCount_Test.ribbon.min-available-server-count=3 11 | soa.RetainMinAvailableServerCount_MinAvailableServerCount_Test.ribbon.min-available-server-count=4 12 | 13 | soa.ribbon.checkhealth.thread-count=4 -------------------------------------------------------------------------------- /caravan-util/.gitignore: -------------------------------------------------------------------------------- 1 | .project 2 | .classpath 3 | build/ 4 | .settings/ 5 | bin/ 6 | .gradle 7 | /target/ 8 | -------------------------------------------------------------------------------- /caravan-util/src/main/java/com/ctrip/soa/caravan/util/net/apache/AlwaysRedirectStrategy.java: -------------------------------------------------------------------------------- 1 | package com.ctrip.soa.caravan.util.net.apache; 2 | 3 | import org.apache.http.HttpRequest; 4 | import org.apache.http.HttpResponse; 5 | import org.apache.http.HttpStatus; 6 | import org.apache.http.ProtocolException; 7 | import org.apache.http.impl.client.DefaultRedirectStrategy; 8 | import org.apache.http.protocol.HttpContext; 9 | 10 | /** 11 | * Created by Qiang Zhao on 10/05/2016. 12 | */ 13 | public class AlwaysRedirectStrategy extends DefaultRedirectStrategy { 14 | 15 | public static final AlwaysRedirectStrategy DEFAULT = new AlwaysRedirectStrategy(); 16 | 17 | @Override 18 | public boolean isRedirected(final HttpRequest request, final HttpResponse response, final HttpContext context) throws ProtocolException { 19 | if (super.isRedirected(request, response, context)) 20 | return true; 21 | 22 | int statusCode = response.getStatusLine().getStatusCode(); 23 | return isRedirected(statusCode); 24 | } 25 | 26 | protected boolean isRedirected(int statusCode) { 27 | return statusCode == HttpStatus.SC_TEMPORARY_REDIRECT; 28 | } 29 | 30 | } 31 | -------------------------------------------------------------------------------- /caravan-util/src/main/java/com/ctrip/soa/caravan/util/net/apache/DefaultConnectionConfig.java: -------------------------------------------------------------------------------- 1 | package com.ctrip.soa.caravan.util.net.apache; 2 | 3 | /** 4 | * Created by Qiang Zhao on 10/05/2016. 5 | */ 6 | public final class DefaultConnectionConfig { 7 | 8 | public static final int DEFAULT_MAX_CONNECTIONS_PER_ROUTE = 10 * 1000; 9 | public static final int DEFAULT_MAX_TOTAL_CONNECTIONS = 200 * 1000; 10 | public static final int DEFAULT_CONNECTION_TTL = 5 * 60 * 1000; 11 | public static final int DEFAULT_INACTIVITY_TIME_BEFORE_VALIDATE = 10 * 1000; 12 | public static final int DEFAULT_CONNECTION_IDLE_TIME = 30 * 1000; 13 | public static final int DEFAULT_CLEAN_CHECK_INTERVAL = 5 * 1000; 14 | 15 | private DefaultConnectionConfig() { 16 | 17 | } 18 | 19 | } 20 | -------------------------------------------------------------------------------- /caravan-util/src/main/java/com/ctrip/soa/caravan/util/net/apache/HttpConnectException.java: -------------------------------------------------------------------------------- 1 | package com.ctrip.soa.caravan.util.net.apache; 2 | 3 | /** 4 | * Created by Qiang Zhao on 10/05/2016. 5 | */ 6 | public class HttpConnectException extends RuntimeException { 7 | 8 | private static final long serialVersionUID = 1L; 9 | 10 | public HttpConnectException() { 11 | 12 | } 13 | 14 | public HttpConnectException(String message) { 15 | super(message); 16 | } 17 | 18 | public HttpConnectException(Throwable ex) { 19 | super(ex); 20 | } 21 | 22 | public HttpConnectException(String message, Throwable ex) { 23 | super(message, ex); 24 | } 25 | 26 | } 27 | -------------------------------------------------------------------------------- /caravan-util/src/main/java/com/ctrip/soa/caravan/util/net/apache/async/IOReactorRuntimeException.java: -------------------------------------------------------------------------------- 1 | package com.ctrip.soa.caravan.util.net.apache.async; 2 | 3 | import org.apache.http.nio.reactor.IOReactorException; 4 | 5 | /** 6 | * Created by Qiang Zhao on 10/05/2016. 7 | */ 8 | public class IOReactorRuntimeException extends RuntimeException { 9 | 10 | private static final long serialVersionUID = 1L; 11 | 12 | public IOReactorRuntimeException(IOReactorException ex) { 13 | super(ex); 14 | } 15 | 16 | } 17 | -------------------------------------------------------------------------------- /caravan-util/src/main/java/com/ctrip/soa/caravan/util/net/apache/trace/DefaultLogFunc.java: -------------------------------------------------------------------------------- 1 | package com.ctrip.soa.caravan.util.net.apache.trace; 2 | 3 | import org.slf4j.Logger; 4 | import org.slf4j.LoggerFactory; 5 | 6 | /** 7 | * Created by Qiang Zhao on 10/25/2017. 8 | */ 9 | public class DefaultLogFunc implements LogFunc { 10 | 11 | private static final Logger _logger = LoggerFactory.getLogger(DefaultLogFunc.class); 12 | 13 | public static final DefaultLogFunc DEFAULT = new DefaultLogFunc(); 14 | 15 | @Override 16 | public void log(String message, String... args) { 17 | _logger.info(message); 18 | } 19 | 20 | } 21 | -------------------------------------------------------------------------------- /caravan-util/src/main/java/com/ctrip/soa/caravan/util/net/apache/trace/LogFunc.java: -------------------------------------------------------------------------------- 1 | package com.ctrip.soa.caravan.util.net.apache.trace; 2 | 3 | /** 4 | * Created by Qiang Zhao on 10/25/2017. 5 | */ 6 | public interface LogFunc { 7 | 8 | void log(String message, String... args); 9 | 10 | } 11 | -------------------------------------------------------------------------------- /caravan-util/src/main/java/com/ctrip/soa/caravan/util/ratelimiter/RateLimiter.java: -------------------------------------------------------------------------------- 1 | package com.ctrip.soa.caravan.util.ratelimiter; 2 | 3 | /** 4 | * Created by Qiang Zhao on 10/05/2016. 5 | */ 6 | public interface RateLimiter { 7 | 8 | String rateLimiterId(); 9 | 10 | boolean isRateLimited(String identity); 11 | 12 | } 13 | -------------------------------------------------------------------------------- /caravan-util/src/main/java/com/ctrip/soa/caravan/util/ratelimiter/RateLimiterManagerConfig.java: -------------------------------------------------------------------------------- 1 | package com.ctrip.soa.caravan.util.ratelimiter; 2 | 3 | import com.ctrip.soa.caravan.common.value.checker.NullArgumentChecker; 4 | import com.ctrip.soa.caravan.configuration.facade.TypedDynamicCachedCorrectedProperties; 5 | 6 | /** 7 | * Created by Qiang Zhao on 10/05/2016. 8 | */ 9 | public class RateLimiterManagerConfig { 10 | 11 | private TypedDynamicCachedCorrectedProperties _properties; 12 | 13 | public RateLimiterManagerConfig(TypedDynamicCachedCorrectedProperties properties) { 14 | NullArgumentChecker.DEFAULT.check(properties, "properties"); 15 | _properties = properties; 16 | } 17 | 18 | public TypedDynamicCachedCorrectedProperties properties() { 19 | return _properties; 20 | } 21 | 22 | } 23 | -------------------------------------------------------------------------------- /caravan-util/src/main/java/com/ctrip/soa/caravan/util/safelist/SafeList.java: -------------------------------------------------------------------------------- 1 | package com.ctrip.soa.caravan.util.safelist; 2 | 3 | import java.util.List; 4 | 5 | /** 6 | * Created by Qiang Zhao on 10/05/2016. 7 | */ 8 | public interface SafeList { 9 | 10 | String safeListId(); 11 | 12 | List list(); 13 | 14 | boolean check(T item); 15 | 16 | } 17 | -------------------------------------------------------------------------------- /caravan-util/src/main/java/com/ctrip/soa/caravan/util/safelist/SafeListChecker.java: -------------------------------------------------------------------------------- 1 | package com.ctrip.soa.caravan.util.safelist; 2 | 3 | import java.util.List; 4 | 5 | /** 6 | * Created by Qiang Zhao on 10/05/2016. 7 | */ 8 | public interface SafeListChecker { 9 | 10 | boolean check(List list, T item); 11 | 12 | } 13 | -------------------------------------------------------------------------------- /caravan-util/src/main/java/com/ctrip/soa/caravan/util/safelist/SafeListConfig.java: -------------------------------------------------------------------------------- 1 | package com.ctrip.soa.caravan.util.safelist; 2 | 3 | import java.util.ArrayList; 4 | import java.util.List; 5 | 6 | import com.ctrip.soa.caravan.common.value.checker.NullArgumentChecker; 7 | 8 | /** 9 | * Created by Qiang Zhao on 10/05/2016. 10 | */ 11 | public class SafeListConfig { 12 | 13 | public static final String ENABLED_PROPERTY_KEY = "enabled"; 14 | public static final String LIST_PROPERTY_KEY = "list"; 15 | 16 | private SafeListChecker _checker; 17 | private boolean _enabled; 18 | private List _list; 19 | 20 | public SafeListConfig(SafeListChecker checker) { 21 | this(checker, false, new ArrayList()); 22 | } 23 | 24 | public SafeListConfig(SafeListChecker checker, boolean enabled, List list) { 25 | NullArgumentChecker.DEFAULT.check(checker, "checker"); 26 | NullArgumentChecker.DEFAULT.check(list, "list"); 27 | 28 | _checker = checker; 29 | _enabled = enabled; 30 | _list = list; 31 | } 32 | 33 | public SafeListChecker checker() { 34 | return _checker; 35 | } 36 | 37 | public boolean enabled() { 38 | return _enabled; 39 | } 40 | 41 | public List list() { 42 | return _list; 43 | } 44 | 45 | } 46 | -------------------------------------------------------------------------------- /caravan-util/src/main/java/com/ctrip/soa/caravan/util/safelist/SafeListManagerConfig.java: -------------------------------------------------------------------------------- 1 | package com.ctrip.soa.caravan.util.safelist; 2 | 3 | import java.util.List; 4 | 5 | import com.ctrip.soa.caravan.common.value.checker.NullArgumentChecker; 6 | import com.ctrip.soa.caravan.common.value.parser.ValueParser; 7 | import com.ctrip.soa.caravan.configuration.facade.TypedDynamicCachedCorrectedProperties; 8 | 9 | /** 10 | * Created by Qiang Zhao on 10/05/2016. 11 | */ 12 | public class SafeListManagerConfig { 13 | 14 | private TypedDynamicCachedCorrectedProperties _properties; 15 | private ValueParser> _valueParser; 16 | 17 | public SafeListManagerConfig(TypedDynamicCachedCorrectedProperties properties, ValueParser> valueParser) { 18 | NullArgumentChecker.DEFAULT.check(properties, "properties"); 19 | NullArgumentChecker.DEFAULT.check(valueParser, "valueParser"); 20 | _properties = properties; 21 | _valueParser = valueParser; 22 | } 23 | 24 | public TypedDynamicCachedCorrectedProperties properties() { 25 | return _properties; 26 | } 27 | 28 | public ValueParser> valueParser() { 29 | return _valueParser; 30 | } 31 | 32 | } 33 | -------------------------------------------------------------------------------- /caravan-util/src/main/java/com/ctrip/soa/caravan/util/safelist/checker/BlackListChecker.java: -------------------------------------------------------------------------------- 1 | package com.ctrip.soa.caravan.util.safelist.checker; 2 | 3 | import java.util.List; 4 | 5 | import com.ctrip.soa.caravan.common.value.CollectionValues; 6 | import com.ctrip.soa.caravan.util.safelist.SafeListChecker; 7 | 8 | /** 9 | * Created by Qiang Zhao on 10/05/2016. 10 | */ 11 | public class BlackListChecker implements SafeListChecker { 12 | 13 | public static BlackListChecker DEFAULT = new BlackListChecker<>(); 14 | 15 | @Override 16 | public boolean check(List list, T item) { 17 | if (CollectionValues.isNullOrEmpty(list)) 18 | return true; 19 | 20 | return !list.contains(item); 21 | } 22 | 23 | } 24 | -------------------------------------------------------------------------------- /caravan-util/src/main/java/com/ctrip/soa/caravan/util/safelist/checker/WhiteListChecker.java: -------------------------------------------------------------------------------- 1 | package com.ctrip.soa.caravan.util.safelist.checker; 2 | 3 | import java.util.List; 4 | 5 | import com.ctrip.soa.caravan.common.value.CollectionValues; 6 | import com.ctrip.soa.caravan.util.safelist.SafeListChecker; 7 | 8 | /** 9 | * Created by Qiang Zhao on 10/05/2016. 10 | */ 11 | public class WhiteListChecker implements SafeListChecker { 12 | 13 | public static final WhiteListChecker DEFAULT = new WhiteListChecker<>(); 14 | 15 | @Override 16 | public boolean check(List list, T item) { 17 | if (CollectionValues.isNullOrEmpty(list)) 18 | return true; 19 | 20 | return list.contains(item); 21 | } 22 | 23 | } 24 | -------------------------------------------------------------------------------- /caravan-util/src/main/java/com/ctrip/soa/caravan/util/serializer/date/ShortDateSerializer.java: -------------------------------------------------------------------------------- 1 | package com.ctrip.soa.caravan.util.serializer.date; 2 | 3 | import com.ctrip.soa.caravan.common.value.DateValues; 4 | 5 | /** 6 | * Created by Qiang Zhao on 10/05/2016. 7 | */ 8 | public class ShortDateSerializer extends AbstractDateSerializer { 9 | 10 | public static final String DATE_PATTERN = "\\d{4}-\\d{2}-\\d{2}"; 11 | 12 | public static final ShortDateSerializer INSTANCE = new ShortDateSerializer(); 13 | 14 | public ShortDateSerializer() { 15 | super(DateValues.SHORT_DATE_FORMAT, DATE_PATTERN, null); 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /caravan-util/src/main/java/com/ctrip/soa/caravan/util/serializer/date/SimpleDateSerializer.java: -------------------------------------------------------------------------------- 1 | package com.ctrip.soa.caravan.util.serializer.date; 2 | 3 | import com.ctrip.soa.caravan.common.value.DateValues; 4 | 5 | /** 6 | * Created by Qiang Zhao on 10/05/2016. 7 | */ 8 | public class SimpleDateSerializer extends AbstractDateSerializer { 9 | 10 | public static final String DATE_PATTERN = "\\d{4}-\\d{2}-\\d{2}\\s\\d{2}{2}:\\d{2}{2}:\\d{2}{2}"; 11 | 12 | public static final SimpleDateSerializer INSTANCE = new SimpleDateSerializer(); 13 | 14 | private SimpleDateSerializer() { 15 | super(DateValues.SIMPLE_DATE_FORMAT, DATE_PATTERN, null); 16 | } 17 | 18 | } 19 | -------------------------------------------------------------------------------- /caravan-util/src/main/java/com/ctrip/soa/caravan/util/serializer/date/StandardDateSerializer.java: -------------------------------------------------------------------------------- 1 | package com.ctrip.soa.caravan.util.serializer.date; 2 | 3 | import com.ctrip.soa.caravan.common.value.DateValues; 4 | import com.ctrip.soa.caravan.common.value.parser.StandardDateFormatTimeZoneParser; 5 | 6 | /** 7 | * Created by Qiang Zhao on 10/05/2016. 8 | */ 9 | public class StandardDateSerializer extends AbstractDateSerializer { 10 | 11 | public static final String DATE_PATTERN = "\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}\\.\\d{3}(((-|\\+)\\d{2}:\\d{2})|Z)"; 12 | 13 | public static final StandardDateSerializer INSTANCE = new StandardDateSerializer(); 14 | 15 | private StandardDateSerializer() { 16 | super(DateValues.STANDARD_DATE_FORMAT, DATE_PATTERN, StandardDateFormatTimeZoneParser.INSTANCE); 17 | } 18 | 19 | } 20 | -------------------------------------------------------------------------------- /caravan-util/src/main/java/com/ctrip/soa/caravan/util/serializer/date/StandardSimpleDateSerializer.java: -------------------------------------------------------------------------------- 1 | package com.ctrip.soa.caravan.util.serializer.date; 2 | 3 | import com.ctrip.soa.caravan.common.value.DateValues; 4 | 5 | /** 6 | * Created by w.jian on 10/05/2016. 7 | */ 8 | public class StandardSimpleDateSerializer extends AbstractDateSerializer { 9 | 10 | public static final String DATE_PATTERN = "\\d{4}-\\d{2}-\\d{2}T\\d{2}{2}:\\d{2}{2}:\\d{2}{2}"; 11 | 12 | public static final StandardSimpleDateSerializer INSTANCE = new StandardSimpleDateSerializer(); 13 | 14 | public StandardSimpleDateSerializer() { 15 | super(DateValues.STANDARD_SIMPLE_DATE_FORMAT, DATE_PATTERN, null); 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /caravan-util/src/main/java/com/ctrip/soa/caravan/util/serializer/filterable/FilterableProperty.java: -------------------------------------------------------------------------------- 1 | package com.ctrip.soa.caravan.util.serializer.filterable; 2 | 3 | import java.util.Map; 4 | import java.util.concurrent.ConcurrentHashMap; 5 | 6 | import com.ctrip.soa.caravan.common.value.checker.StringArgumentChecker; 7 | 8 | /** 9 | * Created by Qiang Zhao on 10/05/2016. 10 | */ 11 | public class FilterableProperty { 12 | 13 | private String _propertyName; 14 | private ConcurrentHashMap _metadata; 15 | private volatile SerializationFilter _serializationFilter; 16 | 17 | public FilterableProperty(String propertyName) { 18 | StringArgumentChecker.DEFAULT.check(propertyName, "propertyName"); 19 | _propertyName = propertyName; 20 | _metadata = new ConcurrentHashMap<>(); 21 | } 22 | 23 | public String name() { 24 | return _propertyName; 25 | } 26 | 27 | public Map metadata() { 28 | return _metadata; 29 | } 30 | 31 | public SerializationFilter getSerializationFilter() { 32 | return _serializationFilter; 33 | } 34 | 35 | public void setSerializationFilter(SerializationFilter serializationFilter) { 36 | _serializationFilter = serializationFilter; 37 | } 38 | 39 | } 40 | -------------------------------------------------------------------------------- /caravan-util/src/main/java/com/ctrip/soa/caravan/util/serializer/filterable/SerializationFilter.java: -------------------------------------------------------------------------------- 1 | package com.ctrip.soa.caravan.util.serializer.filterable; 2 | 3 | /** 4 | * Created by Qiang Zhao on 10/05/2016. 5 | */ 6 | public interface SerializationFilter { 7 | 8 | Object filter(FilterableProperty property, Object value); 9 | 10 | } 11 | -------------------------------------------------------------------------------- /caravan-util/src/main/java/com/ctrip/soa/caravan/util/serializer/ssjson/TypeAlias.java: -------------------------------------------------------------------------------- 1 | package com.ctrip.soa.caravan.util.serializer.ssjson; 2 | 3 | import java.lang.annotation.ElementType; 4 | import java.lang.annotation.Retention; 5 | import java.lang.annotation.RetentionPolicy; 6 | import java.lang.annotation.Target; 7 | 8 | /** 9 | * Created by Jinhua Liang on 10/05/2016. 10 | */ 11 | @Target({ ElementType.TYPE }) 12 | @Retention(RetentionPolicy.RUNTIME) 13 | public @interface TypeAlias { 14 | public String value(); 15 | } 16 | -------------------------------------------------------------------------------- /caravan-util/src/test/java/com/ctrip/soa/caravan/util/id/UnsafeIDGeneratorTest.java: -------------------------------------------------------------------------------- 1 | package com.ctrip.soa.caravan.util.id; 2 | 3 | import org.junit.Assert; 4 | import org.junit.Test; 5 | 6 | /** 7 | * Created by Qiang Zhao on 10/05/2016. 8 | */ 9 | public class UnsafeIDGeneratorTest { 10 | 11 | @Test 12 | public void timeBasedRandom() { 13 | int length = 20; 14 | String id = UnsafeIDGenerator.timeBasedRandom(length); 15 | Assert.assertEquals(id.length(), length); 16 | System.out.println(id); 17 | } 18 | 19 | @Test 20 | public void timeBasedRandomMinLength() { 21 | int length = 17; 22 | String id = UnsafeIDGenerator.timeBasedRandom(length); 23 | Assert.assertNotEquals(length, id.length()); 24 | Assert.assertEquals(UnsafeIDGenerator.TIME_BASED_RANDOM_MIN_LENGTH, id.length()); 25 | System.out.println(id); 26 | } 27 | 28 | } 29 | -------------------------------------------------------------------------------- /caravan-util/src/test/java/com/ctrip/soa/caravan/util/serializer/Color.java: -------------------------------------------------------------------------------- 1 | package com.ctrip.soa.caravan.util.serializer; 2 | 3 | import com.fasterxml.jackson.annotation.JsonCreator; 4 | import com.fasterxml.jackson.annotation.JsonValue; 5 | 6 | /** 7 | * Created by w.jian on 2017/2/28. 8 | */ 9 | public enum Color { 10 | 11 | RED("Red"), 12 | 13 | GREEN("Green"), 14 | 15 | BLUE("Blue"); 16 | 17 | private final String value; 18 | 19 | Color(String value) { 20 | this.value = value; 21 | } 22 | 23 | @JsonValue 24 | public String value() { 25 | return value; 26 | } 27 | 28 | @JsonCreator 29 | public static Color fromValue(String v) { 30 | for (Color c: Color.values()) { 31 | if (c.value.equals(v)) { 32 | return c; 33 | } 34 | } 35 | throw new IllegalArgumentException(v); 36 | } 37 | } 38 | -------------------------------------------------------------------------------- /caravan-util/src/test/java/com/ctrip/soa/caravan/util/serializer/DateTimePojo.java: -------------------------------------------------------------------------------- 1 | package com.ctrip.soa.caravan.util.serializer; 2 | 3 | import java.util.GregorianCalendar; 4 | 5 | import javax.xml.datatype.XMLGregorianCalendar; 6 | 7 | import com.ctrip.soa.caravan.common.value.XMLValues; 8 | 9 | /** 10 | * Created by Qiang Zhao on 10/05/2016. 11 | */ 12 | public class DateTimePojo { 13 | 14 | public static final DateTimePojo SAMPLE; 15 | 16 | static { 17 | SAMPLE = new DateTimePojo(); 18 | // 2017-02-14 00:00:00, month is 0 based 19 | GregorianCalendar calendar = new GregorianCalendar(2017, 1, 14, 0, 0, 0); 20 | SAMPLE.setTime(XMLValues.toXMLGregorianCalendar(calendar)); 21 | } 22 | 23 | private XMLGregorianCalendar time; 24 | 25 | public XMLGregorianCalendar getTime() { 26 | return time; 27 | } 28 | 29 | public void setTime(XMLGregorianCalendar time) { 30 | this.time = time; 31 | } 32 | 33 | } 34 | -------------------------------------------------------------------------------- /caravan-util/src/test/java/com/ctrip/soa/caravan/util/serializer/SimpleEnumPojo.java: -------------------------------------------------------------------------------- 1 | package com.ctrip.soa.caravan.util.serializer; 2 | 3 | /** 4 | * Created by w.jian on 2017/2/28. 5 | */ 6 | public class SimpleEnumPojo { 7 | 8 | private Color color; 9 | 10 | public Color getColor() { 11 | return color; 12 | } 13 | 14 | public void setColor(Color color) { 15 | this.color = color; 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /caravan-util/src/test/java/com/ctrip/soa/caravan/util/serializer/date/StandardWithoutMillisecondDataTest.java: -------------------------------------------------------------------------------- 1 | package com.ctrip.soa.caravan.util.serializer.date; 2 | 3 | import org.junit.Assert; 4 | import org.junit.Test; 5 | 6 | /** 7 | * Created by Qiang Zhao on 10/05/2016. 8 | */ 9 | public class StandardWithoutMillisecondDataTest { 10 | 11 | @Test 12 | public void StandardWithoutMillisecondTest0() { 13 | String dateTime = "2017-04-21Q00:00:00+08:00"; 14 | Assert.assertFalse(StandardWithoutMillisecondDateSerializer.INSTANCE.isValid(dateTime)); 15 | } 16 | 17 | @Test 18 | public void StandardWithoutMillisecondTest1() { 19 | String dateTime = "2017-04-01T00:00:00+08:00"; 20 | Assert.assertTrue(StandardWithoutMillisecondDateSerializer.INSTANCE.isValid(dateTime)); 21 | } 22 | 23 | @Test 24 | public void StandardWithoutMillisecondTest2() { 25 | String dateTime = "2017-04-21T00:00:00Z"; 26 | Assert.assertTrue(StandardWithoutMillisecondDateSerializer.INSTANCE.isValid(dateTime)); 27 | } 28 | 29 | @Test 30 | public void StandardWithoutMillisecondTest3() { 31 | String dateTime = "2017-04-21T00:00:00"; 32 | Assert.assertTrue(StandardWithoutMillisecondDateSerializer.INSTANCE.isValid(dateTime)); 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /caravan-util/src/test/java/com/ctrip/soa/caravan/util/serializer/ssjson/TestEntity.java: -------------------------------------------------------------------------------- 1 | package com.ctrip.soa.caravan.util.serializer.ssjson; 2 | 3 | /** 4 | * Created by Qiang Zhao on 10/05/2016. 5 | */ 6 | public class TestEntity { 7 | 8 | private String value; 9 | 10 | public String getValue() { 11 | return value; 12 | } 13 | 14 | public void setValue(String value) { 15 | this.value = value; 16 | } 17 | 18 | } 19 | -------------------------------------------------------------------------------- /caravan-util/src/test/java/com/ctrip/soa/caravan/util/serializer/xml/ObjectFactory.java: -------------------------------------------------------------------------------- 1 | package com.ctrip.soa.caravan.util.serializer.xml; 2 | 3 | import javax.xml.bind.JAXBElement; 4 | import javax.xml.bind.annotation.XmlElementDecl; 5 | import javax.xml.namespace.QName; 6 | 7 | public class ObjectFactory { 8 | 9 | public final static QName QNAME = new QName("http://soa.ctrip.com/common/types/v1", "XMLPojo"); 10 | 11 | @XmlElementDecl(namespace = "http://soa.ctrip.com/common/types/v1", name = "XMLPojo") 12 | public JAXBElement createCheckHealthRequest(XMLPojo value) { 13 | return new JAXBElement(QNAME, XMLPojo.class, null, value); 14 | } 15 | 16 | } 17 | -------------------------------------------------------------------------------- /caravan-web/.gitignore: -------------------------------------------------------------------------------- 1 | .project 2 | .classpath 3 | build/ 4 | .settings/ 5 | bin/ 6 | .gradle 7 | /target/ 8 | -------------------------------------------------------------------------------- /caravan-web/src/main/java/com/ctrip/soa/caravan/web/configuration/source/servletcontext/ServletContextConfiguration.java: -------------------------------------------------------------------------------- 1 | package com.ctrip.soa.caravan.web.configuration.source.servletcontext; 2 | 3 | import javax.servlet.ServletContext; 4 | 5 | import org.slf4j.Logger; 6 | import org.slf4j.LoggerFactory; 7 | 8 | import com.ctrip.soa.caravan.common.value.StringValues; 9 | import com.ctrip.soa.caravan.common.value.checker.NullArgumentChecker; 10 | import com.ctrip.soa.caravan.configuration.Configuration; 11 | 12 | /** 13 | * Created by Qiang Zhao on 10/05/2016. 14 | */ 15 | public class ServletContextConfiguration implements Configuration { 16 | 17 | private static final Logger _logger = LoggerFactory.getLogger(ServletContextConfiguration.class); 18 | 19 | private ServletContext _context; 20 | 21 | public ServletContextConfiguration(final ServletContext context) { 22 | NullArgumentChecker.DEFAULT.check(context, "context"); 23 | _context = context; 24 | } 25 | 26 | @Override 27 | public String getPropertyValue(String key) { 28 | if (StringValues.isNullOrWhitespace(key)) { 29 | _logger.warn("ServletContext key is null or empty!"); 30 | return null; 31 | } 32 | String value = _context.getInitParameter(key); 33 | return value; 34 | } 35 | } -------------------------------------------------------------------------------- /caravan-web/src/main/java/com/ctrip/soa/caravan/web/configuration/source/servletcontext/ServletContextConfigurationSource.java: -------------------------------------------------------------------------------- 1 | package com.ctrip.soa.caravan.web.configuration.source.servletcontext; 2 | 3 | import javax.servlet.ServletContext; 4 | 5 | import com.ctrip.soa.caravan.configuration.AbstractConfigurationSource; 6 | import com.ctrip.soa.caravan.configuration.Configuration; 7 | 8 | /** 9 | * Created by Qiang Zhao on 10/05/2016. 10 | */ 11 | public class ServletContextConfigurationSource extends AbstractConfigurationSource { 12 | 13 | private ServletContextConfiguration _configuration; 14 | 15 | public ServletContextConfigurationSource(final int priority, final ServletContext context) { 16 | super(priority, "ServletContext"); 17 | _configuration = new ServletContextConfiguration(context); 18 | } 19 | 20 | @Override 21 | public Configuration configuration() { 22 | return _configuration; 23 | } 24 | } -------------------------------------------------------------------------------- /caravan-web/src/test/java/com/ctrip/soa/caravan/web/configuration/source/servletcontext/ServletContextConfigurationTest.java: -------------------------------------------------------------------------------- 1 | package com.ctrip.soa.caravan.web.configuration.source.servletcontext; 2 | 3 | import static org.junit.Assert.assertEquals; 4 | 5 | import org.junit.Test; 6 | 7 | import com.ctrip.soa.caravan.web.configuration.source.servletcontext.ServletContextConfiguration; 8 | 9 | /** 10 | * Created by Qiang Zhao on 10/05/2016. 11 | */ 12 | public class ServletContextConfigurationTest { 13 | 14 | @Test 15 | public void testGetPropertyValue() { 16 | ServletContextConfiguration scc = new ServletContextConfiguration(new MyServletContext()); 17 | assertEquals(scc.getPropertyValue("service-port"), "8090"); 18 | assertEquals(scc.getPropertyValue("env"), "fws"); 19 | } 20 | } --------------------------------------------------------------------------------