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
ServiceLoader
and OSGI Services to retrieve implementations ofConfig
,BackendFactory
andUriFactory
- [NEW]
Id
instances are created by anIdProvider
instead of static methods - [UPD]
Id
s use along
representation, or a 64-bits word. They can be converted to a hexadecimal string and vice versa to maintain compatibility withBackend
s that don't supportlong
- [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 (seeFeatureBean
)
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 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
DefaultTransientBackend
has been created to handle transient elements in memory:
CustomTransientBackend
s are no longer necessary, but this requires theneoemf-io
module to transfer the transient content to aPersistentBackend
- [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 onlyEStore
implementation, and provides a bridge between EMF andDataMapper
s - [UPD] All
Backend
s andStore
s inherit from theDataMapper
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 theirBackend
s, prefer usingStore
s - [UPD]
BackendFactory#createBackend()
take aURI
as parameter instead of aFile
to handle distributedPersistentBackend
- [DEL] All backend-specific implementations of
PersistentStore
have been merged with those atcore
-level - [DEL]
InvalidStore
has been replaced byInvalidBackend
- [DEL]
TransientStore
s have been removed and replaced byBoundInMemoryBackend
(a lightweigth and shared version of anDefaultInMemoryBackend
)
Automation
- [NEW]
BackendFactory
s are automatically registered at runtime (no need to explicitly register them in theResourceSet
registry) - [NEW]
BackendFactory
s are linked to their associatedUriFactory
andConfig
with annotations which are processed at runtime: aUriFactory
orConfig
can be retrieved from their association - [NEW] Stores and mappings are created by using reflection in
BackendFactory
to allow customizations (defined withConfig
) - [NEW]
URI
s 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]
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 inatlanmod: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 thes
parameter - [UPD]
Adapter
s are configured with thea
parameter (previouslyb
)
Miscellaneous
- [NEW]
FeatureMap
support (still not supported by theneoemf-io
module) - [NEW] Some methods use
Optional
instead of a comparison tonull
- [UPD] Complete review of EMF collections to handle massive iterations
- [FIX] Issue #11: The
LoggingStoreDecorator
now use a dedicatedLogger
for 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.***.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 associatedResource
is unloading: AResource
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 asBasicAttribute
s when reading, then redirected inEcoreProcessor
which has access to its real type with theEPackage
- [FIX] Issue #64: If an
Id
is not found inBackend
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 associatedPersistentEObject
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 theDataMapper
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 aStackOverflowError
onEClass
instances - [FIX] Issue #84:
FeatureMap
s was not supported
Refactoring
- [UPD]
PersistenceBackendFactory
becomeBackendFactory
: they also createTransientBackend
s - [UPD]
OptionsBuilder
becomeConfig
- [UPD]
PersistenceURI
becomeUriFactory
: static methods have been replaced by this factory - [UPD]
PersistentStore
becomeStore
: they don't have any state, so the "Persistent" prefix does not make sense - [UPD]
FeatureKey
becomeSingleFeatureBean
- [UPD]
MultiFeatureKey
becomeManyFeatureBean
- [UPD]
MetaclassValue
becomeClassBean
- [UPD]
ContainerValue
has been merged withSingleFeatureBean
Dependencies
- [NEW]
chronicle-map
:3.17.0
- [UPD]
com.sleepycat:je
:5.0.73
to18.3.12
(BerkeleyDB) - [UPD]
mapdb
:3.0.5
to3.0.7
- [UPD]
org.eclipse.emf
:2.12.0
to2.15.0
(including associated dependencies) - [UPD]
cglib
:3.2.4
to3.2.10
- [UPD]
log4j
:2.7
to2.11.1
- [UPD]
org.neo4j
:1.9.6
to2.1.8
(includeblueprints-neo4j-graph
toblueprints-neo4j2-graph
) - [DEL]
junit
: No longer needed, managed byatlanmod:commons-core
(5.0.3+
) - [DEL]
assertj
: No longer needed, managed byatlanmod:commons-core
(3.9.0+
) - [DEL]
mockito
: No longer needed, managed byatlanmod:commons-core
(2.13.0+
) - [DEL]
caffeine
: No longer needed, managed byatlanmod: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