Встроенный Glassfish v3:развертывание sun-resources.xml программно завершается с ошибкой

StackOverflow https://stackoverflow.com/questions/3257332

Вопрос

Я хотел бы иметь возможность упаковать свой проект 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 класс или комбинация этих методов.

В документации представлены примеры кода, показывающие, как это сделать (должно быть довольно просто).

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top