/* * Copyright 2000-2013 Enonic AS * http://www.enonic.com/license */ package com.enonic.cms.upgrade.runner; import org.springframework.transaction.TransactionStatus; import org.springframework.transaction.support.TransactionCallback; import org.springframework.transaction.support.TransactionTemplate; import com.enonic.cms.upgrade.UpgradeContext; import com.enonic.cms.upgrade.task.UpgradeTask; public final class UpgradeTaskRunnerImpl implements UpgradeTaskRunner { private final TransactionTemplate template; public UpgradeTaskRunnerImpl( TransactionTemplate template ) { this.template = template; } private void doRunUpgradeTask( UpgradeContext context, UpgradeTask task ) throws Throwable { try { task.upgrade( context ); context.updateModelNumber( task.getModelNumber() ); } catch ( Throwable ue ) { context.logError( ue.getMessage(), ue ); throw ue; } } public void runUpgradeTask( UpgradeContext context, UpgradeTask task ) throws Throwable { doRunUpgradeTask( context, task ); } public void runUpgradeTaskInTx( final UpgradeContext context, final UpgradeTask task ) throws Throwable { Throwable error = (Throwable) context.execute( new TransactionCallback() { public Object doInTransaction( TransactionStatus status ) { try { doRunUpgradeTask( context, task ); return null; } catch ( Throwable e ) { status.setRollbackOnly(); return e; } } } ); if ( error != null ) { throw error; } } }