なんか問題が発生し始めました。
BTraceの実践的な使い方は、作者のblogで紹介されています。
BTrace in the real world -- A. Sundararajan's Weblog
これを動かそうとした所、コンパイルエラーが発生して正常動作しませんでした。
以下のような修正を行なったところ、コンパイルエラーがなくなりました。
87行目 executingStatement = get(preparedStatementDescriptions, currentStatement); ↓ executingStatement = (String)get(preparedStatementDescriptions, currentStatement); 104行目 AtomicLong ai = get(statementDurations, executingStatement); ↓ AtomicLong ai = (AtomicLong)get(statementDurations, executingStatement);
いずれもクラスのキャストの問題ですね。
さて、実際に動かしてみると、今度はClassFormatErrorが発生しました。
java.lang.ClassFormatError: Illegal class name "Ljava/lang/Object;" in class file org/hsqldb/jdbc/jdbcConnection
Exception in thread "Thread-9" java.lang.ClassFormatError
at sun.instrument.InstrumentationImpl.retransformClasses0(Native Method)
at sun.instrument.InstrumentationImpl.retransformClasses(InstrumentationImpl.java:124)
at com.sun.btrace.agent.Main.handleNewClient(Main.java:278)
at com.sun.btrace.agent.Main.startServer(Main.java:245)
at com.sun.btrace.agent.Main.access$000(Main.java:53)
at com.sun.btrace.agent.Main$1.run(Main.java:127)
at java.lang.Thread.run(Thread.java:619)
さて、面白くなってきましたね!