r83 - trunk/nuiton-struts2/src/main/java/org/nuiton/web/struts2/interceptor
Author: tchemit Date: 2011-07-04 23:20:59 +0200 (Mon, 04 Jul 2011) New Revision: 83 Url: http://nuiton.org/repositories/revision/nuiton-web/83 Log: fix transacvtion proxy Modified: trunk/nuiton-struts2/src/main/java/org/nuiton/web/struts2/interceptor/TopiaTransactionInterceptor.java Modified: trunk/nuiton-struts2/src/main/java/org/nuiton/web/struts2/interceptor/TopiaTransactionInterceptor.java =================================================================== --- trunk/nuiton-struts2/src/main/java/org/nuiton/web/struts2/interceptor/TopiaTransactionInterceptor.java 2011-07-04 20:54:39 UTC (rev 82) +++ trunk/nuiton-struts2/src/main/java/org/nuiton/web/struts2/interceptor/TopiaTransactionInterceptor.java 2011-07-04 21:20:59 UTC (rev 83) @@ -5,6 +5,7 @@ import com.opensymphony.xwork2.util.TextParseUtil; import org.nuiton.topia.TopiaContext; import org.nuiton.topia.TopiaException; +import org.nuiton.topia.framework.TopiaContextImplementor; import org.nuiton.web.struts2.TopiaTransactionAware; import java.lang.reflect.InvocationHandler; @@ -72,11 +73,12 @@ // action need a transaction transaction = beginTransaction(); - // creates a proxy + // creates a proxy on the transaction to push back in action TopiaContext proxy = (TopiaContext) Proxy.newProxyInstance( getClass().getClassLoader(), - new Class<?>[]{TopiaContext.class}, - new TopiaTransaction() + new Class<?>[]{TopiaContext.class, + TopiaContextImplementor.class}, + new TopiaTransactionProxy(transaction) ); // set the transaction in the action @@ -100,11 +102,19 @@ } /** - * Un proxy pour interdire d'utiliser les méthodes définies dans - * {@link #excludeMethods}. + * A proxy to used only to forbids usage of some method of the transaction. + * + * @see TopiaTransactionInterceptor#excludeMethods */ - class TopiaTransaction implements InvocationHandler { + class TopiaTransactionProxy implements InvocationHandler { + /** Target to use for the proxy. */ + protected final TopiaContext tx; + + TopiaTransactionProxy(TopiaContext tx) { + this.tx = tx; + } + @Override public Object invoke(Object proxy, Method method, @@ -120,8 +130,8 @@ proxy); } - // any other methods are fine - Object result = method.invoke(args); + // can invoke the method on the tx + Object result = method.invoke(tx, args); return result; }
participants (1)
-
tchemit@users.nuiton.org