Пример build.xml для EAR, который развертывается в WebSphere 6

Я пытаюсь убедить своих провайдеров использовать ANT вместо Rational Application Development, чтобы любой мог перекомпилировать, перепроверить, повторно развернуть решение в любом месте, в любое время и так или иначе. :П

Я запустил build.xml для проекта, который генерирует файл JAR, но на этом остановился, и мне нужны реальные примеры для сравнения заметок. Мои хорошие друзья! У меня нет никого, кто бы мог об этом поговорить!

Пока это мой build.xml.

(*) Я отредактировал свой вопрос на основе предложение, чтобы использовать pastebin.ca

Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
22
0
23 369
4
Перейти к ответу Данный вопрос помечен как решенный

Ответы 4

Ответ принят как подходящий

Моя среда: Fedora 8; WAS 6.1 (как установлено с Rational Application Developer 7)

Документация в этой области очень скудная и практических примеров мало.

Использование задач Ant на сервере приложений WebSphere (WAS)

Для запуска, как описано здесь, вам необходимо запустить их из каталога bin профиль вашего сервера с помощью команд ws_ant.sh или ws_ant.bat.

<?xml version = "1.0"?>
<project name = "project" default = "wasListApps" basedir = ".">
    <description>
        Script for listing installed apps.
        Example run from:
        /opt/IBM/SDP70/runtimes/base_v61/profiles/AppSrv01/bin
    </description>

    <property name = "was_home"
        value = "/opt/IBM/SDP70/runtimes/base_v61/">
    </property>
    <path id = "was.runtime">
        <fileset dir = "${was_home}/lib">
            <include name = "**/*.jar" />
        </fileset>
        <fileset dir = "${was_home}/plugins">
            <include name = "**/*.jar" />
        </fileset>
    </path>
    <property name = "was_cp" value = "${toString:was.runtime}"></property>
    <property environment = "env"></property>

    <target name = "wasListApps">
        <taskdef name = "wsListApp"
            classname = "com.ibm.websphere.ant.tasks.ListApplications"
            classpath = "${was_cp}">
        </taskdef>
        <wsListApp wasHome = "${was_home}" />
    </target>

</project>

Команда:

./ws_ant.sh -buildfile ~/IBM/rationalsdp7.0/workspace/mywebappDeploy/applist.xml

Скрипт развертывания

<?xml version = "1.0"?>
<project name = "project" default = "default" basedir = ".">
<description>
Build/Deploy an EAR to WebSphere Application Server 6.1
</description>

    <property name = "was_home" value = "/opt/IBM/SDP70/runtimes/base_v61/" />
    <path id = "was.runtime">
        <fileset dir = "${was_home}/lib">
            <include name = "**/*.jar" />
        </fileset>
        <fileset dir = "${was_home}/plugins">
            <include name = "**/*.jar" />
        </fileset>
    </path>
    <property name = "was_cp" value = "${toString:was.runtime}" />
    <property environment = "env" />
    <property name = "ear" value = "${env.HOME}/IBM/rationalsdp7.0/workspace/mywebappDeploy/mywebappEAR.ear" />

    <target name = "default" depends = "deployEar">
    </target>

    <target name = "generateWar" depends = "compileWarClasses">
        <jar destfile = "mywebapp.war">
            <fileset dir = "../mywebapp/WebContent">
            </fileset>
        </jar>
    </target>

    <target name = "compileWarClasses">
        <echo message = "was_cp=${was_cp}" />
        <javac srcdir = "../mywebapp/src" destdir = "../mywebapp/WebContent/WEB-INF/classes" classpath = "${was_cp}">
        </javac>
    </target>

    <target name = "generateEar" depends = "generateWar">
        <mkdir dir = "./earbin/META-INF"/>
        <move file = "mywebapp.war" todir = "./earbin" />
        <copy file = "../mywebappEAR/META-INF/application.xml" todir = "./earbin/META-INF" />
        <jar destfile = "${ear}">
            <fileset dir = "./earbin" />
        </jar>
    </target>

    <!-- http://publib.boulder.ibm.com/infocenter/wasinfo/v6r1/index.jsp?topic=/com.ibm.websphere.javadoc.doc/public_html/api/com/ibm/websphere/ant/tasks/package-summary.html -->
    <target name = "deployEar" depends = "generateEar">
        <taskdef name = "wsInstallApp" classname = "com.ibm.websphere.ant.tasks.InstallApplication" classpath = "${was_cp}"/>
        <wsInstallApp ear = "${ear}" 
            failonerror = "true" 
            debug = "true" 
            taskname = ""
            washome = "${was_home}" />
    </target>

