Как настроить адрес конечной точки экспортера службы rmi?
Я экспортировал некоторые услуги 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, а на виртуальной машине - 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]]]]
где я могу настроить его вручную?
1 ответ
Вы можете использовать заполнители в конфигурации Spring и перемещать определенные значения в файл свойств. Для этого вам сначала понадобится компонент, который разрешит свойства из файла:
<!-- 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
Альтернативный подход
Согласно Javadoc RmiServiceExporter, может быть альтернативный подход. Этот Javadoc говорит:
Примечание. RMI делает все возможное, чтобы получить полное имя хоста. Если не удается определить, он будет использовать и использовать IP-адрес. В зависимости от конфигурации вашей сети, в некоторых случаях IP-адрес будет преобразован в адрес обратной связи.
Вы можете сказать RMI, что такое имя хоста машины, передав -Djava.rmi.server.hostname=server.mycompany.com
к вашей JVM, когда он запущен.
Это означает, что вам не нужно настраивать ваш bean-компонент Spring - вместо этого вы настраиваете JVM для предоставления интерфейсов RMI на другом интерфейсе. Если бы ваша машина была напрямую подключена к Интернету (т.е. без брандмауэра или чего-то промежуточного), я бы этого не сделал. Если машина находится внутри корпоративной сети, это может быть приемлемым или даже предпочтительным, чтобы решить эту проблему таким образом.