A solution is to programmatically generate a stack trace:
private static String getCallerName() {
    StackTraceElement[] stElements = Thread.currentThread().getStackTrace();
    for (int i=1; i<stElements.length; i++) {
        StackTraceElement ste = stElements[i];
        if (!ste.getClassName().equals("B") && ste.getClassName().indexOf("java.lang.Thread")!=0) {
            return ste.getClassName();
            // you could also use ste.getMethodName() or ste.getLineNumber()
        }
    }
    return null;
}
You would use it like this, for example :
public void something() {
   System.out.println("called by " + getCallerName());
}