Встроенный Glassfish v3:развертывание sun-resources.xml программно завершается с ошибкой
-
16-09-2020 - |
Вопрос
Я хотел бы иметь возможность упаковать свой проект jpa-ejb-web как отдельное приложение, используя встроенный API Glassfish.
Чтобы использовать уровень JPA, мне нужно развернуть конфигурацию sun-resource.xml, что должно быть возможно с помощью команда асадмина add-resources path\to\sun-resources.xml
.У меня есть этот код для этого:
String command = "add-resources";
ParameterMap params = new ParameterMap();
params.add("", "...\sun-resources.xml" );
CommandRunner runner = server.getHabitat().getComponent(CommandRunner.class);
ActionReport report = server.getHabitat().getComponent(ActionReport.class);
runner.getCommandInvocation(command, report).parameters(params).execute();
но Glassfish отказывается от этого:
15-Jul-2010 16:34:12 org.glassfish.admin.cli.resources.AddResources execute
СЕРЬЕЗНЫЙ:Что-то пошло не так при добавлении ресурсов
java.lang.Exception: ...\gfembed6930201441546233570tmp\lib\dtds\sun-resources_1_4.dtd (The system cannot find the path specified)
at org.glassfish.admin.cli.resources.ResourcesXMLParser.initProperties(ResourcesXMLParser.java:163)
at org.glassfish.admin.cli.resources.ResourcesXMLParser.<init>(ResourcesXMLParser.java:109)
at org.glassfish.admin.cli.resources.ResourcesManager.createResources(ResourcesManager.java:67)
at org.glassfish.admin.cli.resources.AddResources.execute(AddResources.java:106)
at com.sun.enterprise.v3.admin.CommandRunnerImpl$1.execute(CommandRunnerImpl.java:305)
at com.sun.enterprise.v3.admin.CommandRunnerImpl.doCommand(CommandRunnerImpl.java:320)
at com.sun.enterprise.v3.admin.CommandRunnerImpl.doCommand(CommandRunnerImpl.java:1176)
at com.sun.enterprise.v3.admin.CommandRunnerImpl.access$900(CommandRunnerImpl.java:83)
at com.sun.enterprise.v3.admin.CommandRunnerImpl$ExecutionContext.execute(CommandRunnerImpl.java:1235)
at com.sun.enterprise.v3.admin.CommandRunnerImpl$ExecutionContext.execute(CommandRunnerImpl.java:1224)
at javaapplication4.Main.main(Main.java:55)
и действительно, нет lib
каталог по указанному пути...
что-то не так в моем коде?(Я использую glassfish-embedded-all-3.0.1.jar)
Спасибо
Решение
Я решил эту проблему, указав встроенную файловую систему для встроенного Glassfish и предварительно заполнив /path/to/my/glassfish/lib/dtds
папка с отсутствующими файлами.
EmbeddedFileSystem.Builder efsb = new EmbeddedFileSystem.Builder();
efsb.autoDelete(false);
efsb.installRoot(new File("/path/to/my/glassfish"), true);
EmbeddedFileSystem efs = efsb.build();
Server.Builder builder = new Server.Builder("test");
builder.embeddedFileSystem(efs);
builder.logger(true);
Server server = builder.build();
server.addContainer(ContainerBuilder.Type.all);
server.start();
и попросить Glassfish не удалять папку в конце выполнения.
Другие советы
Я не уверен, что это возможно, Бег asadmin
Команды с использованием API встроенного сервера Sun GlassFish не упоминает такой вариант использования (передача sun-resources.xml
).
Но я бы использовал предварительно настроенный domain.xml
вместо того, чтобы пытаться развернуть sun-resource.xml
файл, результат должен быть аналогичным.Из Руководство по встроенному серверу Sun GlassFish Enterprise Server v3:
Использование существующего
domain.xml
ФайлИспользование существующего
domain.xml
Файл избегает необходимости настроить встроенный корпоративный сервер программно в вашем приложении.Ваше приложение получает данные конфигурации домена из существующихdomain.xml
файл.Вы можете создать этот файл, используя административные интерфейсы установки не внедренного корпоративного сервера.Чтобы указать существующийdomain.xml
файл, вызовитеinstallRoot
,instanceRoot
, илиconfigurationFile
методEmbeddedFileSystem.Builder
класс или комбинация этих методов.
В документации представлены примеры кода, показывающие, как это сделать (должно быть довольно просто).