On This Page

Version 2.3.0 - 2.4.6

Couchbase Java SDK Release Notes and Archives

Installation

Important: At least Java 6 is required, all newer Java versions are supported (and encouraged). Especially Java 8 is recommended since it brings performance enhancements and lambda expressions which are very convenient when used in an asynchronous context.

All stable releases of the Java SDK are primarily distributed through Maven. As a result the dependency can be included easily using your favourite package manager. For Maven itself, the current GA release's coordinates are:

<dependencies>
  <dependency>
    <groupId>com.couchbase.client</groupId>
    <artifactId>java-client</artifactId>
    <version>2.4.6</version>
  </dependency>
</dependencies>

The java-client dependency will pull in two more transitive dependencies. One is called com.couchbase.client.core-io and is a internal dependency which performs all the underlying tasks like IO and cluster management. The other dependency is RxJava which is both used internally and exposed as a first-class API to the user in order to perform scalable and performant asynchronous, reactive operations.

Version 2.4.6 (6 June 2017)

Version 2.4.6 is the seventh release of the 2.4 series, bringing enhancements and bugfixes over the last stable release.

Download | API Reference | Core API Reference

The supported and tested dependencies for this release are:

  • com.couchbase.client:java-client:2.4.6
  • com.couchbase.client:core-io:1.4.6
  • io.reactivex:rxjava:1.2.7

Enhancements & New Features

  • JVMCBC-427: The SDK forces to use IPv4 addresses, even if the JVM is configured to force IPv6 lookups (since the server only supports v4 right now).
  • JCBC-1080: It is now possible to read and write full documents through the Subdocument-API when "xattr" is enabled.
  • JCBC-1078: The experimental API for extended attributes on the Subdocument-API has been renamed to "xattr" for consistency reasons.
  • JCBC-1079: When the "com.couchbase.allowReverseDns" System property is set to false, the SDK will avoid all reverse DNS lookups, making it possible to run under constrained network setups. The downside of course is that pretty hostnames can't be used in logging and IPs must be showed all the time.

Fixed Issues

  • JVMCBC-428: The HTTP Status code 401 is now correctly mapped internally to an Authentication Error (instead of a generic failure). This should not change anything on the user-facing API. 

Version 2.4.5 (2 May 2017)

Version 2.4.5 is the sixth release of the 2.4 series, bringing enhancements and bugfixes over the last stable release.

Download | API Reference | Core API Reference

The supported and tested dependencies for this release are:

  • com.couchbase.client:java-client:2.4.5
  • com.couchbase.client:core-io:1.4.5
  • io.reactivex:rxjava:1.2.7

Enhancements & New Features

  • JCBC-1066: Add support for FTS Geo & TermRange Queries & Advanced Sort for Couchbase Server 5.0
  • JCBC-1055: Add support for ephemeral bucket management for Couchbase Server 5.0
  • JCBC-1072: Add covenient authenticate overload for Couchbase Server 5.0
  • JCBC-1068: Add dsl support to ANY AND EVERY expression
  • JCBC-1074:  Support GetUsers change in returning domain instead of type for Couchbase Server 5.0
  • JVMCBC-415: Enforce CarrierRefresher poll floor for Couchbase Server 5.0 fast failover support
  • JVMCBC-417: Shift the carrier node refresh list on each attempt
  • JVMCBC-418: Add mock support for kv error map integration test
  • JVMCBC-419:  Support changes in user management rest endpoints due to rename of builtin to local for Couchbase Server 5.0

Fixed Issues

  • JCBC-1067: Expose configPollInterval configurable from CouchbaseEnvironment builder.
  • JVMCBC-413:  Allow to run HELLO after auth for optional backward compatibility support for older Couchbase Server versions(less than 3.0).
  • JVMCBC-421: Close LatencyStats on removal to avoid GC doing additional work by explicitly cleaning up weak references. 

Version 2.4.4 (4 April 2017)

Version 2.4.4 is the fifth release of the 2.4 series, bringing enhancements and bugfixes over the last stable release.

Download | API Reference | Core API Reference

The supported and tested dependencies for this release are:

  • com.couchbase.client:java-client:2.4.4
  • com.couchbase.client:core-io:1.4.4
  • io.reactivex:rxjava:1.2.7

