/* * Copyright (c) 2006-2011 Nuxeo SA (http://nuxeo.com/) and others. * * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Stephane Lacoin */ package org.nuxeo.ecm.core.test; import org.apache.log4j.Logger; import org.nuxeo.ecm.core.repository.RepositoryFactory; import org.nuxeo.ecm.core.storage.sql.ra.PoolingRepositoryFactory; import org.nuxeo.ecm.core.test.annotations.Granularity; import org.nuxeo.ecm.core.test.annotations.RepositoryConfig; import org.nuxeo.ecm.core.test.annotations.TransactionalConfig; import org.nuxeo.runtime.test.runner.ContainerFeature; import org.nuxeo.runtime.test.runner.FeaturesRunner; import org.nuxeo.runtime.transaction.TransactionHelper; @RepositoryConfig(cleanup=Granularity.METHOD, repositoryFactoryClass=PoolingRepositoryFactory.class) public class TransactionalFeature extends ContainerFeature { protected TransactionalConfig config; protected String autoactivationValue; protected boolean nsOwner; protected boolean txStarted; protected Class<? extends RepositoryFactory> defaultFactory; @Override public void initialize(FeaturesRunner runner) throws Exception { config = runner.getConfig(TransactionalConfig.class); } @Override public void beforeSetup(FeaturesRunner runner) throws Exception { if (config.autoStart() == false) { return; } txStarted = TransactionHelper.startTransaction(); } @Override public void afterTeardown(FeaturesRunner runner) throws Exception { if (txStarted == false) { if (TransactionHelper.isTransactionActive()) { try { TransactionHelper.setTransactionRollbackOnly(); TransactionHelper.commitOrRollbackTransaction(); } finally { Logger.getLogger(TransactionalFeature.class).warn("Committing a transaction for your, please do it yourself"); } } return; } TransactionHelper.commitOrRollbackTransaction(); } }