</project>

Примечания:

  • Вы можете запустить это только один раз! Вы не можете установить, если имя приложения используется - см. Другие задачи, такие как wsUninstallApp
  • Вероятно, он тоже не запустит приложение
  • Вам нужно запустить это на сервере, и сценарий довольно хрупкий

Альтернативы

Я бы, наверное, использовал Java Management Extensions (JMX). Вы можете написать сервлет загрузки файлов, который принимает EAR и использует MBeans развертывания для развертывания EAR на сервере. Вы бы просто отправили файл через HTTP. Это позволит избежать каких-либо зависимостей API WAS на вашем компьютере для разработки / сборки и может быть независимым от какого-либо одного проекта.

Дополнительная информация и образцы здесь: незаконныйargumentexception.blogspot.com/2008/08/…

McDowell 10.01.2009 21:42

Развертывание WAS JMX MBeans не может использоваться удаленным приложением JSE? (конечно, при условии наличия библиотек в пути к классам)

bluefoot 15.04.2013 18:00

@bluefoot Я не знаю / помню - я написал это ~ 5 лет назад - но я предполагаю, что вам все равно нужно будет передать байты на сервер, чтобы предоставить локальный путь к Управление приложениями MBean.

McDowell 15.04.2013 19:05

хорошая отправная точка, может быть этот плагин maven, не для его использования, или, может быть, да, но этот maven построен поверх задачи ant. Если вы видите WAS5 + Plugin + Mojo.zip \ src \ main \ scripts \ was5.build.xml

Или, как сказал «МакДауэлл», вы можете использовать «задачи Ant WebSphere Application Server (WAS)», но непосредственно как задачу ANT.

<path id = "classpath">
    <fileset file = "com.ibm.websphere.v61_6.1.100.ws_runtime.jar"/>
</path>

<taskdef name = "wsStartApp" classname = "com.ibm.websphere.ant.tasks.StartApplication" classpathref = "classpath" />
<taskdef name = "wsStopApp" classname = "com.ibm.websphere.ant.tasks.StopApplication" classpathref = "classpath" />
<taskdef name = "wsInstallApp" classname = "com.ibm.websphere.ant.tasks.InstallApplication" classpathref = "classpath" />
<taskdef name = "wsUninstallApp" classname = "com.ibm.websphere.ant.tasks.UninstallApplication" classpathref = "classpath" />

<target name = "startWebApp1" depends = "installEar">
    <wsStartApp wasHome = "${wasHome.dir}" 
                application = "${remoteAppName}" 
                server = "${clusterServerName}" 
                conntype = "${remoteProdConnType}" 
                host = "${remoteProdHostName}" 
                port = "${remoteProdPort}" 
                user = "${remoteProdUserId}" 
                password = "${remoteProdPassword}" />
</target>

<target name = "stopWebApp1" depends = "prepare">
    <wsStopApp wasHome = "${wasHome.dir}"
                application = "${remoteAppName}"
                server = "${clusterServerName}"
                conntype = "${remoteConnType}"
                host = "${remoteHostName}"
                port = "${remotePort}"
                user = "${remoteUserId}"
                password = "${remotePassword}"/>
</target>

<target name = "uninstallEar" depends = "stopWebApp1">
    <wsUninstallApp wasHome = "${wasHome.dir}"
                    application = "${remoteAppName}"
                    options = "-cell uatNetwork -cluster DOL"
                    conntype = "${remoteConnType}"
                    host = "${remoteHostName}"
                    port = "${remoteDmgrPort}"
                    user = "${remoteUserId}"
                    password = "${remotePassword}"/>
</target>

<target name = "installEar" depends = "prepare">
    <wsInstallApp ear = "${existingEar.dir}/${existingEar}" 
                  wasHome = "${wasHome.dir}" 
                  options = "${install_app_options}"
                  conntype = "${remoteConnType}" 
                  host = "${remoteHostName}" 
                  port = "${remoteDmgrPort}" 
                  user = "${remoteUserId}" 
                  password = "${remotePassword}" />
</target>

Еще одна полезная ссылка может быть это.

Если вы просто хотите поиграть, почему бы не использовать среду IDE netbeans для создания ваших файлов для ушей. Если вы создаете корпоративный проект, он автоматически сгенерирует для вас файлы ant. Подходит для прототипирования и только для начала :-)

