001/* 002 * jPOS Project [http://jpos.org] 003 * Copyright (C) 2000-2026 jPOS Software SRL 004 * 005 * This program is free software: you can redistribute it and/or modify 006 * it under the terms of the GNU Affero General Public License as 007 * published by the Free Software Foundation, either version 3 of the 008 * License, or (at your option) any later version. 009 * 010 * This program is distributed in the hope that it will be useful, 011 * but WITHOUT ANY WARRANTY; without even the implied warranty of 012 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 013 * GNU Affero General Public License for more details. 014 * 015 * You should have received a copy of the GNU Affero General Public License 016 * along with this program. If not, see <http://www.gnu.org/licenses/>. 017 */ 018 019package org.jpos.transaction; 020 021import java.util.concurrent.Future; 022 023/** Implemented by objects that can be paused and resumed during transaction processing. */ 024public interface Pausable { 025 /** 026 * Sets the maximum pause duration. 027 * @param timeoutInMillis timeout in milliseconds 028 */ 029 void setTimeout (long timeoutInMillis); 030 /** 031 * Returns the configured pause timeout. 032 * @return timeout in milliseconds 033 */ 034 long getTimeout(); 035 /** 036 * Pauses execution and returns a {@link Future} that resolves to the resume result. 037 * @return a Future resolving to the result code passed to {@link #resume(int)} 038 */ 039 Future<Integer> pause(); 040 /** 041 * Resumes a paused execution with the given result code. 042 * @param result the result code to deliver to the waiting Future 043 */ 044 void resume(int result); 045 046 /** Resets the pause state so this object can be reused. */ 047 void reset(); 048}