Skip to content

[DOCS-15222] Document Java agentless Feature Flags delivery - #38518

Open
leoromanovsky wants to merge 5 commits into
masterfrom
leo.romanovsky/java-agentless-feature-flags-docs
Open

[DOCS-15222] Document Java agentless Feature Flags delivery#38518
leoromanovsky wants to merge 5 commits into
masterfrom
leo.romanovsky/java-agentless-feature-flags-docs

Conversation

@leoromanovsky

@leoromanovsky leoromanovsky commented Jul 28, 2026

Copy link
Copy Markdown
Contributor

Motivation

Java 1.65.0 moves default CDN delivery into dd-openfeature. Customers no longer need the Java agent or a Lambda tracing layer for CDN evaluation.

Remote Configuration remains agent-backed. Customers need clear and separate requirements for both sources.

Changes and Decisions

  • List dd-openfeature 1.65.0 as the minimum Java CDN version.
  • Remove dd-java-agent from Java CDN and serverless requirements.
  • Document that Remote Configuration requires compatible dd-openfeature and dd-java-agent versions.
  • Recommend version 1.65.0 or later for both Remote Configuration components.
  • Keep this PR on release hold until Java 1.65.0 is available.

Validation

  • ffe-dogfooding #96 passed provider activation, evaluation, ETag polling, and shutdown without a Java agent.
  • system-tests #7300 passed provider-only CDN evaluation and the Java compatibility matrix.

@leoromanovsky

Copy link
Copy Markdown
Contributor Author

/review

@github-actions github-actions Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🤖 Automated review by Claude. AI-generated; verify before acting.

Reviewed the Java Feature Flags updates and the surrounding pages that reference Java support. Findings are minor clarity/consistency issues — nothing blocking. See inline comments.

Reviewed ad0ff38485ded74706b1e47509b919e007eb5161workflow run

Comment thread content/en/feature_flags/server/java.md Outdated
Comment thread content/en/feature_flags/server/java.md Outdated
Comment thread content/en/feature_flags/server/java.md
Comment thread content/en/feature_flags/server/_index.md Outdated
Comment thread content/en/feature_flags/concepts/configuration_sources.md Outdated
Comment thread content/en/feature_flags/implementation_patterns/serverless.md Outdated
@leoromanovsky
leoromanovsky marked this pull request as ready for review July 28, 2026 21:57
@leoromanovsky
leoromanovsky requested a review from a team as a code owner July 28, 2026 21:57

@janine-c janine-c left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Looks great! I have some minor writing notes, but nothing urgent. Let me know if you have any questions, and let me know if you need anything else!

