問題タブ [rmi]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
java - リースの有効期限が切れた後、Java RMI がソケットを閉じない
RMI 対応アプリケーションがソケットをリークしているようです。RMI 経由でサービスを提供する Java アプリケーションがあります。Linux で動作する Java SE 1.6 RMI 実装を使用しています。私が観察している問題は、クライアントがレジストリを使用してリモート オブジェクトへの参照を取得した後、接続が突然切断された場合 (停電、ケーブルが抜かれているなど)、サーバーがソケットを開いたままにすることです。クライアントのリース期限が切れた後、RMI 実装がクリーンアップされることを期待していますが、そうはなっていません。unreferenced()
サーバーでは、リースの有効期限が切れるとリモート オブジェクトのメソッドが呼び出されますが、ソケットは netstat で "ESTABLISHED" 状態で無期限に表示されたままになります。
クライアントに特定の動作を強制することはできないため、数日後、Linux ディストリビューションでは、開いているファイル記述子のデフォルトの制限である 1024 に達し、サーバーが新しいソケットやファイルを開くことができなくなります。TCP キープアライブについて考えましたが、RMI はネットワーク層を抽象化しているため、接続が確立された後に実際のサーバー ソケットにアクセスすることはできません。
リース期限が切れたクライアント接続に関連付けられたソケットを RMI 層に強制的にクリーンアップさせる方法はありますか?
更新:私が使用したソリューションは、選択した回答に似ていますが、異なるアプローチを使用しています。カスタム ソケット ファクトリを使用し、createServerSocket() によって返された ServerSocket インスタンスを、accept() を除くすべてのメソッドを通過させる透過的なラッパーでラップしました。accpet メソッドでは、ソケットが返される前にキープアライブが有効になります。
java - JBossでRMIサーバーを公開しますか?
クライアントのフロントエンドからRMIメソッドにアクセスする必要があります。さまざまな理由で、サーバー側でJBossを実行しています。これにより、JBossを使用してRMIサーバーメソッドを公開することを考えています。
私はJBossに少し慣れていないので、質問は次のようになります。RMIサーバーメソッドをクライアントに表示するには、どのような手順が必要ですか。
java - Java RMI サーバーをリモートでシャットダウンする方法
次のような非常に単純な Java RMI サーバーがあります。
exit メソッドを呼び出すと、System.exit(1) は次の例外をスローします。
この方法で何が間違っていますか?
java - Java5 と Java6 の間で RMI を介して通信するときに問題が発生することは予想されますか?
基本的には、主題がすべてを語っています。Java 5 で実行されているコンポーネントがいくつかあり、それらは RMI を介して互いに通信しています。それらのいくつかを Java6 に移行した場合、何か問題が発生する可能性がありますか? 移動すると-source/target 1.6
は、java6 vm でコンパイルして実行することを意味します。
java - RMIサーバーが古いIPアドレスを取得する
私は奇妙な問題を見ています:
私はLinuxマシンを持っていて、そのマシンにJDK1.6をインストールしましたが、いくつかのビジネスが続き、数日後にマシンのIPアドレスを変更する必要がありました。そして今、数ヶ月後...私はいくつかの春のアプリケーションを動作させようとしています...そしてRMIサーバーは私の古いIPアドレスで起動しているようです...
誰かがプロセスを説明したり、ここで何が起こっているのか、あるいはここで何が起こっているのかを明らかにすることができます。
java - データを新しい RMI スレッドに自動的にコピーする方法は?
少しrmiクライアントサーバーアプリケーションを適応させています。私はいくつかのことを書いています:
特別なことは何もありませんが... 私は新しい RMISecurityManager に手を入れました。これは JNI メソッドを呼び出し、別のユーザーのアクセス許可をチェックします。
サーバークラスで私はそれをやっています:
このクラスは、サーバーのメイン スレッドで動作するようです。問題は、そのサーバークラスに接続してレジストリを検索しようとしたときです。私はその例外を受け取ります:
IMHO の意味は、スレッドが (暗黙的に) 作成され、NativeRMISecurityManager をデフォルトの SecurityManager として取得することです。
誰かがそれに関して何かアドバイスがありますか?
java - Java RMI トレース
Java アプリケーションのすべての RMI アクティビティをトレースおよびログに記録するツールはありますか?
java - JMXを特定のインターフェースにバインドするにはどうすればよいですか?
現在、Java VMをcom.sun.management.jmxremote.*
プロパティで起動しているので、管理と監視のためにJConsoleを介してJavaVMに接続できます。残念ながら、マシン上のすべてのインターフェイス(IPアドレス)でリッスンします。
私たちの環境では、1台のマシンで同時に複数のJavaVMが実行されている場合がよくあります。(を使用して)異なるTCPポートでリッスンするようにJMXに指示するcom.sun.management.jmxremote.port
ことは可能ですが、代わりにJMXに標準のJMXポートを使用させ、(すべてではなく)特定のIPアドレスにバインドさせると便利です。
これにより、JConsoleを介して接続しているVMを簡単に把握できます(各VMが独自のIPアドレスを効果的に「所有」しているため)。JMXに単一のIPアドレスまたはホスト名でリッスンさせる方法を誰かが理解しましたか?
java - RMI、EJB、およびコールバック
EJB がクライアントをコールバックできるように、クライアントが RMI オブジェクトを引数として EJB に渡すことは可能ですか?
java - RMI で例外をチェーンするのは悪い考えですか?
RemoteExceptions をスローするときに例外チェーンを使用するのは悪い考えですか? 次のようなことを行う RMI サーバーがあります。
クライアントで ClassNotFoundException が原因で UnmarshallException が発生しています。プラス面としては、CustomException 自体がエクスポートされていることがわかります。残念ながら、この男の奥深くにある別の例外はエクスポートされません。これが ClassNotFoundException の出番です。階層は次のようなものだと思います。
RemoteException -> CustomException -> SQLException -> NotExportedException
問題は、CustomException がエクスポートされることは保証できますが、下位レベルの例外がエクスポートされることは保証できないということです。
このため、RemoteExceptions で例外チェーンを使用することは決してありません。代わりに、おそらくサーバー側でスタック トレースをログに記録し、「原因」例外がチェーンされていないプレーンなバニラ RemoteException をスローする必要があると思います。以前にこの状況に対処した人はいますか?