NeoEMF icon indicating copy to clipboard operation
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+]

org.atlanmod.neoemf neoemf-core {current-version} ----

Backend implementations are located under the artifactID neoemf-data-XXX.

[source,xml, subs=attributes+]

org.atlanmod.neoemf neoemf-data-XXX {current-version} ----

Where XXX is any of:

  • Blueprints: ** TinkerGraph : blueprints-core ** Neo4j: blueprints-neo4j (requires blueprints-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/]