作者
Ant 提供許多選用任務,用於開發 1.x 和 2.x Enterprise Java Beans (EJBs)。一般而言,這些任務特定於特定廠商的 EJB Server。
這些任務支援
現在,BEA 和 IBM 等廠商提供自訂 Ant 任務,以搭配其特定產品使用。更重要的是,EJB 3.0 使整個流程過時。因此,這些任務的開發實際上已凍結。歡迎回報錯誤,更歡迎提供修補程式,但無需急於新增對新應用程式伺服器的支援。沒有人應該撰寫新的 EJB 2.x 應用程式,更不用說新的 EJB 2.x 伺服器。
任務 | 應用程式伺服器 | |
---|---|---|
blgenclient | Borland Application Server 4.5 和 5.x | |
iplanet-ejbc | iPlanet Application Server 6.0 | |
ejbjar | 巢狀元素 | |
borland | Borland Application Server 4.5 和 5.x | |
iPlanet | iPlanet Application Server 6.0 | |
jboss | JBoss | |
jonas | JOnAS 2.4.x 和 2.5 | |
weblogic | WebLogic 5.1 至 7.0 | |
websphere | IBM WebSphere 4.0 | |
orion | IronFlare (Oracle) Orion Application Server 2.0.6 |
ddcreator
會將一組 WebLogic 文字化部署描述檔編譯成序列化 EJB 部署描述檔。要編譯哪些文字化描述檔的選擇,是根據標準 Ant 的 include
和 exclude
選擇機制。
屬性 | 說明 | 必要 |
---|---|---|
描述符 | 這是選擇描述符的基礎目錄。 | 是 |
dest | 序列化部署描述符將寫入的目錄 | 是 |
classpath | 這是用來執行底層 WebLogic ddcreator 工具的類別路徑。這必須包含 weblogic.ejb.utils.DDCreator 類別 |
否 |
<ddcreator descriptors="${dd.dir}" dest="${gen.classes}" classpath="${descriptorbuild.classpath}"> <include name="*.txt"/> </ddcreator>
ejbc
任務將執行 WebLogic 的 ejbc 工具。此工具將採用序列化部署描述符,檢查各種 EJB 介面和 bean 類別,然後產生在 WebLogic EJB 容器中部署 bean 所需的支援類別。這將包括 RMI stub 和 skeleton,以及實作 bean 的 home 和 remote 介面的類別。
執行此工具的 Ant 任務能夠在單一作業中編譯多個 bean。要編譯的 bean 是透過包含其序列化部署描述符來選擇。標準 Ant include
和 exclude
建構可以用来選擇要包含的部署描述符。
檢查每個描述符以確定產生的類別是否過時且需要重新產生。序列化部署描述符會解除序列化以找出 home、remote 和實作類別。決定對應的原始檔並檢查它們的修改時間。這些時間和序列化描述符本身的修改時間會與產生的類別的修改時間進行比較。如果產生的類別不存在或過時,ejbc 工具會執行以產生新版本。
屬性 | 說明 | 必要 |
---|---|---|
描述符 | 這是選擇序列化部署描述符的基礎目錄。 | 是 |
dest | 寫入產生的類別、RIM stub 和 RMI skeleton 的基礎目錄 | 是 |
manifest | 要寫入的明細檔名稱。此明細檔將包含每個已處理 EJB 的項目 | 是 |
src | 包含 home 介面、remote 介面和 bean 實作類別的原始檔的原始碼樹基礎目錄。 | 是 |
classpath | 此類別路徑必須包含 weblogic.ejbc 類別和正在處理的 bean 的 bean、home 介面、remote 介面等的類別檔。 |
否 |
keepgenerated | 控制 ejbc 是否會保留用來建置類別檔的中間 java 檔。這在除錯時會很有用。 | 否;預設為 false |
<ejbc descriptors="${gen.classes}" src="${src.dir}" dest="${gen.classes}" manifest="${build.manifest}" classpath="${descriptorbuild.classpath}"> <include name="*.ser"/> </ejbc>
編譯 iPlanet Application Server 6.0 的 EJB stub 和 skeleton 的任務。提供標準 EJB 1.1 XML 描述符和 iAS 特定的 EJB 描述符,此任務將產生部署 EJB 到 iAS 所需的 stub 和 skeleton。由於 XML 描述符可以包含多個 EJB,這是使用單一 Ant 任務指定多個 EJB 的便利方法。
對於指定的每個 EJB,任務將在目的地目錄中找到組成 EJB 的三個類別。如果無法在目的地目錄中找到這些類別檔,任務將會失敗。任務也會嘗試在此目錄中找到 EJB stub 和 skeleton。如果找到,將會檢查 stub 和 skeleton 上的時間戳記以確保它們是最新的。只有當找不到這些檔或它們過時時,才會呼叫 iAS ejbc 工具來產生新的 stub 和 skeleton。
屬性 | 說明 | 必要 |
---|---|---|
ejbdescriptor | 標準 EJB 1.1 XML 描述符(通常標題為 ejb-jar.xml)。 |
是 |
iasdescriptor | iAS 特定的 EJB XML 描述符(通常標題為 ias-ejb-jar.xml)。 |
是 |
dest | 這是 RMI stub 和 skeleton 寫入的基礎目錄。此外,每個 bean(主介面、遠端介面和 EJB 實作)的類別檔案都必須在此目錄中找到。 | 是 |
classpath | 產生 EJB stub 和 skeleton 時使用的類別路徑。也可以使用巢狀的 classpath 元素。 |
否;預設為 Ant 啟動時指定的類別路徑 |
keepgenerated | 表示 ejbc 產生的 Java 原始碼檔案會儲存或自動刪除。如果為 yes,原始碼檔案會保留。 |
否;預設為 no |
debug | 表示 ejbc 工具是否應該將額外的除錯陳述記錄到標準輸出。如果為 yes,將產生額外的除錯陳述。 |
否;預設為 no |
iashome | 可用於指定此 iAS 安裝的「主目錄」。這用於尋找 ejbc 工具(如果它未包含在使用者的系統路徑中)。如果指定,它應該參考 [install-location]/iplanet/ias6/ias 目錄。 | 否;預設 ejbc 工具必須在使用者的系統路徑上 |
<iplanet-ejbc ejbdescriptor="ejb-jar.xml" iasdescriptor="ias-ejb-jar.xml" dest="${build.classesdir}" classpath="${ias.ejbc.cpath}"/> <iplanet-ejbc ejbdescriptor="ejb-jar.xml" iasdescriptor="ias-ejb-jar.xml" dest="${build.classesdir}" keepgenerated="yes" debug="yes" iashome="${ias.home}"> <classpath> <pathelement path="."/> <pathelement path="${build.classpath}"/> </classpath> </iplanet-ejbc>
wlrun
任務用於啟動 WebLogic 伺服器。此任務在個別 JVM 中執行 WebLogic 執行個體。許多參數用於控制 WebLogic 執行個體的操作。請注意,此任務(因此 Ant)在 WebLogic 執行個體停止之前不會完成。
屬性 | 說明 | 4.5.1 和 5.1 需要 | 6.0 需要 |
---|---|---|---|
BEAhome | 儲存伺服器設定的 BEAhome 位置。如果存在此屬性,wlrun 會假設伺服器將在 WebLogic 6.0 下執行 |
不適用 | 是 |
home | 安裝 WebLogic 的 WebLogic「主目錄」位置。 | 是 | 是。請注意,這是絕對位置,不相對應於 BEAhome。 |
Domain | 伺服器所屬的網域。 | 不適用 | 是 |
classpath | 與執行 WebLogic Server 的 JVM 一起使用的類別路徑。在 WebLogic 6.0 之前,這通常設定為 WebLogic 啟動類別路徑。在 WebLogic 6.0 下,這應該包含所有 WebLogic jar | 是 | |
wlclasspath | WebLogic Server 使用的 WebLogic 類別路徑。 | 否 | 不適用 |
properties | 用於控制 WebLogic 執行個體的 WebLogic 主目錄中伺服器屬性檔的名稱。 | 是 | |
name | 要執行的 WebLogic 主目錄中 WebLogic 伺服器的名稱。 | 否;預設為 myserver |
|
policy | 要使用的 WebLogic 主目錄中安全性政策檔的名稱。 | 否;預設為 weblogic.policy |
|
username | 用於管理伺服器的管理員使用者名稱 | 不適用 | 否 |
password | 伺服器的管理員密碼 | 是 | |
pkPassword | 私人金鑰密碼,讓伺服器可以解密 SSL 私人金鑰檔 | 否 | |
jvmargs | 傳遞給用於執行 WebLogic 執行個體的 JVM 的其他引數字串。 | 否 | |
weblogicMainClass | WebLogic 的主類別名稱 | 否 |
wlrun
任務支援巢狀 <classpath>
和 <wlclasspath>
元素,以設定各自的類別路徑。
此範例顯示使用 wlrun
在 WebLogic 5.1 下執行伺服器
<wlrun taskname="myserver" classpath="${weblogic.boot.classpath}" wlclasspath="${weblogic.classes}:${code.jars}" name="myserver" home="${weblogic.home}" properties="myserver/myserver.properties"/>
此範例顯示使用 wlrun
在 WebLogic 6.0 下執行 petstore 伺服器
<wlrun taskname="petstore" classpath="${weblogic.classes}" name="petstoreServer" domain="petstore" home="${weblogic.home}" password="petstorePassword" beahome="${bea.home}"/>
wlstop
任務用於停止目前正在執行的 WebLogic 執行個體。若要關閉執行個體,您必須提供使用者名稱和密碼。這些資料將儲存在用於停止執行個體的建置指令碼中。基於安全性考量,此任務因此只適用於開發環境。
此任務適用於大多數版本的 WebLogic,包括 6.0。您需要指定 BEAHome,才能讓此任務在 6.0 下正確運作
屬性 | 說明 | 必要 |
---|---|---|
BEAHome | 此屬性選取 WebLogic 6.0 關閉。 | 否 |
classpath | 與執行 WebLogic 關閉指令的 JVM 一起使用的類別路徑。 | 是 |
user | 用於關閉伺服器的帳戶的使用者名稱 | 是 |
password | user 參數中指定的帳戶密碼。 | 是 |
url | 描述伺服器用於 T3 連線的埠的 URL。例如,t3://127.0.0.1:7001 | 是 |
延遲 | 伺服器停止後幾秒的延遲時間。 | 否;預設為 0(立即關閉) |
wlstop
任務的類別路徑可透過嵌套元素 <classpath>
設定。
此範例顯示 WebLogic 6.0 伺服器的關閉作業
<wlstop classpath="${weblogic.classes}" user="system" url="t3://127.0.0.1:7001" password="foobar" beahome="${bea.home}"/>
此任務旨在支援建立 EJB jar 檔(EJB 1.1 和 2.0)。目前提供支援「純」EJB jar 檔,也就是僅包含使用者產生的類別檔和標準部署描述檔。嵌套元素提供支援特定供應商的部署工具。目前包括
weblogic.ejbc
工具的 WebLogic 5.1/6.0 會話/實體 bean此任務作為目錄掃描任務執行,並對找到的每個部署描述檔執行動作。因此,應設定 includes
和 excludes
,以確保找到所有需要的 EJB 描述檔,但找不到任何應用程式伺服器描述檔。對於找到的每個描述檔,ejbjar
會剖析部署描述檔,以確定實作 bean 的必要類別檔。這些檔案會與部署描述檔組裝成格式良好的 EJB jar 檔。任何需要包含在產生的 jar 檔中的支援檔案,都可以透過嵌套元素 <support>
新增。對於包含在 jar 檔中的每個類別,ejbjar
會掃描任何超級類別或超級介面。這些會新增到產生的 jar 檔中。
如果沒有嵌套的特定供應商部署元素,此任務只會產生一般的 EJB jar。此類 jar 檔通常用作特定供應商部署工具的輸入。對於每個嵌套部署元素,會執行特定供應商的部署工具,以產生準備部署到該供應商的 EJB 容器的 jar 檔。
jar 檔案僅在過期時才會建置。每個部署工具元素都會檢查其目標 jar 檔案,並判斷它是否相對於構成 bean 的類別檔案和部署描述符過期。如果其中任何一個檔案比 jar 檔案新,則會重新建置 jar 檔案,否則會記錄訊息指出 jar 檔案是最新的。
此工作使用 BCEL 函式庫 來擷取所有依賴類別。這表示除了部署描述符中提到的類別之外,這些類別所依賴的任何類別也會自動包含在 jar 檔案中。
Ejbjar
處理多個 bean 的處理,並使用一組命名慣例來決定已產生 EJB jar 的名稱。所使用的命名慣例由 naming 屬性控制。它支援下列值
描述符
這是預設命名方案。已產生 bean 的名稱來自部署描述符的名稱。例如,對於 Account bean,部署描述符會命名為 Account-ejb-jar.xml。供應商特定描述符會使用相同的命名慣例來找出。例如,WebLogic bean 會命名為 Account-weblogic-ejb-jar.xml。在此安排下,部署描述符可以與實作 bean 的程式碼分開,這在相同的 bean 程式碼部署在不同的 bean 中時很有用,而且具有不同的部署特徵。
當您對每個 EJB jar 使用一個 bean,而且您可能會在不同的 bean 中部署相同的 bean 類別時,這個方案很有用,而且具有不同的部署特徵。
ejb-name
此命名方案使用部署描述符中的 <ejb-name>
元素來決定 bean 名稱。在此情況下,描述符通常使用一般描述符名稱,例如 ejb-jar.xml,以及任何相關的供應商特定描述符名稱。例如,如果 <ejb-name>
的值在部署描述符中給定如下
<ejb-jar> <enterprise-beans> <entity> <ejb-name>Sample</ejb-name> <home>org.apache.ant.ejbsample.SampleHome</home>
則已產生 bean 的名稱會是 Sample.jar
當您想要使用標準部署描述符名稱時,這個方案很有用,而且可能與其他 EJB 工具更相容。此方案必須對每個 jar 使用一個 bean。
目錄
在此模式中,已產生 bean jar 的名稱來自包含部署描述符的目錄。部署描述符通常使用標準檔名。例如,如果部署描述符的路徑是 /home/user/dev/appserver/dd/sample,則已產生的 bean 會命名為 sample.jar
當您想要使用標準樣式描述符名稱時,此方案也很有用。通常,當描述符位於與 bean 原始碼相同的目錄中時,它最有幫助,儘管這不是強制性的。此方案可以處理每個 jar 中的 multiple bean。
basejarname
當您想要直接指定產生的 bean jar 名稱時,<ejbjar>
任務所支援的最後一個方案會被使用。在這種情況下,產生的 jar 的名稱是由 basejarname 屬性指定的。由於所有產生的 bean 都會有相同的名稱,因此此任務應該只在每個描述符都在其自己的目錄中時才使用。
當您在每個 jar 中使用 multiple bean,並且只處理一個部署描述符時,此方案最為合適。您通常想要指定 jar 的名稱,而不是從 jar 中的 bean 推導出來。
除了 bean 類別之外,ejbjar
能夠將其他類別新增到產生的 EJB jar 中。這些類別通常是 bean 的類別所使用的支援類別,或是作為 bean 的方法的參數。
在 1.5 以前的 Ant 版本中,ejbjar
使用反射,並嘗試新增 bean 類別的超類別和超介面。為了讓此技術運作,bean 類別必須載入到 Ant 的 JVM 中。由於類別相依性,這並不總是可行的。
自 Ant 1.5 起,此任務使用 BCEL 函式庫直接分析 bean 的類別檔案,而不是將它們載入到 JVM 中。這也允許 ejbjar
新增 bean 所需的所有支援類別,而不仅仅是超類別。
自 Ant 1.5 起,dependency 屬性允許建置檔案控制哪些其他類別會被新增到產生的 jar 中。它有三個可能的值
none—只有 bean 的描述符中所描述的 bean 類別和介面會被新增到 jar 中。
super—這是預設值,並複製原始的
ejbjar
行為,其中超類別和超介面會被新增到 jar 中full—在此模式中,bean 的類別和介面所使用的所有類別都會被新增到 jar 中
super
和 full
值需要 BCEL 函式庫可用。如果它不可用,ejbjar
將會降回對應於 none
值的行為。
屬性 | 說明 | 必要 |
---|---|---|
descriptordir | 用於掃描 EJB 部署描述符的基礎目錄。如果未指定此屬性,則部署描述符必須位於 srcdir 屬性指定的目錄中。 | 否 |
srcdir | 包含組成 bean 的 .class 檔案的基本目錄。包括 home-、remote-、pk- 和 implementation- 類別,以及這些類別所依賴的所有類別。請注意,如果所有檔案都在同一個目錄樹中,則這可以與 descriptordir 相同。 | 是 |
destdir | 將產生之 jar 檔案存放進去的位置。jar 檔案存放於對應其在 descriptordir 名稱空間中位置的目錄中。請注意,此屬性僅在任務產生一般 jar 時使用(亦即未指定特定供應商的部署元件)。 | 是,除非已指定特定供應商的部署元件。 |
cmpversion | 為 1.0或 2.0。 目前僅 JBoss 有 CMP 2.0 實作。 |
否;預設為 1.0 |
naming | 控制用於命名產生之 EJB jar 的命名慣例。請參閱上方的說明。 | 否 |
basejarname | 用於產生之 jar 檔案的基本名稱。如果指定此屬性,一般 jar 檔案名稱會使用此值作為字首(後接 genericjarsuffix 屬性中指定的值),而結果的 EJB jar 檔案(後接嵌套元素中指定的任何字尾)。 | 否 |
basenameterminator | 用於從找到的每個部署描述符名稱中擷取字串的字串值,然後用於尋找相關的部署描述符(例如 WebLogic 描述符)。例如,基本名稱為 .,部署描述符稱為 FooBean.ejb-jar.xml,則會產生基本名稱 FooBean,然後用於尋找 FooBean.weblogic-ejb-jar.xml 和 FooBean.weblogic-cmp-rdbms-jar.xml,以及建立 jar 檔案檔名為 FooBean-generic.jar 和 FooBean-wl.jar。如果指定 basejarname 屬性,則不會使用此屬性。 |
否;預設為 - |
genericjarsuffix | 附加至部署描述符基本名稱的字串值,用於建立一般 EJB jar 檔案的檔名。 | 否;預設為 -generic.jar |
classpath | 解析要新增至 jar 的類別時,會使用此類別路徑。通常,嵌套的部署工具元素也會支援類別路徑,在解析類別時會與此類別路徑合併 | 否 |
flatdestdir | 如果您希望將所有產生的 jar 放置在 destdir 的根目錄,而不是根據部署描述符在 descriptordir 層級中的位置,請將此屬性設定為 true。 |
否 |
依賴關係 | 此屬性控制哪些額外的類別和介面會新增到 JAR 中。請參閱上方的說明 | 否 |
manifest | 明細檔案(如有) | 否 |
除了供應商特定的巢狀元素之外,ejbjar
任務還提供三個巢狀元素。
<classpath>
巢狀元素允許設定類別路徑。當從參考路徑設定類別路徑時,它很有用。在所有其他方面,行為與類別路徑屬性相同。
<dtd>
元素用於指定解析 EJB 部署描述符時要使用的 DTD 的本機位置。使用本機 DTD 比透過網路載入 DTD 快很多。如果您在防火牆後執行 ejbjar
,您甚至可能無法存取遠端 DTD。受支援的供應商特定巢狀元素知道供應商類別層級中所需 DTD 的位置,而且通常這表示不需要 <dtd>
元素。不過,這表示當 Ant 啟動時,供應商的類別層級必須在類別路徑中可用。如果您想要在類別路徑中不需要供應商類別的情況下執行 Ant,您需要使用 <dtd>
元素。
屬性 | 說明 | 必要 |
---|---|---|
publicId | 提供位置的 DTD 的公開識別碼 | 是 |
location | DTD 本機副本的位置。這可以是檔案或從類別路徑載入的資源。 | 是 |
<support>
巢狀元素用於提供要包含在產生的 JAR 中的其他類別(檔案)。<support>
元素是 FileSet,因此它可以參照在其他地方宣告的檔案集,或可以使用適當的 <include>
和 <exclude>
巢狀元素就地定義。支援檔案集中的檔案會新增到產生的 EJB JAR 中,相對位置與它們在支援檔案集中的位置相同。請注意,當 ejbjar
產生多個 JAR 檔案時,支援檔案會新增到每個檔案中。
每個供應商特定巢狀元素都控制特定於該供應商 EJB 容器的可部署 JAR 的產生。每個受支援部署元素的參數在此詳細說明。
jboss
元素會搜尋 JBoss 特定的部署描述符,並將它們新增到最後的 EJB JAR 檔案中。JBoss 有兩個部署描述符
CMP 版本 | 檔案名稱 |
---|---|
CMP 1.0 | jaws.xml |
CMP 2.0 | jbosscmp-jdbc.xml |
JBoss 伺服器使用熱部署,不需要編譯額外的 stub 和 skeleton。
屬性 | 說明 | 必要 |
---|---|---|
destdir | 已產生 JBoss 就緒 jar 檔案的存放基本目錄。Jar 檔案會存放於對應其在 descriptordir 名稱空間中位置的目錄。 | 是 |
genericjarsuffix | 在建置 JBoss 部署 jar 檔案的過程中,會產生一個通用 jar 檔案作為中間步驟。用於產生通用 jar 檔案的字尾並不特別重要,除非想要保留通用 jar 檔案。但它不應與字尾設定相同。 | 否;預設為 -generic.jar |
字尾 | 附加到部署描述符基本名稱的字串值,用於建立 JBoss EJB jar 檔案的檔名。 | 否;預設為 .jar |
keepgeneric | 這會控制用作 ejbc 輸入的通用檔案是否保留。 | 否;預設為 false |
weblogic
元素用於控制 weblogic.ejbc
編譯器,以產生 WebLogic EJB jar 檔案。在 Ant 1.3 之前,尋找 CMP 描述符的方法是使用 ejbjar
命名慣例。因此,如果您的 EJB jar 檔案稱為 Customer-ejb-jar.xml,您的 WebLogic 描述符稱為 Customer-weblogic-ejb-jar.xml,您的 CMP 描述符必須為 Customer-weblogic-cmp-rdbms-jar.xml。此外,WebLogic 描述符中的 <type-storage>
元素必須設定為標準名稱 META-INF/weblogic-cmp-rdbms-jar.xml,因為這是 CMP 描述符在產生的 jar 檔案中對應到的位置。
此架構有一些問題。它不允許在 jar 檔案中定義多個 CMP 描述符,而且它與某些工具產生的部署描述符不相容。
在 Ant 1.3 中,ejbjar
會剖析 WebLogic 部署描述符以找出 CMP 描述符,然後自動包含這些描述符。此行為由 newCMP 屬性控制。請注意,如果您改用新方法來確定 CMP 描述符,您需要更新 WebLogic 部署描述符的 <type-storage>
元素。在上述範例中,您會將其定義為 META-INF/Customer-weblogic-cmp-rdbms-jar.xml。
屬性 | 說明 | 必要 |
---|---|---|
destdir | 已產生 WebLogic 就緒 jar 檔案的存放基本目錄。Jar 檔案會存放於對應其在 descriptordir 名稱空間中位置的目錄。 | 是 |
genericjarsuffix | 在建置 WebLogic 部署 jar 檔案的過程中,會產生一個通用 jar 檔案作為中間步驟。用於產生通用 jar 檔案的字尾並不特別重要,除非想要保留通用 jar 檔案。但它不應與字尾設定相同。 | 否;預設為 -generic.jar |
字尾 | 附加到部署描述符基本名稱的字串值,用於建立 WebLogic EJB jar 檔案的檔名。 | 否;預設為 .jar |
classpath | 執行 WebLogic ejbc 工具時要使用的類別路徑。請注意,此工具通常需要類別路徑中提供組成 bean 的類別。不過,目前這將導致 ejbc 工具在個別 JVM 中執行 | 否 |
wlclasspath | 如果 bean 的本機和遠端介面位於用於執行 weblogic.ejbc 的系統類別路徑中,WebLogic 6.0 將會發出警告。在這種情況下,應使用此屬性(或等效的巢狀元素)設定標準 WebLogic 類別,並使用標準類別路徑屬性尋找本機和遠端介面 |
否 |
keepgeneric | 這會控制用作 ejbc 輸入的通用檔案是否保留。 | 否;預設為 false |
編譯器 | 這允許選擇不同的編譯器來編譯產生的 Java 檔案。例如,可以設定為 jikes以使用 Jikes 編譯器進行編譯。如果未設定此設定,且 build.compiler 屬性設定為 jikes,則會使用 Jikes 編譯器。如果不需要這樣做,可以指定 default值以使用預設編譯器 |
否 |
重建 | 此旗標控制是否總是呼叫 weblogic.ejbc 來建置 jar 檔案。在某些情況下,例如只變更 bean 類別時,可以透過只更換已變更的類別而不重新執行 ejbc 來產生 jar。將此設定設為 false將會減少執行 ejbjar 所需的時間。 |
否;預設為 true |
keepgenerated | 控制 WebLogic 是否保留用於建置已新增至 jar 的類別檔案的產生的 Java 檔案。這在除錯時很有用 | 否;預設為 false |
引數 | 傳遞給 weblogic.ejbc 工具的任何其他引數。 |
否 |
weblogicdtd | 已過時。定義 WebLogic 類別層級結構中 ejb-jar DTD 的位置。如果類別路徑中包含 WebLogic,則不需要這樣做。如果不包含,應使用上面說明的巢狀 <dtd> 元素。如果您選擇使用屬性,應使用巢狀 <dtd> 元素。 |
否 |
wldtd | 已過時。定義涵蓋 WebLogic 特定部署描述符的 weblogic-ejb-jar DTD 的位置。如果類別路徑中包含 WebLogic,則不需要這樣做。如果不包含,應使用上面說明的巢狀 <dtd> 元素。 |
否 |
ejbdtd | 已過時。定義 WebLogic 類別層級結構中 ejb-jar DTD 的位置。如果類別路徑中包含 WebLogic,則不需要這樣做。如果不包含,應使用上面說明的巢狀 <dtd> 元素。 |
否 |
newCMP | 如果將此設定設為 true,將會使用尋找 CMP 描述符的新方法。 |
否;預設為 false |
oldCMP | 已過時 這是 newCMP 的反義詞,應改用 newCMP。 | 否 |
noEJBC | 如果將此屬性設定為 true,WebLogic 的 ejbc 將不會在 EJB jar 上執行。如果您偏好於在部署時執行 ejbc,請使用此屬性。 |
否 |
ejbcclass | 指定 ejbc 編譯器的類別名稱。通常,ejbjar 會根據用於 EJB 的 DTD 來決定適當的類別。然而,WebLogic 6 中的 EJB 2.0 編譯器已在版本 7 中被棄用。與版本 7 搭配使用時,應將此屬性設定為 weblogic.ejbc以避免棄用警告。 |
否 |
jvmargs | 傳遞給執行 weblogic.ejbc 工具的 JVM 的任何其他引數。例如,若要設定記憶體大小,可以將 jvmargs=-Xmx128m |
否 |
jvmdebuglevel | 設定在執行執行 ejbc 的 JVM 時要使用的 weblogic.StdoutSeverityLevel 。設定為 16以避免有關 EJB Home 和 Remotes 在類別路徑中的警告 |
否 |
outputdir | 如果設定,ejbc 會將此目錄作為輸出目的地,而不是 jar 檔案。這允許產生「展開」的 jar 檔案。 | 否 |
weblogic
巢狀元素支援三個巢狀元素。前兩個,<classpath>
和 <wlclasspath>
,用於設定各自的類別路徑。這些巢狀元素在使用參考 ID 設定類別路徑時很有用。最後一個,<sysproperty>
,允許在編譯器執行期間設定 Java 系統屬性。這對於在所有環境中支援 CMP EJB 編譯而言是必要的。
已過時
toplink
元素不再需要。只要將 newCMP 屬性設定為 true
,現在就可以使用標準的 weblogic
元素來建置 Toplink bean。
TopLink
元素用於處理使用 Toplink 進行 CMP 作業的 bean。它是從標準的 weblogic
元素衍生而來,因此它支援相同的屬性集,加上這些額外的屬性
屬性 | 說明 | 必要 |
---|---|---|
toplinkdescriptor | 這指定 descriptordir 目錄中所包含的 TOPLink 部署描述檔檔案的名稱。 | 是 |
toplinkdtd | 這指定 TOPLink DTD 檔案的位置。這可以是檔案路徑或檔案 URL。此屬性不是必需的,但建議使用本機 DTD。 | 否;預設為 www.objectpeople.com 上的 DTD 檔案。 |
此範例顯示 ejbjar
用於使用 WebLogic EJB 容器產生部署 jar 檔案。此範例需要使用命名標準來進行部署描述檔。使用此格式會針對在部署描述檔目錄中找到的每個 *-ejb-jar.xml 變異建立一個 EJB jar 檔案。
<ejbjar srcdir="${build.classes}" descriptordir="${descriptor.dir}"> <weblogic destdir="${deploymentjars.dir}" classpath="${descriptorbuild.classpath}"/> <include name="**/*-ejb-jar.xml"/> <exclude name="**/*weblogic*.xml"/> </ejbjar>
如果 WebLogic 不在 Ant 類別路徑中,以下範例顯示如何指定 WebLogic DTD 的位置。此範例也顯示如何使用巢狀 classpath
元素。
<ejbjar descriptordir="${src.dir}" srcdir="${build.classes}"> <weblogic destdir="${deployment.webshop.dir}" keepgeneric="true" args="-g -keepgenerated ${ejbc.compiler}" suffix=".jar" oldCMP="false"> <classpath> <pathelement path="${descriptorbuild.classpath}"/> </classpath> </weblogic> <include name="**/*-ejb-jar.xml"/> <exclude name="**/*-weblogic-ejb-jar.xml"/> <dtd publicId="-//Sun Microsystems, Inc.//DTD Enterprise JavaBeans 1.1//EN" location="${weblogic.home}/classes/weblogic/ejb/deployment/xml/ejb-jar.dtd"/> <dtd publicId="-//BEA Systems, Inc.//DTD WebLogic 5.1.0 EJB//EN" location="${weblogic.home}/classes/weblogic/ejb/deployment/xml/weblogic-ejb-jar.dtd"/> </ejbjar>
此範例顯示使用 ejbjar
來產生單一佈署 jar,使用 WebLogic EJB 容器。此範例不需要佈署描述符來使用命名標準。這只會建立一個 EJB jar 檔—TheEJBJar.jar。
<ejbjar srcdir="${build.classes}" descriptordir="${descriptor.dir}" basejarname="TheEJBJar"> <weblogic destdir="${deploymentjars.dir}" classpath="${descriptorbuild.classpath}"/> <include name="**/ejb-jar.xml"/> <exclude name="**/weblogic*.xml"/> </ejbjar>
此範例顯示使用 ejbjar
來產生佈署 jar,使用 WebLogic EJB 容器,針對 TOPLink-啟用的實體 bean。此範例不需要佈署描述符來使用命名標準。這只會建立一個 TOPLink-啟用的 EJB jar 檔—Address.jar。
<ejbjar srcdir="${build.dir}" destdir="${solant.ejb.dir}" descriptordir="${descriptor.dir}" basejarname="Address"> <weblogictoplink destdir="${solant.ejb.dir}" classpath="${java.class.path}" keepgeneric="false" toplinkdescriptor="Address.xml" toplinkdtd="file:///dtdfiles/toplink-cmp_2_5_1.dtd" suffix=".jar"/> <include name="**/ejb-jar.xml"/> <exclude name="**/weblogic-ejb-jar.xml"/> </ejbjar>
此最後範例顯示您如何在 WebLogic 6.0 下設定 ejbjar
。它也顯示使用 <support>
元素來新增支援檔案
<ejbjar descriptordir="${dd.dir}" srcdir="${build.classes.server}"> <include name="**/*-ejb-jar.xml"/> <exclude name="**/*-weblogic-ejb-jar.xml"/> <support dir="${build.classes.server}"> <include name="**/*.class"/> </support> <weblogic destdir="${deployment.dir}" keepgeneric="true" suffix=".jar" rebuild="false"> <classpath> <pathelement path="${build.classes.server}"/> </classpath> <wlclasspath> <pathelement path="${weblogic.classes}"/> </wlclasspath> </weblogic> </ejbjar>
websphere
元素搜尋 WebSphere 特定的佈署描述符,並將它們新增到最後的 EJB jar 檔。WebSphere 有兩個特定描述符,用於會話 bean
以及另外兩個用於容器管理實體 bean
在 WebSphere 的觀點,容器程式碼和 stub 的產生稱為佈署。此步驟可以由 websphere
元素執行,作為 jar 產生程序的一部分。如果開關 ejbdeploy 開啟,會針對每個 EJB jar 呼叫 WebSphere 工具組中的 ejbdeploy 工具。很不幸地,此步驟只有在您使用 IBM JDK 時才會運作。否則,rmic(由 ejbdeploy 呼叫)會擲回 ClassFormatError
。請務必在 Ant 使用 Oracle JDK 或 OpenJDK 時關閉 ejbdeploy。
要讓 websphere
元素運作,您必須提供完整的類別路徑,其中包含所有類別,這些類別是反射 bean 類別所需要的。要讓 ejbdeploy 運作,您也必須提供 ejbdeploy 工具的類別路徑,並設定 websphere.home
屬性(請參閱下列範例)。
屬性 | 說明 | 必要 |
---|---|---|
destdir | 產生好的 WebSphere 準備好的 jar 檔所存放的基本目錄。jar 檔會存放於對應它們在 descriptordir 名稱空間中位置的目錄中。 | 是 |
ejbdeploy | 決定是否呼叫 ejbdeploy。當您將此設定為 true時,請務必使用 IBM JDK 執行 Ant。 |
否;預設為 true |
字尾 | 附加到佈署描述符基本名稱的字串值,用於建立 WebSphere EJB jar 檔的檔名。 | 否;預設為 .jar |
keepgeneric | 這會控制用作 ejbdeploy 輸入的通用檔案是否保留。 | 否;預設為 false |
重建 | 這會控制是否呼叫 ejbdeploy,即使沒有變更發生。 | 否;預設為 false |
tempdir | 一個目錄,ejbdeploy 會將暫時檔案寫入其中 | 否;預設為 _ejbdeploy_temp |
dbName dbSchema |
這些選項傳遞給 ejbdeploy。 | 否 |
dbVendor | 此選項傳遞給 ejbdeploy。可透過執行下列指令取得有效選項 <WAS_HOME>/bin/EJBDeploy.[sh/bat] -help這也用於決定 Map.mapxmi 和 Schema.dbxmi 檔案的名稱,例如 Account-DB2UDBWIN_V71-Map.mapxmi 和 Account-DB2UDBWIN_V71-Schema.dbxmi。 |
否 |
codegen quiet novalidate noinform trace use35MappingRules |
這些選項全部傳遞給 ejbdeploy。 | 否;預設為 false(quiet 除外) |
rmicOptions | 此選項傳遞給 ejbdeploy,並將傳遞給 rmic。 | 否 |
此範例顯示 ejbjar
用於為 descriptordir 中所有部署描述產生部署 JAR
<property name="websphere.home" value="${was4.home}"/> <ejbjar srcdir="${build.class}" descriptordir="etc/ejb"> <include name="*-ejb-jar.xml"/> <websphere dbvendor="DB2UDBOS390_V6" ejbdeploy="true" oldCMP="false" tempdir="/tmp" destdir="${dist.server}"> <wasclasspath> <pathelement location="${was4.home}/deploytool/itp/plugins/org.eclipse.core.boot/boot.jar"/> <pathelement location="${was4.home}/deploytool/itp/plugins/com.ibm.etools.ejbdeploy/runtime/batch.jar"/> <pathelement location="${was4.home}/lib/xerces.jar"/> <pathelement location="${was4.home}/lib/ivjejb35.jar"/> <pathelement location="${was4.home}/lib/j2ee.jar"/> <pathelement location="${was4.home}/lib/vaprt.jar"/> </wasclasspath> <classpath> <path refid="build.classpath"/> </classpath> </websphere> <dtd publicId="-//Sun Microsystems, Inc.//DTD Enterprise JavaBeans 1.1//EN" location="${lib}/dtd/ejb-jar_1_1.dtd"/> </ejbjar>
<iplanet>
內嵌元素用於建置 iAS 特定的 stub 和 skeleton,並建構一個 JAR 檔案,可部署到 iPlanet Application Server 6.0。建置程序將永遠決定 EJB stub/skeleton 和 EJB jar 檔案是否是最新的,並將執行所需的最少工作。
與 weblogic
元素類似,EJB 描述的命名慣例最常被用來指定已完成 JAR 檔案的名稱。例如,如果在描述目錄中找到 EJB 描述 ejb/Account-ejb-jar.xml,iplanet
元素將搜尋名為 ejb/Account-ias-ejb-jar.xml 的 iAS 特定 EJB 描述檔案(如果找不到,則任務將會失敗),並將在目標目錄中寫入名為 ejb/Account.jar 的 JAR 檔案。請注意,當 EJB 描述加入 JAR 檔案時,它們會自動重新命名為 META-INF/ejb-jar.xml 和 META-INF/ias-ejb-jar.xml。
當然,此命名行為可透過指定 ejbjar
任務(例如,basejarname、basenameterminator 和 flatdestdir)以及 iplanet
元素(例如,suffix)中的屬性來修改。請參閱適當的文件以取得更多詳細資料。
屬性 | 說明 | 必要 |
---|---|---|
destdir | 將寫入已產生 JAR 檔案的基礎目錄。每個 JAR 檔案都寫入與其在 descriptordir 名稱空間中的位置對應的目錄中。 | 是 |
classpath | 產生 EJB stub 和 skeleton 時使用的類別路徑。如果已指定,classpath 將加到 ejbjar 父任務中指定的類別路徑之前。請注意,內嵌的 classpath 元素也可以使用。 |
否;預設為 ejbjar 父任務中指定的類別路徑 |
keepgenerated | 表示 ejbc 產生的 Java 原始碼檔案會儲存或自動刪除。如果為 yes,原始碼檔案會保留。 |
否;預設為 no |
debug | 表示 ejbc 工具是否應該將額外的除錯陳述記錄到標準輸出。如果為 yes,將產生額外的除錯陳述。 |
否;預設為 no |
iashome | 可用於指定此 iAS 安裝的「主目錄」。這用於尋找 ejbc 工具(如果它未包含在使用者的系統路徑中)。如果指定,它應該參考 [install-location]/iplanet/ias6/ias 目錄。 | 否;預設情況下,ejbc 公用程式必須在使用者的系統路徑中。 |
字尾 | 在建立每個 JAR 時附加到 JAR 檔案名稱的字串值。 | 否;預設為 .jar |
如上所述,iplanet
元素支援其他 <classpath>
巢狀元素。
此範例示範 <iplanet>
巢狀元素的典型用法。它會使用附加到每個標準 EJB 描述詞的「基本名稱」來命名每個 EJB jar。例如,如果處理的名稱為 Account-ejb-jar.xml 的描述詞,則 EJB-JAR 會被命名為 Account.jar
<ejbjar srcdir="${build.classesdir}" descriptordir="${src}"> <iplanet destdir="${assemble.ejbjar}" classpath="${ias.ejbc.cpath}"/> <include name="**/*-ejb-jar.xml"/> <exclude name="**/*ias-*.xml"/> </ejbjar>
此範例示範巢狀 classpath
元素以及其他部分選用屬性的用法。
<ejbjar srcdir="${build.classesdir}" descriptordir="${src}"> <iplanet destdir="${assemble.ejbjar}" iashome="${ias.home}" debug="yes" keepgenerated="yes"> <classpath> <pathelement path="."/> <pathelement path="${build.classpath}"/> </classpath> </iplanet> <include name="**/*-ejb-jar.xml"/> <exclude name="**/*ias-*.xml"/> </ejbjar>
此範例示範 basejarname 屬性的用法。在此情況下,已完成的 EJB jar 會被命名為 HelloWorld.jar。如果可能會找到多個 EJB 描述詞,則必須小心確保已完成的 JAR 檔案不會互相覆寫。
<ejbjar srcdir="${build.classesdir}" descriptordir="${src}" basejarname="HelloWorld"> <iplanet destdir="${assemble.ejbjar}" classpath="${ias.ejbc.cpath}"/> <include name="**/*-ejb-jar.xml"/> <exclude name="**/*ias-*.xml"/> </ejbjar>
此範例示範 dtd
巢狀元素的用法。如果 DTD 的本機副本包含在類別路徑中,則它們會在沒有巢狀元素的情況下自動參照。在 iAS 6.0 SP2 中,這些本機 DTD 會在 [iAS-install-directory]/APPS 目錄中找到。在 iAS 6.0 SP3 中,這些本機 DTD 會在 [iAS-install-directory]/dtd 目錄中找到。
<ejbjar srcdir="${build.classesdir}" descriptordir="${src}"> <iplanet destdir="${assemble.ejbjar}"> classpath="${ias.ejbc.cpath}"/> <include name="**/*-ejb-jar.xml"/> <exclude name="**/*ias-*.xml"/> <dtd publicId="-//Sun Microsystems, Inc.//DTD Enterprise JavaBeans 1.1//EN" location="${ias.home}/APPS/ejb-jar_1_1.dtd"/> <dtd publicId="-//Sun Microsystems, Inc.//DTD iAS Enterprise JavaBeans 1.0//EN" location="${ias.home}/APPS/IASEjb_jar_1_0.dtd"/> </ejbjar>
<jonas>
巢狀元素用於建置 JOnAS 特定的 stub 和 skeleton,這要歸功於特定的 GenIC
工具,並建置一個 JAR 檔案,該檔案可以部署到 JOnAS 應用程式伺服器。建置程序會永遠判斷 EJB stub/skeleton 和 EJB jar 檔案是否是最新的,而且它會執行所需的最少工作。
與 WebLogic 元素一樣,EJB 描述詞的命名慣例最常被用於指定已完成 JAR 檔案的名稱。例如,如果在描述詞目錄中找到 EJB 描述詞 ejb/Account-ejb-jar.xml,則 <jonas>
元素會搜尋一個名為 ejb/Account-jonas-ejb-jar.xml 的 JOnAS 特定 EJB 描述詞檔案,而且一個名為 ejb/Account.jar 的 JAR 檔案會寫入至目標目錄。但是,<jonas>
元素也可以使用 JOnAS 命名慣例。使用與下方相同的範例,EJB 描述詞也可以在描述詞目錄中命名為 ejb/Account.xml (這裡沒有基本名稱終結符)。然後,<jonas>
元素會搜尋一個名為 ejb/jonas-Account.xml 的 JOnAS 特定 EJB 描述詞檔案。此慣例並未嚴格遵循 EJB jar 命名慣例建議,但支援與舊版 JOnAS 的向下相容性。
請注意,當 EJB 描述符加入 JAR 檔案時,它們會自動重新命名為 META-INF/ejb-jar.xml 和 META-INF/jonas-ejb-jar.xml。
當然,此命名行為可以透過指定 ejbjar
任務(例如,basejarname、basenameterminator 和 flatdestdir)以及 iplanet
元素(例如,suffix)中的屬性來修改。有關更多詳細資訊,請參閱適當的文件。
此任務會在 暫存目錄 內建立一個目錄來存放暫存資料。
屬性 | 說明 | 必要 |
---|---|---|
destdir | 將寫入已產生 JAR 檔案的基礎目錄。每個 JAR 檔案都寫入與其在 descriptordir 名稱空間中的位置對應的目錄中。 | 是 |
jonasroot | JOnAS 的根目錄。 | 是 |
classpath | 在產生 EJB 程式碼片段和結構時所使用的類別路徑。如果指定,classpath 會加到父 ejbjar 任務中指定的類別路徑之前(另請參閱下方的 ORB 屬性文件)。請注意,也可以使用巢狀的 classpath 元素。 |
否;預設為 ejbjar 父任務中指定的類別路徑 |
keepgenerated | 如果 GenIC 產生的中間 Java 原始碼檔案必須刪除,則為 true。 |
否;預設為 false |
nocompil | 如果產生的原始碼檔案不必須透過 Java 和 RMI 編譯器編譯,則為 true。 |
否;預設為 false |
novalidation | 如果 XML 部署描述符必須在未驗證的情況下進行剖析,則為 true。 |
否;預設為 false |
javac | 要使用的 Java 編譯器。 | 否;預設為 build.compiler 屬性的值 |
javacopts | 要傳遞給 Java 編譯器的選項。 | 否 |
rmicopts | 要傳遞給 RMI 編譯器的選項。 | 否 |
secpropag | 如果 RMI 結構和程式碼片段必須修改為實作安全內容的隱式傳播,則為 true(交易內容總是會提供)。 |
否;預設為 false |
verbose | 指示是否要使用 -verbose 切換。 | 否;預設為 false |
additionalargs | 將其他引數加入 GenIC。 | 否 |
keepgeneric | 如果用作 GenIC 輸入的通用 JAR 檔案必須保留,則為 true。 |
否;預設為 false |
jarsuffix | 在建立每個 JAR 時附加到 JAR 檔案名稱的字串值。 | 否;預設為 .jar |
orb | 選擇您的 ORB:RMI、 JEREMIE、 DAVID。如果指定,對應的 JOnAS JAR 會自動加入類別路徑。 |
否;預設為類別路徑中存在的 ORB |
nogenic | 如果這個屬性設定為 true,JOnAS 的 GenIC 將不會在 EJB jar 上執行。如果您偏好於在部署時執行 GenIC,請使用這個屬性。 |
否;預設為 false |
如上所述,jonas
元素支援其他 <classpath>
巢狀元素。
這個範例顯示 ejbjar
用於使用 JOnAS EJB 容器產生部署 jar。這個範例需要命名標準用於部署描述符。使用這個格式將會為部署描述符目錄中找到的每個 *-jar.xml 變異建立一個 EJB jar 檔案。
<ejbjar srcdir="${build.classes}" descriptordir="${descriptor.dir}"> <jonas destdir="${deploymentjars.dir}" jonasroot="${jonas.root}" orb="RMI"/> <include name="**/*.xml"/> <exclude name="**/jonas-*.xml"/> <support dir="${build.classes}"> <include name="**/*.class"/> </support> </ejbjar>
這個範例顯示 ejbjar
用於使用 JOnAS EJB 容器產生單一部署 jar。這個範例需要部署描述符使用命名標準。這將只會建立一個 EJB jar 檔案—TheEJBJar.jar。
<ejbjar srcdir="${build.classes}" descriptordir="${descriptor.dir}" basejarname="TheEJBJar"> <jonas destdir="${deploymentjars.dir}" jonasroot="${jonas.root}" suffix=".jar" classpath="${descriptorbuild.classpath}"/> <include name="**/ejb-jar.xml"/> <exclude name="**/jonas-ejb-jar.xml"/> </ejbjar>
orion
元素搜尋 Orion 應用程式伺服器特定的部署描述符,並將它們加入最後的 EJB jar 檔案。Orion 有兩個部署描述符
屬性 | 說明 | 必要 |
---|---|---|
destdir | 產生 jar 檔案存放的基本目錄。Jar 檔案存放於對應於它們在 descriptordir 名稱空間中的位置的目錄中。 | 是 |
<ejbjar srcdir="${build.classes}" descriptordir="${descriptor.dir}" basejarname="TheEJBJar" flatdestdir="true" dependency="super" genericjarsuffix=".jar"> <include name="**/*-ejb-jar.xml"/> <orion destdir="${deploymentjars.dir}"\> </ejbjar>