Eclipse RCP: come creare e persistere un EMF Model PDF Stampa E-mail

In questo tutorial impareremo a creare e a persistere un model EMF.

Il tutorial si basa su Eclipse Galileo (3.5) M6, 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.5M6 da qui, 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:

 Installing EMF and Teneo on Galileo

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.

 New 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

New Ecore Model

tInfine 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. 

Ecore editing

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".

Ecore editing

Fate tasto destro sul nodo orders e scegliete New Child -> EClass

Ecore editing

Selezionando il figlio appena creato, dalla view di Property potete inserire "Customer" come Name 

Ecore editing

Ancora, facendo tasto destro su Customer e selezionando New Child -> EAttribute

Ecore editing

 

selezionate il nuovo figlio e dalla view di Properties inserite "code" come Name EString come Etype

Ecore editing

Allo 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 Framework

Ecore editing

poi 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 Next 

Ecore editing

premete il bottone Load nello step Ecore Import e poi Next e Finish.

Ecore editing

 

Adesso dall'editor del Generator Model appena aperto, fate tasto destro Generate Model Codel

Ecore editing

 

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.logging

Required bundles

Abbiamo 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/6.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.

Required 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, "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();
 

 

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

 

Commenti

Nome *
Inserisci l'e-mail per la verifica
URL
ChronoComments by Joomla Professional Solutions
Invia commento