私はjava.util.concurrency
フレームワークをはじめて使用しています。ここに私がやっていることの非常に単純化されたバージョンがあります。フレームワークに精通していない人にとっては、future.get()
は将来定義されるCallable
オブジェクトを実行します。 future.getOriginatingRequest()
は、私がCallable
オブジェクトで使用するために将来設定したオブジェクトを返します。元の要求オブジェクトが失敗した(そのクラス名を知るのに十分な)ログを記録しようとしています。プロキシクラスの名前を取得する方法は?
try {
future.get();
} catch (ExecutionException e) {
logger.error("Failed to execute future with id '" +
future.getOriginatingRequest().getClass().getName() + "'");
}
私がいる問題は、ロギングフレームワークがこれを出力しているということである。したがって、代わりに私は$Proxy22
または他のいくつかの番号を取得しています実際のクラス名の
Failed to execute future with id '$Proxy22'
。プロキシ名ではなく、実際のクラス名を取得する方法はありますか?ボーナスポイントは、なぜ私が最初にプロキシ文字列を取得しているのかを誰かが明確に説明できることです!
おかげで私ソリューションのために良い見つけます。なぜプロキシクラスが関与しているのでしょうか?それらは何のため?結局のところ、私は自分自身を作成した将来的に元のリクエストオブジェクトを設定し、それを元に戻そうとしています。 –
@Chris Knight RMIなどを使用していますか? – josefx
@Chris Knightプロキシの使用にはいくつかの理由がありますが、通常は、すべてのメソッド呼び出しの前および/または後に実行されるアクション(たとえばアクセスチェックなど)または操作(または置換)それに気づいていない誰もが基本的なオブジェクト。しかし、動的プロキシは非常に強力で汎用性があり、全く異なるものになる可能性があります。 – biziclop