Enhancements & New Features

  • JVMCBC-394JCBC-1060:  Add username/password auth for support of RBACs in Couchbase Server 5.0.
  • JVMCBC-405JCBC-1058:  Add support for user management in Couchbase Server 5.0.
  • JVMCBC-393:  Add support for the extended KV error map in Couchbase Server 5.0.
  • JVMCBC-399:  Perform HELLO before AUTH
  • JVMCBC-404:  Bump Dependencies
  • JVMCBC-401:  propagate error on endpoint encode
  • JVMCBC-408:  Deprecate DCP
  • JVMCBC-410:  Allow to configure the config polling interval
  • JVMCBC-409:  Resolve addresses when parsing ConnectionString
  • JVMCBC-411:  Use ports when building partitioned nodes list
  • JVMCBC-396JCBC-1061:  Support to parse profiling info from N1QL query response
  • JCBC-1062:  Optimize LegacyTranscoder encoding for strings

Fixed Issues

  • JVMCBC-407:  Clean up stateful resources on ConfigurationProvider termination
  • JVMCBC-403:  Fix incorrect escape processing in streaming parser
  • JVMCBC-402:  Fix ignored callbacksOnIoPool in N1ql and Analytics query row callbacks
  • JVMCBC-412:  Fix extras leak on IllegalReferenceCountException
  • JCBC-1065:  Fix api doc to correctly mention about DesignDocumentDoesNotExistException
  • JCBC-1063:  Never compress JSON in LegacyDocument.

Version 2.4.3 (7 March 2017)

Version 2.4.3 is the fourth release of the 2.4 series, bringing enhancements and bugfixes over the last stable release.

Download | API Reference | Core API Reference

The supported and tested dependencies for this release are:

  • com.couchbase.client:java-client:2.4.3
  • com.couchbase.client:core-io:1.4.3
  • io.reactivex:rxjava:1.2.3

Enhancements & New Features

This release fixes the following issues:

  • JVMCBC-391:  Fixes a bug where empty documents can be written to server on NMV rescheduling, if SSL is used
  • JCBC-1030JVMCBC-390:  Add experimental support for Couchbase Analytics.
  • JVMCBC-395:  Add support for detecting Ephemeral buckets using bucket capabilities in configuration and short circuit persistTo calls
  • JVMCBC-392:  Integrate an optional generic json parser yasjl for parsing N1QL query responses
  • JVMCBC-397:  Avoid concurrent modification/reading of bucketConfigs map
  • JCBC-1043:  Add toString for N1QL Rows and Sync Result
  • JCBC-1045:  Pre-check connection string to avoid IOOB exception

Version 2.4.2 (9 February 2017)

Version 2.4.2 is the third release of the 2.4 series, bringing enhancements and bugfixes over the last stable release.

Download | API Reference | Core API Reference

The supported and tested dependencies for this release are:

  • com.couchbase.client:java-client:2.4.2
  • com.couchbase.client:core-io:1.4.2
  • io.reactivex:rxjava:1.2.3

Enhancements & New Features

This release fixes the following issues:

  • JVMCBC-385: To address a potential performance regression introduced in 2.4.1 with N1QL (due to disabling the pipelining for ensuring correctness) the Service pooling has been overhauled completely, leading to better out of the box performance and more flexibility.
  • JVMCBC-341: The FTS service endpoint has been equipped with application-level keepalive (similar to the other services), bringing it in line functionality wise with its counterparts. It uses the internal /admin/ping HTTP endpoint.
  • JCBC-1028, JVMCBC-384: Experimental support for "Extended Attributes" (XATTR) has been added to the API in preparation for Couchbase Server 5.0.

Version 2.4.1 (19 January 2017)

Version 2.4.1 is the second release of the 2.4 series, bringing small enhancements and bugfixes over the last stable release.

Download | API Reference | Core API Reference

The supported and tested dependencies for this release are:

  • com.couchbase.client:java-client:2.4.1
  • com.couchbase.client:core-io:1.4.1
  • io.reactivex:rxjava:1.2.3

Fixed Issues

This release fixes the following issues:

  • JVMCBC-380JVMCBC-381: Pipelining for all HTTP-based services has been disabled (N1QL, FTS, Views) because it is not properly supported on the server side and can lead to inconsistent responses that are hard to identify and track down. Everyone who has had problems with N1QL queries returning successfully, but only partial results are recommended to upgrade.
    If you are experiencing slowdown of your queries, you need to increase the number of queryEndpoints to a higher setting in order to allow for concurrent requests. In the future we are planning on a more flexible pool implementation, but setting the queryEndpoints to a fixed higher value (i.e. the number of application threads concurrently querying) will help as well.
  • JCBC-999JVMCBC-383: The BucketManager#info() method and equivalents are now properly redistributing the underlying request to other servers if the first one tried is not available. This increases the reliability of info calls significantly.
  • JCBC-1037: If a FTS query is issued against a nonexistent index, it now properly errors with a IndexDoesNotExistException, bringing it on-par with other APIs in similar situations.

