Eclipse RCP: how to create and persist an EMF Model PDF Print E-mail
User Rating: / 0
PoorBest 

 In this tutorial we will learn how to create and persist an EMF model.

The tutorial is based on Eclipse Galileo, but the steps should be the same for older versions. Anyway here are the steps needed if you decide to start from scratch. 


Download Eclipse Galileo

Download Eclipse Galileo 3.5M6 from the Eclipse.org download page, extract on your file-system and run eclipse.exe.


Add EMF and Teneo support

Go to Help -> Install New Software...; in the text field "Work with:" select "All Avaiable Sites".
In the text just after (not labeled) enter "EMF" and wait for the results; you should see the following items:

Installing EMF and Teneo on Galileo

Check both EMF SDK and Teneo EMF Hibernate SDK, then press Next and follow the wizard to install the new features.
Restart Eclipse at the end of the installation.

 

Create the EMF Project

Go to File -> New -> Other...; expand Eclipse Modeling Framework and select Empty EMF Project.

New Empty EMF Project

press Next, enter a name for the project (e.g. MyModel) and press Finish.

 

Create the Ecore Model

Select the model folder (generated from the previous EMF project wizard), right-click New -> Other... and select Ecore Model under Eclipse Modeling Framework

New Ecore Model

then press Next and enter a name for the Ecore Model or leave the proposed one (My.ecore), press Finish.

Expand the Ecore Model root node, select the only unnamed child node and right-click Show Properties View

Ecore editing

In the Properties view, enter "orders" as the Name and NS Prefix, while as NS URI enter "http://orders".

Ecore editing

Right-click the node orders and select New Child -> EClass

Ecore editing

select the new child, go to the Property View and enter "Customer" as the Name

Ecore editing

Right-click the new node Customer and select New Child -> EAttribute

Ecore editing

 

select the new child, go to the Property View and enter "code" as the Name and EString as the Etype

Ecore editing

in the same way add another EAttribute called "name" of type EString and press Ctrl-S to save the work.

 

Create the Generator Model

From the Package Explorer View select the Ecore file (e.g. My.ecore), right-click New -> Other... and select EMF Generator Model under Eclipse Modeling Framework

Ecore editing

then press Next and enter a name for the EMF Generator Model or leave the proposed one (My.genmodel), press Next, select Ecore Model in the Model Importers list, then Next

Ecore editing

press the Load button in the Ecore Import step, then Next and Finish.

Ecore editing

 

Now, from the Generator Model editor just opened, right-click Generate Model Codel

Ecore editing

 

Use EMF-Teneo to persist and access the Model on a Database

Prior to invoking persistence operations on the EMF Model we need to include some dependencies into the current project.
In order to do this double-click the file plugin.xml from the Package Explorer view and select the tab Dependencies. Then press the Add... button in the left-upper area (Required Plug-ins) and add the following bundles:

- org.eclipse.emf.ecore.xmi
- org.eclipse.emf.teneo.hibernate
- org.apache.commons.logging

Required bundles

We will also need some other JARs not included into the Eclipse environment. Let's create therefore an ordinary folder for the additional libraries (New -> Folder), let's call this "lib".

The needed libraries are all included in the Hibernate Core Package, downloadable at http://www.hibernate.org/downloads.htmll.

- hibernate3.jar
- jta-1.1.jar (/lib/required)
- dom4j-1.6.1.jar (/lib/required)
- commons-collections-3.1.jar (/lib/required)

Copy the above JARs, along with the JDBC Driver (we will use MySQL for our test),

- mysql-connector-java-5.1.7-bin.jar

into the lib folder.

Now go to the plugin.xml, select the Runtime tab, go to the Classpath area (bottom-right), press the Add... button, browse for the lib folder and add all the JARs.

Required JARs

 

In order to test the persistence features of EMF and Teneo we will create a new source folder in our project (New -> Source Folder); let's call it "src_test" and create there a new package and class with the following code into the main method:

 

import java.util.Properties;
import orders.Customer;
import orders.OrdersPackage;
import org.eclipse.emf.ecore.EPackage;
import org.eclipse.emf.teneo.hibernate.HbDataStore;
import org.eclipse.emf.teneo.hibernate.HbHelper;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Environment;


...

HbDataStore hbds = (HbDataStore)HbHelper.INSTANCE.createRegisterDataStore("MyDb");

final Properties props = new Properties();
props.setProperty(Environment.DRIVER, "com.mysql.jdbc.Driver");
props.setProperty(Environment.URL, "jdbc:mysql://127.0.0.1:3306/test");
props.setProperty(Environment.USER, "root");
props.setProperty(Environment.PASS, "admin");
props.setProperty(Environment.DIALECT, org.hibernate.dialect.MySQLInnoDBDialect.class.getName());
props.setProperty(Environment.SHOW_SQL, "true");
hbds.setProperties(props);

hbds.setEPackages(new EPackage[]{OrdersPackage.eINSTANCE});
hbds.initialize();
SessionFactory sessionFactory = hbds.getSessionFactory();
Session session = sessionFactory.openSession();
Transaction tx = session.getTransaction();
tx.begin();
Customer customer = OrdersPackage.eINSTANCE.getOrdersFactory().createCustomer();
customer.setCode("0023485");
session.save(customer);

