问题(简洁的小版本):我有一个可以编辑的 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 之外,以便于编辑等。