Я получил следующее решение (и некоторые полезные методы):
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);