Skip to content

Latest commit

 

History

History
256 lines (188 loc) · 12.9 KB

CHANGELOG.adoc

File metadata and controls

256 lines (188 loc) · 12.9 KB

Change Log

2.1.1

Current SNAPSHOT.

Neoemf-data

  • [UPD] hbase.version: 2.4.12

  • [UPD] hadoop.version: 3.3.3

2.1.0

Released on 2022-06-04

Neoemf-doc

  • [NEW] Migrate Wiki Pages to Antora

Neoemf-core

  • [UPD] log4j: 2.17.2

  • [UPD] JDK: 11

  • [UPD] org.google.guava: 23.6-jre

Benchmarks

  • [UPD] jmh-core : 1.28

Neoemf-data

  • [UPD] org.eclipse.emf.compare: 3.3

  • [UPD] hbase.version: 2.4.2

  • [UPD] hadoop.version: 3.0.3

  • [UPD] de.flapdoodle.embed.mongo: 3.0.0

Neoemf-utils

  • [UPD] org.eclipse.emf.compare: 3.3

  • [UPD] Eclipse Update Site: 2020-09

  • [UPD] org.eclipse.emf : 2.24

  • [UPD] Tycho: 2.2.0

1.0.3

Released on 2022-05-30

Maintenance release
  • [UPD] Neo4j: 2.7.2

2.0.0

Released on 2019-03-21.

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] Use ServiceLoader and OSGI Services to retrieve implementations of Config, BackendFactory and UriFactory

  • [NEW] Id instances are created by an IdProvider instead of static methods

  • [UPD] Id`s use a `long representation, or a 64-bits word. They can be converted to a hexadecimal string and vice versa to maintain compatibility with Backend`s 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 TransientBackend`s are no longer necessary, but this requires the `neoemf-io module to transfer the transient content to a PersistentBackend

  • [NEW] `URI`s are now created with factories instead of static methods

  • [UPD] Complete optimization of all existing database adapters

  • [UPD] `Backend`s are auto-closed when the JVM is shutting-down

  • [UPD] StoreAdapter become the only EStore implementation, and provides a bridge between EMF and `DataMapper`s

  • [UPD] All Backend`s and `Store`s 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 `Backend`s, prefer using `Store`s

  • [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] TransientStore`s have been removed and replaced by `BoundInMemoryBackend (a lightweight and shared version of an DefaultInMemoryBackend)

Automation

  • [NEW] BackendFactory`s are automatically registered at runtime (no need to explicitly register them in the `ResourceSet registry)

  • [NEW] BackendFactory`s 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] URI`s 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] `BlueprintsBackend`s 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 Serializer`s 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] Store`s can be configured in benchmarks, with the `s parameter

  • [UPD] Adapter`s 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: Store`s 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: BasicReference`s are first processed as `BasicAttribute`s 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 `Backend`s, 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: `FeatureMap`s was not supported

Refactoring

  • [UPD] PersistenceBackendFactory become BackendFactory: they also create `TransientBackend`s

  • [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.17.0

  • [UPD] com.sleepycat:je : 5.0.73 to 18.3.12 (BerkeleyDB)

  • [UPD] mapdb: 3.0.5 to 3.0.7

  • [UPD] org.eclipse.emf : 2.12.0 to 2.15.0 (including associated dependencies)

  • [UPD] cglib : 3.2.4 to 3.2.10

  • [UPD] log4j : 2.7 to 2.11.1

  • [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 `Rule`s

  • [UPD] Reorganization of @After/@Before methods

  • [UPD] All classes become Abstract

  • [DEL] Remove NeoAssertions class and its related custom `Builder`s

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 `Logger`s. However, these loggers keep the call order.

  • [UPD] Generalization of PersistenceURI and its sub-classes

  • [UPD] Generalization `BundleActivator`s

  • [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.