2

rmi サービスをいくつかエクスポートしました。

 <bean id="entityRmiServiceExporter" class="org.springframework.remoting.rmi.RmiServiceExporter">
    <property name="serviceName" value="entityService"/>
    <property name="service" ref="entityServiceImpl"/>
    <property name="serviceInterface" value="IEntityService"/>
    <property name="registryPort" value="1099"/>
</bean>

私のマシンで実行すると、エンドポイントは127.0.0.1:1099 ですが、VM では10.0.2.15:1099で、IP アドレスです。

RmiServiceExporter:276 - Binding service 'entityService' to RMI registry: RegistryImpl[UnicastServerRef [liveRef: [endpoint:[127.0.0.1:1099](local),objID:[0:0:0, 0]]]]

どこで手動で構成できますか?

4

1 に答える 1

1

Spring 構成でプレースホルダーを使用して、特定の値をプロパティ ファイルに移動できます。そのためには、まず、ファイルからプロパティを解決する Bean が必要です。

<!-- Read file that contains properties -->
<bean id="properties" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
    <property name="location" value="classpath:app.properties" />
</bean>

次にentityRmiServiceExporter、そのファイルの値を使用するように Bean を変更できます。

<bean id="entityRmiServiceExporter" class="org.springframework.remoting.rmi.RmiServiceExporter">
    <property name="serviceName" value="entityService"/>
    <property name="service" ref="entityServiceImpl"/>
    <property name="serviceInterface" value="IEntityService"/>
    <property name="registryPort" value="1099"/>

    <property name="registryHost" value="${rmi.endpoint}"/>
</bean>

そして、次のような行を含む app.properties ファイルが必要です。

rmi.endpoint=10.0.2.15

代替アプローチ

RmiServiceExporter Javadocによると、別のアプローチがあるかもしれません。この Javadoc は次のように述べています。

注: RMI は、完全修飾ホスト名を取得するために最善を尽くします。判別できない場合は、フォールバックして IP アドレスを使用します。ネットワーク構成によっては、IP がループバック アドレスに解決される場合があります。

-Djava.rmi.server.hostname=server.mycompany.com起動時に JVM に渡すことで、マシンのホスト名を RMI に伝えることができます。

これは、Spring Bean を構成する必要がないことを意味します。代わりに、別のインターフェースで RMI インターフェースを公開するように JVM を構成します。あなたのマシンがインターネットに直接公開されている場合 (つまり、ファイアウォールやその間に何かが存在しない場合)、私はそうしません。マシンが会社のネットワーク内にある場合は、この方法で問題を解決することが許容されるか、むしろ望ましいことですらあるかもしれません。

于 2013-07-16T11:31:13.797 に答える