package com.oreilly.rdf.tenuki.jaxrs; import java.sql.Connection; import java.sql.SQLException; import javax.annotation.PostConstruct; import javax.annotation.PreDestroy; import javax.naming.InitialContext; import javax.naming.NamingException; import javax.sql.DataSource; import com.hp.hpl.jena.query.Dataset; import com.hp.hpl.jena.sdb.SDBFactory; import com.hp.hpl.jena.sdb.Store; import com.hp.hpl.jena.sdb.StoreDesc; public abstract class DatasetAccessResource { private DataSource dataSource; private StoreDesc storeDesc; private Connection connection; private Store store; private Dataset dataset; public Dataset getDataset() { return dataset; } public Store getStore() { return store; } @SuppressWarnings("unused") @PostConstruct private void myPostConstructMethod() { try { InitialContext ctx = new InitialContext(); dataSource = (DataSource) ctx.lookup("jdbc/sdbDataSource"); storeDesc = (StoreDesc) ctx.lookup("jdbc/sdbStoreDesc"); connection = dataSource.getConnection(); } catch (NamingException e) { throw new RuntimeException(e); } catch (SQLException e) { throw new RuntimeException(e); } dataset = SDBFactory.connectDataset(connection, storeDesc); store = SDBFactory.connectStore(connection, storeDesc); } @SuppressWarnings("unused") @PreDestroy private void myPreDestroyMethod() { try { dataset.close(); store.close(); } finally { try { connection.close(); } catch (SQLException e) { throw new RuntimeException(e); } } } }