X-Git-Url: http://wamblee.org/gitweb/?a=blobdiff_plain;f=test%2Fenterprise%2Fsrc%2Fmain%2Fjava%2Forg%2Fwamblee%2Ftest%2Ftransactions%2FSimpleTransactionManager.java;fp=test%2Fenterprise%2Fsrc%2Fmain%2Fjava%2Forg%2Fwamblee%2Ftest%2Ftransactions%2FSimpleTransactionManager.java;h=ee8eb77dc08fb3d8a25ad5efb9bb154a86372750;hb=099827f9fe35da8a3be1010a222e90db94f0b5c4;hp=0000000000000000000000000000000000000000;hpb=3844a8a4136edf8fc6ca8e130d6d2113f18ae034;p=utils diff --git a/test/enterprise/src/main/java/org/wamblee/test/transactions/SimpleTransactionManager.java b/test/enterprise/src/main/java/org/wamblee/test/transactions/SimpleTransactionManager.java new file mode 100644 index 00000000..ee8eb77d --- /dev/null +++ b/test/enterprise/src/main/java/org/wamblee/test/transactions/SimpleTransactionManager.java @@ -0,0 +1,80 @@ +/* + * Copyright 2005-2010 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.wamblee.test.transactions; + +import java.util.ArrayList; +import java.util.List; + +import javax.transaction.UserTransaction; + +/** + * Simple transaction manager provides a simple mechanism to manage transaction + * in test code through the {@link UserTransaction} object. + * + * @author Erik Brakkee + * + */ +public class SimpleTransactionManager { + + private UserTransactionFactory factory; + private ThreadLocal current; + private UserTransactionCallback callback; + private List resources; + + /** + * Constructs the transaction manager. + * + * @param aFactory + * Factory to create transactions with. + */ + public SimpleTransactionManager(UserTransactionFactory aFactory) { + factory = aFactory; + current = new ThreadLocal(); + callback = new UserTransactionCallback() { + + @Override + public void transactionFinished() { + current.set(null); + } + }; + resources = new ArrayList(); + } + + /** + * Adds a resource to manage. Adding resources is no longer allowed after + * the first transaction has started. + * + * @param aResource + * Resource. + */ + public void addResource(TransactionResource aResource) { + resources.add(aResource); + } + + /** + * Gets a transaction associated with the current thread. + * + * @return User transaction. + */ + public UserTransaction getTransaction() { + UserTransaction transaction = current.get(); + if (transaction == null) { + transaction = factory.create(callback, resources); + current.set(transaction); + } + return transaction; + } +}