/*
* 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.
*/
/**
* File comment
*/
package org.apache.geode.internal.cache;
import org.apache.geode.cache.client.internal.ServerRegionDataAccess;
import org.apache.geode.distributed.DistributedMember;
import org.apache.geode.distributed.internal.membership.InternalDistributedMember;
import org.apache.geode.internal.cache.tx.TransactionalOperation.ServerRegionOperation;
/**
* This interface extends {@link TXStateInterface} providing for a proxy for the real transaction on
* a remote data store node.
*
*/
public interface TXStateProxy extends TXStateInterface {
public void checkJTA(String errmsg) throws IllegalStateException;
public void setIsJTA(boolean isJTA);
public TXId getTxId();
public TXManagerImpl getTxMgr();
public void setLocalTXState(TXStateInterface state);
public void setTarget(DistributedMember target);
public DistributedMember getTarget();
public boolean isCommitOnBehalfOfRemoteStub();
public boolean setCommitOnBehalfOfRemoteStub(boolean requestedByOwner);
public boolean isOnBehalfOfClient();
public boolean isJCATransaction();
public void setJCATransaction();
/**
* establishes the synchronization thread used for client/server beforeCompletion/afterCompletion
* processing
*
* @param sync
*/
public void setSynchronizationRunnable(TXSynchronizationRunnable sync);
public TXSynchronizationRunnable getSynchronizationRunnable();
/**
* Called by {@link TXManagerImpl#internalSuspend()} to perform additional tasks required to
* suspend a transaction
*/
public void suspend();
/**
* Called by {@link TXManagerImpl#resume(TXStateProxy)} to perform additional tasks required to
* resume a transaction
*/
public void resume();
/**
* record a client-side transactional operation for possible later replay
*/
public void recordTXOperation(ServerRegionDataAccess proxy, ServerRegionOperation op, Object key,
Object[] arguments);
/**
* @return the number of operations performed in this transaction
*/
public int operationCount();
/**
* During client transaction failover, it is possible to get two Commit (rollback) requests for a
* single transaction. It becomes necessary to set the progress flag when the second request
* arrives. When the requeset is processed, progress flag must be reset. see bug 43350
*
* @param progress
*/
public void setInProgress(boolean progress);
public void updateProxyServer(InternalDistributedMember proxy);
}