Released on 2022-06-04
-
[NEW] Migrate Wiki Pages to Antora
-
[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
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.
-
[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 a `long
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 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 (seeFeatureBean
)
-
[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 the `neoemf-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 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 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 by `BoundInMemoryBackend
(a lightweight and shared version of anDefaultInMemoryBackend
)
-
[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
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 associated `BackendFactory
-
[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
-
[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 in `atlanmod:commons-core
and use FST)
-
[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
-
[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 (previouslyb
)
-
[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 during
set()
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 associated `Resource
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 as `BasicAttribute`s when reading, then redirected in `EcoreProcessor
which has access to its real type with theEPackage
-
[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 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
-
[UPD]
PersistenceBackendFactory
becomeBackendFactory
: they also create `TransientBackend`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
-
[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
Released on 2017-05-21.
-
[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
Release on 2017-01-16.
-
[UPD]
datastore
packages becomedata
-
[UPD] Back-end implementations are now placed under the
fr.inria.atlanmod.neoemf.data
package -
[UPD]
graph
package is replaced bydata
: no more structural differentiation in the package structure -
[UPD]
Map
classes representing the MapDB implementation are replaced byMapDb
-
[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 becomeAbstract
-
[DEL] Remove
NeoAssertions
class and its related custom `Builder`s
-
[NEW] Addition of new JavaDoc tags:
@future
and@note
-
[UPD] JavaDoc has been completely revised and completed.
-
[NEW] Addition of new common annotations:
@VisibleForTesting
and@Experimental
-
[UPD]
ClassInfo
andContainerInfo
have now static constructor methods:from()
andof()
-
[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
inLogger
did not stop with the JVM -
[FIX] Issue #52: Partial fix with a
try…catch