Version 2.3.7 (19 January 2017)

Version 2.3.7 is the eigth release of the 2.3 series, bringing small enhancements and bugfixes over the last stable release.

Download | API Reference | Core API Reference

The supported and tested dependencies for this release are:

  • com.couchbase.client:java-client:2.3.7
  • com.couchbase.client:core-io:1.3.7
  • io.reactivex:rxjava:1.1.8

Fixed Issues

This release fixes the following issues:

  • JVMCBC-380JVMCBC-381: Pipelining for all HTTP-based services has been disabled (N1QL, FTS, Views) because it is not properly supported on the server side and can lead to inconsistent responses that are hard to identify and track down. Everyone who has had problems with N1QL queries returning successfully, but only partial results are recommended to upgrade.
    If you are experiencing slowdown of your queries, you need to increase the number of queryEndpoints to a higher setting in order to allow for concurrent requests. In the future we are planning on a more flexible pool implementation, but setting the queryEndpoints to a fixed higher value (i.e. the number of application threads concurrently querying) will help as well.
  • JCBC-999, JVMCBC-383: The BucketManager#info() method and equivalents are now properly redistributing the underlying request to other servers if the first one tried is not available. This increases the reliability of info calls significantly.
  • Thanks to a community contribution, CouchbaseException subclasses without a message are now properly propagating stack traces.

Version 2.4.0 (5 January 2017)

Version 2.4.0 is the first release of the 2.4 series, bringing small enhancements and bugfixes over the last stable release.

Download | API Reference | Core API Reference

The supported and tested dependencies for this release are:

  • com.couchbase.client:java-client:2.4.0
  • com.couchbase.client:core-io:1.4.0
  • io.reactivex:rxjava:1.2.3

New Features and Behavioral Changes

This release contains the following enhancements:

  • RxJava has been updated to 1.2.3, which is backwards compatible to 1.1. which was used in the java-client 2.3.6.
  • JCBC-1021: Support for BigDecimal and BigInteger has been added to JsonObject and JsonArray, making it easier to work with those types naturally.
  • JCBC-974: For consistency reasons, the BucketManager now throws DesignDocumentDoesNotExist in such cases instead of returning different errors. It is now in-line with similar methods, providing a more coherent API experience.
  • JCBC-1022, JCBC-1032: Both the bucket-level collections API, as well as the Authenticator APIs have been marked as stable and can thus be considered supported API.
  • JVMCBC-378: Optional support for custom IO pools per service has been added. By default still one IO pool will be used, but it is possible to override this now on a per-service basis. This has the nice effect of being able to use different IO event loops for different workloads (high throughput KV vs long running N1QL queries for example).
  • JVMCBC-373: onError calls are now also moved (by default) onto the computation scheduler, similar to onNext calls.

Fixed Issues

This release fixes the following issues:

  • JCBC-1029: A bug with Long-running prepared N1QL query observables which may be released too early and thus cannot be subscribed to has been fixed. 

Version 2.3.6 (6 December 2016)

Version 2.3.6 is the seventh release of the 2.3 series, bringing small enhancements and bugfixes over the last stable release.

Download | API Reference | Core API Reference

New Features and Behavioral Changes

This release contains the following enhancements:

  • JCBC-1024: Add "sort" option to FTS query.  Allows custom sort order for search queries.
  • JCBC-1020: Collections interface for data structures
  • JCBC-981: Add toString() on N1qlQuery
  • JCBC-1023: Ignore FTS integration tests if search service not found
  • JVMCBC-376: Add support for legacy memcached node hashing as it is different in 2.x series compared to 1.x. Legacy hashing can be turned on by using LegacyMemcachedHashingStrategy in the environment builder. 
  • JVMCBC-375: Extract SSL related settings into SecureEnvironment.

 

Fixed Issues

This release fixes the following issues:

  • JCBC-1026: Early unsubscription can trigger buffer leaks.  If early unsubscribes on the KV API are performed (that is, the async API is used and an operator like timeout() fires before the data could be decoded and the underlying buffers freed) the buffers from the decoding operation are not freed and leak.
  • JCBC-1016: Throw PathNotFound instead of SUBDOC_PATH_NOT_FOUND on index not found in List and key not found in Map
  • JCBC-1017JCBC-1018: Fix inconsistencies with the data structures RFC

Version 2.3.5 (3 November 2016)

Version 2.3.5 is the sixth release of the 2.3 series, bringing small enhancements and bugfixes over the last stable release.

Download | API Reference | Core API Reference

New Features and Behavioral Changes