tx.commit();
session.close();

 

Then launch this class and see what happens.


Download Eclipse Galileo

Download Eclipse Galileo 3.5M6 from here, extract on your file-system and run eclipse.exe.


Add EMF and Teneo support

Go to Help -> Install New Software...; in the text field "Work with:" select "All Avaiable Sites".
In the text just after (not labeled) enter "EMF" and wait for the results; you should see the following items:

Installing EMF and Teneo on Galileo

Check both EMF SDK and Teneo EMF Hibernate SDK, then press Next and follow the wizard to install the new features.
Restart Eclipse at the end of the installation.

 

Create the EMF Project

Go to File -> New -> Other...; expand Eclipse Modeling Framework and select Empty EMF Project.

New Empty EMF Project

press Next, enter a name for the project (e.g. MyModel) and press Finish.

 

Create the Ecore Model

Select the model folder (generated from the previous EMF project wizard), right-click New -> Other... and select Ecore Model under Eclipse Modeling Framework

New Ecore Model

then press Next and enter a name for the Ecore Model or leave the proposed one (My.ecore), press Finish.

Expand the Ecore Model root node, select the only unnamed child node and right-click Show Properties View

Ecore editing

In the Properties view, enter "orders" as the Name and NS Prefix, while as NS URI enter "http://orders".

Ecore editing

Right-click the node orders and select New Child -> EClass

Ecore editing

select the new child, go to the Property View and enter "Customer" as the Name

Ecore editing

Right-click the new node Customer and select New Child -> EAttribute

Ecore editing

 

select the new child, go to the Property View and enter "code" as the Name and EString as the Etype

Ecore editing

in the same way add another EAttribute called "name" of type EString and press Ctrl-S to save the work.

 

Create the Generator Model

From the Package Explorer View select the Ecore file (e.g. My.ecore), right-click New -> Other... and select EMF Generator Model under Eclipse Modeling Framework

Ecore editing

then press Next and enter a name for the EMF Generator Model or leave the proposed one (My.genmodel), press Next, select Ecore Model in the Model Importers list, then Next

Ecore editing

press the Load button in the Ecore Import step, then Next and Finish.

Ecore editing

 

Now, from the Generator Model editor just opened, right-click Generate Model Codel

Ecore editing

 

Use EMF-Teneo to persist and access the Model on a Database

Prior to invoking persistence operations on the EMF Model we need to include some dependencies into the current project.
In order to do this double-click the file plugin.xml from the Package Explorer view and select the tab Dependencies. Then press the Add... button in the left-upper area (Required Plug-ins) and add the following bundles:

- org.eclipse.emf.ecore.xmi
- org.eclipse.emf.teneo.hibernate
- org.apache.commons.logging

Required bundles

We will also need some other JARs not included into the Eclipse environment. Let's create therefore an ordinary folder for the additional libraries (New -> Folder), let's call this "lib".

The needed libraries are all included in the Hibernate Core Package, downloadable at http://www.hibernate.org/6.html.

- hibernate3.jar
- jta-1.1.jar (/lib/required)
- dom4j-1.6.1.jar (/lib/required)
- commons-collections-3.1.jar (/lib/required)

Copy the above JARs, along with the JDBC Driver (we will use MySQL for our test),

- mysql-connector-java-5.1.7-bin.jar

into the lib folder.

Now go to the plugin.xml, select the Runtime tab, go to the Classpath area (bottom-right), press the Add... button, browse for the lib folder and add all the JARs.

Required JARs

 

In order to test the persistence features of EMF and Teneo we will create a new source folder in our project (New -> Source Folder); let's call it "src_test" and create there a new package and class with the following code into the main method:

 

import java.util.Properties;
import orders.Customer;
import orders.OrdersPackage;
import org.eclipse.emf.ecore.EPackage;
import org.eclipse.emf.teneo.hibernate.HbDataStore;
import org.eclipse.emf.teneo.hibernate.HbHelper;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Environment;


...

HbDataStore hbds = (HbDataStore)HbHelper.INSTANCE.createRegisterDataStore("MyDb");

final Properties props = new Properties();
props.setProperty(Environment.DRIVER, "com.mysql.jdbc.Driver");
props.setProperty(Environment.URL, "jdbc:mysql://127.0.0.1:3306/test");
props.setProperty(Environment.USER, "root");
props.setProperty(Environment.PASS, "admin");
props.setProperty(Environment.DIALECT, org.hibernate.dialect.MySQLInnoDBDialect.class.getName());
props.setProperty(Environment.SHOW_SQL, "true");
hbds.setProperties(props);

hbds.setEPackages(new EPackage[]{OrdersPackage.eINSTANCE});
hbds.initialize();
SessionFactory sessionFactory = hbds.getSessionFactory();
Session session = sessionFactory.openSession();
Transaction tx = session.getTransaction();
tx.begin();
Customer customer = OrdersPackage.eINSTANCE.getOrdersFactory().createCustomer();
customer.setCode("0023485");
session.save(customer);

tx.commit();
session.close();

 

Then launch this class and see what happens.

Comments

Name *
Email (For verification & Replies)
URL
ChronoComments by Joomla Professional Solutions
Submit Comment