You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@beehive.apache.org by ke...@apache.org on 2006/01/27 01:55:05 UTC
svn commit: r372680 - in /beehive/trunk/controls:
src/runtime/org/apache/beehive/controls/runtime/bean/
src/runtime/org/apache/beehive/controls/runtime/generator/
src/spi/org/apache/beehive/controls/spi/svc/
test/src/auxilaries/org/apache/beehive/contr...
Author: kentam
Date: Thu Jan 26 16:54:55 2006
New Revision: 372680
URL: http://svn.apache.org/viewcvs?rev=372680&view=rev
Log:
Fix BEEHIVE-1051: added return value and throwable params to Interceptor.postEvent() signature.
CR: Xibin Zeng
Modified:
beehive/trunk/controls/src/runtime/org/apache/beehive/controls/runtime/bean/ControlBean.java
beehive/trunk/controls/src/runtime/org/apache/beehive/controls/runtime/generator/ControlBean.vm
beehive/trunk/controls/src/spi/org/apache/beehive/controls/spi/svc/Interceptor.java
beehive/trunk/controls/test/src/auxilaries/org/apache/beehive/controls/test/controls/interceptor/SampleInterceptor.java
beehive/trunk/controls/test/src/controls/org/apache/beehive/controls/test/controls/interceptor/HelloIntercepted.java
Modified: beehive/trunk/controls/src/runtime/org/apache/beehive/controls/runtime/bean/ControlBean.java
URL: http://svn.apache.org/viewcvs/beehive/trunk/controls/src/runtime/org/apache/beehive/controls/runtime/bean/ControlBean.java?rev=372680&r1=372679&r2=372680&view=diff
==============================================================================
--- beehive/trunk/controls/src/runtime/org/apache/beehive/controls/runtime/bean/ControlBean.java (original)
+++ beehive/trunk/controls/src/runtime/org/apache/beehive/controls/runtime/bean/ControlBean.java Thu Jan 26 16:54:55 2006
@@ -1002,7 +1002,7 @@
public void preInvoke( org.apache.beehive.controls.api.bean.ControlBean cb, Method m, Object [] args ) {}
public void postInvoke( org.apache.beehive.controls.api.bean.ControlBean cb, Method m, Object [] args, Object retval, Throwable t) {}
public void preEvent( org.apache.beehive.controls.api.bean.ControlBean cb, Class eventSet, Method m, Object [] args) {}
- public void postEvent( org.apache.beehive.controls.api.bean.ControlBean cb, Class eventSet, Method m, Object [] args ) {}
+ public void postEvent( org.apache.beehive.controls.api.bean.ControlBean cb, Class eventSet, Method m, Object [] args, Object retval, Throwable t ) {}
}
/** BEGIN unsynchronized fields */
Modified: beehive/trunk/controls/src/runtime/org/apache/beehive/controls/runtime/generator/ControlBean.vm
URL: http://svn.apache.org/viewcvs/beehive/trunk/controls/src/runtime/org/apache/beehive/controls/runtime/generator/ControlBean.vm?rev=372680&r1=372679&r2=372680&view=diff
==============================================================================
--- beehive/trunk/controls/src/runtime/org/apache/beehive/controls/runtime/generator/ControlBean.vm (original)
+++ beehive/trunk/controls/src/runtime/org/apache/beehive/controls/runtime/generator/ControlBean.vm Thu Jan 26 16:54:55 2006
@@ -313,6 +313,7 @@
#set ($returnType = $event.returnType)
public $returnType ${event.name}($event.argDecl) $event.throwsClause
{
+ Throwable thrown = null;
#if ($returnType != "void")
$returnType retval = ${event.defaultReturnValue};
#end
@@ -327,11 +328,13 @@
//
if (listener != null)
{
- #if ($event.interceptorServiceNames.size() != 0)
Object [] argArray = new Object[] {$event.argList};
+ #if ($event.interceptorServiceNames.size() != 0)
String pivotedInterceptor = null;
+ #end
try
{
+ #if ($event.interceptorServiceNames.size() != 0)
preEvent($event.methodField, argArray, ${event.methodField}Interceptors);
#end
#if ($returnType != "void")
@@ -339,8 +342,8 @@
#else
listener.${event.name}($event.argList);
#end
- #if ($event.interceptorServiceNames.size() != 0)
}
+ #if ($event.interceptorServiceNames.size() != 0)
catch (org.apache.beehive.controls.spi.svc.InterceptorPivotException ipe)
{
pivotedInterceptor = ipe.getInterceptorName();
@@ -348,33 +351,86 @@
retval = (#toObject ($returnType))ipe.getReturnValue();
#end
}
- postEvent($event.methodField, argArray, ${event.methodField}Interceptors, pivotedInterceptor);
- #end
+ #end
+ catch (Throwable t)
+ {
+ //
+ // All exceptions are caught here, so postEvent processing has visibility into
+ // the exception status. Errors, RuntimExceptions, or declared checked exceptions will
+ // be rethrown.
+ //
+ thrown = t;
+
+ if (t instanceof Error) throw (Error)t;
+ else if (t instanceof RuntimeException) throw (RuntimeException)t;
+ #foreach ($thrownException in $event.throwsList)
+ else if (t instanceof $thrownException) throw ($thrownException)t;
+ #end
+
+ throw new UndeclaredThrowableException(t);
+ }
+ #if ($event.interceptorServiceNames.size() != 0)
+ finally
+ {
+ #if ($returnType == "void")
+ Object rv = null;
+ #else
+ Object rv = retval;
+ #end
+ postEvent($event.methodField, argArray, rv, thrown, ${event.methodField}Interceptors, pivotedInterceptor);
+ }
+ #end
}
#if ($returnType != "void")
return retval;
#end
#else
- #if ($event.interceptorServiceNames.size() != 0)
Object [] argArray = new Object[] {$event.argList};
+
+ #if ($event.interceptorServiceNames.size() != 0)
String pivotedInterceptor = null;
- try
- {
- preEvent($event.methodField, argArray, ${event.methodField}Interceptors);
#end
java.util.Iterator listenerIter = notifier.listenerIterator();
- while (listenerIter.hasNext())
+
+ try
{
- $event.eventSet.formalShortName listener = ($eventSet.formalShortName)listenerIter.next();
- listener.${event.name}($event.argList);
+ #if ($event.interceptorServiceNames.size() != 0)
+ preEvent($event.methodField, argArray, ${event.methodField}Interceptors);
+ #end
+ while (listenerIter.hasNext())
+ {
+ $event.eventSet.formalShortName listener = ($eventSet.formalShortName)listenerIter.next();
+ listener.${event.name}($event.argList);
+ }
}
#if ($event.interceptorServiceNames.size() != 0)
- }
catch (org.apache.beehive.controls.spi.svc.InterceptorPivotException ipe)
{
pivotedInterceptor = ipe.getInterceptorName();
}
- postEvent($event.methodField, argArray, ${event.methodField}Interceptors, pivotedInterceptor);
+ #end
+ catch (Throwable t)
+ {
+ //
+ // All exceptions are caught here, so postEvent processing has visibility into
+ // the exception status. Errors, RuntimExceptions, or declared checked exceptions will
+ // be rethrown.
+ //
+ thrown = t;
+
+ if (t instanceof Error) throw (Error)t;
+ else if (t instanceof RuntimeException) throw (RuntimeException)t;
+ #foreach ($thrownException in $event.throwsList)
+ else if (t instanceof $thrownException) throw ($thrownException)t;
+ #end
+
+ throw new UndeclaredThrowableException(t);
+ }
+ #if ($event.interceptorServiceNames.size() != 0)
+ finally
+ {
+ postEvent($event.methodField, argArray, null, thrown, ${event.methodField}Interceptors, pivotedInterceptor);
+ }
#end
#end
}
@@ -403,10 +459,10 @@
}
#end
##
-## This macro defines the implementation of a preEvent method
+## This macro defines the implementation of a postEvent method
##
#macro (declarePostEvent $eventSet)
- private void postEvent(Method method, Object[] argArray, String[] interceptors, String pivotedInterceptor)
+ private void postEvent(Method method, Object[] argArray, Object retval, Throwable t, String[] interceptors, String pivotedInterceptor)
{
for (int cnt = interceptors.length - 1; cnt >= 0; cnt--)
{
@@ -415,7 +471,7 @@
{
pivotedInterceptor = null;
org.apache.beehive.controls.spi.svc.Interceptor i = ensureInterceptor( n );
- i.postEvent( ${bean.shortName}.this, ${eventSet.formalShortName}.class , method, argArray );
+ i.postEvent( ${bean.shortName}.this, ${eventSet.formalShortName}.class , method, argArray, retval, t );
}
}
}
Modified: beehive/trunk/controls/src/spi/org/apache/beehive/controls/spi/svc/Interceptor.java
URL: http://svn.apache.org/viewcvs/beehive/trunk/controls/src/spi/org/apache/beehive/controls/spi/svc/Interceptor.java?rev=372680&r1=372679&r2=372680&view=diff
==============================================================================
--- beehive/trunk/controls/src/spi/org/apache/beehive/controls/spi/svc/Interceptor.java (original)
+++ beehive/trunk/controls/src/spi/org/apache/beehive/controls/spi/svc/Interceptor.java Thu Jan 26 16:54:55 2006
@@ -52,5 +52,5 @@
throws InterceptorPivotException;
/** Called after a control event is fired (through a client proxy) */
- public void postEvent( ControlBean cb, Class eventSet, Method m, Object [] args);
+ public void postEvent( ControlBean cb, Class eventSet, Method m, Object [] args, Object retval, Throwable t );
}
Modified: beehive/trunk/controls/test/src/auxilaries/org/apache/beehive/controls/test/controls/interceptor/SampleInterceptor.java
URL: http://svn.apache.org/viewcvs/beehive/trunk/controls/test/src/auxilaries/org/apache/beehive/controls/test/controls/interceptor/SampleInterceptor.java?rev=372680&r1=372679&r2=372680&view=diff
==============================================================================
--- beehive/trunk/controls/test/src/auxilaries/org/apache/beehive/controls/test/controls/interceptor/SampleInterceptor.java (original)
+++ beehive/trunk/controls/test/src/auxilaries/org/apache/beehive/controls/test/controls/interceptor/SampleInterceptor.java Thu Jan 26 16:54:55 2006
@@ -41,10 +41,12 @@
public void preEvent( ControlBean cb, Class eventSet, Method m, Object [] args )
throws InterceptorPivotException
{
+ System.out.println( "SampleInterceptor.preEvent() called: bean=" + cb.getControlID() + " es=" + eventSet.getName() + " m=" + m.getName() );
}
/** Called after a control event is fired (through a client proxy) */
- public void postEvent( ControlBean cb, Class eventSet, Method m, Object [] args)
+ public void postEvent( ControlBean cb, Class eventSet, Method m, Object [] args, Object retval, Throwable t )
{
+ System.out.println( "SampleInterceptor.postEvent() called: bean=" + cb.getControlID() + " es=" + eventSet.getName() + " m=" + m.getName() );
}
}
Modified: beehive/trunk/controls/test/src/controls/org/apache/beehive/controls/test/controls/interceptor/HelloIntercepted.java
URL: http://svn.apache.org/viewcvs/beehive/trunk/controls/test/src/controls/org/apache/beehive/controls/test/controls/interceptor/HelloIntercepted.java?rev=372680&r1=372679&r2=372680&view=diff
==============================================================================
--- beehive/trunk/controls/test/src/controls/org/apache/beehive/controls/test/controls/interceptor/HelloIntercepted.java (original)
+++ beehive/trunk/controls/test/src/controls/org/apache/beehive/controls/test/controls/interceptor/HelloIntercepted.java Thu Jan 26 16:54:55 2006
@@ -25,6 +25,7 @@
import org.apache.beehive.controls.api.bean.ControlInterface;
import org.apache.beehive.controls.api.properties.PropertySet;
+import org.apache.beehive.controls.api.events.EventSet;
/**
* Code-gen test for interceptors. Note that there is currently no
@@ -34,6 +35,20 @@
@ControlInterface
public interface HelloIntercepted
{
+ @EventSet
+ public interface multicastEvents
+ {
+ @SampleInterceptorAnnotation
+ public void multicastNotify(int a);
+ }
+
+ @EventSet( unicast=true )
+ public interface unicastEvents
+ {
+ @SampleInterceptorAnnotation
+ public int unicastNotify(Object b);
+ }
+
//
// A simple enumerated type used to customize the greeting by gender
//