[
https://issues.apache.org/jira/browse/IGNITE-15409?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Alexander Lapin updated IGNITE-15409:
-------------------------------------
Description:
Ability to add listeners with "any()" placeholder will ease the logic of
registering ones.
Let's say that we want to listen to a changes of a column type within any
column of any table. Now the only option is to register type listeners from
within column listeners within table listeners:
{code:java}
clusterCfgMgr.configurationRegistry().getConfiguration(TablesConfiguration.KEY).tables().listenElements(
new ConfigurationNamedListListener<TableView>() {
@Override
public @NotNull CompletableFuture<?> onCreate(@NotNull
ConfigurationNotificationEvent<TableView> tblCtx) {
clusterCfgMgr.configurationRegistry().getConfiguration(TablesConfiguration.KEY).tables().
get(tblCtx.newValue().name()).columns().listenElements(
new ConfigurationNamedListListener<ColumnView>() {
@Override public @NotNull CompletableFuture<?> onCreate(
@NotNull ConfigurationNotificationEvent<ColumnView> columnCtx) {
clusterCfgMgr.configurationRegistry().getConfiguration(TablesConfiguration.KEY).tables().
get(tblCtx.newValue().name()).columns().get(columnCtx.newValue().name()).listen((typeCtx)
-> null);
return CompletableFuture.completedFuture(null);
}
});
return CompletableFuture.completedFuture(null);
}
{code}
With any placeholder it will look like much simpler:
{code:java}
clusterCfgMgr.configurationRegistry().getConfiguration(TablesConfiguration.KEY).tables().any().columns().
any().type().listen(ctx -> null);
{code}
Besides obvious there are at least two important points here:
* It should be possible to retrieve full context/"full configuration locator"
from the listener's context. In this particular case _type().listen(ctx ->
null)_ should provide context of the table and the column that were changed.
* It should be possible to remove such "any" listeners.
was:
Ability to add listeners with "any()" placeholder will ease the logic of
registering ones.
Let's say that we want to listen to a changes of a column type within any
column of any table. Now the only option is to register type listeners from
within column listeners within table listeners:
{code:java}
clusterCfgMgr.configurationRegistry().getConfiguration(TablesConfiguration.KEY).tables().listenElements(
new ConfigurationNamedListListener<TableView>() {
@Override
public @NotNull CompletableFuture<?> onCreate(@NotNull
ConfigurationNotificationEvent<TableView> tblCtx) {
clusterCfgMgr.configurationRegistry().getConfiguration(TablesConfiguration.KEY).tables().
get(tblCtx.newValue().name()).columns().listenElements(
new ConfigurationNamedListListener<ColumnView>() {
@Override public @NotNull CompletableFuture<?> onCreate(
@NotNull ConfigurationNotificationEvent<ColumnView> columnCtx) {
clusterCfgMgr.configurationRegistry().getConfiguration(TablesConfiguration.KEY).tables().
get(tblCtx.newValue().name()).columns().get(columnCtx.newValue().name()).listen((typeCtx)
-> null);
return CompletableFuture.completedFuture(null);
}
});
return CompletableFuture.completedFuture(null);
}
{code}
With any placeholder it will look like much simpler:
{code:java}
clusterCfgMgr.configurationRegistry().getConfiguration(TablesConfiguration.KEY).tables().any().columns().
any().type().listen(ctx -> null);
{code}
Besides obvious there are at least two important points here:
* It should be possible to retrieve full context/"full configuration locator"
from the listener's context. In this particular case _type().listen(ctx ->
null)_ should provide context of the table and the column that were changed.
* It should be possible to remove such "any" listeners.
> Configuration registry: register listener with any placeholder on
> NamedConfigurationTree
> ----------------------------------------------------------------------------------------
>
> Key: IGNITE-15409
> URL: https://issues.apache.org/jira/browse/IGNITE-15409
> Project: Ignite
> Issue Type: Improvement
> Reporter: Alexander Lapin
> Assignee: Ivan Bessonov
> Priority: Major
> Labels: ignite-3
>
> Ability to add listeners with "any()" placeholder will ease the logic of
> registering ones.
> Let's say that we want to listen to a changes of a column type within any
> column of any table. Now the only option is to register type listeners from
> within column listeners within table listeners:
>
> {code:java}
> clusterCfgMgr.configurationRegistry().getConfiguration(TablesConfiguration.KEY).tables().listenElements(
> new ConfigurationNamedListListener<TableView>() {
> @Override
> public @NotNull CompletableFuture<?> onCreate(@NotNull
> ConfigurationNotificationEvent<TableView> tblCtx) {
>
> clusterCfgMgr.configurationRegistry().getConfiguration(TablesConfiguration.KEY).tables().
> get(tblCtx.newValue().name()).columns().listenElements(
> new ConfigurationNamedListListener<ColumnView>() {
> @Override public @NotNull CompletableFuture<?> onCreate(
> @NotNull ConfigurationNotificationEvent<ColumnView>
> columnCtx) {
>
> clusterCfgMgr.configurationRegistry().getConfiguration(TablesConfiguration.KEY).tables().
>
> get(tblCtx.newValue().name()).columns().get(columnCtx.newValue().name()).listen((typeCtx)
> -> null);
> return CompletableFuture.completedFuture(null);
> }
> });
> return CompletableFuture.completedFuture(null);
> }
> {code}
> With any placeholder it will look like much simpler:
> {code:java}
> clusterCfgMgr.configurationRegistry().getConfiguration(TablesConfiguration.KEY).tables().any().columns().
> any().type().listen(ctx -> null);
> {code}
> Besides obvious there are at least two important points here:
> * It should be possible to retrieve full context/"full configuration
> locator" from the listener's context. In this particular case
> _type().listen(ctx -> null)_ should provide context of the table and the
> column that were changed.
> * It should be possible to remove such "any" listeners.
--
This message was sent by Atlassian Jira
(v8.3.4#803005)