/* * Copyright 2008 Niclas Hedhman. All rights Reserved. * * 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.qi4j.api.sideeffect; import java.lang.reflect.InvocationHandler; import java.lang.reflect.Method; /** * Base class for generic SideEffects. */ public abstract class GenericSideEffect extends SideEffectOf<InvocationHandler> implements InvocationHandler { /** * {@inheritDoc} */ @Override public Object invoke( final Object proxy, final Method method, final Object[] args ) throws Throwable { invoke( method, args ); return null; } /** * Convenience method to be overridden by subclasses in order to avoid returning null, as returned value from side * effects is not taken in consideration. * * @param method the method that was invoked * @param args the arguments of the method invocation * * @throws Throwable - the exception to throw from the method invocation on the proxy instance. The exception's type * must be assignable either to any of the exception types declared in the throws clause of the * interface method or to the unchecked exception types {code}java.lang.RuntimeException{code} * or {code}java.lang.Error{code}. If a checked exception is thrown by this method that is not * assignable to any of the exception types declared in the throws clause of the interface method, * then an UndeclaredThrowableException containing the exception that was thrown by this method * will be thrown by the method invocation on the proxy instance. */ protected void invoke( final Method method, final Object[] args ) throws Throwable { } }