8

私はJava RMIに取り組んでいます。ポート 2028 で rmiregistry を実行しても問題はほとんどありません。これは、テスト プログラムを実行するために既にそのポートを使用しているためです。他のポートを使用してプログラムを実行できますが、知りたいのですが、特定のポートで実行されている rmiregistry を閉じるにはどうすればよいですか?

4

4 に答える 4

11

プログラミングでこれを行いたい場合は、次のようにします。

// create the registry
Registry rmiRegistry = LocateRegistry.createRegistry(port);
...
// connect to it
JMXConnectorServer connector =
    JMXConnectorServerFactory.newJMXConnectorServer(url,
        new HashMap<String, Object>(),
        ManagementFactory.getPlatformMBeanServer());
// do stuff with it ...

// close the connection
if (connector != null) {
    connector.stop();
}
// deregister the registry
if (rmiRegistry != null) {
    UnicastRemoteObject.unexportObject(rmiRegistry, true);
}

JMXServer クラスの完全なコードは次のとおりです。これらのうち2つを作成して完全に登録解除するのに問題があるため、ユニットテストを異なるポートで実行するようにします。

SimpleJmx JMX クライアント/サービス パッケージでこのコードを使用します。

于 2011-12-05T13:28:41.547 に答える
9

非常に面倒だった後、私は突然、rmiregistryがシェルのバックグラウンドで実行されていることに気付きました。したがって、最初に閉じてからフォアグラウンドに移動してから閉じる必要があります。そしてそれはうまくいった。

ところで、それをフォアグラウンドに持ってくるには、次のように入力します。

% fg

次に、それを閉じるには、次のように入力します。

Ctrl + c

それでおしまい。私を助けようとしたすべての人に感謝します。

于 2011-12-08T11:24:36.333 に答える
1

シェルからrmiregistryを実行している場合は、次のコマンドで閉じてみてください。

Process p = 
Runtime.getRuntime().exec("ps -ef | grep rmiregistry | awk '{ print $2 }' | kill -9");

私はシェルコマンドにそれほど慣れていませんが、あなたがその考えを理解してくれることを願っています。

于 2011-12-05T13:47:49.153 に答える
1

rmi レジストリがすでにポートを使用しており、別のポートを使用せずにサービスを再バインドする場合。以下のコードを試すことができます

Registry registry = null;
try {
    registry = LocateRegistry.createRegistry(1099);
} catch (ExportException ex) {
   registry = LocateRegistry.getRegistry(1099);
} catch (RemoteException ex) {
  Logger.getLogger(Server.class.getName()).log(Level.SEVERE, null, ex);
}
于 2014-04-10T13:14:04.343 に答える