NeoEMF
NeoEMF copied to clipboard
Multi-backend EMF persistence framework.
= NeoEMF :current-version: 2.1.0
image:https://img.shields.io/twitter/url/http/shields.io.svg[Tweet,link=https://twitter.com/intent/tweet?text=Handling%20large%20EMF%20resources%20in%20an%20efficient%20and%20scalable%20way:&url=https://neoemf.atlanmod.org]
image:https://img.shields.io/badge/licence-EPL--2.0-blue.svg[Licence,link=https://www.eclipse.org/legal/epl-2.0/] image:https://maven-badges.herokuapp.com/maven-central/org.atlanmod.neoemf/neoemf/badge.svg[Maven Central,link=https://maven-badges.herokuapp.com/maven-central/org.atlanmod.neoemf/neoemf] image:https://img.shields.io/badge/eclipse plugin-{current-version}-blue.svg[Plugin,link=https://www.atlanmod.org/NeoEMF/releases/latest/plugin/]
NeoEMF is a persistence layer for the Eclipse Modeling Framework (https://www.eclipse.org/emf/[EMF]), which supports different NoSQL databases: https://neo4j.com/[Neo4j], https://www.oracle.com/database/technologies/related/berkeleydb.html[Berkeley DB], https://www.mongodb.com/[MongoDB], etc. Thanks to NeoEMF, developers can handle large EMF resources in an efficient and scalable way.
NeoEMF provides the sames interfaces as EMF: EMF-based programs can benefit from the NeoEMF main features wth few or no changes.
.Resource Loading in NeoEMF [source,java]
URI uri = new BlueprintsUriFactory().createLocalUri("models/myGraph.graphdb");
ResourceSet resourceSet = new ResourceSetImpl(); Resource resource = resourceSet .createResource(uri);
Read more at the https://atlanmod.univ-nantes.io/neoemf/[Documentation Site]
== Main Features
Lazy-loading:: Resource objets are loaded on demand to reduce memory footprint.
Caching:: In most cases, NeoEMF relies on database caches to retrieve resource objects. When the performance is critical, NeoEMF provides a build-in, application-level cache to accelerate database access.
Auto-commit:: For backends limited on transaction size, it is possible to use the auto-commit feature to split large transaction into several small ones
Dirty saving:: Handle large models that haven't been persisted to avoid memory overhead
== Integrate NeoEMF to your Maven build
To add a dependency on NeoEMF using Maven, use the following:
[source, xml, subs=attributes+]
Backend implementations are located under the artifactID neoemf-data-XXX.
[source,xml, subs=attributes+]
Where XXX is any of:
- Blueprints:
** TinkerGraph :
blueprints-core** Neo4j:blueprints-neo4j(requiresblueprints-core) - MapDB :
mapdb - BerkeleyDB:
berkeleydb - HBase:
hbase - MongoDB:
mongodb
== Eclipse Installation
The simplest way to install the NeoEMF plugins in Eclipse is to use the update-site that is available https://www.atlanmod.org/NeoEMF/releases/latest/plugin/[here]. Install the NeoEMF Persistence Framework plugin, which provides NeoEMF core classes and utils. Select the backend specific implementation(s) you want to plug in NeoEMF.
[IMPORTANT]
For further information, see the dedicated page in the https://atlanmod.univ-nantes.io/neoemf/neoemf/2.0.1/user/Installation.html[NeoEMF Documentation].
== Benchmarks
NeoEMF Benchmarks comparing the performance of the different backends and with Eclipse [CDO] is available as a separate project:
- https://github.com/neoemf/benchmarks
== Issues
If you experience issues installing or using NeoEMF, you can https://github.com/atlanmod/NeoEMF/issues[submit an issue on github] or contact us at link:mailto:[email protected][[email protected]]
== Known issues:
- Only Oxygen plugins are fetched (the compatibility is not ensured for previous Eclipse versions)
- The Eclipse plugins cannot be built if Maven can not access internet (it is needed to fetch Oxygen p2 repositories)
- Sometimes the plugin build crashes and/or freezes during p2 index fetching from Oxygen repositories. It is generally sufficient to cancel the build (
ctrl-c) and to relaunch it.
== Credits
Performance problems and memory leaks are diagnosed with https://www.ej-technologies.com/products/jprofiler/overview.html[Java Profiler]
image:https://img.shields.io/github/release/atlanmod/NeoEMF.svg[Latest release,link=https://github.com/atlanmod/NeoEMF/releases/latest] image:https://github.com/atlanmod/NeoEMF/actions/workflows/maven.yml/badge.svg?branch=master[Build Status,link=https://github.com/atlanmod/NeoEMF/actions] image:https://www.javadoc.io/badge/org.atlanmod.neoemf/neoemf.svg[Javadocs,link=https://www.javadoc.io/doc/org.atlanmod.neoemf/neoemf] image:https://codecov.io/gh/atlanmod/NeoEMF/branch/master/graph/badge.svg[CodeCov,link=https://codecov.io/gh/atlanmod/NeoEMF] image:https://app.codacy.com/project/badge/Grade/3622d2ea083f4c88a32094d63b028500["Codacy code quality", link="https://www.codacy.com/gh/atlanmod/NeoEMF/dashboard?utm_source=github.com&utm_medium=referral&utm_content=atlanmod/NeoEMF&utm_campaign=Badge_Grade"] image:https://img.shields.io/badge/javadoc-{current-version}-blue.svg[Javadoc,link=https://www.atlanmod.org/NeoEMF/releases/latest/doc/]