0

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

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

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

场景:操作系统:CentOS release 6.4 (Final) 其中最有可能是虚拟机。应用服务器: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 之外,以便于编辑等。

4

1 回答 1

0

该问题尚未解决(尚未),但答复有很大帮助。

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

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

谢谢大家的帮助。:D!

于 2014-09-09T12:03:31.817 回答