Skip to content

Latest commit

 

History

History
187 lines (155 loc) · 12.6 KB

CHANGELOG.md

File metadata and controls

187 lines (155 loc) · 12.6 KB

1.0.3

Current SNAPSHOT.

IMPORTANT NOTE: Due to significant changes in data mapping, databases created with a previous version are not compatible with this release. No migration helper is provided: the simplest way to transfer the old databases to the new ones, is to export the database into an XMI file and re-import it.

NOTE: The changelog of this version is not exhaustive and regroup only major changes.

Core

  • [NEW] Id instances are created by an IdProvider instead of static methods
  • [UPD] Ids use a long representation, or a 64-bits word. They can be converted to a hexadecimal string and vice versa to maintain compatibility with Backends that don't support long
  • [UPD] The hasher used to generate new Id from a value is now xxHash that provides better performance than MurmurHash3
  • [UPD] Features are identified by their EStructuralFeature#getFeatureId() instead of their name (see FeatureBean)

Back-ends and stores abstraction

  • [NEW] Introduce the new DataMapper layer to manipulate elements as key/value pairs. They are presented as several interfaces and each have their responsibility:
    • ContainerMapper : manage the container of elements (represented by ContainerBean)
    • ClassMapper : manage the meta-class of elements (represented by ClassBean)
    • ValueMapper : manage single-valued attributes of elements (identified by SingleFeatureBean)
    • ReferenceMapper : manage single-valued references between elements (identified by SingleFeatureBean)
    • ManyValueMapper : manage multi-valued attributes of elements (identified by ManyFeatureBean)
    • ManyReferenceMapper : manage multi-valued references between elements (identified by ManyFeatureBean)
  • [NEW] Several default mappings have been implemented to process references as attributes after a conversion, or to manage data with indices, arrays, lists, or with a custom way. They are presented as interfaces to allow a combination of several mappings. For example, you can combine: ReferenceAs<String>, MergeManyReferenceAs<String> and ManyValueWithLists. These mappings are optional
  • [NEW] A generic DefaultTransientBackend has been created to handle transient elements in memory: Custom TransientBackends are no longer necessary, but this requires the neoemf-io module to transfer the transient content to a PersistentBackend
  • [NEW] URIs are now created with factories instead of static methods
  • [UPD] Complete optimization of all existing database adapters
  • [UPD] Backends are auto-closed when the JVM is shutting-down
  • [UPD] StoreAdapter become the only EStore implementation, and provides a bridge between EMF and DataMappers
  • [UPD] All Backends and Stores inherit from the DataMapper architecture
  • [UPD] Back-end configuration have been merged, updated and simplified
  • [UPD] Configuration is now managed with a simple Properties file (may change in the near future)
  • [UPD] PersistentResource are no longer linked to their Backends, prefer using Stores
  • [UPD] BackendFactory#createBackend() take a URI as parameter instead of a File to handle distributed PersistentBackend
  • [DEL] All backend-specific implementations of PersistentStore have been merged with those at core-level
  • [DEL] InvalidStore has been replaced by InvalidBackend
  • [DEL] TransientStores have been removed and replaced by BoundInMemoryBackend (a lightweigth and shared version of an DefaultInMemoryBackend)

Automation

  • [NEW] BackendFactorys are automatically registered at runtime (no need to explicitly register them in the ResourceSet registry)
  • [NEW] BackendFactorys are linked to their associated UriFactory and Config with annotations which are processed at runtime: a UriFactory or Config can be retrieved from their association
  • [NEW] Stores and mappings are created by using reflection in BackendFactory to allow customizations (defined with Config)
  • [NEW] URIs are automatically created according to a common prefix ("neo-") and the lowercase name of their associated BackendFactory

I/O

  • [NEW] The direct-import becomes generic and works with all implementations
  • [NEW] The direct-export is fully implemented, and is possible to an XMI file (compressed or not), or another DataMapper

Performance

  • [NEW] Add batch methods getAll, setAll,... in addition to get, set,... to avoid multiple call
  • [UPD] BlueprintsBackends labels has been simplified by one-letter labels
  • [UPD] The default chunk of AutoSaveStore is processed automatically from the total amount of memory
  • [UPD] Map-based Serializers have been replaced by generic serializers (the implementation is located in atlanmod:commons-core and use FST)

Utility methods

  • [DEL] Utility classes and methods have been moved to atlanmod:commons-core

Tests

  • [NEW] All mappings have a code coverage of ~100% to ensure the expected behavior of future implementations
  • [NEW] HBase is now integrated in tests by using an Hadoop mini-cluster (requires Cygwin on Windows)
  • [UPD] Test helpers have been merged and simplified: now only a link to Context is needed for multi-backend tests
  • [UPD] Models used in io test-cases are now generated with Maven during the compilation
  • [UPD] Tests have been migrated to JUnit5

Benchmarks

  • [NEW] Use NEOEMF_HOME system variable to locate the base benchmark directory
  • [UPD] The NeoEMF database are created using the io importer instead of the standard importer
  • [NEW] Stores can be configured in benchmarks, with the s parameter
  • [UPD] Adapters are configured with the a parameter (previously b)

