/* * Hibernate Search, full-text search for your domain model * * License: GNU Lesser General Public License (LGPL), version 2.1 or later * See the lgpl.txt file in the root directory or <http://www.gnu.org/licenses/lgpl-2.1.html>. */ package org.hibernate.search.test.performance.task; import static org.hibernate.search.test.performance.scenario.TestContext.MEASURE_TASK_TIME; import java.util.concurrent.atomic.AtomicLong; import org.hibernate.Transaction; import org.hibernate.search.FullTextSession; import org.hibernate.search.Search; import org.hibernate.search.test.performance.scenario.TestContext; /** * @author Tomas Hradec */ public abstract class AbstractTask implements Runnable { protected final TestContext ctx; private final AtomicLong counter = new AtomicLong( 0 ); private final AtomicLong timer = new AtomicLong( 0 ); public AbstractTask(TestContext ctx) { this.ctx = ctx; this.ctx.tasks.add( this ); } @Override public final void run() { try { ctx.startSignal.await(); } catch (InterruptedException e) { throw new RuntimeException( e ); } counter.incrementAndGet(); long startTime = 0; if ( MEASURE_TASK_TIME ) { startTime = System.nanoTime(); } FullTextSession s = Search.getFullTextSession( ctx.sf.openSession() ); Transaction tx = s.beginTransaction(); try { execute( s ); tx.commit(); } catch (RuntimeException e) { tx.rollback(); ctx.reportRuntimeException( e ); throw e; } finally { s.close(); } if ( MEASURE_TASK_TIME ) { long stopTime = System.nanoTime(); timer.addAndGet( stopTime - startTime ); } } protected abstract void execute(FullTextSession fts); public final long getCounterValue() { return counter.get(); } public final long getTimerValue() { return timer.get(); } }