2011-06-21 4 views
4

私は自分のクラスで非常に奇妙な動作をしており、何が起こっているのか正確にはわかりません。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 }

+2

同期はメソッドが反映されたときに呼び出されます。おそらく、複数回呼び出されていると思われる同期メソッドのコードを投稿することができます。また、doGetメソッドの開始時とサービスメソッドの呼び出しの前後で、サーブレット自体にログを追加します。 –

+1

呼び出しを行うたびに 'createInstance'を使いますか? 'synchronized'は**インスタンスごと**ベースです。 – Andreas

+0

私は自分の問題はあなたがAndreas(少なくとも同期の問題)と言っていると思います。私は上記のコードを元の質問に貼り付けます。ありがとう! –

答えて

3

いくつかの仮定:これは私のサーブレットのコードである

あなたは "それはクラスの反射を作る" と言うとき私はそれが新しいオブジェクトを作成するためにリフレクションを使用していることを意味しています。

あなたが呼び出すメソッドがインスタンスメソッド(静的ではない)であると推測しています。

これらの推測が正しい場合、リフレクションを使用して呼び出すメソッドを同期させても、毎回別のオブジェクトでメソッドを呼び出すため、呼び出しが重複するのを防ぐことはできません。​​キーワードをメソッド定義に追加すると、そのメソッドがロックとして呼び出されたオブジェクトが使用されます。

3

​​の詳細を知りたいことがあります。

私は関係なく、それが要求されてしまった何 回、同期「反映」メソッドを作っていない、一つのリクエスト は... [終了します]

​​方法についてはthisあなたがメソッドを呼び出しているどのオブジェクトであるsynchronized(this) {...}、同じです。

リフレクションを使用している同じクラスの複数の別個のインスタンスで作業している可能性があります。この場合、​​は思ったように機能しません。 さらに、反映されたオブジェクトの同期は、要求ごとの同期とはまったく異なります(場合によっては複数のインスタンスがあるかもしれませんが、サーブレットインスタンスで同期する必要があると仮定します)。

関連する問題