Miscellaneous

  • [NEW] FeatureMap support (still not supported by the neoemf-io module)
  • [NEW] Some methods use Optional instead of a comparison to null
  • [UPD] Complete review of EMF collections to handle massive iterations
  • [FIX] Issue #11: The LoggingStoreDecorator now use a dedicated Logger for its associated Backend
  • [FIX] Issue #12: The stores are updated according to the EMF calls, so that the backends are always synchronized. There is no longer custom processing during set() and add()
  • [FIX] Issue #15: The blueprints.***.directory property is overwritten in all cases by the current path: If a datastore already exists, then this property is updated with the new path, otherwise, the property stay unchanged.
  • [FIX] Issue #27/#28: Stores are no longer copied when the associated Resource is unloading: A Resource should not be called if it's not loaded
  • [FIX] Issue #57: The Cache<Id, PersistentEObject> is now common for all implementations
  • [FIX] Issue #58: guava dependencies are no longer used in the project
  • [FIX] Issue #63: BasicReferences are first processed as BasicAttributes when reading, then redirected in EcoreProcessor which has access to its real type with the EPackage
  • [FIX] Issue #64: If an Id is not found in Backends, then an empty array is returned
  • [FIX] Issue #70: The LazyMatchEngine class has been removed
  • [FIX] Issue #71: BoundInMemoryBackend are registered in a local registry to ensure that the features can be retrieved even if the associated PersistentEObject is freed from memory
  • [FIX] Issue #72: Ignore the uniqueness check of identifiers when creating a new Vertex
  • [FIX] Issue #73: The neoemf-data-map-core module no longer exists
  • [FIX] Issue #75: The io module now use the DataMapper structure, and not a custom implementation
  • [FIX] Issue #77: Errors are intercepted and displayed in Eclipse UI
  • [FIX] Issue #78: Improve the NullPointerException message
  • [FIX] Issue #80: DefaultPersistentEObject.toString() throws a StackOverflowError on EClass instances
  • [FIX] Issue #84: FeatureMaps was not supported

Refactoring

  • [UPD] PersistenceBackendFactory become BackendFactory: they also create TransientBackends
  • [UPD] OptionsBuilder become Config
  • [UPD] PersistenceURI become UriFactory: static methods have been replaced by this factory
  • [UPD] PersistentStore become Store: they don't have any state, so the "Persistent" prefix does not make sense
  • [UPD] FeatureKey become SingleFeatureBean
  • [UPD] MultiFeatureKey become ManyFeatureBean
  • [UPD] MetaclassValue become ClassBean
  • [UPD] ContainerValue has been merged with SingleFeatureBean

Dependencies

  • [NEW] chronicle-map : 3.14.5
  • [NEW] org.reflections : 0.9.9
  • [UPD] cglib : 3.2.4 to 3.2.6
  • [UPD] log4j : 2.7 to 2.8.2
  • [UPD] org.neo4j : 1.9.6 to 2.1.8 (include blueprints-neo4j-graph to blueprints-neo4j2-graph)
  • [DEL] junit: No longer needed, managed by atlanmod:commons-core (5.0.3+)
  • [DEL] assertj : No longer needed, managed by atlanmod:commons-core (3.9.0+)
  • [DEL] mockito : No longer needed, managed by atlanmod:commons-core (2.13.0+)
  • [DEL] caffeine : No longer needed, managed by atlanmod:commons-core (2.6.0+)
  • [DEL] guava : No longer needed
  • [DEL] commons-collections4 : No longer needed
  • [DEL] commons-configuration : No longer needed
  • [DEL] commons-io : No longer needed
  • [DEL] commons-lang3 : No longer needed

1.0.2

Released on 2017-05-21.

Miscellaneous

  • [NEW] Add experimental EMF Compare integration (will stay experimental as long as Guava issues remain)
  • [FIX] Issue #53: WildCardType ? in sample (MapDB) throws an exception when accessed in the Editor
  • [FIX] Issue #54: AbstractDirectWrite#toArray() is not efficient
  • [FIX] Issue #55: DefaultPersistentEObject#eContainer() is not efficient
  • [FIX] Issue #56: Unnecessary backend lookups in PersistentStore#eObject(Id)
  • [FIX] Issue #68: Creating contained objects with Epsilon does not work

Dependencies

  • [UPD] guava : 20.0 to 15.0 (Conflict with HBase)

1.0.1

Release on 2017-01-16.

Review of the structure

  • [UPD] datastore packages become data
  • [UPD] Back-end implementations are now placed under the fr.inria.atlanmod.neoemf.data package
  • [UPD] graph package is replaced by data: no more structural differentiation in the package structure
  • [UPD] ***Map*** classes representing the MapDB implementation are replaced by ***MapDb***

Improve tests

  • [UPD] Contextualization of tests: One test-case can be executed by several back-end implementations according to the current Context
  • [UPD] Test-cases are now tagged
  • [UPD] Preparation of tests for a future integration of JUnit 5
  • [UPD] Externalization JUnit Rules
  • [UPD] Reorganization of @After/@Before methods
  • [UPD] All*** classes become Abstract***
  • [DEL] Remove NeoAssertions class and its related custom Builders

Back-ends

  • [NEW] Integration of a new back-end implementation: BerkeleyDB (experimental).

Documentation

  • [NEW] Addition of new JavaDoc tags: @future and @note
  • [UPD] JavaDoc has been completely revised and completed.

Miscellaneous

  • [NEW] Addition of new common annotations: @VisibleForTesting and @Experimental
  • [UPD] ClassInfo and ContainerInfo have now static constructor methods: from() and of()
  • [UPD] Logger is now fully-concurrent and extensible: We can use different parallel Loggers. However, these loggers keep the call order.
  • [UPD] Generalization of PersistenceURI and its sub-classes
  • [UPD] Generalization BundleActivators
  • [FIX] Issue #51: Concurrent Executor in Logger did not stop with the JVM
  • [FIX] Issue #52: Partial fix with a try...catch

Dependencies

  • [NEW] org.osgi: 6.0.0
  • [UPD] org.eclipse.emf:***: 2.11.0 to 2.12.0
  • [DEL] org.eclipse.osgi: No need for implementation

1.0.0

Released on 2016-12-06.

First release.