Сервер RMI: rmiregistry или LocateRegistry.createRegistry

Вы можете использовать adb для удаления примера предыдущей версии:

unistall old apk

adb -s $device uninstall ${packageName}.debug

тест удаления

adb -s $device uninstall "com.bookings.test"

подключенное к устройству устройство packageName - имя пакета приложения.

Надеюсь, это поможет:)

13
задан Randy Sugianto 'Yuku' 19 September 2008 в 03:19
поделиться

4 ответа

Они - то же самое... rmiregistry отдельная программа, которую можно запустить из командной строки или сценария, в то время как LocateRegistry.createRegistry делает то же самое программно.

, По моему опыту, для "реальных" серверов Вы захотите использовать rmiregistry так, чтобы Вы знали, что это всегда работает независимо от того, запускается ли клиентское приложение. createRegistry очень полезно для тестирования, поскольку можно запустить и остановить реестр от теста по мере необходимости.

7
ответ дан 2 December 2019 в 01:11
поделиться

При использовании Spring для экспорта сервисов RMI, он автоматически запускает реестр, если Вы уже не работаете. См. RmiServiceExporter

0
ответ дан 2 December 2019 в 01:11
поделиться

Если бы Вы пишете автономное JAVA-приложение, Вы хотели бы запустить свой собственный rmiregistry, но если Вы пишете приложение J2EE, которое, очевидно, работает в контейнере J2EE тогда, Вы хотите к "LocateRegistry", поскольку уже существует одна работа сервера приложений!

0
ответ дан 2 December 2019 в 01:11
поделиться

Если мы сначала запустим rmiregistry, RmiServiceExporter зарегистрируется в запущенном rmiregistry. В этом случае мы должны установить для системного свойства java.rmi.server.codebase значение, в котором можно найти класс org.springframework.remoting.rmi.RmiInvocationWrapper_Stub. В противном случае RmiServiceExporter не будет запущен и получит исключение " ClassNotFoundException класс не найден: org.springframework.remoting.rmi.RmiInvocationWrapper_Stub; вложенное исключение: ... "

Если ваш rmi-сервер, rmi-клиент и rmiregistry могут обращаться к одной и той же файловой системе, вы можете захотеть, чтобы системное свойство было автоматически сконфигурировано так, чтобы в общей файловой системе можно было найти spring.jar. Следующие служебные классы и конфигурация Spring показывают, как этого можно достичь.

abstract public class CodeBaseResolver { 
  static public String resolveCodeBaseForClass(Class<?> clazz) {
    Assert.notNull(clazz);
    final CodeSource codeSource = clazz.getProtectionDomain().getCodeSource();
    if (codeSource != null) {
      return codeSource.getLocation().toString();
    } else {
      return "";
    }
  }
}

public class SystemPropertyConfigurer {
  private Map<String, String> systemProperties;
  public void setSystemProperties(Map<String, String> systemProperties) {
    this.systemProperties = systemProperties;
  }

  @PostConstruct
  void init() throws BeansException {
    if (systemProperties == null || systemProperties.isEmpty()) {
      return;
    }
    for (Map.Entry<String, String> entry : systemProperties.entrySet()) {
      final String key = entry.getKey();
      final String value = SystemPropertyUtils.resolvePlaceholders(entry.getValue());
      System.setProperty(key, value);
    }
  }
}


<bean id="springCodeBase" class="org.springframework.beans.factory.config.MethodInvokingFactoryBean">
  <property name="staticMethod" value="xx.CodeBaseResolver.resolveCodeBaseForClass" />
  <property name="arguments">
    <list>
      <value>org.springframework.remoting.rmi.RmiInvocationWrapper_Stub</value>
    </list>
  </property>
</bean>

<bean id="springCodeBaseConfigurer" class="xx.SystemPropertyConfigurer"
  depends-on="springCodeBase">
  <property name="systemProperties">
    <map>
      <entry key="java.rmi.server.codebase" value-ref="springCodeBase" />
    </map>
  </property>
</bean>

<bean id="rmiServiceExporter" class="org.springframework.remoting.rmi.RmiServiceExporter" depends-on="springCodeBaseConfigurer">
  <property name="serviceName" value="XXX" />
  <property name="service" ref="XXX" />
  <property name="serviceInterface" value="XXX" />
  <property name="registryPort" value="${remote.rmi.port}" />
</bean>

В приведенном выше примере показано, как свойство системы устанавливается автоматически только тогда, когда сервер rmi, клиент rmi и реестр rmi могут получить доступ к одной и той же файловой системе. Если это не так или spring база кода используется другим способом (например, HTTP), вы можете изменить CodeBaseResolver в соответствии со своими потребностями.

4
ответ дан 2 December 2019 в 01:11
поделиться
Другие вопросы по тегам:

Похожие вопросы: