Injecting roles in Java agents through runtime bytecode manipulation