TimeBase Java Client
Mission
Teach correct use of the TimeBase Java client API: connection lifecycle, schema and binding, cursors and loaders, and QQL execution from Java. Prefer MCP-grounded stream and schema facts before generating code.
When to use this skill
Use only when the user explicitly requests Java together with TimeBase.
Typical tasks:
- reads/writes via
TickLoader/TickCursor,
- stream creation with
Introspector or explicit RecordClassDescriptor,
executeQuery with bound result POJOs,
- TimeBase Java client Maven/Gradle setup,
- OAuth2 connection setup,
- debugging binding, connection, or build/dependency-resolution failures.
Do not use for pure QQL authoring with no Java binding (use the qql-generator skill instead) or for pure MCP discovery with no code to write.
How to route requests
- Confirm the user asked for Java + TimeBase, not generic Java help.
- When stream names, schema, symbols, or time bounds matter, use MCP discovery first (
references/mcp-assisted-discovery.md).
- Detect the target project: Maven (
pom.xml) or Gradle (build.gradle/build.gradle.kts). Preserve its existing Java version and dependency-management style.
- Before generating connection, stream, or cursor/loader code, verify the exact API shape from the target project's dependency sources/javadoc or a compile probe.
- Pick the smallest proven reference and example for the access pattern.
- For project setup and build verification, use
references/project-setup.md.
Local API verification rules
- Do not invent interfaces, members, or overloads from memory when dependency sources, javadoc, or compile checks are available.
- If the API shape is still unclear after checking bundled references, use a small compile probe instead of guessing.
Mandatory policy
- Ground stream keys and schema from MCP or user input. Do not invent field names, type names, or stream keys.
- Prefer built-in message types over inventing custom POJOs when schema matches. See
references/message-types-and-schema.md for what's built in per edition.
- Use raw (
RawMessage) mode only for schemas without generated/bound classes.
- When QQL authoring is central, use the QQL generator skill first. Return here for Java execution and binding when the user supplies final QQL.
- Prefer QQL text with embedded subscription (stream union, symbol filter, time filter) over the deprecated
executeQuery overloads that take explicit stream/entity/time-range arrays.
- Use placeholder-based credentials for repository access and preserve any existing naming convention the project already uses. Never hardcode repository credentials. If dependency resolution fails with 401/403, report that the configured credentials are missing or incorrect.
- Never assume Community vs Enterprise Edition. Resolve it per
references/project-setup.md before generating dependency coordinates.
- Keep
DXTickDB, TickCursor, and TickLoader lifecycle explicit (try-with-resources).
- Start read-only unless writes are required. Do not write to streams unless the user asked.
MCP-first workflow
When the task depends on live server context:
get_server_configuration
list_streams
get_stream_schema
get_stream_time_range and get_stream_symbols when needed
- Generate Java using grounded names and types from those results
If MCP is unavailable, state what is missing and ask the user for stream/schema context before finalizing bound types.
Capability map
references/workflow-selection.md: routing table
references/mcp-assisted-discovery.md: MCP discovery order
references/project-setup.md: dependencies, repository, credentials, verification
references/message-types-and-schema.md: POJOs, introspector, schema types
references/cursor-and-streams.md: select/cursor filters, dynamic resubscription, live and reversed reads, multi-stream select
references/loader-writes.md: TickLoader writes, write modes, error handling
references/stream-management.md: stream creation, metadata, lifecycle, data removal
references/qql-execution-from-java.md: executeQuery, bind parameters, embedded subscription
references/schema-evolution.md: schema change analysis and application
references/locking-and-securities-update.md: stream locking, bulk reference-data-stream rewrite pattern
references/json-message-conversion.md: converting between JSON and a TimeBase message
references/stream-spaces.md: reading/writing named stream partitions
references/import-export.md: bulk file archive export/import
references/symbol-mapping-and-sync.md: stream copy with symbol remapping, cross-instance sync
references/array-fields-and-codecs.md: raw array-typed fields, custom debug printing
references/topics.md: low-latency pub/sub as an alternative to durable streams
references/authentication.md: connection entry points, username/password and OAuth2 setup, incl. Enterprise-only flows
references/api-discovery.md: API checks
references/debugging-and-performance.md: build, connection, binding, and throughput failures
1---2name: timebase-java-client3description: Use when user explicitly asks for TimeBase Java client code, for example typed stream reads/writes, stream creation, bound QQL execution from Java, client Maven/Gradle setup (Community or Enterprise Edition), or TimeBase Java client debugging.4---56# TimeBase Java Client78## Mission910Teach correct use of the TimeBase Java client API: connection lifecycle, schema and binding, cursors and loaders, and QQL execution from Java. Prefer MCP-grounded stream and schema facts before generating code.1112## When to use this skill1314Use only when the user explicitly requests Java together with TimeBase.1516Typical tasks:1718- reads/writes via `TickLoader`/`TickCursor`,19- stream creation with `Introspector` or explicit `RecordClassDescriptor`,20- `executeQuery` with bound result POJOs,21- TimeBase Java client Maven/Gradle setup,22- OAuth2 connection setup,23- debugging binding, connection, or build/dependency-resolution failures.2425Do not use for pure QQL authoring with no Java binding (use the `qql-generator` skill instead) or for pure MCP discovery with no code to write.2627## How to route requests28291. Confirm the user asked for Java + TimeBase, not generic Java help.302. When stream names, schema, symbols, or time bounds matter, use MCP discovery first (`references/mcp-assisted-discovery.md`).313. Detect the target project: Maven (`pom.xml`) or Gradle (`build.gradle`/`build.gradle.kts`). Preserve its existing Java version and dependency-management style.324. Before generating connection, stream, or cursor/loader code, verify the exact API shape from the target project's dependency sources/javadoc or a compile probe.335. Pick the smallest proven reference and example for the access pattern.346. For project setup and build verification, use `references/project-setup.md`.3536## Local API verification rules3738- Do not invent interfaces, members, or overloads from memory when dependency sources, javadoc, or compile checks are available.39- If the API shape is still unclear after checking bundled references, use a small compile probe instead of guessing.4041## Mandatory policy4243- Ground stream keys and schema from MCP or user input. Do not invent field names, type names, or stream keys.44- Prefer built-in message types over inventing custom POJOs when schema matches. See `references/message-types-and-schema.md` for what's built in per edition.45- Use raw (`RawMessage`) mode only for schemas without generated/bound classes.46- When QQL authoring is central, use the QQL generator skill first. Return here for Java execution and binding when the user supplies final QQL.47- Prefer QQL text with embedded subscription (stream union, symbol filter, time filter) over the deprecated `executeQuery` overloads that take explicit stream/entity/time-range arrays.48- Use placeholder-based credentials for repository access and preserve any existing naming convention the project already uses. Never hardcode repository credentials. If dependency resolution fails with 401/403, report that the configured credentials are missing or incorrect.49- Never assume Community vs Enterprise Edition. Resolve it per `references/project-setup.md` before generating dependency coordinates.50- Keep `DXTickDB`, `TickCursor`, and `TickLoader` lifecycle explicit (try-with-resources).51- Start read-only unless writes are required. Do not write to streams unless the user asked.5253## MCP-first workflow5455When the task depends on live server context:56571. `get_server_configuration`582. `list_streams`593. `get_stream_schema`604. `get_stream_time_range` and `get_stream_symbols` when needed615. Generate Java using grounded names and types from those results6263If MCP is unavailable, state what is missing and ask the user for stream/schema context before finalizing bound types.6465## Capability map6667- [`references/workflow-selection.md`](references/workflow-selection.md): routing table68- [`references/mcp-assisted-discovery.md`](references/mcp-assisted-discovery.md): MCP discovery order69- [`references/project-setup.md`](references/project-setup.md): dependencies, repository, credentials, verification70- [`references/message-types-and-schema.md`](references/message-types-and-schema.md): POJOs, introspector, schema types71- [`references/cursor-and-streams.md`](references/cursor-and-streams.md): select/cursor filters, dynamic resubscription, live and reversed reads, multi-stream select72- [`references/loader-writes.md`](references/loader-writes.md): `TickLoader` writes, write modes, error handling73- [`references/stream-management.md`](references/stream-management.md): stream creation, metadata, lifecycle, data removal74- [`references/qql-execution-from-java.md`](references/qql-execution-from-java.md): `executeQuery`, bind parameters, embedded subscription75- [`references/schema-evolution.md`](references/schema-evolution.md): schema change analysis and application76- [`references/locking-and-securities-update.md`](references/locking-and-securities-update.md): stream locking, bulk reference-data-stream rewrite pattern77- [`references/json-message-conversion.md`](references/json-message-conversion.md): converting between JSON and a TimeBase message78- [`references/stream-spaces.md`](references/stream-spaces.md): reading/writing named stream partitions79- [`references/import-export.md`](references/import-export.md): bulk file archive export/import80- [`references/symbol-mapping-and-sync.md`](references/symbol-mapping-and-sync.md): stream copy with symbol remapping, cross-instance sync81- [`references/array-fields-and-codecs.md`](references/array-fields-and-codecs.md): raw array-typed fields, custom debug printing82- [`references/topics.md`](references/topics.md): low-latency pub/sub as an alternative to durable streams83- [`references/authentication.md`](references/authentication.md): connection entry points, username/password and OAuth2 setup, incl. Enterprise-only flows84- [`references/api-discovery.md`](references/api-discovery.md): API checks85- [`references/debugging-and-performance.md`](references/debugging-and-performance.md): build, connection, binding, and throughput failures