1 /* 2 * JBoss, Home of Professional Open Source 3 * Copyright 2005, JBoss Inc., and individual contributors as indicated 4 * by the @authors tag. See the copyright.txt in the distribution for a 5 * full listing of individual contributors. 6 * 7 * This is free software; you can redistribute it and/or modify it 8 * under the terms of the GNU Lesser General Public License as 9 * published by the Free Software Foundation; either version 2.1 of 10 * the License, or (at your option) any later version. 11 * 12 * This software is distributed in the hope that it will be useful, 13 * but WITHOUT ANY WARRANTY; without even the implied warranty of 14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 15 * Lesser General Public License for more details. 16 * 17 * You should have received a copy of the GNU Lesser General Public 18 * License along with this software; if not, write to the Free 19 * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 20 * 02110-1301 USA, or see the FSF site: http://www.fsf.org. 21 */ 22 package org.jboss.proxy.compiler; 23 24 import java.lang.reflect.Method; 25 26 /** 27 * An invoker is a target of method calls, where the calls are expressed 28 * not as primitive Java method invocations, but according to the conventions 29 * of the Core Reflection API. 30 * Invokers are designed to be used along with the Core Reflection API. 31 * <p> 32 * The Invoker.invoke operation is similar to java.lang.reflect.Method.invoke, 33 * except that the object (or objects) which receives the message is hidden 34 * behind the invoker. Also, unlike Method.invoke, the action of the 35 * Invoker.invoke operation is completely under programmer control, 36 * because Invoker.invoke is an interface method, not a native method. 37 * <p> 38 * You can wrap an invoker around an object so that the invoker passes 39 * all method calls down to the object. Such an invoker is called a 40 * <em>proxy invoker</em> for that object. 41 * <p> 42 * You can also wrap a new object around an invoker, so that the object 43 * implements some given interface (or interfaces), and passes all method 44 * calls up to the invoker. 45 * Such an object is called a <em>proxy target object</em> for that invoker. 46 * <p> 47 * You can do more complex tasks with invokers, such as passing each method 48 * call through a network connection before it reaches its target object. 49 * You can also filter or replicate method invocations. You can even 50 * execute the the invocations interpretively, without ever calling 51 * the method on a "real" Java object. 52 * 53 * @see Method#invoke 54 * @see Invoker#invoke 55 * @see Proxies#newInvoker 56 * @see Proxies#newTarget 57 * 58 * @author Unknown 59 * @version $Revision: 37459 $ 60 */ 61 public interface InvocationHandler 62 { 63 /** 64 * Processes a method invocation on a proxy instance and returns the 65 * result. 66 * 67 * @param dummy ??? 68 * @param method The method instance corresponding to the interface 69 * method invoked on the proxy instance. 70 * @param args An array of objects containing the values of the 71 * arguments passed in the method invocation on the proxy 72 * instance, or null if interface method takes no 73 * arguments. 74 * @return The value to return from the method invocation on 75 * the proxy instance. 76 * 77 * @throws Throwable The exception to throw from the method invocation 78 * on the proxy instance. 79 */ 80 Object invoke(Object dummy, Method method, Object[] args) 81 throws Throwable; 82 } 83