> ## Documentation Index
> Fetch the complete documentation index at: https://docs.activeviam.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Tuple loading topic

> Configuration reference for `TupleTopicDescription` properties such as `tupleSupplier`, `columns`, `channels`, and source restrictions, configurable only through Java Spring beans.

<Note>
  Tuple Loading Topics cannot be defined via configuration properties.
</Note>

### Java configuration

`TupleTopicDescription` Spring Beans are picked up as configuration for the DLC.

| Parameter | Required | Type | Default | Description |
| - | :-: | - | :- | - |
| name | Y | `String` | | Name of the topic. |
| tupleSupplier | Y | `Function<DlcScope, Collection<Object[]>>` | | The tuple supplier. |
| columns | | `List<String>` | Columns will implicitly come from the store which is being published to. | The order of columns in the tuples. If a column name matches a datastore column, its parser will be implied. For columns that do not match a datastore column, provide a parser in the channel as a [Custom Field](../custom-field). Columns without a matching datastore column or parser are skipped. |
| channels | | `Set<Channel>` | A channel is created using the topic's name as the name of the target. | [Channels](../channel) |
| restrictToSources | | `Set<String>` | | Sources *to* which the topic is restricted. See [source to topic matching](../../functional/source-to-topic-matching). |
| restrictFromSources | | `Set<String>` | | Sources *from* which the topic is restricted. See [source to topic matching](../../functional/source-to-topic-matching). |

#### Java example

This configuration does not specify a target for the data or the data format.

<Note>
  If the topic is not named the same as the store, the target must be explicitly specified in the [channel](../channel) of the topic.
</Note>

* The target is implicitly the Atoti table named "Trades".
* The format (column order of the tuples and how input fields are parsed) implicitly comes from the columns and types of the targeted Atoti table, in this case "Trades".

```java theme={"languages":{"custom":["/engine/python-sdk/6.2/languages/pycon.tmLanguage.json"]}}
@Bean
public TupleTopicDescription tupleTopic() {
    return TupleTopicDescription.builder("trades", this::generateTuples)
            .build();
}
```
