## Downloads

- [On-Prem Java Client - 5.3.0](https://s3.amazonaws.com/artifacts.geopulse.factual/java_client/geopulse-client-5.3.0.tar.gz)
- [On-Prem HTTP Server - 3.3.0](https://https//s3.amazonaws.com/artifacts.geopulse.factual/java_client/geopulse-client-5.3.0.tar.gz/artifacts.geopulse.factual/geopulse-server/geopulse-server-3.3.0.tar.gz)

# Java Client Release Notes

### 5.3.0 _Released 2017-09-05_
**Added**
- Provide a means to specify the data source/exchange that one is targeting on, and `AudienceSetClient` only returns Audience set Matches that are associated with that data source. There will be no more need to filter Audience sets based on data source when using this new method: `test(String dataSource, String canonicalId)`.
- Data Source aliasing for Audience can be set via the Audience set client builder. `AudienceSetClient.ClientParams.Builder.withDataSourceAliases()`.

**Deprecated**
- Querying Audience client without giving data source, i.e. `AudienceSetClient.test(String canonicalId)`.

### 5.2.3 _Released 2017-07-26_
**Fixed**
- Issue with deactivated Audience sets served by merged config server were not fully disabled and matches would still be returned for that set but missing some metadata.
- When merged config server is temporarily unavailable, don't instantly fall back to unmerged Audience sets.

### 5.2.2 _Released 2017-07-20_
**Changed**
- Minimum `glibc` required is lowered to >=2.12 for merged Audience sets. `glibc` required >=2.14 since `geopulse-client [5.2.0]`.

### 5.2.1 _Released 2017-07-18_
**Added**
- Lower requirements back to Java 1.7 after regression introduced in `geopulse-client [5.2.0]`.

### 5.2.0 _Released 2017-07-11_
**Added**
- Support for merged Audience sets. Requires `glibc` >=2.14.

**Changes**
- Use newly exposed fields to determine when an index is merged instead of relying on the same merged index appearing 2 or more times. Breaks compatibility with old citadel with merged proximity.
- Bumped internal dependencies to match versions set in `outpost.commons`.
- No longer clean cache directory for Proximity/Audience after initial load. Helpful to pre-cache needed files during testing.

**Fixed**
- Merged proximity filter no longer has a chance of reloading when a filter gets deactivated and deployed to the client.
- Fix regression that reintroduced SIGSEGV error in `geopulse-client [5.1.4]`.

### 5.1.5 _Released 2017-04-14_
**Fixed**
- Set Java requirements back to Java 7 after regression in 5.1.4 required Java 8.

### 5.1.4 _Released 2017-03-22_
**Changes**
- Various optimizations to both proximity and audience.

### 5.1.3 _Released 2017-03-02_
**Fixed**
- Do not unload proximity filters and audience sets when Citadel endpoint returns an unexpected http response code.
- No longer return `Matches` with null fields from audience or proximity when unloaded entry caught mid removal.

### 5.1.2 _Released 2017-01-26_
**Added**
- Add method to `ProximityClient` in order to query merge status for a given build-id.

**Fixed**
- Improved performance of ProximityClient's `testPoint` method, fixing a regression introduced in 5.0.0.
- Behavior for ProximityClient setting for `max-indices` now matches same setting in AudienceClient.
- Client's exact version number now sent to Citadel when requesting configs, instead of major revision number only.
- ProximityClient's `testPoint` method no longer throws `IllegalStateException` when previous configuration sync has failed.

### 5.1.1 _Released 2016-12-21_
**Added**
- Support for merged Proximity indexes. Proximity indexes that have distinct targeting codes can now be sent to the ProximityClient as a single combined/merged index. This reduces the total number of queries required and significantly lowers latency for organizations with thousands of indexes.

**Fixed**
- Thread leak in the case where `ProximityClient/newClient` is called more than once.

### 5.0.4 _Released 2016-11-30_
**Fixed**
- Bug in Audience client which would occur when an audience set is unloaded while the client is still querying it. The Java process would get killed via a SIGSEGV signal for accessing a cleaned `java.nio.ByteBuffer`.

### 5.0.3 _Released 2016-08-15_
**Changed**
- `ProximityClient.testPoint` is now also multithreaded, using the same thread pool as `ProximityClient.testMultiplePoints`.

**Added**
- `ProximityClient` and `AudienceClient` now both support a `maxIndexesToQuery` parameter. This can be used to test how your client would perform with fewer filters defined. However, it should generally not be used long term, because the set of filters that are used vs removed is arbitrary, and may not suit your use cases.

### 5.0.0 _Released 2016-06-28_
**Fixed**
- Improved some malformed javadoc / typos.

**Removed**
- Support for audience profiles has been removed (no plans to remove audience sets).

**Changed**
- `ProximityClient.Coordinate` is no longer an inner class: it's just Coordinate now.

The independent SyncState enums in Proximity/Audience/Validator clients have been combined.

**Added**
- `ProximityClient.testMultiplePoints` method added.

**New configuration option** `ProximityClient.ClientParams.threadPoolSize` to control its performance.
- Constructing a Proximity/Audience client can now be done with a builder.

### 4.0.14 _Released 2016-04-12_
- Fixed memory leak related to configuration management.

### 4.0.12 _Released 2015-12-09_
- Fixed bug where version number was sometimes incorrectly reported.

### 4.0.11 _Released 2015-11-11_
- FIXED: Disable Java 8 primitives in Java 7 builds.

### 4.0.10 _OnPrem Server Only_
- Better detection of Oracle JRE.

### 4.0.9 _OnPrem Server Only_
- Java 6 compatibility.

### 4.0.8 _OnPrem Server Only_
**Added**
- Introspection methods to the clients to power /help page.

**Fixed**
- Self-reported version now fetched programmatically.
- Introduced specific timeout when fetching configuration from Factual servers.

### 4.0.7 _OnPrem Server Only_
- ADDED: getRequesterSlug() method to Match interface.

### 4.0.4 _Released 2015-08-11_
- ADDED: getRequester() method to Match interface.

### 4.0.3 _Released 2015-07-16_
- Disabled match deduplication when payloads are enabled.

### 4.0.2
- Improved backwards compatibility with older builds, such that design-specific fields in the `Match` object can always be populated, even if the set-specific fields are unknown.

### 4.0.1
- **Added** `getDesignId()` methods to both `ProximityClient` and `AudienceSetClient`.

### 4.0.0
- **New Metadata** - new fields in the Match object allow you to construct unique identifiers to avoid name conflicts for your Geopulse targeting Sets.
- **Match Object** - a unified interface for return values from both Geopulse Audience and Geopulse Proximity.
- **Data Pixel** - Geopulse now supports data collection and reporting through the Factual data pixel, an invisible 1x1 image for ad creatives.
- **Deployment Tags** - control the subset(s) of Geopulse Sets an instance of On-Prem should handle, which helps you scale system infrastructure and operations.
- **Configuration Update** - starting up instances of On-Prem requires your Factual account credentials.
- 'Targeting Code' is the new Group ID.
- Data Pixel Support.
- **Added** automatic deduplication of Proximity results.
- **Added** `omitPayload` flag to Proximity `testPoint()` method, which is `true` by default, which allows for more effective deduplication when the payload is unnecessary.
- When creating clients, in addition to the `organizationId`, users must also provide the `apiKey` and `secretKey`, which are available via " [https://factual.com":https://factual.com](https://factual.com"https://factual.com).

### 3.1.10
- Major improvements to the location validation logic.

### 3.1.4
**Added** `validate` flag to Proximity `testPoint()` method, which is `false` by default, allowing for degenerate location data to be ignored.

### 3.1.0
- Introduced the `AudienceSetClient` and `AudienceProfileClient`.

### 3.0.0
- Repackaged Geopulse Proximity functionality within the `ProximityClient`.

### 3.3.0 _Released 2017-09-05_
**Added**
- Audience data source endpoint `GET /geopulse/audience` and `PUT /geopulse/audience` where data source must be provided via source url parameter. Using this instead of `GET /geopulse/audience` saves the caller from having to filter out incompatible data source `Match` objects.
- Ability to override data source names of Audience Matches and parameter passed into new audience endpoint via the configuration YAML.

**Changed**
- Swagger `/docs` updated to reflect changes in endpoints.
- No longer enable `/:organization-id/` endpoints when only a single organization is present in configuration YAML.
- References to outpost renamed to geopulse.
- Download renamed to `geopulse-server-X.Y.Z.tar.gz`.
- Jar renamed to `geopulse-server.jar` from `outpost.jar`.
- Example configuration renamed to `geopulse.conf` from `outpost.conf`.

**Fixed**
- `/help` endpoint was fixed where it now gives sample points again.

**Removed**
- Support for reverse geocoding endpoint `/geopulse/geotag`.

### 3.2.3 _Released 2017-07-26_
**Fixed**
- Issue with deactivated Audience sets served by merged config server were not fully disabled and matches would still be returned for that set but missing some metadata.
- When merged config server is temporarily unavailable, don't instantly fall back to unmerged audience sets.

### 3.2.2 _Released 2017-07-20_
**Changed**
- Minimum `glibc` required is lowered to 2.12 for merged Audience sets. `glibc` required >=2.14 since OnPrem Server [3.2.0].

### 3.2.1 _Released 2017-07-18_
**Fixed**
- Lower requirements back to Java 1.7 after regression introduced in OnPrem Server 3.2.0.

### 3.2.0 _Released 2017-07-11_
**Added**
- Support for merged Audience sets. Requires `glibc` >=2.14.
- Merged Audience set trial support.

**Changed**
- No longer create unused directory in cache.

### 3.1.4 _Released 2017-04-14_
**Fixed**
- Set Java requirements back to Java 7 after regression in 3.1.3 required Java 8.

### 3.1.3 _Released 2017-03-22_
**Added**
- Added `/zz/ready` endpoint that is similar to `/zz/status` but without listing all loaded sets and designs.
- Debug mode added to enable endpoints that may be useful during benchmarking. It is disabled by default. To enable, set `global.debug` to `true` in config.yml.

**`/zz/debug/gc-stats` - shows garbage collection statistics.**`/zz/debug/run-gc` - runs the garbage collector.

**Changes**
- Various optimizations to both proximity and audience.

### 3.1.2 _Released 2017-03-02_
**Fixed**
- Fixed issue where an unavailable Factual server would reduce matches under some circumstances. On-Prem servers will now continue to maintain their loaded builds, even when Factual servers are not available.
- Fixed race condition that would sometimes cause matches to be returned with `null` values.

### 3.1.1 _Released 2017-01-26_
**Added**
- Merged status for proximity filters.

**Fixed**
- Improved performance of Proximity endpoint, resolving a regression introduced in 5.0.0.
- Behavior for Proximity setting for `max-indices` now matches same setting in Audience.
- Client's exact version number now sent to Citadel when requesting configs, instead of major revision number only.

### 3.1.0 _Released 2016-12-21_
**Added**
- Support for merged Proximity filters. For customers on this version or later of the OnPrem software, Factual can deploy a single Proximity filter that merges many subfilters together, greatly improving query latency and throughput.

**Fixed**
- Intermittent error in logs: java.lang.String cannot be cast to [B.

### 3.0.0 _Released 2016-07-25_
**Added**
- CORS support.
**New configuration option**, at path ["global", "cors", "allowed-origins"].
- Client version 5.0.0.
- New endpoint /geopulse/proximity/points, for querying multiple points.
- New interactive documentation page at /docs.
- New endpoint /config to display the currently active config.yml file.

**Removed**
- Support for audience profiles. Support for audience sets remains intact.

### 2.0.13 _Released 2016-04-11_
- Fixed: A bug where configurations on disk grew over time. Could cause OOMEs for some partners when the server has been running for a long time and is then restarted.

### 2.0.12 _Released 2016-03-15_
- Fixed: Combined GET endpoint hangs with keepalives.

### 2.0.11 _Released 2016-03-14_
**Added**: Combined GET endpoint.
- Fixed: POST endpoint works when only proximity and/or set are requested.

### 2.0.9
- Fixed handling of upstream errors served from journal-configs endpoint.

### 2.0.8
- Upgrade to geopulse-client 4.0.12.

### 2.0.7
- Upgrade to geopulse-client 4.0.12.

### 2.0.6
- Upgrade to geopulse-client 4.0.11.

### 2.0.5
- Upgrade to geopulse-client 4.0.8.

### 2.0.4
- Add requester-slug response field.

### 2.0.3
- Add requester response field.

### 2.0.2
- Disable match deduplication when payloads are enabled.
- Make connection-timeout config parameter optional.

### 2.0.1
- Fix JSON encoding when `metadata` is `null` and included in the response.
- Wraps Java Client v4.0.2.

### 2.0.0
- **New Metadata** - new fields in the Match object allow you to construct unique identifiers to avoid name conflicts for your Geopulse targeting Sets.
- **Match Object** - a unified interface for return values from both Geopulse Audience and Geopulse Proximity.
- **Data Pixel** - Geopulse now supports data collection and reporting through the Factual data pixel, an invisible 1x1 image for ad creatives.
- **Deployment Tags** - control the subset(s) of Geopulse Sets an instance of On-Prem should handle, which helps you scale system infrastructure and operations.
- 'Targeting Code' is the new Group ID.
- **Configuration Update** - starting up instances of On-Prem requires your Factual account credentials.
- Data Pixel Support.
- Match JSON: we now return a JSON array on every match hit for a request to both Audience and Proximity. Each match hit is a JSON in the JSON array. Details of the fields in the Match JSON are also seen in the Server’s README file.
- Updated config.yml format, requiring credentials and allowing for JSON response configurability.
- Performance improvements.
- Simplified /zz/status format.
- Wraps Java Client v4.0.0.

### 1.1.4
- Wraps beta version of Java Client v4.0.0, allowing for deduped JSON responses.
- Allows remote configuration of impression journaling.

### 1.1.3
- Wraps Java Client v3.1.10.

### 1.1.0
- Performance improvements.
- Wraps Java Client v3.1.8.

### 1.0.4
- Wraps Java Client v3.1.7.

### 1.0.0
- Wraps Java Client v3.1.0.
