2008-08-06 5 views
16

Ich versuche, meine Provider davon zu überzeugen, ANT anstelle von Rational Application Development zu verwenden, damit jeder die Lösung jederzeit und an jedem beliebigen Ort neu kompilieren, erneut überprüfen und implementieren kann. : PBeispiel einer build.xml für eine EAR, die in WebSphere 6 implementiert

Ich startete eine build.xml für ein Projekt, das eine JAR-Datei generiert, aber dort gestoppt und ich brauche echte Beispiele, um Notizen zu vergleichen. Meine guten Freunde! Ich habe niemanden in der Nähe, der darüber spricht!

Das ist meine build.xml so weit.

(*) bearbeiten ich meine Frage mit Sitz in den suggestion von pastebin.ca

Antwort

14

Meine Umwelt zu verwenden: Fedora 8; WAS 6.1 (wie mit Rational Application Developer 7 installiert)

Die Dokumentation ist in diesem Bereich sehr dürftig und es mangelt an praktischen Beispielen.

die WebSphere Application Server verwenden (WAS) Ant-Tasks

wie hier beschrieben ausführen zu können, müssen Sie sie von Ihrem Server Profil ist-Verzeichnis mit dem ws_ant.sh oder ws_ant laufen. Fledermaus Befehle.

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

Befehl:

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

Ein Bereitstellungsskript

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

Hinweise:

  • Sie können dies nur einmal laufen! Sie können nicht installieren, wenn der App-Name verwendet wird - siehe andere Aufgaben wie wsUninstallApp
  • Es wird wahrscheinlich nicht die App starten entweder
  • Sie müssen dies auf dem Server ausgeführt werden und das Skript ist ziemlich zerbrechlich

Alternativen

würde ich wahrscheinlich Java Management Extensions verwenden (JMX). Sie könnten ein Datei-Upload-Servlet schreiben, das eine EAR akzeptiert und die Bereitstellungs-MBeans zum Bereitstellen der EAR auf dem Server verwendet. Sie würden einfach die Datei über HTTP POST. Dies würde jegliche WAS-API-Abhängigkeiten auf Ihrem Dev/Build-Rechner vermeiden und könnte unabhängig von einem einzelnen Projekt sein.

+1

Zusätzliche Informationen und Proben hier: http://illegalargumentexception.blogspot.com/2008/08/ant-automated-deployment-to-websphere.html – McDowell

+0

Die WAS Deployment JMX MBeans können nicht von einer Remote-JSE-App verwendet werden? (vorausgesetzt, libs auf dem Klassenpfad, natürlich) – bluefoot

+0

@bluefoot Ich weiß es nicht/erinnere mich - Ich schrieb dies ~ 5 Jahren - aber ich nehme an, Sie müssten die Bytes auf den Server, um einen lokalen Pfad zu bieten die [AppManagement] (http://pic.dhe.ibm.com/infocenter/wasinfo/v6r1/topic/com.ibm.websphere.javadoc.doc/public_html/mbeandocs/AppManagement.html) MBean sowieso. – McDowell

4

ein guter Startpunkt, könnte dies maven pluggin sein, nicht für den Einsatz, oder vielleicht ja, aber dieser Maven ist über Ameisen-Aufgabe gebaut. Wenn Sie WAS5 + Plugin + Mojo.zip \ src \ main \ scripts \ was5.build.xml sehen

Oder wie gesagt "McDowell", können Sie "WebSphere Application Server (WAS) Ant-Aufgaben" aber direkt als ANT verwenden Aufgabe.

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

Ein weiterer nützlicher Link könnte this sein.

0

Wenn Sie nur herumspielen möchten, warum verwenden Sie nicht die Netbeans IDE, um Ihre Ear-Dateien zu generieren. Wenn Sie ein Enterprise-Projekt erstellen, generiert es automatisch die ant-Dateien für Sie. Gut für das Prototyping und einfach loslegen :-)

Es gibt sogar ein Plugin, das eine automatisierte Bereitstellung ermöglicht, aber das scheint sehr shakey!

6

Hier sind einige der gleichen Funktionen, wenn Sie die WAS-Ant-Tasks nicht verfügbar haben oder die Datei was_ant.bat nicht ausführen möchten. Dies beruht auf wsadmin.bat, das im Pfad vorhanden ist.

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

Verwandte Themen