2008-08-06 6 views
16

J'essaie de convaincre mes fournisseurs d'utiliser ANT au lieu de Rational Application Development pour que tout le monde puisse recompiler, revérifier, redéployer la solution n'importe où, n'importe quand, de toute façon. : PExemple de build.xml pour un fichier EAR déployé dans WebSphere 6

J'ai démarré un build.xml pour un projet qui génère un fichier JAR mais s'est arrêté là et j'ai besoin de vrais exemples pour comparer les notes. Mes bons amis! Je n'ai personne à proximité pour discuter de ça! Il s'agit de mon build.xml jusqu'à présent.

(*) Je modifié ma question dans la base de suggestion utiliser pastebin.ca

Répondre

14

Mon environnement: Fedora 8; WAS 6.1 (installé avec Rational Application Developer 7)

La documentation est très pauvre dans ce domaine et il y a une pénurie d'exemples pratiques.

Utilisation du serveur WAS (WebSphere Application) Tâches Ant

Pour exécuter comme décrit ici, vous devez les exécuter à partir de votre serveur profil bin en utilisant le ws_ant.sh ou ws_ant. bat commandes.

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

commande:

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

Un déploiement Script

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

Notes:

  • Vous ne pouvez exécuter cette fois! Vous ne pouvez pas installer si le nom de l'application est en cours d'utilisation - voir d'autres tâches comme wsUninstallApp
  • Il ne sera probablement pas commencer l'application soit
  • Vous devez exécuter sur le serveur et le script est assez fragile

Alternatives

Je probablement utiliser Java Management Extensions (JMX). Vous pouvez écrire une servlet de téléchargement de fichier qui accepte un fichier EAR et utilise les MBeans de déploiement pour déployer le fichier EAR sur le serveur. Vous devez simplement POSTER le fichier sur HTTP. Cela éviterait toute dépendance de l'API WAS sur votre machine de développement/développement et pourrait être indépendant de tout projet.

+1

Extra info & échantillons ici: http://illegalargumentexception.blogspot.com/2008/08/ant-automated-deployment-to-websphere.html – McDowell

+0

Le WAS déploiement JMX Les MBeans ne peuvent pas être utilisés par une application JSE distante? (en supposant libs sur le classpath, bien sûr) – bluefoot

+0

@bluefoot Je ne sais pas/me souviens - j'ai écrit ceci ~ il y a 5 ans - mais je suppose que vous auriez besoin d'obtenir les octets sur le serveur pour fournir un chemin local à le [AppManagement] (http://pic.dhe.ibm.com/infocenter/wasinfo/v6r1/topic/com.ibm.websphere.javadoc.doc/public_html/mbeandocs/AppManagement.html) MBean de toute façon. – McDowell

4

un bon point de départ, pourrait être ce maven pluggin, pas pour l'utiliser, ou peut-être oui, mais cette maven est construit sur la tâche ant. Si vous voyez WAS5 + Plugin + Mojo.zip \ src \ main \ scripts \ was5.build.xml

Ou comme dit "McDowell", vous pouvez utiliser "tâches Ant WebSphere Application Server (WAS)" mais directement comme ANT tâche.

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

Un autre lien utile pourrait être this.

0

Si vous voulez juste jouer, pourquoi ne pas utiliser l'IDE netbeans pour générer vos fichiers d'oreille. Si vous créez un projet d'entreprise, il générera automatiquement les fichiers ant pour vous. Bon pour le prototypage et juste pour commencer :-)

Il y a même un plugin qui permettait un déploiement automatisé mais cela semble très difficile!

6

Voici une partie de la même fonctionnalité si vous n'avez pas les tâches WAS ant disponibles ou si vous ne voulez pas exécuter was_ant.bat. Cela dépend de wsadmin.bat existant dans le chemin.

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

Questions connexes