[ 
https://issues.apache.org/jira/browse/IGNITE-17211?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Kirill Tkalenko updated IGNITE-17211:
-------------------------------------
    Description: 
*Problem*
If the polymorphic configuration is nested (sub), then when trying to create an 
instance of the configuration, we will receive the error *Polymorphic 
configuration type is not defined*, since the type of the polymorphic 
configuration is not known and can be changed in the future, in order to get 
around this limitation, you have to set the default type, which may not always 
be correct.

*Stack trace example:*
{noformat}
Caused by: java.lang.IllegalStateException: Polymorphic configuration type is 
not defined: 
org.apache.ignite.configuration.schemas.table.ColumnDefaultConfigurationSchema. 
See @PolymorphicConfig documentation.
        at 
org.apache.ignite.configuration.schemas.table.ColumnNode.construct(Unknown 
Source)
        at 
org.apache.ignite.internal.configuration.util.ConfigurationUtil$3.visitInnerNode(ConfigurationUtil.java:327)
        at 
org.apache.ignite.configuration.schemas.table.ColumnNode.traverseChildren(Unknown
 Source)
        at 
org.apache.ignite.internal.configuration.util.ConfigurationUtil.addDefaults(ConfigurationUtil.java:308)
        at 
org.apache.ignite.internal.configuration.tree.NamedListNode.newElementDescriptor(NamedListNode.java:492)
        at 
org.apache.ignite.internal.configuration.tree.NamedListNode.create(NamedListNode.java:156)
{noformat}

*Configuration scheme example:*
{code:java}
@ConfigurationRoot(rootName = "parent", type = LOCAL)
public static class ParentConfigurationSchema {
    @ConfigValue
    public ChildConfigurationSchema child;
}

@PolymorphicConfig
public static class ChildConfigurationSchema {
    public static final String FIRST = "first";
    public static final String SECOND = "second";

    // When creating a configuration instance, there will be an error if there 
is no default value.
    @PolymorphicId
    public String type;
}

@PolymorphicConfigInstance(ChildConfigurationSchema.FIRST)
public static class FirstChildConfigurationSchema extends 
ChildConfigurationSchema {
}

@PolymorphicConfigInstance(ChildConfigurationSchema.SECOND)
public static class SecondChildConfigurationSchema extends 
ChildConfigurationSchema {
}
{code}


  was:
*Problem*
If the polymorphic configuration is nested (sub), then when trying to create an 
instance of the configuration, we will receive the error *Polymorphic 
configuration type is not defined*, since the type of the polymorphic 
configuration is not known and can be changed in the future, in order to get 
around this limitation, you have to set the default type, which may not always 
be correct.

*Stack trace example:*
{noformat}
Caused by: java.lang.IllegalStateException: Polymorphic configuration type is 
not defined: 
org.apache.ignite.configuration.schemas.table.ColumnDefaultConfigurationSchema. 
See @PolymorphicConfig documentation.
        at 
org.apache.ignite.configuration.schemas.table.ColumnNode.construct(Unknown 
Source)
        at 
org.apache.ignite.internal.configuration.util.ConfigurationUtil$3.visitInnerNode(ConfigurationUtil.java:327)
        at 
org.apache.ignite.configuration.schemas.table.ColumnNode.traverseChildren(Unknown
 Source)
        at 
org.apache.ignite.internal.configuration.util.ConfigurationUtil.addDefaults(ConfigurationUtil.java:308)
        at 
org.apache.ignite.internal.configuration.tree.NamedListNode.newElementDescriptor(NamedListNode.java:492)
        at 
org.apache.ignite.internal.configuration.tree.NamedListNode.create(NamedListNode.java:156)
{noformat}



> Nested polymorphic configuration cannot be without a default type
> -----------------------------------------------------------------
>
>                 Key: IGNITE-17211
>                 URL: https://issues.apache.org/jira/browse/IGNITE-17211
>             Project: Ignite
>          Issue Type: Bug
>            Reporter: Kirill Tkalenko
>            Priority: Major
>              Labels: iep-55, ignite-3, tech-debt
>             Fix For: 3.0.0-alpha6
>
>
> *Problem*
> If the polymorphic configuration is nested (sub), then when trying to create 
> an instance of the configuration, we will receive the error *Polymorphic 
> configuration type is not defined*, since the type of the polymorphic 
> configuration is not known and can be changed in the future, in order to get 
> around this limitation, you have to set the default type, which may not 
> always be correct.
> *Stack trace example:*
> {noformat}
> Caused by: java.lang.IllegalStateException: Polymorphic configuration type is 
> not defined: 
> org.apache.ignite.configuration.schemas.table.ColumnDefaultConfigurationSchema.
>  See @PolymorphicConfig documentation.
>       at 
> org.apache.ignite.configuration.schemas.table.ColumnNode.construct(Unknown 
> Source)
>       at 
> org.apache.ignite.internal.configuration.util.ConfigurationUtil$3.visitInnerNode(ConfigurationUtil.java:327)
>       at 
> org.apache.ignite.configuration.schemas.table.ColumnNode.traverseChildren(Unknown
>  Source)
>       at 
> org.apache.ignite.internal.configuration.util.ConfigurationUtil.addDefaults(ConfigurationUtil.java:308)
>       at 
> org.apache.ignite.internal.configuration.tree.NamedListNode.newElementDescriptor(NamedListNode.java:492)
>       at 
> org.apache.ignite.internal.configuration.tree.NamedListNode.create(NamedListNode.java:156)
> {noformat}
> *Configuration scheme example:*
> {code:java}
> @ConfigurationRoot(rootName = "parent", type = LOCAL)
> public static class ParentConfigurationSchema {
>     @ConfigValue
>     public ChildConfigurationSchema child;
> }
> @PolymorphicConfig
> public static class ChildConfigurationSchema {
>     public static final String FIRST = "first";
>     public static final String SECOND = "second";
>     // When creating a configuration instance, there will be an error if 
> there is no default value.
>     @PolymorphicId
>     public String type;
> }
> @PolymorphicConfigInstance(ChildConfigurationSchema.FIRST)
> public static class FirstChildConfigurationSchema extends 
> ChildConfigurationSchema {
> }
> @PolymorphicConfigInstance(ChildConfigurationSchema.SECOND)
> public static class SecondChildConfigurationSchema extends 
> ChildConfigurationSchema {
> }
> {code}



--
This message was sent by Atlassian Jira
(v8.20.7#820007)

Reply via email to