From 7e0443d34bf4da296ea0a28a232c8581875ebd72 Mon Sep 17 00:00:00 2001 From: Artem Bilan Date: Wed, 6 Jul 2016 17:09:19 -0400 Subject: [PATCH] Some upgrades and polishing --- spring-integration-hazelcast/.travis.yml | 12 + spring-integration-hazelcast/README.md | 323 +++++++++--------- spring-integration-hazelcast/build.gradle | 44 +-- .../gradle.properties | 1 + .../gradle/wrapper/gradle-wrapper.jar | Bin 52271 -> 53319 bytes .../gradle/wrapper/gradle-wrapper.properties | 4 +- spring-integration-hazelcast/gradlew | 52 +-- spring-integration-hazelcast/gradlew.bat | 8 +- 8 files changed, 231 insertions(+), 213 deletions(-) create mode 100644 spring-integration-hazelcast/.travis.yml diff --git a/spring-integration-hazelcast/.travis.yml b/spring-integration-hazelcast/.travis.yml new file mode 100644 index 0000000..9dc3b58 --- /dev/null +++ b/spring-integration-hazelcast/.travis.yml @@ -0,0 +1,12 @@ +language: java +jdk: oraclejdk8 +sudo: false +before_cache: + - rm -f $HOME/.gradle/caches/modules-2/modules-2.lock +cache: + directories: + - $HOME/.gradle/caches/ + - $HOME/.gradle/wrapper/ +install: true +script: + - ./gradlew check --refresh-dependencies --no-daemon diff --git a/spring-integration-hazelcast/README.md b/spring-integration-hazelcast/README.md index 303f80b..dc9795b 100644 --- a/spring-integration-hazelcast/README.md +++ b/spring-integration-hazelcast/README.md @@ -1,19 +1,19 @@ SPRING INTEGRATION HAZELCAST SUPPORT ==================================== -## HAZELCAST EVENT-DRIVEN INBOUND CHANNEL ADAPTER +## HAZELCAST EVENT-DRIVEN INBOUND CHANNEL ADAPTER -Hazelcast provides distributed data structures such as +Hazelcast provides distributed data structures such as -* com.hazelcast.core.IMap, -* com.hazelcast.core.MultiMap, -* com.hazelcast.core.IList, -* com.hazelcast.core.ISet, -* com.hazelcast.core.IQueue, +* com.hazelcast.core.IMap, +* com.hazelcast.core.MultiMap, +* com.hazelcast.core.IList, +* com.hazelcast.core.ISet, +* com.hazelcast.core.IQueue, * com.hazelcast.core.ITopic, -* com.hazelcast.core.ReplicatedMap. +* com.hazelcast.core.ReplicatedMap. -It also provides event listeners in order to listen to the modifications performed on these data structures. +It also provides event listeners in order to listen to the modifications performed on these data structures. * com.hazelcast.core.EntryListener * com.hazelcast.core.ItemListener @@ -23,134 +23,134 @@ Hazelcast Event-Driven Inbound Channel Adapter listens related cache events and #### XML Driven Configuration : ``` - + cache-listening-policy="SINGLE" /> ``` -Basically, Hazelcast Event-Driven Inbound Channel Adapter requires following attributes : +Basically, Hazelcast Event-Driven Inbound Channel Adapter requires following attributes : * **channel :** Specifies channel which message is sent. * **cache :** Specifies the distributed Object reference which is listened. It is mandatory attribute. -* **cache-events :** Specifies cache events which are listened. It is optional attribute and its default value is ADDED. Its supported values are as follows : +* **cache-events :** Specifies cache events which are listened. It is optional attribute and its default value is ADDED. Its supported values are as follows : -1. Supported cache event types for IMap and MultiMap : ADDED, REMOVED, UPDATED, EVICTED, EVICT_ALL and CLEAR_ALL. -2. Supported cache event types for ReplicatedMap : ADDED, REMOVED, UPDATED, EVICTED. -3. Supported cache event types for IList, ISet and IQueue : ADDED, REMOVED. -4. There is no need to cache event type definition for ITopic. +1. Supported cache event types for IMap and MultiMap : ADDED, REMOVED, UPDATED, EVICTED, EVICT_ALL and CLEAR_ALL. +2. Supported cache event types for ReplicatedMap : ADDED, REMOVED, UPDATED, EVICTED. +3. Supported cache event types for IList, ISet and IQueue : ADDED, REMOVED. +4. There is no need to cache event type definition for ITopic. * **cache-listening-policy :** Specifies cache listening policy as SINGLE or ALL. It is optional attribute and its default value is SINGLE. Each Hazelcast inbound channel adapter listening same cache object with same cache-events attribute, can receive a single event message or all event messages. If it is ALL, all Hazelcast inbound channel adapters listening same cache object with same cache-events attribute, will receive same event messages. If it is SINGLE, they will receive unique event messages. -Sample namespace and schemaLocation definitions are as follows : +Sample namespace and schemaLocation definitions are as follows : ``` xmlns:int-hazelcast= “http://www.springframework.org/schema/integration/hazelcast” xsi:schemaLocation="http://www.springframework.org/schema/integration/hazelcast http://www.springframework.org/schema/integration/hazelcast/spring-integration-hazelcast.xsd” ``` -Sample definitions are as follows : +Sample definitions are as follows : -**Distributed Map :** +**Distributed Map :** ``` - + - + - - - + + + - - - - - + + + + + ``` -**Distributed MultiMap :** +**Distributed MultiMap :** ``` - + - + - - - + + + ``` -**Distributed List :** +**Distributed List :** ``` - + - + cache-listening-policy="ALL" /> - - - + + + ``` -**Distributed Set :** +**Distributed Set :** ``` - + - + - - - + + + ``` **Distributed Queue :** ``` - + - + cache-listening-policy="ALL" /> - - + + ``` -**Distributed Topic :** +**Distributed Topic :** ``` - + - + - - - + + + ``` -**Replicated Map :** +**Replicated Map :** ``` - + - + cache-listening-policy="SINGLE" /> - - - - - - - - + + + + + + + + ``` #### JavaConfig Driven Configuration : @@ -193,45 +193,45 @@ Hazelcast Continuous Query enables to listen to the modifications performed on s #### XML Driven Configuration : ``` - + cache-listening-policy="SINGLE" /> ``` -Basically, it requires four attributes as follows : +Basically, it requires four attributes as follows : * **channel :** Specifies channel which message is sent. -* **cache :** Specifies distributed Map reference which is listened. It is mandatory attribute. -* **cache-events :** Specifies cache events which are listened. It is optional attribute with ADDED default value. Supported values are ADDED, REMOVED, UPDATED, EVICTED, EVICT_ALL and CLEAR_ALL. +* **cache :** Specifies distributed Map reference which is listened. It is mandatory attribute. +* **cache-events :** Specifies cache events which are listened. It is optional attribute with ADDED default value. Supported values are ADDED, REMOVED, UPDATED, EVICTED, EVICT_ALL and CLEAR_ALL. * **predicate :** Specifies predicate to listen to the modifications performed on specific map entries. It is mandatory attribute. * **include-value :** Specifies including of value and oldValue in continuous query result. It is optional attribute with 'true' default value. * **cache-listening-policy :** Specifies cache listening policy as SINGLE or ALL. It is optional attribute and its default value is SINGLE. Each Hazelcast CQ inbound channel adapter listening same cache object with same cache-events attribute, can receive a single event message or all event messages. If it is ALL, all Hazelcast CQ inbound channel adapters listening same cache object with same cache-events attribute, will receive same event messages. If it is SINGLE, they will receive unique event messages. -Sample definition is as follows : +Sample definition is as follows : ``` - + - + cache-listening-policy="SINGLE"/> - - - + + + - - - - - + + + + + ``` #### JavaConfig Driven Configuration : @@ -265,38 +265,38 @@ public HazelcastContinuousQueryMessageProducer hazelcastContinuousQueryMessagePr ``` **Reference :** http://docs.hazelcast.org/docs/latest/manual/html/continuousquery.html -## HAZELCAST CLUSTER MONITOR INBOUND CHANNEL ADAPTER +## HAZELCAST CLUSTER MONITOR INBOUND CHANNEL ADAPTER Hazelcast Cluster Monitor enables to listen to the modifications performed on cluster. Hazelcast Cluster Monitor Inbound Channel Adapter is an event-driven channel adapter and listens to related Membership, Distributed Object, Migration, Lifecycle and Client events. It supports both XML and JavaConfig driven configurations. #### XML Driven Configuration : ``` - + ``` -Basically, it requires four attributes as follows : +Basically, it requires four attributes as follows : * **channel :** Specifies channel which message is sent. -* **hazelcast-instance :** Specifies Hazelcast Instance reference to listen cluster events. It is mandatory attribute. +* **hazelcast-instance :** Specifies Hazelcast Instance reference to listen cluster events. It is mandatory attribute. * **monitor-types :** Specifies monitor types which are listened. It is optional attribute with MEMBERSHIP default value. Supported values are MEMBERSHIP, DISTRIBUTED_OBJECT, MIGRATION, LIFECYCLE, CLIENT. -Sample definition is as follows : +Sample definition is as follows : ``` - + - + - - - - - + + + + + ``` #### JavaConfig Driven Configuration : @@ -320,52 +320,52 @@ public HazelcastClusterMonitorMessageProducer hazelcastClusterMonitorMessageProd return producer; } ``` -**Reference :** http://docs.hazelcast.org/docs/latest/manual/html/distributedevents.html +**Reference :** http://docs.hazelcast.org/docs/latest/manual/html/distributedevents.html -## HAZELCAST DISTRIBUTED-SQL INBOUND CHANNEL ADAPTER +## HAZELCAST DISTRIBUTED-SQL INBOUND CHANNEL ADAPTER Hazelcast allows to run distributed queries on the distributed map. Hazelcast Distributed SQL Inbound Channel Adapter is a poller-driven inbound channel adapter. It runs defined distributed-sql and returns results in the light of iteration type. It supports both XML and JavaConfig driven configurations. #### XML Driven Configuration : ``` - + iteration-type="ENTRY" + distributed-sql="active=false OR age >= 25 OR name = 'TestName'"> - + ``` -Basically, it requires a poller and four attributes such as +Basically, it requires a poller and four attributes such as -* **channel :** Specifies channel which message is sent. It is mandatory attribute. -* **cache :** Specifies distributed Map reference which is queried. It is mandatory attribute. -* **iteration-type :** Specifies result type. Distributed SQL can be run on EntrySet, KeySet, LocalKeySet or Values. It is optional attribute with VALUE default value. Supported values are ENTRY, KEY, LOCAL_KEY and VALUE. -* **distributed-sql :** Specifies where clause of sql statement. It is mandatory attribute. +* **channel :** Specifies channel which message is sent. It is mandatory attribute. +* **cache :** Specifies distributed Map reference which is queried. It is mandatory attribute. +* **iteration-type :** Specifies result type. Distributed SQL can be run on EntrySet, KeySet, LocalKeySet or Values. It is optional attribute with VALUE default value. Supported values are ENTRY, KEY, LOCAL_KEY and VALUE. +* **distributed-sql :** Specifies where clause of sql statement. It is mandatory attribute. -Sample definition is as follows : +Sample definition is as follows : ``` - + - + - + - - - + + + - - - - - + + + + + ``` #### JavaConfig Driven Configuration : @@ -399,7 +399,7 @@ public HazelcastDistributedSQLMessageSource hazelcastDistributedSQLMessageSource **Reference :** http://docs.hazelcast.org/docs/latest/manual/html/distributedquery.html -## HAZELCAST OUTBOUND CHANNEL ADAPTER +## HAZELCAST OUTBOUND CHANNEL ADAPTER Hazelcast Outbound Channel Adapter listens its defined channel and writes incoming messages to related distributed cache. It expects one of cache, cache-expression or HazelcastHeaders.CACHE_NAME for distributed object definition. Supported Distributed Objects : IMap, MultiMap, ReplicatedMap, IList, ISet, IQueue and ITopic. It supports both XML and JavaConfig driven configurations. @@ -407,12 +407,12 @@ Hazelcast Outbound Channel Adapter listens its defined channel and writes incomi ``` ``` -Basically, it requires the following attributes : +Basically, it requires the following attributes : **channel :** Specifies channel which message is sent. * **cache :** Specifies distributed object reference. It is optional attribute. -* **cache-expression :** Specifies distributed object via Spring Expression Language(SpEL). It is optional attribute. -* **key-expression :** Specifies key of K,V pair via Spring Expression Language(SpEL). It is optional attribute and required for just IMap, MultiMap and ReplicatedMap distributed data structures. +* **cache-expression :** Specifies distributed object via Spring Expression Language(SpEL). It is optional attribute. +* **key-expression :** Specifies key of K,V pair via Spring Expression Language(SpEL). It is optional attribute and required for just IMap, MultiMap and ReplicatedMap distributed data structures. * **extract-payload :** Specifies whole message or just payload to send. It is optional attribute with **true** default value. If it is true, just payload will be written to distributed object. Otherwise, whole message will be written by covering both message header and payload. **Sample Definitions :** @@ -421,7 +421,7 @@ Basically, it requires the following attributes : ``` **OR** ``` - + ``` By setting distributed object name in the header, messages can be written to different distributed objects via same channel. @@ -467,13 +467,12 @@ you just need to create a `LeaderInitiator`. Example: ```java @Bean public HazelcastInstance hazelcastInstance() { - return Hazelcast.newHazelcastInstance(); + return Hazelcast.newHazelcastInstance(); } @Bean public LeaderInitiator initiator() { - LeaderInitiator initiator = new LeaderInitiator(hazelcastInstance()); - return initiator; + return new LeaderInitiator(hazelcastInstance()); } ``` diff --git a/spring-integration-hazelcast/build.gradle b/spring-integration-hazelcast/build.gradle index f242144..acd0d58 100644 --- a/spring-integration-hazelcast/build.gradle +++ b/spring-integration-hazelcast/build.gradle @@ -1,22 +1,27 @@ -description = 'Spring Integration Hazelcast Support' - -apply plugin: 'java' -apply from: "${rootProject.projectDir}/publish-maven.gradle" -apply plugin: 'eclipse' -apply plugin: 'idea' -apply plugin: 'jacoco' - -group = 'org.springframework.integration' - buildscript { repositories { maven { url 'http://repo.spring.io/plugins-release' } } dependencies { - classpath 'io.spring.gradle:spring-io-plugin:0.0.4.RELEASE' + classpath 'io.spring.gradle:spring-io-plugin:0.0.5.RELEASE' } } +plugins { + id "org.sonarqube" version "1.2" +} + +description = 'Spring Integration Hazelcast Support' + +apply plugin: 'java' +apply from: "${rootProject.projectDir}/publish-maven.gradle" +apply plugin: 'eclipse' +apply plugin: 'jacoco' +apply plugin: 'idea' + +group = 'org.springframework.integration' + + repositories { if (version.endsWith('BUILD-SNAPSHOT') || project.hasProperty('platformVersion')) { maven { url 'http://repo.spring.io/libs-snapshot' } @@ -39,9 +44,9 @@ if (project.hasProperty('platformVersion')) { sourceCompatibility = targetCompatibility = 1.7 ext { - hazelcastVersion = '3.6' - slf4jVersion = '1.7.13' - springIntegrationVersion = '4.2.4.RELEASE' + hazelcastVersion = '3.6.4' + slf4jVersion = '1.7.21' + springIntegrationVersion = '4.3.1.BUILD-SNAPSHOT' idPrefix = 'hazelcast' @@ -64,9 +69,12 @@ sourceSets { } jacoco { - toolVersion = "0.7.5.201505241946" + toolVersion = "0.7.6.201602180812" } +// enable all compiler warnings; individual projects may customize further +[compileJava, compileTestJava]*.options*.compilerArgs = ['-Xlint:all,-options,-processing'] + dependencies { compile "org.springframework.integration:spring-integration-core:$springIntegrationVersion" compile "com.hazelcast:hazelcast:$hazelcastVersion" @@ -116,10 +124,8 @@ artifacts { archives javadocJar } -apply plugin: 'sonar-runner' - -sonarRunner { - sonarProperties { +sonarqube { + properties { property "sonar.jacoco.reportPath", "${buildDir.name}/jacoco.exec" property "sonar.links.homepage", linkHomepage property "sonar.links.ci", linkCi diff --git a/spring-integration-hazelcast/gradle.properties b/spring-integration-hazelcast/gradle.properties index d45ca0e..dc3185f 100644 --- a/spring-integration-hazelcast/gradle.properties +++ b/spring-integration-hazelcast/gradle.properties @@ -1 +1,2 @@ version=1.0.0-BUILD-SNAPSHOT +org.gradle.daemon=true diff --git a/spring-integration-hazelcast/gradle/wrapper/gradle-wrapper.jar b/spring-integration-hazelcast/gradle/wrapper/gradle-wrapper.jar index 30d399d8d2bf522ff5de94bf434a7cc43a9a74b5..d3b83982b9b1bccad955349d702be9b884c6e049 100644 GIT binary patch delta 15577 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 \(.*\)$'` + if expr "$link" : '/.*' > /dev/null; then + PRG="$link" + else + PRG=`dirname "$PRG"`"/$link" + fi +done +SAVED="`pwd`" +cd "`dirname \"$PRG\"`/" >/dev/null +APP_HOME="`pwd -P`" +cd "$SAVED" >/dev/null APP_NAME="Gradle" APP_BASE_NAME=`basename "$0"` +# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +DEFAULT_JVM_OPTS="" + # Use the maximum available, or set MAX_FD != -1 to use that value. MAX_FD="maximum" @@ -30,6 +48,7 @@ die ( ) { cygwin=false msys=false darwin=false +nonstop=false case "`uname`" in CYGWIN* ) cygwin=true @@ -40,31 +59,11 @@ case "`uname`" in MINGW* ) msys=true ;; + NONSTOP* ) + nonstop=true + ;; esac -# For Cygwin, ensure paths are in UNIX format before anything is touched. -if $cygwin ; then - [ -n "$JAVA_HOME" ] && JAVA_HOME=`cygpath --unix "$JAVA_HOME"` -fi - -# Attempt to set APP_HOME -# Resolve links: $0 may be a link -PRG="$0" -# Need this for relative symlinks. -while [ -h "$PRG" ] ; do - ls=`ls -ld "$PRG"` - link=`expr "$ls" : '.*-> \(.*\)$'` - if expr "$link" : '/.*' > /dev/null; then - PRG="$link" - else - PRG=`dirname "$PRG"`"/$link" - fi -done -SAVED="`pwd`" -cd "`dirname \"$PRG\"`/" >&- -APP_HOME="`pwd -P`" -cd "$SAVED" >&- - CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar # Determine the Java command to use to start the JVM. @@ -90,7 +89,7 @@ location of your Java installation." fi # Increase the maximum file descriptors if we can. -if [ "$cygwin" = "false" -a "$darwin" = "false" ] ; then +if [ "$cygwin" = "false" -a "$darwin" = "false" -a "$nonstop" = "false" ] ; then MAX_FD_LIMIT=`ulimit -H -n` if [ $? -eq 0 ] ; then if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then @@ -114,6 +113,7 @@ fi if $cygwin ; then APP_HOME=`cygpath --path --mixed "$APP_HOME"` CLASSPATH=`cygpath --path --mixed "$CLASSPATH"` + JAVACMD=`cygpath --unix "$JAVACMD"` # We build the pattern for arguments to be converted via cygpath ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null` diff --git a/spring-integration-hazelcast/gradlew.bat b/spring-integration-hazelcast/gradlew.bat index aec9973..f6d5974 100644 --- a/spring-integration-hazelcast/gradlew.bat +++ b/spring-integration-hazelcast/gradlew.bat @@ -8,14 +8,14 @@ @rem Set local scope for the variables with windows NT shell if "%OS%"=="Windows_NT" setlocal -@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. -set DEFAULT_JVM_OPTS= - set DIRNAME=%~dp0 if "%DIRNAME%" == "" set DIRNAME=. set APP_BASE_NAME=%~n0 set APP_HOME=%DIRNAME% +@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +set DEFAULT_JVM_OPTS= + @rem Find java.exe if defined JAVA_HOME goto findJavaFromJavaHome @@ -46,7 +46,7 @@ echo location of your Java installation. goto fail :init -@rem Get command-line arguments, handling Windowz variants +@rem Get command-line arguments, handling Windows variants if not "%OS%" == "Windows_NT" goto win9xME_args if "%@eval[2+2]" == "4" goto 4NT_args