Skip to content

Releases: atlanmod/NeoEMF

v2.1.0

04 Jun 17:05
Compare
Choose a tag to compare

Release 2.1.0
Requires JDK v. 11

version 1.0.3

31 May 12:03
Compare
Choose a tag to compare

Just a maintenance release to solve a security flaw caused by Log4j

v2.0.0

15 Jul 15:08
Compare
Choose a tag to compare

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] 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.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....
Read more

v1.0.2

28 Jun 14:27
Compare
Choose a tag to compare

Summary

We fixed a set of bugs we found in our experiments and we received in users' feedbacks. Thanks for helping us improving the tool! We also integrated a new experimental integration with EMF Compare, allowing to compare NeoEMF models to other EMF-based models. This feature will remain experimental until the next major release that will remove conflicting Guava dependencies.

We also merged the common features of MapDB and BerkeleyDB backends to improve maintainability and reusability of map-based serialization components.

Changelog

New Features

  • Add experimental EMF Compare integration (will stay experimental as
    long as Guava issues remain)

Bug Fixes

  • Fixed Issue #53: WildCardType '?' in sample (mapdb) throws an exception
    when accessed in the Editor
  • Fixed Issue #54: AbstractDirectWrite.toArray is not efficient
  • Fixed Issue #55: DefaultPersistentEObject.eContainer is not efficient
  • Fixed Issue #56: Unnecessary backend lookups in Store.eObject(Id)
  • Fixed Issue #68: Creating contained objects with Epsilon does not work

Back-ends

  • Merge common code from MapDB & BerkeleyDB in Map module
  • BerkeleyDB remains an experimental backend until the next major release

v1.0.1

16 Jan 21:09
Compare
Choose a tag to compare

Summary

Core modularization to ease new backend integration: all the supported backends are now defined as sub-project of the data module. The Logger has been updated to work in a dedicated thread, limiting its impact on the application performance. We have improved and rewritten a large part of the JavaDoc and published it on NeoEMF website. Tests are not modular and can be executed on all the supported backends, this allows to develop high quality implementations that benefit of existing tests. We also fixed few issues and updated the dependencies with the latest EMF release. See the changelog for a complete description of the updates.
Update Site

Changelog

Structure

  • datastore packages become data
  • Backend implementations are now placed under the fr.inria.atlanmod.neoemf.data package
  • graph package is replaced by data: no more structural differentiation in the package structure
  • ***Map*** classes representing the MapDB implementation are replaced by ***MapDb***
  • Generalization of PersistenceURI and its sub-classes
  • Addition of new common annotations: @VisibleForTesting and @Experimental
  • Logger is now fully-concurrent and extensible: We can use different parallel Loggers. However, these loggers keep the call order.
  • Generalization BundleActivators

Back-ends

  • Integration of a new key-value backend implementation: BerkeleyDB (experimental).
  • ClassInfo and ContainerInfo have now static constructor methods: from() and of()

Tests

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

Documentation

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

Bug Fixes

  • Fixed issue #51: Concurrent Executor in Logger did not stop with the JVM
  • Fixed issue #52: Partial fix with a try...catch

Dependencies

  • Added OSGI dependency org.osgi: 6.0.0
  • Removed OSGI implementation dependency org.eclipse.osgi
  • Upgraded org.eclipse.emf:*** dependencies from 2.11.0 to 2.12.0

v1.0.0

06 Dec 16:09
Compare
Choose a tag to compare

Initial release of the tool. Defines the core components of the framework and the supported backends.
Update Site

  • Core API defninition
    • Extension of the EMF API with PersistentResource and PersistentEObject
    • Abstract backend architecture
    • Support for persistent and transient backends
    • Enhanced load/save mechanism to support NeoEMF options
  • Support for Blueprints databases
    • Complete model-to-Blueprints mapping
    • Neo4j convenience wrapper
  • Support for MapDB databases
  • Support for HBase databases
  • IO module
    • Efficient XMI-to-Blueprints parser
  • Benchmarks for all the supported backends
    • Comparison with the default XMI serialization
    • Comparison with CDO
    • Model traversal queries