Releases: atlanmod/NeoEMF
v2.1.0
version 1.0.3
Just a maintenance release to solve a security flaw caused by Log4j
v2.0.0
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
ServiceLoaderand OSGI Services to retrieve implementations ofConfig,BackendFactoryandUriFactory - [NEW]
Idinstances are created by anIdProviderinstead of static methods - [UPD]
Ids use alongrepresentation, or a 64-bits word. They can be converted to a hexadecimal string and vice versa to maintain compatibility withBackends that don't supportlong - [UPD] The hasher used to generate new
Idfrom a value is now xxHash that provides better performance than MurmurHash3 - [UPD] Features are identified by their
EStructuralFeature#getFeatureId()instead of their name (seeFeatureBean)
Back-ends and stores abstraction
- [NEW] Introduce the new
DataMapperlayer 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 byContainerBean)ClassMapper: manage the meta-class of elements (represented byClassBean)ValueMapper: manage single-valued attributes of elements (identified bySingleFeatureBean)ReferenceMapper: manage single-valued references between elements (identified bySingleFeatureBean)ManyValueMapper: manage multi-valued attributes of elements (identified byManyFeatureBean)ManyReferenceMapper: manage multi-valued references between elements (identified byManyFeatureBean)
- [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>andManyValueWithLists. These mappings are optional - [NEW] A generic
DefaultTransientBackendhas been created to handle transient elements in memory:
CustomTransientBackends are no longer necessary, but this requires theneoemf-iomodule to transfer the transient content to aPersistentBackend - [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]
StoreAdapterbecome the onlyEStoreimplementation, and provides a bridge between EMF andDataMappers - [UPD] All
Backends andStores inherit from theDataMapperarchitecture - [UPD] Back-end configuration have been merged, updated and simplified
- [UPD] Configuration is now managed with a simple
Propertiesfile (may change in the near future) - [UPD]
PersistentResourceare no longer linked to theirBackends, prefer usingStores - [UPD]
BackendFactory#createBackend()take aURIas parameter instead of aFileto handle distributedPersistentBackend - [DEL] All backend-specific implementations of
PersistentStorehave been merged with those atcore-level - [DEL]
InvalidStorehas been replaced byInvalidBackend - [DEL]
TransientStores have been removed and replaced byBoundInMemoryBackend(a lightweigth and shared version of anDefaultInMemoryBackend)
Automation
- [NEW]
BackendFactorys are automatically registered at runtime (no need to explicitly register them in theResourceSetregistry) - [NEW]
BackendFactorys are linked to their associatedUriFactoryandConfigwith annotations which are processed at runtime: aUriFactoryorConfigcan be retrieved from their association - [NEW] Stores and mappings are created by using reflection in
BackendFactoryto allow customizations (defined withConfig) - [NEW]
URIs are automatically created according to a common prefix ("neo-") and the lowercase name of their associatedBackendFactory
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 toget,set,... to avoid multiple call - [UPD]
BlueprintsBackends labels has been simplified by one-letter labels - [UPD] The default chunk of
AutoSaveStoreis processed automatically from the total amount of memory - [UPD] Map-based
Serializers have been replaced by generic serializers (the implementation is located inatlanmod:commons-coreand 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
Contextis needed for multi-backend tests - [UPD] Models used in
iotest-cases are now generated with Maven during the compilation - [UPD] Tests have been migrated to JUnit5
Benchmarks
- [NEW] Use
NEOEMF_HOMEsystem variable to locate the base benchmark directory - [UPD] The NeoEMF database are created using the
ioimporter instead of the standard importer - [NEW]
Stores can be configured in benchmarks, with thesparameter - [UPD]
Adapters are configured with theaparameter (previouslyb)
Miscellaneous
- [NEW]
FeatureMapsupport (still not supported by theneoemf-iomodule) - [NEW] Some methods use
Optionalinstead of a comparison tonull - [UPD] Complete review of EMF collections to handle massive iterations
- [FIX] Issue #11: The
LoggingStoreDecoratornow use a dedicatedLoggerfor its associatedBackend - [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 duringset()andadd() - [FIX] Issue #15: The
blueprints.***.directoryproperty 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 associatedResourceis unloading: AResourceshould not be called if it's not loaded - [FIX] Issue #57: The
Cache<Id, PersistentEObject>is now common for all implementations - [FIX] Issue #58:
guavadependencies are no longer used in the project - [FIX] Issue #63:
BasicReferences are first processed asBasicAttributes when reading, then redirected inEcoreProcessorwhich has access to its real type with theEPackage - [FIX] Issue #64: If an
Idis not found inBackends, then an empty array is returned - [FIX] Issue #70: The
LazyMatchEngineclass has been removed - [FIX] Issue #71:
BoundInMemoryBackendare registered in a local registry to ensure that the features can be retrieved even if the associatedPersistentEObjectis freed from memory - [FIX] Issue #72: Ignore the uniqueness check of identifiers when creating a new
Vertex - [FIX] Issue #73: The
neoemf-data-map-coremodule no longer exists - [FIX] Issue #75: The
iomodule now use theDataMapperstructure, and not a custom implementation - [FIX] Issue #77: Errors are intercepted and displayed in Eclipse UI
- [FIX] Issue #78: Improve the
NullPointerExceptionmessage - [FIX] Issue #80:
DefaultPersistentEObject.toString()throws aStackOverflowErroronEClassinstances - [FIX] Issue #84:
FeatureMaps was not supported
Refactoring
- [UPD]
PersistenceBackendFactorybecomeBackendFactory: they also createTransientBackends - [UPD]
OptionsBuilderbecomeConfig - [UPD]
PersistenceURIbecomeUriFactory: static methods have been replaced by this factory - [UPD]
PersistentStorebecomeStore: they don't have any state, so the "Persistent" prefix does not make sense - [UPD]
FeatureKeybecomeSingleFeatureBean - [UPD]
MultiFeatureKeybecomeManyFeatureBean - [UPD]
MetaclassValuebecomeClassBean - [UPD]
ContainerValuehas been merged withSingleFeatureBean
Dependencies
- [NEW]
chronicle-map:3.17.0 - [UPD]
com.sleepycat:je:5.0.73to18.3.12(BerkeleyDB) - [UPD]
mapdb:3.0.5to3.0.7 - [UPD]
org.eclipse.emf:2.12.0to2.15.0(including associated dependencies) - [UPD]
cglib:3.2.4to3.2.10 - [UPD]
log4j:2.7to2.11.1 - [UPD]
org.neo4j:1.9.6to2.1.8(includeblueprints-neo4j-graphtoblueprints-neo4j2-graph) - [DEL]
junit: No longer needed, managed byatlanmod:commons-core(`5....
v1.0.2
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
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
datastorepackages becomedata- Backend implementations are now placed under the
fr.inria.atlanmod.neoemf.datapackage graphpackage is replaced bydata: no more structural differentiation in the package structure***Map***classes representing the MapDB implementation are replaced by***MapDb***- Generalization of
PersistenceURIand its sub-classes - Addition of new common annotations:
@VisibleForTestingand@Experimental Loggeris now fully-concurrent and extensible: We can use different parallelLoggers. However, these loggers keep the call order.- Generalization
BundleActivators
Back-ends
- Integration of a new key-value backend implementation: BerkeleyDB (experimental).
ClassInfoandContainerInfohave now static constructor methods:from()andof()
Tests
- Contextualization of tests: One test-case can be executed by several back-end implementations according to the current
Contextdefined by@Parameterized.Parameters - Test-cases are now tagged
- Preparation of tests for a future integration of JUnit 5
- Externalization JUnit
Rules - Reorganization of
@After/@Beforemethods All***classes becomeAbstract***- Remove
NeoAssertionsclass and its related customBuilders
Documentation
- JavaDoc has been completely revised and completed.
- Addition of new JavaDoc tags:
@futureand@note
Bug Fixes
- Fixed issue #51: Concurrent
ExecutorinLoggerdid 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 from2.11.0to2.12.0
v1.0.0
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