This release contains the following enhancements:

  • JCBC-900: Experimental support for Bucket-Level Datastructures has been added, which advance the concept of subdocument APIs to actual programmable datastructures like sets and maps in a cross-SDK fashion.
  • JCBC-1015: When performing a N1QL Query against Couchbase Server 4.5.1 or later you can now specify the "pretty" param on the N1QL query params to optimize network bandwith.

 

Fixed Issues

This release fixes the following issues:

  • JVMCBC-371: A safeguard has been put into place that if the underlying network "connect" call never returns for some reason it is now cut short after a given delay and declared faulty to give the built-in retry mechanisms a chance to run. By default this time is defined as 2 seconds over the "socket connect timeout" and can be customized through the "com.couchbase.connectCallbackGracePeriod" system property.
  • JVMCBC-372: The internal sentRequestQueue for each socket has been subject to an edge case where when the socket accepts requests but never returns results (acting like a "black hole" and not closing the socket either) the internal queue which matches the responses to the requests can grow unbounded. This is now fixed and set to a size of 5120 outstanding requests per socket, customizable through the "com.couchbase.sentRequestQueueLimit" system property. If the queue grows too large the overflowing requests get put into the regular retry cycle giving them a chance to complete eventually.
  • JVMCBC-370: The internal DCP implementation has had a couple bugfixes around MDS deployments.

 

Version 2.3.4 (5 October 2016)

Version 2.3.4 is the fifth release of the 2.3 series, bringing small enhancements and bugfixes over the last stable release.

Download | API Reference | Core API Reference

New Features and Behavioral Changes

This release contains the following enhancements:

  • JCBC-851: Experimental support for cluster-level N1QL queries has been added to the Cluster interface. Note that at least one bucket needs to be open and the credentials need to be set properly using the authenticate method in order to use this feature.
  • JVMCBC-365: When using SCRAM SASL authentication mechanisms during bootstrap and an error happens, the resulting error message now more clearly indicates what is going on. Most likely the JVM does not support empty keys for passwords, so either the JVM needs to be upgraded to a newer version or a bucket password should be set (which we recommend to do so anyways).

 

Fixed Issues

This release fixes the following issues:

  • JCBC-1007: N1QL, FTS and View queries are now properly evenly distributed in MDS-scenarios.
  • JVMCBC-368: A classloader leak on redeploy has been discovered and fixed in the PauseDetector part of the metrics collection.

 

Version 2.3.3 (6 September 2016)

Version 2.3.3 is the fourth release of the 2.3 series, bringing small enhancements and bugfixes over the last stable release.

Download | API Reference | Core API Reference

New Features and Behavioral Changes

This release contains the following enhancements:

  • JCBC-995: Improved custom transcoding for subdocument: optionalrawContent getter on SubdocOperationResult, includeRaw option in the LookupInBuilders (putting a copy of the raw JSON bytes into the result for GETs), new abstract FragmentTranscoder that deals with byte arrays..
  • JCBC-901: The experimental Authenticator interface has been introduced to store implicit credentials for protected operations. Such operations for now include opening a Bucket and getting aClusterManager instance.
  • JCBC-998JVMCBC-357: Added an experimental RawQueryExecutorwhich allows to execute N1QL queries and get the raw JSON response from the server.
  • JVMCBC-361: When a Node is DEGRADED, at least part of its Services are CONNECTED. As such, a message can now be dispatched to a Node when it is either in CONNECTED or DEGRADED state. The relevant Service will still have to be CONNECTED for the message to go through, otherwise it will go into the retry loop.
  • JVMCBC-358: There's a new Endpoint selection strategy (RoundRobinSelectionStrategy), which is used by theQueryEndpoint. When several QueryEndpoints are configured, they will now properly be used in a round-robin fashion.

Fixed Issues

This release fixes the following issues:

  • JVMCBC-364: The query parser can fail when N1QL results are empty (no rows), in a specific HTTP chunk configuration (where there is a split at the "status" entry that follows the rows in the response).
  • JVMCBC-360: When querying a view in reduce mode, the returnedinfo() section is empty but the parser can leak a small amount of bytes. This has now been fixed.

Version 2.3.2 (10 August 2016)

Version 2.3.2 is the third release of the 2.3 series, bringing small enhancements and bugfixes over the last stable release.

Download | API Reference | Core API Reference

New Features and Behavioral Changes

