Skip to main content
Version: Next

JAVA SDK usage

Maven Central Version

Install dependencies

The first thing we will do is install the Open Feature SDK and the GO Feature Flag provider.

<dependency>
<groupId>dev.openfeature</groupId>
<artifactId>sdk</artifactId>
<artifactId>1.12.2</artifactId>
</dependency>
<dependency>
<groupId>dev.openfeature.contrib.providers</groupId>
<artifactId>go-feature-flag</artifactId>
<version>0.4.0</version>
</dependency>

Initialize your Open Feature client

To evaluate the flag you need to have an Open Feature configured in your app. This code block shows you how you can create a client that you can use in your application.

import dev.openfeature.contrib.providers.gofeatureflag.GoFeatureFlagProvider;
import dev.openfeature.contrib.providers.gofeatureflag.GoFeatureFlagProviderOptions;
import dev.openfeature.sdk.EvaluationContext;
import dev.openfeature.sdk.MutableContext;
import dev.openfeature.sdk.OpenFeatureAPI;

// ...

GoFeatureFlagProviderOptions options =
GoFeatureFlagProviderOptions.builder().endpoint("http://localhost:1031/").build();
GoFeatureFlagProvider provider = new GoFeatureFlagProvider(options);

OpenFeatureAPI.getInstance().setProvider(provider);
OpenFeatureAPI api = OpenFeatureAPI.getInstance();
Client featureFlagClient = api.getClient();

Evaluate your flag

This code block explain how you can create an EvaluationContext and use it to evaluate your flag.

note

In this example we are evaluating a boolean flag, but other types are available.

Refer to the Open Feature documentation to know more about it.

// Context of your flag evaluation.
// With GO Feature Flag you MUST have a targetingKey that is a unique identifier of the user.
EvaluationContext userContext = new MutableContext("1d1b9238-2591-4a47-94cf-d2bc080892f1")
.add("firstname", "john")
.add("lastname", "doe")
.add("email","john.doe@gofeatureflag.org")
.add("admin", true)
.add("anonymous", false);

Boolean adminFlag = featureFlagClient.getBooleanValue("flag-only-for-admin", false, userContext);
if (adminFlag) {
// flag "flag-only-for-admin" is true for the user
} else {
// flag "flag-only-for-admin" is false for the user
}

Breaking changes

0.4.0 - Cache Implementation Change: Guava to Caffeine

In this release, we have updated the cache implementation from Guava to Caffeine. This change was made because Caffeine is now the recommended caching solution by the maintainers of Guava due to its performance improvements and enhanced features.

Because of this, the cache configuration on GoFeatureFlagProviderOptions that used Guava's CacheBuilder is now handled by Caffeine.

How to migrate

Configuration cache with Guava used to be like this:

import com.google.common.cache.CacheBuilder;
// ...
CacheBuilder guavaCacheBuilder = CacheBuilder.newBuilder()
.initialCapacity(100)
.maximumSize(2000);

FeatureProvider provider = new GoFeatureFlagProvider(
GoFeatureFlagProviderOptions
.builder()
.endpoint("https://my-gofeatureflag-instance.org")
.cacheBuilder(guavaCacheBuilder)
.build());

OpenFeatureAPI.getInstance().setProviderAndWait(provider);

// ...

Now with Caffeine it should be like this:

import com.github.benmanes.caffeine.cache.Caffeine;
// ...
Caffeine caffeineCacheConfig = Caffeine.newBuilder()
.initialCapacity(100)
.maximumSize(2000);

FeatureProvider provider = new GoFeatureFlagProvider(
GoFeatureFlagProviderOptions
.builder()
.endpoint("https://my-gofeatureflag-instance.org")
.cacheConfig(caffeineCacheConfig)
.build());

OpenFeatureAPI.getInstance().setProviderAndWait(provider);

// ...

For a complete list of customizations options available in Caffeine, please refer to the Caffeine documentation for more details.

Contribute to the provider

You can find the source of the provider in the open-feature/java-sdk-contrib repository.

Get the latest GO Feature Flag updates