Как настроить встроенный glassfish 3.1 для использования альтернативного порта для JNDI до 3700 - PullRequest
4 голосов
/ 26 мая 2011

У меня есть тест, который успешно использует встроенную стеклянную рыбку для проверки развертывания JCA.

Однако существует конфликт с работающей версией GlassFish 2.1, которая уже использует порт 3700.

Как настроить встроенный объект GlassFish для использования альтернативного порта для службы имен? В идеале это можно настроить из теста.

Это текущий тестовый код,

    GlassFishRuntime gfRuntime = GlassFishRuntime.bootstrap();
    GlassFish glassfish = gfRuntime.newGlassFish();
    glassfish.start();

    deployJca(glassfish);

    // Do tests on object acquired from JNDI.

    glassfish.stop();
    gfRuntime.shutdown();

Исключение составляет

Caused by: org.omg.CORBA.COMM_FAILURE: SEVERE: IOP00410016: Unable to create IIOP listener on the specified host all interfaces and port 3,700  vmcid: OMG  minor code: 16  completed: No
Caused by: java.net.BindException: Address already in use: bind

Ответы [ 2 ]

2 голосов
/ 27 мая 2011

Javadoc для GlassFishRutime.newGlassFish (GlassFishProperties) и Javadoc для GlassFishRuntime.bootstrap (BootstrapProperties) немного нуждаются в детализации

Существует опция '--domainproperties', описанная в на странице справки asadmin create-domain . Одно из свойств, которое вы можете установить, называется orb.listener.port. Это может быть полезно для решения этой проблемы. Я также заметил, что файл domain.xml использует системные свойства для определений портов (откройте файл domain.xml и найдите «IIOP_LISTENER_PORT»). Я предполагаю, что одна из этих двух строк будет ключом для свойства BootstrapProperties или GlassFishProperties, которое будет выполнять то, что вы хотите.

1 голос
/ 30 октября 2012

Я получил следующее решение (и некоторые полезные методы):

public synchronized CommandResult runCommand(String command, String... parameters)
throws GlassFishException {   
  CommandRunner runner = this.gfInstance.getCommandRunner();
  CommandResult result = runner.run(command, parameters);
  checkCommandResult(command, result);
  return result;
}
private void checkCommandResult(String cmd, CommandResult result) {
  LOG.info("Command: {}\n  Result.status:\n  {}\n  Result.out:\n  {}\n  Result.failCause:\n  {}\n", 
  new Object[] {cmd, result.getExitStatus(), result.getOutput(), result.getFailureCause()});
  if (result.getExitStatus().ordinal() != 0) {
    throw new IllegalStateException("Command '" + cmd + "' was unsuccessful: " 
    + result.getOutput(),
    result.getFailureCause());
}

Тогда я могу вызвать почти все, как с командой asadmin: Пример:

runCommand("list", "configs.config.server-config.iiop-service.iiop-listener");

выдаёт в лог:

  Result.status:
  SUCCESS
  Result.out:
  PlainTextActionReporterSUCCESSDescription: list AdminCommandnull
    configs.config.server-config.iiop-service.iiop-listener.SSL
    configs.config.server-config.iiop-service.iiop-listener.SSL_MUTUALAUTH
    configs.config.server-config.iiop-service.iiop-listener.orb-listener-1

  Result.failCause:
  null

А затем вы снова просматриваете domain.xml и устанавливаете все, что хотите: http://embedded -glassfish.java.net / domain.xml Например, при инициализации EGF я вызываю это перед развертыванием и после запуска экземпляра:

runCommand("set", 
 "configs.config.server-config.iiop-service.iiop-listener.orb-listener-1.port=" + 50000);
runCommand("set", 
 "configs.config.server-config.iiop-service.iiop-listener.SSL.port=" + 50001);
runCommand("set", 
 "configs.config.server-config.iiop-service.iiop-listener.SSL_MUTUALAUTH.port=" + 50002);
...