protected PartitionKeyTrace getPartitionKeyTrace(Object target, MethodSignature signature) {
		// inspect cached traces first
		PartitionKeyTrace trace = traces.get(signature.getMethod().toString());
		if (trace == null) {
			
			Method method = getTargetMethod(target, signature);
			
			if (method != null) {
				Annotation[][] pann = signature.getMethod().getParameterAnnotations();
				
				PartitionKey pk = null;
				int pidx = -1; // @PartitionKey annotation index
				
				for (int i = 0; i < pann.length; i++) {
					if (pann[i].length > 0) {
						for (Annotation an : pann[i]) {
							if (an instanceof PartitionKey) {
								// got ya bitch
								pk = (PartitionKey) an;
								pidx = i;
								break;
							}
						}
					}
					if (pidx >= 0) break;
				}
				
				if (pk != null) {
					// cache this
					trace = new PartitionKeyTrace(pk, pidx);
					traces.put(signature.getMethod().toString(), trace);
				}
				else {
					throw new PartitionInvokeException("Unable to find @PartitionKey annotated parameter :?");	
				}
			}
		}
		//
		return trace;
	}