|---|---|---|
| `DD_FEATURE_FLAGS_CONFIGURATION_SOURCE_AGENTLESS_BASE_URL` | Datadog-managed endpoint | Overrides the agentless flag configuration endpoint or base URL. See [Use a custom agentless endpoint](#use-a-custom-agentless-endpoint). |
| `DD_FEATURE_FLAGS_CONFIGURATION_SOURCE_AGENTLESS_POLL_INTERVAL_SECONDS` | `30` | Positive integer that sets the time between completed polling attempts, capped at 3600 seconds. |
| `DD_FEATURE_FLAGS_CONFIGURATION_SOURCE_AGENTLESS_POLL_INTERVAL_SECONDS` | `30` | Positive integer that sets the time between completed polling attempts. Node.js caps values at 3600 seconds. Java does not apply this cap. |

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
| `DD_FEATURE_FLAGS_CONFIGURATION_SOURCE_AGENTLESS_POLL_INTERVAL_SECONDS` | `30` | Positive integer that sets the time between completed polling attempts. Node.js caps values at 3600 seconds. Java does not apply this cap. |
| `DD_FEATURE_FLAGS_CONFIGURATION_SOURCE_AGENTLESS_POLL_INTERVAL_SECONDS` | `30` | Positive integer that sets the time between completed polling attempts. Java does not limit attempts, while Node.js caps values at 3600 seconds. |

We have a precedent going by now on this page to mention Java first, then Node.js, so it's easier to read if we just stick with it 🙂

The Java SDK integrates with the Datadog Java tracer (`dd-trace-java`) and implements the [OpenFeature](https://openfeature.dev/) standard.

<div class="alert alert-info">If you're using Datadog APM and your application already has the Datadog Java SDK and Remote Configuration enabled, skip to <a href="#initialize-the-openfeature-provider">Initialize the OpenFeature provider</a>. You only need to add the OpenFeature dependencies and initialize the provider.</div>
<div class="alert alert-warning">In agentless mode, Java 1.65.0 supports configuration delivery and local flag evaluation only. It does not support evaluation metrics, exposure logging, or experimentation use cases.</div>

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
<div class="alert alert-warning">In agentless mode, Java 1.65.0 supports configuration delivery and local flag evaluation only. It does not support evaluation metrics, exposure logging, or experimentation use cases.</div>
<div class="alert alert-warning">Starting in version 1.65.0, in agentless mode, Java supports configuration delivery and local flag evaluation only. It does not support evaluation metrics, exposure logging, or experimentation use cases.</div>

Borrowing the "Starting in..." language from earlier on the page, so it doesn't sound like this only applies to just the one version.

[10]: /feature_flags/concepts/configuration_sources/#use-a-custom-agentless-endpoint
[11]: /feature_flags/concepts/configuration_sources/#migrate-an-existing-remote-configuration-setup
[12]: /feature_flags/concepts/configuration_sources/#configure-agentless-delivery
[13]: /feature_flags/concepts/configuration_sources/#use-agent-remote-configuration

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
[13]: /feature_flags/concepts/configuration_sources/#use-agent-remote-configuration
[13]: /feature_flags/concepts/configuration_sources/#use-agent-remote-configuration
[14]: /getting_started/site/

For the above link I added

- **Datadog Agent**: Version **7.55 or later** with [Remote Configuration][1] enabled
- **Datadog [API key][7]**: Configured on the Agent (not the application) for Remote Configuration
- A Datadog [API key][7]
- Your Datadog site

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
- Your Datadog site
- A Datadog [**API key**][7]
- Your Datadog [**site**][14]

For consistency, adding bolding (which I think is kind of unnecessary for this list, but that's neither here nor there) and a link in case customers want some more info on sites (I also suggested the link reference at the bottom of this file)


### 3. Agent: Verify Agent health and connectivity
1. Confirm that `dd-java-agent` and `dd-openfeature` are version 1.65.0 or later.
2. Confirm that `DD_FEATURE_FLAGS_ENABLED` is not set to `false`.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
2. Confirm that `DD_FEATURE_FLAGS_ENABLED` is not set to `false`.
2. Confirm that `DD_FEATURE_FLAGS_ENABLED` is set to `true`.

Can we say this, or is it possible for it to be null? Just thought that this would be a little easier to parse

Comment thread content/en/feature_flags/server/java.md Outdated
Cannot create backend API client since Agentless mode is disabled, and agent does not support EVP proxy
```
1. Confirm that `DD_FEATURE_FLAGS_CONFIGURATION_SOURCE=remote_config` is set. During the migration window, `DD_EXPERIMENTAL_FLAGGING_PROVIDER_ENABLED=true` also selects Remote Configuration when no source is set.
2. Confirm that `DD_FEATURE_FLAGS_ENABLED` is not set to `false`.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
2. Confirm that `DD_FEATURE_FLAGS_ENABLED` is not set to `false`.
2. Confirm that `DD_FEATURE_FLAGS_ENABLED` is set to `true`.

Same question as above 🙂

Comment thread content/en/feature_flags/server/java.md Outdated
```

If these messages are absent, verify `DD_EXPERIMENTAL_FLAGGING_PROVIDER_ENABLED=true` is set and the tracer started correctly.
With `remote_config`, the system starts during tracer initialization and does not wait for provider activation. If the applicable messages are absent, confirm that `DD_FEATURE_FLAGS_ENABLED` is not `false`. Then verify the selected source.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
With `remote_config`, the system starts during tracer initialization and does not wait for provider activation. If the applicable messages are absent, confirm that `DD_FEATURE_FLAGS_ENABLED` is not `false`. Then verify the selected source.
With `remote_config`, the system starts during tracer initialization and does not wait for provider activation. If the applicable messages are absent, confirm that `DD_FEATURE_FLAGS_ENABLED` is `true`. Then verify the selected source.

Same as above!

### 5. Flagging platform: Verify data appears in Datadog
### 4. Flagging platform: Verify data appears in Datadog

<div class="alert alert-warning">Java 1.65.0 does not send exposure events or the <code>feature_flag.evaluations</code> metric without an Agent. Their absence in a no-Agent deployment is expected and does not indicate that configuration loading or local evaluation failed.</div>

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
<div class="alert alert-warning">Java 1.65.0 does not send exposure events or the <code>feature_flag.evaluations</code> metric without an Agent. Their absence in a no-Agent deployment is expected and does not indicate that configuration loading or local evaluation failed.</div>
<div class="alert alert-warning">Starting in version 1.65.0, Java does not send exposure events or the <code>feature_flag.evaluations</code> metric without an Agent. Their absence in a no-Agent deployment is expected and does not indicate that configuration loading or local evaluation failed.</div>

Same as above, trying to avoid the misconception that this only applies to this one version

[1]: /remote_configuration/
[2]: /tracing/troubleshooting/connection_errors/
[3]: /agent/troubleshooting/site/
[4]: https://app.datadoghq.com/fleet

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change

This PR removes the only reference to this link, so we can remove it here 🙂

#### Experiment exposures

Exposures appear in Datadog only for flags associated with an experiment. Standard feature flags without an experiment association do not generate exposure events. If exposures are missing:
When the selected telemetry path supports exposures, exposures appear only for flags associated with an experiment. Standard feature flags do not generate exposure events. If exposures are missing:

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
When the selected telemetry path supports exposures, exposures appear only for flags associated with an experiment. Standard feature flags do not generate exposure events. If exposures are missing:
When the selected configuration path supports exposures, exposures appear only for flags associated with an experiment. Standard feature flags do not generate exposure events. If exposures are missing:

Claude suggested using this instead of "telemetry path," which doesn't appear anywhere else and that people might misunderstand. I'm okay with either, but thought I'd flag it just in case.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants