5.3 在WAS內布署應用
一般我們使用ear格式在WAS內布署我們的web應用,因此此處和weblogic, tomcat稍稍有點不一樣。
為此,我們做了一個ant腳本用於打包我們的ear。
一個ear文件的格式應該如下:
myEAR
|__ META-INF
|__application.xml
|__myWAR.war
可以看到,一個ear文件:
包含一個META-INF目錄,在該目錄下會有一個application.xml文件。
然後和META-INF目錄同級的地方會有一個.war文件,這個war文件就是標准的war格式的web應用。
5.3.1 application.xml文件
<?xml version="1.0" encoding="UTF-8"?>
<application xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="5"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/application_5.xsd">
<display-name>cbbsEAR</display-name>
<module>
<web>
<web-uri>cbbs.war</web-uri>
<context-root>/cbbs</context-root>
</web>
</module>
</application>
5.3.2 使用Ant打包
實際上我們的ant腳本很簡單,它作了如下幾件事:
1) 用IBM WAS自帶的JDK即IBM JDK編譯我們的工程,確保我們的工程可以被我們的WAS能夠解析。
2) 將我們的工程打成.war文件
<target name="makeWAR" depends="compile">
<jar destfile="${build.dir}/app/ ${war.name}" basedir="${build.dir}" />
</target>
3) 將.war文件與application.xml文件打成.ear文件
<target name="makeEAR" depends="makeWAR">
<ear destfile="${build.dir}/${ear.name}" appxml="${eardescription.file}">
<fileset dir="${build.dir}/app">
<include name="**/*.war" />
</fileset>
</ear>
</target>
下面給出我們完整的Ant腳本,該腳本還使用到了一個外部的build.properties文件用於設置一些常量。
build.properties
websphere.v7.home=D:/IBM/WebSphere/AppServer
project.home=D:/wspace
webAppName=cbbs
war.name=${webAppName}.war
ear.name=${webAppName}EAR.ear
eardescription.file=D:/wspace/${webAppName}/application.xml
build.xml
<?xml version="1.0" encoding="UTF-8"?>
<project default="makeEAR" name="cbbs_build">
<!-- ####################################### CONFIG PROPERTIES ########################################-->
<property file="build.properties" />
<property name="web.home" VALUE="${project.home}/cbbs" />
<property name="src.dir" VALUE="${project.home}/cbbs/src" />
<property name="webcontent.dir" VALUE="${project.home}/cbbs/WebRoot" />
<property name="lib.dir" VALUE="${webcontent.dir}/WEB-INF/lib" />
<property name="extlib" value="${project.home}/${webAppName}/ext-lib" />
<property name="classes.dir" value="${webcontent.dir}/WEB-INF/classes" />
<property name="tld.dir" value="${webcontent.dir}/WEB-INF/tld" />
<property name="build.dir" value="${project.home}/${webAppName}/build" />
<property name="resource.dir" value="${project.home}/${webAppName}/resource" />
<!-- ####################################### CLASSPATH ########################################-->
<path id="classpath">
<pathelement path="${src.dir}" />
<pathelement path="${classes.dir}" />
<fileset dir="${extlib}">
<include name="**/*.jar" />
</fileset>
<fileset dir="${lib.dir}">
<include name="**/*.jar" />
</fileset>
<fileset dir="${websphere.v7.home}\lib">
<include name="**/*.jar" />
</fileset>
<fileset dir="${websphere.v7.home}\plugins">
<include name="**/*.jar" />
</fileset>
</path>
<!-- ####################################### CREATE INITIAL DIRECTORIES ##########################-->
<!-- Creating Initial Directoris -->
<target name="init">
<echo message="Creating init directories..." />
<delete dir="${build.dir}" />
<mkdir dir="${build.dir}" />
<mkdir dir="${build.dir}/app" />
<mkdir dir="${build.dir}/WEB-INF" />
<mkdir dir="${build.dir}/WEB-INF/lib" />
<mkdir dir="${build.dir}/WEB-INF/tld" />
<mkdir dir="${build.dir}/WEB-INF/classes" />
<mkdir dir="${build.dir}/css" />
<mkdir dir="${build.dir}/images" />
<mkdir dir="${build.dir}/js" />
<mkdir dir="${build.dir}/jsp" />
<mkdir dir="${build.dir}/fckeditor" />
<mkdir dir="${build.dir}/userfiles" />
<mkdir dir="${build.dir}/userfiles/image" />
</target>
<!-- ####################################### COMPILE ########################################-->
<target name="compile" depends="init">
<echo message="Calling a compile on all the Java source files" />
<javac destdir="${build.dir}/WEB-INF/classes" srcdir="${src.dir}" debug="true" executable="${websphere.v7.home}\java\bin\javac" compiler="javac1.6" fork="true">
<classpath refid="classpath" />
</javac>
<copy todir="${build.dir}" overwrite="true">
<fileset dir="${webcontent.dir}">
<include name="*.*" />
</fileset>
</copy>
<copy todir="${build.dir}/WEB-INF/" overwrite="true">
<fileset dir="${webcontent.dir}/WEB-INF/">
<include name="*.*" />
</fileset>
</copy>
<copy todir="${build.dir}/jsp" overwrite="true">
<fileset dir="${webcontent.dir}/jsp">
<include name="**/*.*" />
</fileset>
</copy>
<copy todir="${build.dir}/WEB-INF/classes" overwrite="true">
<fileset dir="${resource.dir}">
<include name="**/*.*" />
</fileset>
</copy>
<copy todir="${build.dir}/WEB-INF/lib" overwrite="true">
<fileset dir="${lib.dir}">
<include name="*.*" />
</fileset>
</copy>
<copy todir="${build.dir}/WEB-INF/tld" overwrite="true">
<fileset dir="${tld.dir}">
<include name="**/*.*" />
</fileset>
</copy>
<copy todir="${build.dir}/js" overwrite="true">
<fileset dir="${webcontent.dir}/js">
<include name="**/*.*" />
</fileset>
</copy>
<copy todir="${build.dir}/css" overwrite="true">
<fileset dir="${webcontent.dir}/css">
<include name="**/*.*" />
</fileset>
</copy>
<copy todir="${build.dir}/images" overwrite="true">
<fileset dir="${webcontent.dir}/images">
<include name="**/*.*" />
</fileset>
</copy>
<copy todir="${build.dir}/fckeditor" overwrite="true">
<fileset dir="${webcontent.dir}/fckeditor">
<include name="**/*.*" />
</fileset>
</copy>
</target>
<target name="makeWAR" depends="compile">
<jar destfile="${build.dir}/app/${war.name}" basedir="${build.dir}" />
</target>
<target name="makeEAR" depends="makeWAR">
<ear destfile="${build.dir}/${ear.name}" appxml="${eardescription.file}">
<fileset dir="${build.dir}/app">
<include name="**/*.war" />
</fileset>
</ear>
</target>
</project>
使用IBM WAS自帶的JDK對工程進行編譯
該套Ant腳本其實還可以繼續優化,這個就留給大家了,關鍵是提供給了大家一個思路。
除了上邊所說的涉及到如何打war,如何打ear的核心腳本外,關鍵在於這個“使用WAS自帶的IBM JDK”對工程進行編譯是很 重要的,下面是核心語句,注意紅色加組的部分。
<path id="classpath">
<pathelement path="${src.dir}" />
<pathelement path="${classes.dir}" />
<fileset dir="${extlib}">
<include name="**/*.jar" />
</fileset>
<fileset dir="${lib.dir}">
<include name="**/*.jar" />
</fileset>
<fileset dir="${websphere.v7.home}\lib">
<include name="**/*.jar" />
</fileset>
<fileset dir="${websphere.v7.home}\plugins">
<include name="**/*.jar" />
</fileset>
</path>
<javac destdir="${build.dir}/WEB-INF/classes" srcdir="${src.dir}" debug="true"
executable="${websphere.v7.home}\java\bin\javac" compiler="javac1.6" fork="true">
<classpath refid="classpath" />
</javac>
5.3.3 布署EAR
編譯完後該Ant腳本會產生一個cbbsEAR.ear的文件:
這個文件就是我們用於布署的EAR文件了。
根據下面的步驟一步步來布署我們的ear吧。
點[安裝]
下一步
這步會比較慢,需要慢慢等一會。
下一步下一步到一直到下面這個界面,請一定記住要把我們之前設置的“數據源”與工程中的jdbc的JNDI名進行綁定啊,一 定不要忘。
把“選擇”處的勾打上後,點擊[浏覽]按鈕,選擇我們之前建立的“DataSource”。
點[應用]按鈕後回到繼續布署的界面。
將需要布署的一些選項review一遍並確認無誤後點[完成]按鈕,開始布署。
WAS布署的進度界面
布署完後不要忘記點紅圈處的“保存”啊,要不一切白費。
布署完後,我們的應用的應用程序狀態為“停止”狀態。
選擇我們的應用,點[啟動]按鈕
啟動後我們的應用程序應該為如下狀態
打開一個ie,輸入: http://localhost:9080/cbbs
登錄後進行一些操作,一切正常,WAS安裝設置成功。
結束今天的教程,明天的教程將會著重在使用IBM的HttpServer即IHS如何去結合IBM WebSphere Application Serve做集成。
查看全套教程:http://www.bianceng.cn/Programming/project/201302/35466.htm