Есть даже плагин was, который позволяет автоматическое развертывание, но это кажется очень шатким!

Вот некоторые из тех же функций, если у вас нет доступных задач WAS ant или вы не хотите запускать was_ant.bat. Это зависит от wsadmin.bat, существующего в пути.

<property name = "websphere.home.dir" value = "${env.WS6_HOME}" />
<property name = "was.server.name" value = "server1" />
<property name = "wsadmin.base.command" value = "wsadmin.bat" />

<property name = "ws.list.command" value = "$AdminApp list" />
<property name = "ws.install.command" value = "$AdminApp install" />
<property name = "ws.uninstall.command" value = "$AdminApp uninstall" />
<property name = "ws.save.command" value = "$AdminConfig save" />
<property name = "ws.setManager.command" value = "set appManager [$AdminControl queryNames cell=${env.COMPUTERNAME}Node01Cell,node=${env.COMPUTERNAME}Node01,type=ApplicationManager,process=${was.server.name},*]" />
<property name = "ws.startapp.command" value = "$AdminControl invoke $appManager startApplication" />
<property name = "ws.stopapp.command" value = "$AdminControl invoke $appManager stopApplication" />

<property name = "ws.conn.type" value = "SOAP" />
<property name = "ws.host.name" value = "localhost" />
<property name = "ws.port.name" value = "8880" />
<property name = "ws.user.name" value = "username" />
<property name = "ws.password.name" value = "password" />

<property name = "app.deployed.name" value = "${artifact.filename}" />
<property name = "app.contextroot.name" value = "/${artifact.filename}" />

<target name = "websphere-list-applications">
    <exec dir = "${websphere.home.dir}/bin" executable = "${wsadmin.base.command}" output = "waslist.txt" logError = "true">
        <arg line = "-conntype ${ws.conn.type}" />
        <arg line = "-host ${ws.host.name}" />
        <arg line = "-port ${ws.port.name}" />
        <arg line = "-username ${ws.user.name}" />
        <arg line = "-password ${ws.password.name}" />
        <arg line = "-c" />
        <arg value = "${ws.list.command}" />
    </exec>
</target>

<target name = "websphere-install-application" depends = "websphere-uninstall-application">
    <exec executable = "${websphere.home.dir}/bin/${wsadmin.base.command}" logError = "true" outputproperty = "websphere.install.output" failonerror = "true">
        <arg line = "-conntype ${ws.conn.type}" />
        <arg line = "-host ${ws.host.name}" />
        <arg line = "-port ${ws.port.name}" />
        <arg line = "-username ${ws.user.name}" />
        <arg line = "-password ${ws.password.name}" />
        <arg line = "-c" />
        <arg value = "${ws.install.command} ${dist.dir}/${artifact.filename}.war {-appname ${app.deployed.name} -server ${was.server.name} -contextroot ${app.contextroot.name}}" />
        <arg line = "-c" />
        <arg value = "${ws.save.command}" />
        <arg line = "-c" />
        <arg value = "${ws.setManager.command}" />
        <arg line = "-c" />
        <arg value = "${ws.startapp.command} ${app.deployed.name}" />
        <arg line = "-c" />
        <arg value = "${ws.save.command}" />
    </exec>
    <echo message = "${websphere.install.output}" />
</target>

<target name = "websphere-uninstall-application">
    <exec executable = "${websphere.home.dir}/bin/${wsadmin.base.command}" logError = "true" outputproperty = "websphere.uninstall.output" failonerror = "false">
        <arg line = "-conntype ${ws.conn.type}" />
        <arg line = "-host ${ws.host.name}" />
        <arg line = "-port ${ws.port.name}" />
        <arg line = "-username ${ws.user.name}" />
        <arg line = "-password ${ws.password.name}" />
        <arg line = "-c" />
        <arg value = "${ws.setManager.command}" />
        <arg line = "-c" />
        <arg value = "${ws.stopapp.command} ${app.deployed.name}" />
        <arg line = "-c" />
        <arg value = "${ws.save.command}" />
        <arg line = "-c" />
        <arg value = "${ws.uninstall.command} ${app.deployed.name}" />
        <arg line = "-c" />
        <arg value = "${ws.save.command}" />
    </exec>
    <echo message = "${websphere.uninstall.output}" />
</target>

Другие вопросы по теме