/NeoEMF

Multi-backend EMF persistence framework.

Primary LanguageJavaEclipse Public License 1.0EPL-1.0

NeoEMF

Build Status codecov Codacy Badge Maven Central

What is NeoEMF?

NeoEMF is an AtlanMod research team project that aims at handling large EMF models in an efficient and scalable way.

It is based on our work on Neo4EMF, a scalable and graph-based backend for persisting EMF models.

NeoEMF is a multi-backend framework developped to allow an easy integration of custom backends depending on user needs.

Check out our wiki for further information on the supported backends, code examples, and developer resources.

What are the supported backends?

NeoEMF is provided with a complete support of MapDB and Blueprints databases.

Some Blueprints connectors are also available to ease the integration of graph databases (Neo4j for the moment).

What are the features?

NeoEMF comes with some features depending on the backend used:

  • Lazy-loading mechanism: A model is loaded part by part while needed (All backends)
  • Caching: NeoEMF relies on database caches to retrieve EObjects. But in some situation where time performance is important this is not enough and it is possible to use application-level caches to speed up information loading (All backends)
  • Auto-commit: For the backend having restrictions on transaction sizes it is possible to use the auto-commit feature to split large transaction into several small ones (Blueprints backend)
  • Dirty saving: Handle large models that haven't been persisted to avoid memory overhead (Blueprints backend)

Why should I use NeoEMF?

NeoEMF is fully EMF compliant, that means there is no modification to do to use it with existing EMF based applications.

Additionally NeoEMF can be plugged with several persistence solutions (for the moment Blueprints and MapDB) and is configurable to fit the best your needs (custom caches, in-memory resources, auto-commit,...).

In addition, NeoEMF provides a query API to perform optimized OCL queries over models and reify the results as navigable models.

Use

Latest release

The most recent release is NeoEMF 1.0.1, released January 16, 2017.

To add a dependency on NeoEMF using Maven, use the following:

<dependency>
  <groupId>fr.inria.atlanmod.neoemf</groupId>
  <artifactId>neoemf</artifactId>
  <version>1.0.1</version>
</dependency>

Snapshots

Snapshots are automatically build from the master and are available throught Maven using 1.0.2-SNAPSHOT.

Installation

Update site

The simplest way to install NeoEMF is to use the update-site that is available here. Install the Base component, which provides NeoEMF core classes and utils. Select the backend specific implementation(s) you want to plug in NeoEMF (currently Blueprints and MapDB are available).

Specific backend setup

Backend specific implementations may need configuration files or require other plugins to work properly. These requirements are available in the root of the related subprojects.

Local build

You can build locally NeoEMF by following the instructions in the Build section. It is then possible to install NeoEMF from the local built update-site, or by importing the generated plugins.

Build

NeoEMF

Download the latest release here and unzip it. Go to the root of the extracted directory and run the following command:

mvn clean install

This will build NeoEMF core components and database specific implementations.

(optional) You can also run the tests by using :

mvn test (-pl <neoemf-core|neoemf-data|neoemf-io|...>)

NeoEMF : Eclipse plugin

To build NeoEMF Eclipse plugin, you need to run the following command:

mvn clean install -f plugins/eclipse

NeoEMF plugins and update-site are built and stored in your local m2 repository at (.m2/fr/inria/atlanmod/neoemf).

Opening in your IDE

Eclipse

In order to import NeoEMF Git repository in Eclipse, you will need the following plugins in your installation (installable from the software repository of your Eclipse release):

  • EGit : v3.4.2 or later
  • m2e : v1.5.1 or later

And the following m2e connectors (installable through Preferences > Maven > Discovery / m2e Marketplace):

  • Maven SCM Handler for EGit (m2e-egit) : v0.14 or later
  • Tycho Project Configurators (Tycho configurator) : v0.8.0 or later

Steps:

  • Import the project using File > Import > Maven > Check out Maven Projects from SCM
  • Select "git" in the SCM URL field and paste the repository address (https://github.com/atlanmod/NeoEMF.git)
  • Choose your workspace and working sets setting and finish

The projects project, parent, core, graph, graph.blueprints and map will be imported and built.

If you want to import the projects generating Eclipse specific plugins (features, update-site), you have to import them by hand using File > Import > Maven > Existing Maven Projects, and select the projects under the "plugins" folder in your local repository.

Issues

If you experience issues installing or using NeoEMF, you can submit an issue on github or contact us at neoemf@googlegroups.com

Known issues:

  • Only Luna plugins are fetched (the compatibility is not ensured for previous Eclipse versions)
  • The Eclipse plugins can not be built if maven can not access internet (it is needed to fetch Luna p2 repositories)
  • Sometimes the plugin build crashes and/or freezes during p2 index fetching from Luna repositories. It is generally sufficient to cancel the build (ctrl-c) and to relaunch it.

Develop your backend implementation

If you have developped a specific backend implementation that is not covered by the actual release of NeoEMF, you can submit it as a pull request. (More information to come about custom backend implementations)

Credits

Performance problems and memory leaks are diagnosed with Java Profiler