Java 从客户端动态热交换服务器运行时行为

Java 从客户端动态热交换服务器运行时行为,java,dynamic,client-server,hotswap,Java,Dynamic,Client Server,Hotswap,假设我已经将日志服务部署到某个(符合jaxrs的)容器中 @Path("/logger") public class LogService { @GET @Path("/log") public Response log(final String @QueryParam("msg") msg) { System.out.println(msg); // ... } } 如果我向承载此服务的容器发出以下请求,我希望看到消息输出到容器的stdout日志: G

假设我已经将日志服务部署到某个(符合jaxrs的)容器中

@Path("/logger")
public class LogService
{
  @GET
  @Path("/log")
  public Response log(final String @QueryParam("msg") msg)
  {
     System.out.println(msg);
     // ...
  }
}
如果我向承载此服务的容器发出以下请求,我希望看到消息输出到容器的stdout日志:

GET <host>:<port>/logger/log?msg=foo
服务被重新定义为使用此接口的实现:

public interface LoggerApi
{
  void logMessage(final String msg);
}
@Path("/logger")
public class LogService
{
  public static LoggerApi LOGGER = new LoggerApi()
    {
      void logMessage(final String msg)
      {
        System.out.println(msg);
      }
    }

  @GET
  @Path("/log")
  public Response log(final String @QueryParam("msg") msg)
  {
    LOGGER.logMessage(msg);
    // ...
  }
}
因此,问题变成了,如何将logger的实现与服务器外部的某个客户机定义的新实现进行热交换

我的第一直觉是RMI和/或动态代理可以让我达到我想要的位置,但我不太确定安全策略的疯狂程度

基本上,我想要的是能够做到以下几点:

@Path("/config")
public class ConfigService
{
  @POST
  @Path("/loggerApi")
  public Response setLoggerApi(final LoggerApi clientSuppliedLogger)
  {
    LogService.LOGGER = clientSuppliedLogger;
    // ...
  }
}
想法

(哦,我知道这会带来严重的安全风险,这种模式永远不应该在生产环境中使用。我的兴趣是设计一个模拟服务,其中服务的行为和副作用可以通过调用模拟服务的集成测试来定义)