[ https://issues.apache.org/jira/browse/IGNITE-1519?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Vladimir Ozerov resolved IGNITE-1519. ------------------------------------- Resolution: Duplicate > Introduce Ignite type configuration. > ------------------------------------ > > Key: IGNITE-1519 > URL: https://issues.apache.org/jira/browse/IGNITE-1519 > Project: Ignite > Issue Type: Task > Components: general > Affects Versions: 1.1.4 > Reporter: Vladimir Ozerov > Assignee: Vladimir Ozerov > Priority: Critical > Fix For: 1.5 > > > *Problem*: > Ignite has sophisticated type configuration defined in classes > [CacheTypeMetadata|https://github.com/apache/ignite/blob/master/modules/core/src/main/java/org/apache/ignite/cache/CacheTypeMetadata.java], > > [CacheTypeFieldMetadata|https://github.com/apache/ignite/blob/master/modules/core/src/main/java/org/apache/ignite/cache/CacheTypeFieldMetadata.java], > > [org.apache.ignite.cache.query.annotations|https://github.com/apache/ignite/tree/master/modules/core/src/main/java/org/apache/ignite/cache/query/annotations]. > We are planning to add portable and platform features. Portables will have > their own configuration describing how to find fields in serialized object > without having a class (see > [PortableMarshaller|https://github.com/apache/ignite/blob/master/modules/core/src/main/java/org/apache/ignite/internal/portable/api/PortableMarshaller.java] > and > [PortableTypeConfiguration|https://github.com/apache/ignite/blob/master/modules/core/src/main/java/org/apache/ignite/internal/portable/api/PortableTypeConfiguration.java]). > Platforms will also have type configuration which is passed to native > platform to map portable types (see > [PlatformDotNetPortableTypeConfiguration|https://github.com/apache/ignite/blob/master/modules/core/src/main/java/org/apache/ignite/internal/processors/platform/dotnet/PlatformDotNetPortableTypeConfiguration.java]). > Trying to configure all these stuff will be a nightmare for users. > *Goal*: > Simplify and unify Ignite types system to make it more user-friendly. > *Considerations*: > 1) Backward compatibility must be preserved. > 2) Four interested parties must be considered: cache queries, JDBC store, > portables, platforms. > 3) Per-cache configuration must stay because different caches may need to > interpret the same type differently (e.g. create index in cache A, but do not > do that in cache B). > 4) CacheTypeMetadata is essentially a pair of key and value types. > 5) PortableTypeConfiguration is configured for either single class or all > classes in some package. > *Raw design proposal*: > 1) Define a new property in IgniteConfiguration "typesConfiguration" > accepting collection of objects "TypeConfiguration". > 2) TypeConfiguration structure: > {code} > name : String > fields : Map<String, Type> > affKeyField : String > portableConfig : TypePortableConfig > dotNetConfig : TypeDotNetConfiguration > {code} > "name" is type name as it is used everywhere in the system. > "fields" is a map from field name to field type. Must be provided at least if > queries or POJO store is used. When defined, we register them in portable > metadata on startup if type is portable. > "affKeyField" name of affinity key field, used for query colocation and in > portables. > "portableConfig" is what PortableTypeConfiguration currently is. > "dotNetConfig" is platform-specific configuration for .Net, e.g. assembly > name. > 3) CacheTypeMetadata stay in CacheConfiguration but is simplified, because we > no longer need to define field classes. Normally user will only define > several sets or varargs (not maps!) of field names for indexes and query > fields. -- This message was sent by Atlassian JIRA (v6.3.4#6332)