[
https://issues.apache.org/jira/browse/IGNITE-1519?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Vladimir Ozerov closed IGNITE-1519.
-----------------------------------
> 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)