/*
* Copyright 2002-2007 the original author or authors.
*
* Licensed 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.springframework.transaction.jta;
import java.util.HashMap;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import javax.transaction.Synchronization;
import com.ibm.wsspi.uow.UOWAction;
import com.ibm.wsspi.uow.UOWActionException;
import com.ibm.wsspi.uow.UOWException;
import com.ibm.wsspi.uow.UOWManager;
/**
* @author Juergen Hoeller
*/
public class MockUOWManager implements UOWManager {
private int type = UOW_TYPE_GLOBAL_TRANSACTION;
private boolean joined;
private int timeout;
private boolean rollbackOnly;
private int status = UOW_STATUS_NONE;
private final Map resources = new HashMap();
private final List synchronizations = new LinkedList();
public void runUnderUOW(int type, boolean join, UOWAction action) throws UOWActionException, UOWException {
this.type = type;
this.joined = join;
try {
this.status = UOW_STATUS_ACTIVE;
action.run();
this.status = (this.rollbackOnly ? UOW_STATUS_ROLLEDBACK : UOW_STATUS_COMMITTED);
}
catch (Error err) {
this.status = UOW_STATUS_ROLLEDBACK;
throw err;
}
catch (RuntimeException ex) {
this.status = UOW_STATUS_ROLLEDBACK;
throw ex;
}
catch (Exception ex) {
this.status = UOW_STATUS_ROLLEDBACK;
throw new UOWActionException(ex);
}
}
public int getUOWType() {
return this.type;
}
public boolean getJoined() {
return this.joined;
}
public long getLocalUOWId() {
return 0;
}
public void setUOWTimeout(int uowType, int timeout) {
this.timeout = timeout;
}
public int getUOWTimeout() {
return this.timeout;
}
public void setRollbackOnly() {
this.rollbackOnly = true;
}
public boolean getRollbackOnly() {
return this.rollbackOnly;
}
public void setUOWStatus(int status) {
this.status = status;
}
public int getUOWStatus() {
return this.status;
}
public void putResource(Object key, Object value) {
this.resources.put(key, value);
}
public Object getResource(Object key) throws NullPointerException {
return this.resources.get(key);
}
public void registerInterposedSynchronization(Synchronization sync) {
this.synchronizations.add(sync);
}
public List getSynchronizations() {
return this.synchronizations;
}
}