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.
Java Code is quite scrambled. I used the example from your EMF MySQL Tutorial, but work!added some more libs.
Good works!!
Hi Josef,
indeed this article is a bit old; it refers to Eclipse Galileo in fact.
The complete updated tutorial series is here:
http://www.rcp-vision.com/?p=1157&lang=en
it is intended as a sequence of steps, each article built on the previous one.
Let me know if you have suggestions or problems while following it.
Cheers
Vincenzo Caselli
vincenzo.caselli@rcp-vision.com