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

Reply via email to