In questo tutorial impareremo a creare e persistere un model EMF.
Il tutorial si basa su Eclipse Galileo, ma i passi seguiti dovrebbero rimanere inalterati per versioni precedenti. Ad ogni modo ecco i passi necessari se decidete di iniziare da zero.

Scaricare Eclipse Galileo

Scaricate Eclipse Galileo 3.5 dalla pagina di download di Eclipse.org, estraete il contenuto sul vostro file system ed eseguite eclipse.exe.

Aggiungere il supporto EMF e Teneo

Cliccate Help -> Install New Software…; nel campo “Work with:” selezionate “All Avaiable Sites“.
In quello successivo (senza etichetta) digitate “EMF” e attendete i risultati; dovreste vedere le seguenti voci:Selezionate entrambi le scelte EMF SDK and Teneo EMF Hibernate SDK e poi premete Next e seguite lo wizard per installare nuove features.
Restart Eclipse at the end of the installation.

Creare il progetto EMF

Ora creaiamo un nuovo progetto di tipo EMF. Dal menu File -> New -> Other…, espandetela voce Eclipse Modeling Framework e scegliete Empty EMF Project.Premendo Next, è possibile specificare il nome di un progetto (es. MyModel); premere Finish per finire.

Creare il modello Ecore

Il primo step, dopo aver creato un nuovo progetto è definire il modello Ecore. Selezionate la cartella model (generata dallo wizard appena utilizzato per creare il progetto EMF vuoto), tasto destro, New -> Other… e selezionate Ecore Model sotto Eclipse Modeling Framework

Infine premete Next e scegliete un nome per l’Ecore Model o lasciate quello proposto (My.ecore) e premete Finish.

Espandete la root dell’albero dell’Ecore Model e selezionare l’unico figlio senza nome.Usando il tasto destro del mouse potrete selezionare la voce Show Properties View, che aprirà la view di properties come mostrato qui sotto. Inserite “orders” come Name ed NS Prefix, mentre come NS URI inserite”http://orders“.Fate tasto destro sul nodo orders e scegliete New Child -> EClassSelezionando il figlio appena creato, dalla view di Property potete inserire “Customer” come NameAncora, facendo tasto destro su Customer e selezionando New Child -> EAttributeselezionate il nuovo figlio e dalla view di Properties inserite “code” come Name e EString come Etypeallo stesso modo inserite un altro attributo (EAttribute) chiamato “name” di tipo EString e premete Ctrl+s per salavare il lavoro.

Creare il Generator Model

Dalla view del Package Explorer selezionate il file Ecore (es. My.ecore), fate click col tasto destro New -> Other… e scegliete EMF Generator Model sotto Eclipse Modeling Frameworkpoi premete Next e inserite un nome per il Generator Model EMF o lasciate quello proposto (My.genmodel), premete Next, selezionate Ecore Model nella lista Model Importer, e poi Nextpremete il bottone Load nello step Ecore Import e poi Next e Finish.Adesso dall’editor del Generator Model appena aperto, fate tasto destro Generate Model Codel

Usare EMF-Teneo per la persistenza sul Database e l’accesso al Model

Prima di invocare le operazioni di persistenza sul modello EMF appena creato, abbiamo bisogno di inserire alcune dipendenze nel nostro porgetto. Aprite il file plugin.xml dalla view del Package Explorer e selezionate il tab Dependencies. Premete il bottone Add… nell’area in alto a sinistra (Required Plug-ins) e aggiungete i seguenti bundles:
– org.eclipse.emf.ecore.xmi
– org.eclipse.emf.teneo.hibernate
– org.apache.commons.loggingAbbiamo anche bisogno di inserire la dipendenza da alcuni Jars non inclusi nell’ambiente Eclispe. Creiamo una cartella normale per le librerie esterne (New -> Folder), e chiamiamola “lib“.

Le librerie necessarie sono tutte incluse nel package Hibernate Core, scaricabile da http://www.hibernate.org/downloads.html.
– hibernate3.jar
– jta-1.1.jar (/lib/required)
– dom4j-1.6.1.jar (/lib/required)
– commons-collections-3.1.jar (/lib/required)

Copiate i JARs riportati qui sopra, insieme con il driver JDBC (nell’esempio useremo MySQL per i nostri test),
– mysql-connector-java-5.1.7-bin.jar
nella cartella lib.

Ora andate nel plugin.xml, selezionate il tab Runtim, andate nell’area per il Classpath (in basso a destra),premete il bottone Add…, cercate la cartella lib e aggiungete tutti i JARs.Volendo testare le caratteristiche di persistenza di EMF e Teneo, creeremo una nuova cartella sorgenti nel nostro progetto (New -> Source Folder) che chiameremo “src_test” ed in cui creeremo un nuovo package e una nuova classe con un metodo main con questo codice:

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, "oracle.jdbc.driver.OracleDriver");

		props.setProperty(Environment.DRIVER, "com.mysql.jdbc.Driver");
		props.setProperty(Environment.URL, "jdbc:mysql://localhost:3306/test");
		props.setProperty(Environment.USER, "root");
		props.setProperty(Environment.PASS, "admin");
		props.setProperty(Environment.DIALECT,
				org.hibernate.dialect.MySQLDialect.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();

Infine lanciamo la classe e stiamo a vedere cosa succede al db.