{"id":38963967,"url":"https://github.com/gemfire/spring-integration-for-vmware-gemfire","last_synced_at":"2026-01-17T16:27:30.769Z","repository":{"id":217564511,"uuid":"687622531","full_name":"gemfire/spring-integration-for-vmware-gemfire","owner":"gemfire","description":"Provides Spring Integration support for GemFire","archived":false,"fork":false,"pushed_at":"2025-10-15T00:23:53.000Z","size":242,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":18,"default_branch":"develop","last_synced_at":"2025-10-15T05:15:35.759Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/gemfire.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING_CLA.md","funding":null,"license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":"NOTICE","maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2023-09-05T16:52:17.000Z","updated_at":"2025-10-15T00:23:56.000Z","dependencies_parsed_at":"2024-04-17T02:30:03.298Z","dependency_job_id":"a2a75b13-f099-45bc-b8f6-f351861e217b","html_url":"https://github.com/gemfire/spring-integration-for-vmware-gemfire","commit_stats":null,"previous_names":["gemfire/spring-integration-for-vmware-gemfire"],"tags_count":6,"template":false,"template_full_name":null,"purl":"pkg:github/gemfire/spring-integration-for-vmware-gemfire","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gemfire%2Fspring-integration-for-vmware-gemfire","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gemfire%2Fspring-integration-for-vmware-gemfire/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gemfire%2Fspring-integration-for-vmware-gemfire/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gemfire%2Fspring-integration-for-vmware-gemfire/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/gemfire","download_url":"https://codeload.github.com/gemfire/spring-integration-for-vmware-gemfire/tar.gz/refs/heads/develop","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gemfire%2Fspring-integration-for-vmware-gemfire/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28511864,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-17T13:38:16.342Z","status":"ssl_error","status_checked_at":"2026-01-17T13:37:44.060Z","response_time":85,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2026-01-17T16:27:30.086Z","updated_at":"2026-01-17T16:27:30.757Z","avatar_url":"https://github.com/gemfire.png","language":"Java","funding_links":[],"categories":[],"sub_categories":[],"readme":"## Spring Integration for VMware GemFire\n\nSpring Integration provides support for VMware GemFire.\n\nYou need to include this dependency into your project:\n\n\n**Maven**\n```xml\n\u003cdependency\u003e\n    \u003cgroupId\u003eorg.springframework.integration\u003c/groupId\u003e\n    \u003cartifactId\u003espring-integration-gemfire\u003c/artifactId\u003e\n    \u003cversion\u003e{project-version}\u003c/version\u003e\n\u003c/dependency\u003e\n```\n\n**Gradle**\n```groovy\ncompile \"org.springframework.integration:spring-integration-gemfire:{project-version}\"\n```\n\nGemFire is a distributed data management platform that provides a key-value data grid along with advanced distributed system features, such as event processing, continuous querying, and remote function execution.\nThis guide assumes some familiarity with the commercial [VMware GemFire](https://www.vmware.com/products/gemfire.html).\n\nSpring Integration provides support for GemFire by implementing inbound adapters for entry and continuous query events, an outbound adapter to write entries to the cache, and message and metadata stores and `GemfireLockRegistry` implementations.\nSpring integration leverages the [Spring Data for VMware GemFire](https://docs.vmware.com/en/Spring-Data-for-VMware-GemFire/index.html) project, providing a thin wrapper over its components.\n\nTo configure the 'int-gfe' namespace, include the following elements within the headers of your XML configuration file:\n\n```xml\nxmlns:int-gfe=\"http://www.springframework.org/schema/integration/gemfire\"\nxsi:schemaLocation=\"http://www.springframework.org/schema/integration/gemfire\nhttps://www.springframework.org/schema/integration/gemfire/spring-integration-gemfire.xsd\"\n```\n\n### \u003ca id=\"gemfire-inbound\"\u003e\u003c/a\u003eInbound Channel Adapter\n\nThe inbound channel adapter produces messages on a channel when triggered by a GemFire `EntryEvent`.\nGemFire generates events whenever an entry is `CREATED`, `UPDATED`, `DESTROYED`, or `INVALIDATED` in the associated region.\nThe inbound channel adapter lets you filter on a subset of these events.\nFor example, you may want to produce messages only in response to an entry being created.\nIn addition, the inbound channel adapter can evaluate a SpEL expression if, for example, you want your message payload to contain an event property such as the new entry value.\nThe following example shows how to configure an inbound channel adapter with a SpEL language (in the `expression` attribute):\n\n```xml\n\u003cgfe:cache/\u003e\n\u003cgfe:replicated-region id=\"region\"/\u003e\n\u003cint-gfe:inbound-channel-adapter id=\"inputChannel\" region=\"region\"\ncache-events=\"CREATED\" expression=\"newValue\"/\u003e\n```\n\nThe preceding configuration creates a GemFire `Cache` and `Region` by using Spring GemFire's 'gfe' namespace.\nThe `inbound-channel-adapter` element requires a reference to the GemFire region on which the adapter listens for events.\nOptional attributes include `cache-events`, which can contain a comma-separated list of event types for which a message is produced on the input channel.\nBy default, `CREATED` and `UPDATED` are enabled.\nIf no `channel` attribute is provided, the channel is created from the `id` attribute.\nThis adapter also supports an `error-channel`.\nThe GemFire [`EntryEvent`](https://geode.apache.org/releases/latest/javadoc/org/apache/geode/cache/EntryEvent.html) is the `#root` object of the `expression` evaluation.\nThe following example shows an expression that replaces a value for a key:\n\n```\nexpression=\"new something.MyEvent(key, oldValue, newValue)\"\n```\n\nIf the `expression` attribute is not provided, the message payload is the GemFire `EntryEvent` itself.\n\nNOTE: This adapter conforms to Spring Integration conventions.\n\n### \u003ca id=\"gemfire-cq\"\u003e\u003c/a\u003eContinuous Query Inbound Channel Adapter\n\nThe continuous query inbound channel adapter produces messages on a channel when triggered by a GemFire continuous query or `CqEvent` event.\nSpring Data introduced continuous query support, including `ContinuousQueryListenerContainer`, which provides a nice abstraction over the GemFire native API.\nThis adapter requires a reference to a `ContinuousQueryListenerContainer` instance, creates a listener for a given `query`, and executes the query.\nThe continuous query acts as an event source that fires whenever its result set changes state.\n\nNOTE: GemFire queries are written in OQL and are scoped to the entire cache (not just one region).\nAdditionally, continuous queries require a remote (that is, running in a separate process or remote host) cache server.\nSee the [GemFire Continuous Queries](https://docs.vmware.com/en/VMware-GemFire/10.0/gf/developing-continuous_querying-chapter_overview.html) for more information on implementing continuous queries.\n\nThe following configuration creates a GemFire client cache (recall that a remote cache server is required for this implementation and its address is configured as a child element of the pool), a client region, and a `ContinuousQueryListenerContainer` that uses Spring Data:\n\n```xml\n\u003cgfe:client-cache id=\"client-cache\" pool-name=\"client-pool\"/\u003e\n\n\u003cgfe:pool id=\"client-pool\" subscription-enabled=\"true\" \u003e\n\u003c!--configure server or locator here required to address the cache server --\u003e\n\u003c/gfe:pool\u003e\n\n\u003cgfe:client-region id=\"test\" cache-ref=\"client-cache\" pool-name=\"client-pool\"/\u003e\n\n\u003cgfe:cq-listener-container id=\"queryListenerContainer\" cache=\"client-cache\"\npool-name=\"client-pool\"/\u003e\n\n\u003cint-gfe:cq-inbound-channel-adapter id=\"inputChannel\"\ncq-listener-container=\"queryListenerContainer\"\nquery=\"select * from /test\"/\u003e\n```\n\nThe continuous query inbound channel adapter requires a `cq-listener-container` attribute, which must contain a reference to the `ContinuousQueryListenerContainer`.\nOptionally, it accepts an `expression` attribute that uses SpEL to transform the `CqEvent` or extract an individual property as needed.\nThe `cq-inbound-channel-adapter` provides a `query-events` attribute that contains a comma-separated list of event types for which a message is produced on the input channel.\nThe available event types are `CREATED`, `UPDATED`, `DESTROYED`, `REGION_DESTROYED`, and `REGION_INVALIDATED`.\nBy default, `CREATED` and `UPDATED` are enabled.\nAdditional optional attributes include `query-name` (which provides an optional query name), `expression` (which works as described in the preceding section), and `durable` (a boolean value indicating if the query is durable -- it is false by default).\nIf you do not provide a `channel`, the channel is created from the `id` attribute.\nThis adapter also supports an `error-channel`.\n\nNOTE: This adapter conforms to Spring Integration conventions.\n\n### \u003ca id=\"gemfire-outbound\"\u003e\u003c/a\u003e Outbound Channel Adapter\n\nThe outbound channel adapter writes cache entries that are mapped from the message payload.\nIn its simplest form, it expects a payload of type `java.util.Map` and puts the map entries into its configured region.\nThe following example shows how to configure an outbound channel adapter:\n\n```xml\n\u003cint-gfe:outbound-channel-adapter id=\"cacheChannel\" region=\"region\"/\u003e\n```\n\nGiven the preceding configuration, an exception is thrown if the payload is not a `Map`.\nAdditionally, you can configure the outbound channel adapter to create a map of cache entries by using SpEL.\nThe following example shows how to do so:\n\n```xml\n\u003cint-gfe:outbound-channel-adapter id=\"cacheChannel\" region=\"region\"\u003e\n    \u003cint-gfe:cache-entries\u003e\n        \u003centry key=\"payload.toUpperCase()\" value=\"payload.toLowerCase()\"/\u003e\n        \u003centry key=\"'thing1'\" value=\"'thing2'\"/\u003e\n    \u003c/int-gfe:cache-entries\u003e\n\u003c/int-gfe:outbound-channel-adapter\u003e\n```\n\nIn the preceding configuration, the inner element (`cache-entries`) is semantically equivalent to a Spring 'map' element.\nThe adapter interprets the `key` and `value` attributes as SpEL expressions with the message as the evaluation context.\nNote that this can contain arbitrary cache entries (not only those derived from the message) and that literal values must be enclosed in single quotes.\nIn the preceding example, if the message sent to `cacheChannel` has a `String` payload with a value `Hello`, two entries (`[HELLO:hello, thing1:thing2]`) are written (either created or updated) in the cache region.\nThis adapter also supports the `order` attribute, which may be useful if it is bound to a `PublishSubscribeChannel`.\n\n### \u003ca id=\"gemfire-message-store\"\u003e\u003c/a\u003e Gemfire Message Store\n\nAs described in EIP, a [message store](https://www.enterpriseintegrationpatterns.com/MessageStore.html) lets you persist messages.\nThis can be useful when dealing with components that have a capability to buffer messages (`QueueChannel`, `Aggregator`, `Resequencer`, and others) if reliability is a concern.\nIn Spring Integration, the `MessageStore` strategy interface also provides the foundation for the [claim check](https://www.enterpriseintegrationpatterns.com/StoreInLibrary.html) pattern, which is described in EIP as well.\n\nSpring Integration's Gemfire module provides `GemfireMessageStore`, which is an implementation of both the `MessageStore` strategy (mainly used by the `QueueChannel` and `ClaimCheck` patterns) and the `MessageGroupStore` strategy (mainly used by the `Aggregator` and `Resequencer` patterns).\n\nThe following example configures the cache and region by using the `spring-gemfire` namespace (not to be confused with the `spring-integration-gemfire` namespace):\n\n```xml\n\u003cbean id=\"gemfireMessageStore\" class=\"o.s.i.gemfire.store.GemfireMessageStore\"\u003e\n    \u003cconstructor-arg ref=\"myRegion\"/\u003e\n\u003c/bean\u003e\n\n\u003cgfe:cache/\u003e\n\n\u003cgfe:replicated-region id=\"myRegion\"/\u003e\n\n\n\u003cint:channel id=\"somePersistentQueueChannel\"\u003e\n    \u003cint:queue message-store=\"gemfireMessageStore\"/\u003e\n\u003cint:channel\u003e\n\n\u003cint:aggregator input-channel=\"inputChannel\" output-channel=\"outputChannel\"\nmessage-store=\"gemfireMessageStore\"/\u003e\n```\n\nOften, it is desirable for the message store to be maintained in one or more remote cache servers in a client-server configuration.\nIn this case, you should configure a client cache, a client region, and a client pool and inject the region into the `MessageStore`.\nThe following example shows how to do so:\n\n```xml\n\u003cbean id=\"gemfireMessageStore\"\nclass=\"org.springframework.integration.gemfire.store.GemfireMessageStore\"\u003e\n    \u003cconstructor-arg ref=\"myRegion\"/\u003e\n\u003c/bean\u003e\n\n\u003cgfe:client-cache/\u003e\n\n\u003cgfe:client-region id=\"myRegion\" shortcut=\"PROXY\" pool-name=\"messageStorePool\"/\u003e\n\n\u003cgfe:pool id=\"messageStorePool\"\u003e\n    \u003cgfe:server host=\"localhost\" port=\"40404\" /\u003e\n\u003c/gfe:pool\u003e\n```\n\nNote that the `pool` element is configured with the address of a cache server (you can substitute a locator here).\nThe region is configured as a 'PROXY' so that no data is stored locally.\nThe region's `id` corresponds to a region with the same name in the cache server.\n\nStarting with version 4.3.12, the `GemfireMessageStore` supports the key `prefix` option to allow distinguishing between instances of the store on the same GemFire region.\n\n### \u003ca id=\"gemfire-lock-registry\"\u003e\u003c/a\u003e Gemfire Lock Registry\n\nStarting with version 4.0, the `GemfireLockRegistry` is available.\nCertain components (for example, the aggregator and the resequencer) use a lock obtained from a `LockRegistry` instance to ensure that only one thread is manipulating a group at any given time.\nThe `DefaultLockRegistry` performs this function within a single component.\nYou can now configure an external lock registry on these components.\nWhen you use a shared `MessageGroupStore` with the `GemfireLockRegistry`, it can provide this functionality across multiple application instances, such that only one instance can manipulate the group at a time.\n\nNOTE: One of the `GemfireLockRegistry` constructors requires a `Region` as an argument.\nIt is used to obtain a `Lock` from the `getDistributedLock()` method.\nThis operation requires `GLOBAL` scope for the `Region`.\nAnother constructor requires a `Cache`, and the `Region` is created with `GLOBAL` scope and with the name, `LockRegistry`.\n\n### \u003ca id=\"gemfire-metadata-store\"\u003e\u003c/a\u003e Gemfire Metadata Store\n\nVersion 4.0 introduced a new Gemfire-based [`MetadataStore`](https://docs.spring.io/spring-integration/reference/meta-data-store.html) implementation.\nYou can use the `GemfireMetadataStore` to maintain metadata state across application restarts.\nThis new `MetadataStore` implementation can be used with adapters such as:\n\n* [Feed Inbound Channel Adapter](https://docs.spring.io/spring-integration/reference/feed.html#feed-inbound-channel-adapter)\n* [Reading Files](https://docs.spring.io/spring-integration/reference/file/reading.html)\n* [FTP Inbound Channel Adapter](https://docs.spring.io/spring-integration/reference/ftp/inbound.html)\n* [SFTP Inbound Channel Adapter](https://docs.spring.io/spring-integration/reference/sftp/inbound.html)\n\nTo get these adapters to use the new `GemfireMetadataStore`, declare a Spring bean with a bean name of `metadataStore`.\nThe feed inbound channel adapter automatically picks up and use the declared `GemfireMetadataStore`.\n\nNOTE: The `GemfireMetadataStore` also implements `ConcurrentMetadataStore`, letting it be reliably shared across multiple application instances, where only one instance can store or modify a key's value.\nThese methods give various levels of concurrency guarantees based on the scope and data policy of the region.\nThey are implemented in the peer cache and client-server cache but are disallowed in peer regions that have `NORMAL` or `EMPTY` data policies.\n\nNOTE: Since version 5.0, the `GemfireMetadataStore` also implements `ListenableMetadataStore`, which lets you listen to cache events by providing `MetadataStoreListener` instances to the store, as the following example shows:\n\n```java\nGemfireMetadataStore metadataStore = new GemfireMetadataStore(cache);\nmetadataStore.addListener(new MetadataStoreListenerAdapter() {\n\n    @Override\n    public void onAdd(String key, String value) {\n         ...\n    }\n\n});\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgemfire%2Fspring-integration-for-vmware-gemfire","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fgemfire%2Fspring-integration-for-vmware-gemfire","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgemfire%2Fspring-integration-for-vmware-gemfire/lists"}