如何实现适配器模式(或针对以下情况更有说服力的解决方案)?

时间:2014-09-08 15:19:24

标签: java adapter p6spy

问题(小简洁版):我有一个jar文件,我可以编辑,但我想创建一个方法,在该jar中的特定类中调用另一个将在另一个jar下的类。 我们的想法是,现有的.jar只能让方法调用external.jar,而external.jar会向existing.jar返回一个值,以便继续处理。

问题(详细版本):我使用p6spy来捕获我的应用程序生成的sqls但是我需要将sql过滤到一个非常特定的级别,不仅p6spy的函数“sqlExpression”不起作用,即使它这样做还不够。 我目前已经反编译(我没有找到项目的来源,是的,它是一个开源项目)p6spy并编辑了formattedlogger.class以满足我的需要。 我的问题是,这是一个“解决方案”,许多人将不得不使用,我应用的过滤器对某些人来说是不够的,而其他人根本无法工作,因为他们需要我需要排除的东西。 我做了一些研究,并决定我应该采用适配器路由,我决定p6spy.jar将保持不变,但它将从另一个jar文件中调用一个类,然后该文件将包含过滤器的特性。

但我不知道该怎么做。 :(

方案: 操作系统:CentOS版本6.4(最终版)     最有可能是虚拟机。 应用服务器:jboss-4.3.0.GA     其中包含服务器文件夹下的多个实例。 我在app_server / server / instance / lib下有p6spy.jar 我知道我必须将适配器放在同一个文件夹下。

有没有人知道应该怎么做,我可以阅读这些事情或我应该如何进行,可能是一个不同的解决方案或可能是另一个想法。 我愿意接受建议。

*编辑1: 我有一个p6spy.jar文件,其中包含一个我编辑的类以满足我的需要。 (FormattedLogger.class)

课程如下:

package com.p6spy.engine.logging.appender;

public abstract class FormattedLogger
{
  protected String lastEntry;

  public void logSQL(int connectionId, String now, long elapsed, String category, String prepared, String sql)
  {
    String logEntry = now + "|" + elapsed + "|" + ((connectionId == -1) ? "" : String.valueOf(connectionId)) + "|" + category + "|" + prepared + "|" + sql;
    logText(logEntry);
  }

  public abstract void logText(String paramString);

  public void setLastEntry(String inVar)
  {
    this.lastEntry = inVar;
  }

  public String getLastEntry() {
    return this.lastEntry;
  }
}

我需要它看起来像这样:

package com.p6spy.engine.logging.appender;

public abstract class FormattedLogger
{
  protected String lastEntry;

  public void logSQL(int connectionId, String now, long elapsed, String category, String prepared, String sql)
  {
    sql = method_in_another_class_and_in_other_jar_file(sql);
    logText(sql);
  }

  public abstract void logText(String paramString);

  public void setLastEntry(String inVar)
  {
    this.lastEntry = inVar;
  }

  public String getLastEntry() {
    return this.lastEntry;
  }
}

这个“method_in_another_class_and_in_other_jar_file(sql)”就像名字所说的那样,会在这个jar之外,以便进行简单的编辑等。

1 个答案:

答案 0 :(得分:0)

这个问题尚未解决,但回复非常有帮助。

Jim Harrison建议将字节码修改作为解决方案,遗憾的是,这不是我要采取的路径。

markbernard获得了源文件@ sourceforge.net/projects/p6spy/files/p6spy,我将重新编写驱动程序/软件以适合我的场景。

谢谢大家的帮助。 :d