/* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.activemq.artemis.core.transaction; import javax.transaction.xa.Xid; import java.util.List; import org.apache.activemq.artemis.api.core.ActiveMQException; import org.apache.activemq.artemis.core.server.Queue; import org.apache.activemq.artemis.core.server.impl.RefsOperation; /** * An ActiveMQ Artemis internal transaction */ public interface Transaction { enum State { ACTIVE, PREPARED, COMMITTED, ROLLEDBACK, SUSPENDED, ROLLBACK_ONLY } Object getProtocolData(); /** * Protocol managers can use this field to store any object needed. * An example would be the Session used by the transaction on openwire */ void setProtocolData(Object data); boolean isEffective(); void prepare() throws Exception; void commit() throws Exception; void commit(boolean onePhase) throws Exception; void rollback() throws Exception; long getID(); Xid getXid(); void suspend(); void resume(); State getState(); void setState(State state); void markAsRollbackOnly(ActiveMQException exception); long getCreateTime(); void addOperation(TransactionOperation sync); /** * This is an operation that will be called right after the storage is completed. * addOperation could only happen after paging and replication, while these operations will just be * about the storage */ void afterStore(TransactionOperation sync); List<TransactionOperation> getAllOperations(); boolean hasTimedOut(long currentTime, int defaultTimeout); /** * To validate if the Transaction had previously timed out. * This is to check the reason why a TX has been rolled back. */ boolean hasTimedOut(); void putProperty(int index, Object property); Object getProperty(int index); boolean isContainsPersistent(); void setContainsPersistent(); void setTimeout(int timeout); RefsOperation createRefsOperation(Queue queue); }