This release contains the following enhancements:

  • JCBC-987: Support for durability constraints (PersistTo and ReplicateTo) has been added to subdocument's MutateInBuilder.
  • JCBC-982: BucketSettings now exposes the raw bucket configuration when reading from the server, and allows to provide parameters not covered by the API when creating/updating buckets.
  • JCBC-983, JVMCBC-350: Added a simple client for cluster REST API to ClusterManager as a ClusterApiClient. This is to easily send requests to nodes where the REST API is exposed (usually on port 8091).
  • JVMCBC-342: When a CouchbaseEnvironment is shutdown(), the internal counter used to issue warnings in case of multiple environments is decreased. Additionally an event is triggered on the EventBus.
  • JVMCBC-351: Don't limit SSL to SunX509 algorithm but instead use the platform's default. This default can always be changed at runtime via the "ssl.KeyManagerFactory.algorithm" security property (set in the Java security properties file or by calling Security.setProperty(...)). Thanks to contributor @arana3!
  • JCBC-985, JCBC-976: Experimental FTS API enhancements: Fix fts errors handling/parsing, StringQuery becomes QueryStringQuery, fix highlight style being optional, renamed ScanConsistency to SearchConsistency.
  • JVMCBC-344, JVMCBC-349: RxJava, Disruptor and Netty internal dependencies have been updated to their latest bugfix releases. Subsequently, usage of deprecated Disruptor APIs have been refactored out.
  • JVMCBC-355: Improves diagnosability of errors related to UnicastAutoReleaseSubject by adding an identifier to these subjects.

Fixed Issues

This release fixes the following issues:

  • JCBC-984: Don't broadcast query plan to non-query nodes when using prepared statements.
  • JCBC-992: DNS SRV workaround when default nameserver is IPv6: Bootstrap now allows to provide an explicit value for java.naming.provider.url.
  • JVMCBC-345, JVMCBC-346, JVMCBC-347: Various fixes linked to SDK bootstrap: Don't silently ignore ConnectException, avoid subscribe() without error handler in configuration/bootstrap Observables, maintain internal bootstrap state in config provider. Fixed an issue where a node seen as down during bootstrap would never be reconnected to later on, even when it would come back online.
  • JVMCBC-348: Catch exceptions that event bus consumers may trigger.
  • JVMCBC-352: Fixed an issue with the N1QL streaming parser where some packet splitting layouts would confuse the parser into interpreting results as RAW. This would usually translate into either JSON parse errors (rows emitted would be malformed JSON) or an IllegalStateException with the "...in TRANSITION..." message.
  • JVMCBC-354: The BucketManager#getDesignDocuments and associated GetDesignDocumentsRequest hit an API that is only working on data nodes (unlike the rest of 8091 APIs). Fixed an issue when, in a MDS configuration, such request would incorrectly be sent to non-data nodes.

Version 2.3.1 (22 June 2016)

This release is the second release of the 2.3 series, bringing small enhancements
and bugfixes over the last stable release.

Download | API Reference | Core API Reference

Fixed Issues

This release fixes the following issues:

  • JCBC-975: Replace occurrences of StringBuffer with StringBuilder
  • JCBC-978: Fix Index DSL "WITH nodes" option
  • JVMCBC-343: WaitStrategy needs to be created for every CouchbaseCore

Version 2.3.0 (10 June 2016)

Version 2.3.0 is the first general availability release of the 2.3 series. It adds new features for N1QL query, performance enhancements and supports the developer preview full text search available in Couchbase Server 4.5.

Download | API Reference | Core API Reference

New features and behavioral changes

This release contains the following enhancements:

  • JVMCBC-271: The long deprecated queryEnabled and queryPort environment params have been removed since they are useless as of now.
  • JCBC-958, JCBC-959, JCBC-957: The Fulltext-Search API has been heavily reworked and streamlined.
  • JCBC-954, JCBC-971: The subdocument APIs have been marked as stable and slightly polished.
  • JCBC-955: The N1QL Index Management API has been marked as stable.
  • JVMCBC-333: A custom KeyStore can now be passed in during CouchbaseEnvironment setup (in addition to passing the keystore filepath).
  • JCBC-964, JVMCBC-338: Support for disabling metrics when performing a N1QL query to save on the response size.
  • JVMCBC-334: Support for N1QL SELECT RAW has been added.
  • JCBC-965: A generic param option has been added to the N1qlParams class.
  • RxJava has been updated to 1.1.5
  • Retry logic during rebalance ("Not My VBucket") has been aligned with the SDK RFC.
  • JVMCBC-335: For advanced use cases, the RingBuffer waiting strategy for the request buffer can now be tuned. Use with care!

Fixed Issues

This release fixes the following issues:

  • JCBC-968, JVMCBC-337: The DocumentFragment does not carry the CAS on multi lookup, this issue has been fixed.
  • JCBC-973: A regression has been fixed where disabled flush on the bucket was not surfaced as an exception inside the SDK when BucketManager#flush() is called.