私は自分のクラスで非常に奇妙な動作をしており、何が起こっているのか正確にはわかりません。Java:同期メソッドはリフレクションによって何度もアクセスされますか?
1)私は、AJAX 2)サーブレット・プロセス以下の方法でこの要求にサーブレットにリクエストを送信してきたJSP: - それは、クラスの反射を行い、その後、(メソッドを呼び出していますJSPからパラメータとして提供された場合)、メソッドの結果をAjaxに出力します。だからここ
は元の問題であり、私が思い付いた後、部分的な解決策:メソッドの呼び出しが複数回行われていましたが、私はなぜ知らない
。 JSP-AjaxはそれをONCE(複数回テスト)としか呼んでいませんが、サーブレットは「リロードする」のと同じようにメソッドを何度も呼び出すため、プロセスでエラーが発生します。サーブレットで何が起こっているのか分からなかったので、私は "反映された"メソッドを同期させました。何回何回リクエストしても、1つのリクエストが終了し、次に1つのリクエストが終了します。メソッドにアクセスしたときと終了したときに、出力に2つのメッセージを書きました。
しかし、それがアクセスされたことを示すメッセージは、終了メッセージがスローされる前に数回書かれています...私は理解できません。何が欠けているのですか、なぜメソッドが終了する前に何度もアクセスされていますか?単にそれを取得しないでください。手伝って頂けますか?
また、元の問題(サーブレット自体が「再読み込み」のようなもの)について考えていますか?この問題では、サーブレットをリロードするヘッダーが送信されている可能性はありますが、わかりません。
編集:
実際にはインスタンスを実行しています。
Class clase = Class.forName("com.cargaporinterfase.CargaPorInterfase_"+cd_matriz); Object obj = clase.newInstance(); Method met = clase.getDeclaredMethod(metodo, new Class[]{String.class, String.class});
アリと呼ばれている方法は次のとおりです:
public synchronized String procesar(String url,String nu_spid) throws CargaPorInterfaseException{ //... more processing }
同期はメソッドが反映されたときに呼び出されます。おそらく、複数回呼び出されていると思われる同期メソッドのコードを投稿することができます。また、doGetメソッドの開始時とサービスメソッドの呼び出しの前後で、サーブレット自体にログを追加します。 –
呼び出しを行うたびに 'createInstance'を使いますか? 'synchronized'は**インスタンスごと**ベースです。 – Andreas
私は自分の問題はあなたがAndreas(少なくとも同期の問題)と言っていると思います。私は上記のコードを元の質問に貼り付けます。ありがとう! –