Как определить имя пакетного приложения в Liberty при вызове команды отправки в batchManager

Я новичок в Liberty и пробую функциональность пакетной обработки (352). Я не могу найти это, как меня спросили, ни через поисковые системы, ни через stackoverflow, поэтому я, по-видимому, упускаю что-то явно очевидное...

Я создал простое тестовое приложение в Liberty 8.5.5.9. Он имеет структуру:

  • testbatchEAR
    • testbatchWAR
      • testbatchBatch

EAR был добавлен на сервер с помощью обычного выбора меню «Добавить/удалить».

Теперь я пытаюсь отправить задание из командной строки, используя:

batchManager submit --batchManager=localhost:9443 --user=<> --password=<> --trustSslCertificates --jobXMLName=TestProcessor.xml --applicationName=testbatch

И я получаю обратно сообщение (усеченное):

Error: Server returned HTTP response code: 500 for URL: https://localhost:9443/ibm/api/batch/jobinstances: [Error 500:  com.ibm.ws.jbatch.rest.bridge.BatchContainerAppNotFoundException: Failed to load the application context for application testbatch#testbatch.war. Verify the application is installed.

Я пробовал testbatch, testbatchEAR, testbatchWAR, но из части сообщения «testbatch#testbatch.war» похоже, что он просто использует одно и то же имя для EAR и WAR, что я не думаю, что это возможно, Это?

Какую часть этого мне не хватает? Это должно быть прямо перед моим лицом, но каждый пример или решение, которое я нахожу, использует голую ВОЙНУ, чего я не могу сделать. Есть ли где-нибудь в свободе, где я могу найти имя приложения? Должен ли я где-то определять имена (server.xml?)?

Заранее спасибо!

* Изменить: дополнительная информация *

Если я запускаю его из раздела «Конфигурации запуска Eclipse»> «Пакетное задание Java EE», он запускает его, и выполнение listJobs в пакетном менеджере показывает имя приложения как testbatchEAR#testbatchWAR.war.

Итак, я думаю, настоящий вопрос, который у меня есть, заключается в том, как я могу поместить это имя в параметр --applicationName для batchManager.bat? Он берет и делает из этого #.войну. Я пытался ввести полное имя из listJobs, но он не позволяет использовать символ "#"...


person Mike    schedule 01.09.2016    source источник
comment
как выглядит элемент <application> или <enterpriseApplication> в вашем файле server.xml?   -  person Andy Guibert    schedule 01.09.2016
comment
@aguibert ‹enterpriseApplication id=testbatchEAR location=testbatchEAR.ear name=testbatchEAR/›. Это запускает приложение в обычном режиме. Если я попытаюсь изменить имя, вдруг он не сможет найти ухо в локации.   -  person Mike    schedule 01.09.2016
comment
Я считаю, что вам нужно указать applicationName EAR и имя компонента (с параметром --componentName) файла WAR. Из справки: componentName Идентифицирует компонент EJB в модуле EJB пакетного приложения.   -  person DFollis    schedule 01.09.2016
comment
@DFollis К сожалению, это пропускает уровень и, кроме того, является странным справочным сообщением, поскольку созданный пакетный проект на самом деле является служебным проектом! Однако вывод заставил меня более внимательно изучить справочные документы, и я, по-видимому, пропустил --moduleName. Добавление --moduleName=testbatchWAR.war дало правильное имя testbatchEAR#testbatchWAR.war, и позвольте мне отправить! Поскольку это был ваш вклад, который привел меня туда, если вы хотите поместить информацию --moduleName в качестве ответа, я приму ее.   -  person Mike    schedule 01.09.2016


Ответы (1)


Укажите оба параметра --applicationName и --moduleName в приложении EAR.

(Как вы обнаружили), в случае, когда пакетное приложение упаковано в WAR внутри EAR, вам, как правило, придется указать как --applicationName, так и --moduleName. , например:

batchManager submit --batchManager=localhost:9443 ... --applicationName=testbatch --moduleName=testbatchWAR.war ...

Укажите только --applicationName в приложении WAR

Вы, возможно, видели примеры, в которых требуется только --applicationName, например. здесь.

Этот синтаксис работает в том случае, если пакетное приложение упаковано как WAR (но не как WAR внутри EAR).

Имя служебного проекта здесь не имеет значения, и нет EJB, поэтому не имеет значения --componentName.

В документе упоминается это здесь в разделе:

POST /ibm/api/batch/jobinstances

...

applicationName идентифицирует пакетное приложение. Это необходимо, если не указано имя модуля, и в этом случае имя приложения получается из имени модуля путем обрезки суффикса .war или .jar имени модуля. Например, если вы не укажете applicationName и moduleName=SimpleBatchJob.war, то applicationName по умолчанию будет SimpleBatchJob.

ModuleName идентифицирует модуль в пакетном приложении, содержащем артефакты задания, например JSL. Задание отправляется в контексте компонента модуля. Имя модуля требуется, если не указано имя приложения, и в этом случае имя модуля получается из имени приложения путем добавления .war к имени приложения. Например, если вы укажете applicationName=SimpleBatchJob и не укажете moduleName, тогда moduleName по умолчанию будет SimpleBatchJob.war.

Но если вы создаете и веб-проект, и проект EAR в таком инструменте, как WDT, вы не сможете легко дать проектам одинаковые имена (поскольку они будут конфликтовать), так что это действительно работает только хорошо в случае, если нет отдельного проекта EAR. Когда существует проект EAR, вам нужны оба параметра.

person Scott Kurz    schedule 06.09.2016