/* * Copyright (c) 2009 Mysema Ltd. * All rights reserved. * */ package com.mysema.rdfbean.sesame; import org.openrdf.repository.UnknownTransactionStateException; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import com.mysema.commons.lang.Assert; import com.mysema.rdfbean.model.RDFBeanTransaction; import com.mysema.rdfbean.model.RepositoryException; /** * SesameTransaction provides an RDFBeanTransaction implementation for * SesameConnection * * @author tiwe * @version $Id$ */ public class SesameTransaction implements RDFBeanTransaction { private static final Logger logger = LoggerFactory.getLogger(SesameTransaction.class); private final SesameConnection connection; private boolean rollbackOnly; public SesameTransaction(SesameConnection connection, int isolationLevel) { this.connection = Assert.notNull(connection, "connection"); } public void begin() { try { connection.getConnection().begin(); } catch (org.openrdf.repository.RepositoryException e) { String error = "Caught " + e.getClass().getName(); logger.error(error, e); throw new RuntimeException(error, e); } } @Override public void commit() { if (rollbackOnly) { throw new RepositoryException("Transaction is rollBackOnly"); } try { connection.getConnection().commit(); } catch (org.openrdf.repository.RepositoryException e) { String error = "Caught " + e.getClass().getName(); logger.error(error, e); throw new RepositoryException(error, e); } finally { connection.cleanUpAfterCommit(); } } public boolean isActive() { try { return connection.getConnection().isActive(); } catch (UnknownTransactionStateException e) { logger.error(e.getMessage(), e); throw new RepositoryException(e.getMessage(), e); } catch (org.openrdf.repository.RepositoryException e) { logger.error(e.getMessage(), e); throw new RepositoryException(e.getMessage(), e); } } @Override public boolean isRollbackOnly() { return rollbackOnly; } @Override public void prepare() { // TODO } @Override public void rollback() { try { connection.getConnection().rollback(); } catch (org.openrdf.repository.RepositoryException e) { String error = "Caught " + e.getClass().getName(); logger.error(error, e); throw new RepositoryException(error, e); } finally { connection.cleanUpAfterRollback(); } } @Override public void setRollbackOnly() { this.rollbackOnly = true; } }