HomeEMF HibernateEMF JDO/JPOXWeb App GenerationServices
 

Step 2: Create and store EMF Objects

For this tutorial create a Tutorial1.java class in the org.eclipse.example.library package. The class should have a static main method.

Initialize runtime layer

The runtime OR Mapping layer is initialized with a few statements. Add the following statements to the main method of the new class. Please note that you have to fill in your own database connection information:

// set the database connection info, PMFConfiguration is org.jpox.PMFConfiguration
Properties properties = new Properties();
properties.setProperty(PMFConfiguration.JDO_DATASTORE_DRIVERNAME_PROPERTY, "com.mysql.jdbc.Driver");
properties.setProperty(PMFConfiguration.JDO_DATASTORE_URL_PROPERTY, "jdbc:mysql://127.0.0.1:3306/mylibrary");
properties.setProperty(PMFConfiguration.JDO_DATASTORE_USERNAME_PROPERTY, "root");
properties.setProperty(PMFConfiguration.JDO_DATASTORE_PASSWORD_PROPERTY, "root");
  
// create/register the JpoxDataStore, set the db props and the epackages to persist, initialize creates
// the database
String pmfName = "MyPMF"; // the name of the JpoxDataStore
JpoxDataStore jpoxDataStore = JpoxHelper.INSTANCE.createRegisterDataStore(pmfName);
jpoxDataStore.setProperties(properties);
jpoxDataStore.setEPackages(new EPackage[]{LibraryPackage.eINSTANCE});
jpoxDataStore.initialize();
		

The call to the JpoxHelper instance creates a JpoxDataStore and registers it, at that point no initialization takes place. First the db connection info has to be passed and the to-be-persisted EPackages have to be set. The initialize method will create/update the database schema. After this the PersistenceManagerFactory and a PersistenceManager can be retrieved from the JpoxDataStore.

For your information: the PersistenceManagerFactory is a JDO 2.0 object which acts like a kind of connection factory, a PersistenceManager roughly corresponds to a connection.

Create a PersistenceManager and Library

Now create a PersistenceManager and a transaction. All persistence related actions have to be done in the context of a transaction.

// Now create a persistence manager and a transaction
PersistenceManager pm = jpoxDataStore.getPersistenceManager();
Transaction tx = pm.currentTransaction(); 
    	

Begin a transaction, create a library and make it persistent

// start a transaction, create a library and make it persistent
tx.begin();
Library lib = LibraryFactory.eINSTANCE.createLibrary();
lib.setName("My Library");
pm.makePersistent(lib);
	

Add a writer and book to the library and commit

Next a book and writer are created and added to the library. At the commit these are also persisted because the library refers to the book and writer.

// create a writer
Writer writer = LibraryFactory.eINSTANCE.createWriter();
writer.setName("JRR Tolkien");
   
// and one of his books
Book book = LibraryFactory.eINSTANCE.createBook();
book.setAuthor(writer);
book.setPages(305);
book.setTitle("The Hobbit");
book.setCategory(BookCategory.SCIENCE_FICTION);

// add the writer/book to the library. The writer and book are automatically
// made persistent because they are added to the library which is already
// made persistent
lib.getWriters().add(writer);
lib.getBooks().add(book);
    
// at commit the objects will be present in the database
tx.commit();
pm.close(); // empty the cache
		

Next Step

In the next step of this tutorial the above library is retrieved again from the relational store using a JDOQL query and a book and writer are added to the library.

Please click here to go to the next step.