*/
public Object invoke(String operationName, Object[] arguments, String[] types) throws Exception, NoSuchOperationException {
GOperationSignature signature = new GOperationSignature(operationName, types);
Integer index = (Integer) operationIndex.get(signature);
if (index == null) {
throw new NoSuchOperationException("Unknown operation " + signature);
}
GBeanOperation operation = operations[index.intValue()];
// copy target into local variables from within a synchronized block to gaurentee a consistent read
int state;