2008-08-06 6 views
16

Estoy tratando de convencer a mis proveedores de utilizar ANT en lugar de Rational Application Development para que cualquier persona pueda recompilar, volver a verificar y volver a implementar la solución en cualquier lugar, en cualquier momento y de todos modos. : PEjemplo de un build.xml para un EAR que se implementa en WebSphere 6

Inicié un build.xml para un proyecto que genera un archivo JAR pero se detuvo allí y necesito ejemplos reales para comparar notas. ¡Mis buenos amigos! ¡No tengo a nadie cerca para chatear sobre esto!

Este es mi build.xml hasta el momento.

(*) He editado mi pregunta basada en el suggestion de utilizar pastebin.ca

Respuesta

14

Mi Medio Ambiente: Fedora 8; WAS 6.1 (como instalado con Rational Application Developer 7)

La documentación es muy pobre en esta área y hay pocos ejemplos prácticos.

Uso del servidor WebSphere Application (WAS) tareas Ant

Para ejecutar tal como se describe aquí, tiene que ejecutar desde el directorio bin del servidor perfil utilizando el ws_ant.sh o ws_ant. bat comandos.

<?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> 

de comando:

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

Un Script de implementación

<?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> 

Notas:

  • Sólo se puede ejecutar esta vez! No se puede instalar si el nombre de la aplicación está en uso - vea otras tareas como wsUninstallApp
  • Es probable que no se inicie la aplicación, ya sea
  • Tiene que ejecutar esto en el servidor y el guión es muy frágil

Alternativas

probablemente me volvería a usar Java Management Extensions (JMX). Podría escribir un servlet de carga de archivos que acepte un EAR y utilice los MBeans de despliegue para implementar el EAR en el servidor. Simplemente enviarías el archivo por HTTP. Esto evitaría cualquier dependencia API WAS en su máquina de desarrollo/desarrollo y podría ser independiente de cualquier proyecto.

+1

Información adicional y muestras aquí: http://illegalargumentexception.blogspot.com/2008/08/ant-automated-deployment-to-websphere.html – McDowell

+0

La WAS JMX despliegue MBeans no puede ser utilizado por una aplicación remota JSE? (asumiendo libs en el classpath, por supuesto) – bluefoot

+0

@bluefoot No sé/recuerdo - escribí esto ~ hace 5 años - pero supongo que necesitaría enviar los bytes al servidor para proporcionar una ruta local a el [AppManagement] (http://pic.dhe.ibm.com/infocenter/wasinfo/v6r1/topic/com.ibm.websphere.javadoc.doc/public_html/mbeandocs/AppManagement.html) MBean de todos modos. – McDowell

4

un buen punto de partida, podría ser este maven pluggin, no para usarlo, o tal vez sí, pero este maven es la tarea de construir sobre la hormiga. Si ve WAS5 + Plugin + Mojo.zip \ src \ main \ scripts \ was5.build.xml

O como dice "McDowell", puede usar "tareas Ant de WebSphere Application Server (WAS)" pero directamente como ANT tarea.

<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> 

Otro enlace útil podría ser this.

0

Si solo quieres jugar, ¿por qué no utilizar Netbeans IDE para generar tus archivos de oído? Si crea un proyecto empresarial, generará automáticamente los archivos ant por usted. Bueno para la creación de prototipos y simplemente para empezar :-)

Incluso hay un plugin que permite el despliegue automatizado, sin embargo, esto parece muy complicado.

6

Aquí tiene algunas de las mismas funcionalidades si no tiene las tareas antis WAS disponibles o si no desea ejecutar was_ant.bat. Esto se basa en wsadmin.bat existente en la ruta.

<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> 

Cuestiones relacionadas