git://wamblee.org
/
utils
/ commitdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
| commitdiff |
tree
raw
|
patch
|
inline
| side by side (parent:
3bb0853
)
(no commit message)
author
erik
<erik@77661180-640e-0410-b3a8-9f9b13e6d0e0>
Sat, 17 Jul 2010 21:08:54 +0000
(21:08 +0000)
committer
erik
<erik@77661180-640e-0410-b3a8-9f9b13e6d0e0>
Sat, 17 Jul 2010 21:08:54 +0000
(21:08 +0000)
test/enterprise/src/main/java/org/wamblee/test/transactions/SimpleTransactionManager.java
patch
|
blob
|
history
test/enterprise/src/test/java/org/wamblee/test/transactions/SimpleTransactionManagerTest.java
patch
|
blob
|
history
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
index ee8eb77dc08fb3d8a25ad5efb9bb154a86372750..c81eb9798d9b08862d979dce4301943271748871 100644
(file)
--- a/
test/enterprise/src/main/java/org/wamblee/test/transactions/SimpleTransactionManager.java
+++ b/
test/enterprise/src/main/java/org/wamblee/test/transactions/SimpleTransactionManager.java
@@
-20,6
+20,8
@@
import java.util.List;
import javax.transaction.UserTransaction;
import javax.transaction.UserTransaction;
+import org.wamblee.general.ThreadSpecificProxyFactory;
+
/**
* Simple transaction manager provides a simple mechanism to manage transaction
* in test code through the {@link UserTransaction} object.
/**
* Simple transaction manager provides a simple mechanism to manage transaction
* in test code through the {@link UserTransaction} object.
@@
-30,7
+32,7
@@
import javax.transaction.UserTransaction;
public class SimpleTransactionManager {
private UserTransactionFactory factory;
public class SimpleTransactionManager {
private UserTransactionFactory factory;
- private Thread
Local<UserTransaction> current;
+ private Thread
SpecificProxyFactory<UserTransaction> transaction;
private UserTransactionCallback callback;
private List<TransactionResource> resources;
private UserTransactionCallback callback;
private List<TransactionResource> resources;
@@
-42,12
+44,12
@@
public class SimpleTransactionManager {
*/
public SimpleTransactionManager(UserTransactionFactory aFactory) {
factory = aFactory;
*/
public SimpleTransactionManager(UserTransactionFactory aFactory) {
factory = aFactory;
-
current = new ThreadLocal<UserTransaction>(
);
+
transaction = new ThreadSpecificProxyFactory<UserTransaction>(UserTransaction.class
);
callback = new UserTransactionCallback() {
@Override
public void transactionFinished() {
callback = new UserTransactionCallback() {
@Override
public void transactionFinished() {
-
current
.set(null);
+
transaction
.set(null);
}
};
resources = new ArrayList<TransactionResource>();
}
};
resources = new ArrayList<TransactionResource>();
@@
-65,16
+67,27
@@
public class SimpleTransactionManager {
}
/**
}
/**
- * Gets a transaction associated with the current thread.
+ * Gets the user transaction. This is a contextual reference, meaning that
+ * it will delegate to the appropriate thread-specific user transaction.
+ * It is also safe to store in a JNDI tree and for caching by applications.
*
* @return User transaction.
*/
public UserTransaction getTransaction() {
*
* @return User transaction.
*/
public UserTransaction getTransaction() {
- UserTransaction t
ransaction = current
.get();
- if (t
ransaction
== null) {
- t
ransaction
= factory.create(callback, resources);
-
current.set(transaction
);
+ UserTransaction t
x = transaction
.get();
+ if (t
x
== null) {
+ t
x
= factory.create(callback, resources);
+
transaction.set(tx
);
}
}
- return transaction;
+ return transaction.getProxy();
+ }
+
+ /**
+ * Gets the thread-specific transaction object.
+ * @return Transaction object.
+ */
+ UserTransaction getThreadSpecificTransaction() {
+ getTransaction(); // create tx if needed
+ return transaction.get();
}
}
}
}
diff --git
a/test/enterprise/src/test/java/org/wamblee/test/transactions/SimpleTransactionManagerTest.java
b/test/enterprise/src/test/java/org/wamblee/test/transactions/SimpleTransactionManagerTest.java
index 97c0359d1e3521115234e1ddda30466b07d8af04..d0630ad8349ad8bf60f8d809034bb78e330dff38 100644
(file)
--- a/
test/enterprise/src/test/java/org/wamblee/test/transactions/SimpleTransactionManagerTest.java
+++ b/
test/enterprise/src/test/java/org/wamblee/test/transactions/SimpleTransactionManagerTest.java
@@
-63,14
+63,14
@@
public class SimpleTransactionManagerTest {
@Test
public void testTransactionsAreThreadSpecific() throws Exception {
@Test
public void testTransactionsAreThreadSpecific() throws Exception {
- UserTransaction transaction = manager.getTransaction();
+ UserTransaction transaction = manager.getT
hreadSpecificT
ransaction();
assertNotNull(transaction);
assertNotNull(transaction);
- assertSame(transaction, manager.getTransaction());
+ assertSame(transaction, manager.getT
hreadSpecificT
ransaction());
final ValueHolder<UserTransaction> transaction2 = new ValueHolder<UserTransaction>();
Thread t = new Thread(new Runnable() {
@Override
public void run() {
final ValueHolder<UserTransaction> transaction2 = new ValueHolder<UserTransaction>();
Thread t = new Thread(new Runnable() {
@Override
public void run() {
- transaction2.setValue(manager.getTransaction());
+ transaction2.setValue(manager.getT
hreadSpecificT
ransaction());
}
});
t.start();
}
});
t.start();
@@
-82,11
+82,11
@@
public class SimpleTransactionManagerTest {
@Test
public void testTransactionLifeCycle() {
@Test
public void testTransactionLifeCycle() {
- UserTransaction transaction = manager.getTransaction();
+ UserTransaction transaction = manager.getT
hreadSpecificT
ransaction();
assertNotNull(transaction);
assertEquals(1, callbacks.size());
callbacks.get(0).transactionFinished();
assertNotNull(transaction);
assertEquals(1, callbacks.size());
callbacks.get(0).transactionFinished();
- UserTransaction transaction2 = manager.getTransaction();
+ UserTransaction transaction2 = manager.getT
hreadSpecificT
ransaction();
assertNotNull(transaction2);
assert (transaction != transaction2);
}
assertNotNull(transaction2);
assert (transaction != transaction2);
}