X-Git-Url: http://wamblee.org/gitweb/?a=blobdiff_plain;f=test%2Fenterprise%2Fsrc%2Fmain%2Fjava%2Forg%2Fwamblee%2Ftest%2Ftransactions%2FTransactionProxyFactory.java;h=67f64bee95ba9fc65b683260687c4676a00226dc;hb=HEAD;hp=9aa5cef884dc681b7b09f30e19297eb25fa63801;hpb=099827f9fe35da8a3be1010a222e90db94f0b5c4;p=utils diff --git a/test/enterprise/src/main/java/org/wamblee/test/transactions/TransactionProxyFactory.java b/test/enterprise/src/main/java/org/wamblee/test/transactions/TransactionProxyFactory.java index 9aa5cef8..67f64bee 100644 --- a/test/enterprise/src/main/java/org/wamblee/test/transactions/TransactionProxyFactory.java +++ b/test/enterprise/src/main/java/org/wamblee/test/transactions/TransactionProxyFactory.java @@ -15,37 +15,42 @@ */ package org.wamblee.test.transactions; - import java.lang.reflect.InvocationHandler; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; import java.lang.reflect.Proxy; +import java.util.logging.Level; import javax.persistence.EntityManager; +import org.wamblee.general.ThreadSpecificProxyFactory; import org.wamblee.test.persistence.JpaBuilder; +import org.wamblee.test.persistence.LoggingTransactionResultCallback; import org.wamblee.test.persistence.JpaBuilder.JpaUnitOfWork; /** * This utility makes sure that each invocation on a certain interface is - * carried out within a JPA unit of work. Note that this is equivalent - * to the sementics of a requiresNew transaction attribute. + * carried out within a JPA unit of work. Note that this is equivalent to the + * sementics of a requiresNew transaction attribute. * * Use {@link #getTransactionScopedEntityManager()} to get the transaction * scoped entity manager to pass to services. * * - * For example: + * For example: + * *
  *     JpaBuilder builder = ...
  *     TransactionProxyFactory factory = new TransactionProxyFactory(
  *           builder, Service.class);
  *     Service service = new JpaService(factory.getTransactionScopedEntityManager());
  *     Service proxy = factory.getProxy(service);
- *     proxy.executeMethod(...); 
+ *     proxy.executeMethod(...);
  * 
- * The above example executes the executeMethod() call on the service object within an active transaction. - * In the constructor of the service a transaction scoped entity manager is passed. + * + * The above example executes the executeMethod() call on the service object + * within an active transaction. In the constructor of the service a transaction + * scoped entity manager is passed. * * @param T * Type of interface to proxy. @@ -55,11 +60,12 @@ import org.wamblee.test.persistence.JpaBuilder.JpaUnitOfWork; public class TransactionProxyFactory { /** - * Executes the call on the service within a new transaction. + * Executes the call on the service within a new transaction. * * @author Erik Brakkee - * - * @param Type of the service interface. + * + * @param + * Type of the service interface. */ private class UnitOfWorkInvocationHandler implements InvocationHandler { @@ -72,11 +78,11 @@ public class TransactionProxyFactory { @Override public Object invoke(Object aProxy, final Method aMethod, final Object[] aArgs) throws Throwable { - return TransactionProxyFactory.this.jpaBuilder - .execute(new JpaUnitOfWork() { + return TransactionProxyFactory.this.jpaBuilder.execute( + new JpaUnitOfWork() { @Override public Object execute(EntityManager aEm) throws Exception { - EntityManager oldEm = ENTITY_MANAGER.get(); + EntityManager oldEm = ENTITY_MANAGER.get(); try { ENTITY_MANAGER.set(aEm); return aMethod.invoke(service, aArgs); @@ -93,7 +99,7 @@ public class TransactionProxyFactory { ENTITY_MANAGER.set(oldEm); } } - }); + }, new LoggingTransactionResultCallback(Level.INFO)); } }