package de.mukis.gemini.sample.rcp.dao; import java.sql.SQLException; import javax.annotation.PreDestroy; import javax.inject.Inject; import javax.persistence.EntityManager; import javax.persistence.EntityTransaction; import org.eclipse.core.runtime.preferences.IEclipsePreferences; import org.eclipse.e4.core.di.annotations.Creatable; import org.eclipse.e4.core.di.extensions.Preference; import org.eclipse.gemini.ext.di.GeminiPersistenceContext; import org.eclipse.gemini.ext.di.GeminiPersistenceProperties; import org.eclipse.gemini.ext.di.GeminiPersistenceProperty; import org.eclipse.persistence.config.PersistenceUnitProperties; import de.mukis.gemini.sample.model.Person; @Creatable public class PersonDAO { @Inject @GeminiPersistenceContext(unitName = "unconfigured2", properties = { @GeminiPersistenceProperty(name = PersistenceUnitProperties.JDBC_DRIVER, valuePref = @Preference("jdbc_driver")), @GeminiPersistenceProperty(name = PersistenceUnitProperties.JDBC_URL, valuePref = @Preference("jdbc_url")), @GeminiPersistenceProperty(name = PersistenceUnitProperties.LOGGING_LEVEL, value = "FINE"), @GeminiPersistenceProperty(name = PersistenceUnitProperties.WEAVING, value = "false"), @GeminiPersistenceProperty(name = PersistenceUnitProperties.WEAVING_INTERNAL, value = "false"), @GeminiPersistenceProperty(name = GeminiPersistenceProperties.GEMINI_REINIT, valuePref = @Preference("jdbc_reconnect")) }) private EntityManager em; @Inject private void updatePreferences(@Preference IEclipsePreferences preferences) { preferences.putBoolean("jdbc_reconnect", false); } public void save(Person dataObj) throws SQLException { checkConnection(); EntityTransaction trx = em.getTransaction(); trx.begin(); em.persist(dataObj); trx.commit(); } @PreDestroy public void destroy() { if (em != null && em.isOpen()) { em.close(); } } private void checkConnection() throws SQLException { if (em == null) { throw new SQLException("EntityManager is null. Not connected to database!"); } } }