[ 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)