# Types & Errors (/sdks/java/reference/types-and-errors)



Java messages are immutable builder types (`EventMessage`, `QueueMessage`, `CommandMessage`, etc.). Responses map to `EventSendResult`, `QueuesPollResponse`, `CommandResponseMessage`, and `QueryResponseMessage`.

## Exception hierarchy [#exception-hierarchy]

```text
KubeMQException
  ├── ConnectionException (retryable)
  ├── KubeMQTimeoutException (retryable)
  ├── AuthenticationException (non-retryable)
  ├── AuthorizationException (non-retryable)
  ├── ValidationException (non-retryable)
  └── GRPCException (varies)
```

## Error codes [#error-codes]

Use `ErrorCode` on `KubeMQException` for structured handling. Retryable exceptions are safe to retry with exponential backoff when the underlying operation is idempotent.

## Performance tips [#performance-tips]

1. **Reuse client instances** — one client per pattern handles all channels
2. **Use batch APIs** for high-throughput queue workloads
3. **Do not block subscription callbacks** — offload heavy work to executors
4. **Close clients when done** — all classes implement `AutoCloseable`

## Resources [#resources]

* [GitHub Repository](https://github.com/kubemq-io/kubemq-java-v2)
* [Maven Central](https://central.sonatype.com/artifact/io.kubemq.sdk/kubemq-sdk-Java)
* [Javadoc](https://javadoc.io/doc/io.kubemq.sdk/kubemq-sdk-Java)
* [Examples](/sdks/java/how-to)

## See Also [#see-also]

* [Java SDK Getting Started](/sdks/java)
