• <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>
  • Studio Application Developer V5

    發表于:2007-05-24來源:作者:點擊數: 標簽:Developerstudioapplication
    本文將幫助您把包含 EJB 和 Struts 的 J2EE Web 應用程序從 VisualAge for Java 遷移到 WebSphere Studio Application Developer 5.0(以下稱為 WebSphere Studio)。本文包含從真實的項目中學到的技巧、注意事項和經驗。 Copyright International Business M
    本文將幫助您把包含 EJB 和 Struts 的 J2EE Web 應用程序從 VisualAge for Java 遷移到 WebSphere Studio Application Developer 5.0(以下稱為 WebSphere Studio)。本文包含從真實的項目中學到的技巧、注意事項和經驗。

    © Copyright International Business Machines Corporation 2003. All rights reserved.

    引言
    雖然有一些關于遷移的循序漸進的好資料,但是多數資料沒有提供足夠的詳盡的建議,例如,如何解決常見的 org.omg.CORBA.MARSHAL 錯誤。本文將幫助您把包含 EJB 和 Struts 的 J2EE Web 應用程序從 VisualAge for Java® 遷移到 WebSphere® Studio Application Developer 5.0(以下稱為 WebSphere Studio)。本文包含從真實的項目中學到的技巧、注意事項和經驗。這些信息有助于新手完成工作并且把中型項目的遷移時間從 2 周縮短到 1 周。

    典型的 Web 應用程序體系結構
    雖然在這里討論應用程序體系結構是不合適的,但是這個體系結構列出了我們在完成遷移任務時必須完成的工作。本文把典型的 J2EE 項目 InterimDB 用作示例。實體 Bean 被用來表示應用程序的域對象。會話 Bean 被用來實現應用程序特有的工作流。添加業務委托層的目的是為了隱藏后端 EJB 系統的實現細節。我們還把 Apache Struts 用作 Web 框架,因為它被廣泛應用于 J2EE 應用程序。以下幾節討論如何把每個層從 VisualAge for Java 遷移到 WebSphere Studio 5.0。

    圖 1. Web 應用程序體系結構
    Web 應用程序體系結構

    遷移 EJB 項目
    這節講述有關在 WebSphere Application Server V4 測試環境中把 EJB 項目從 VisualAge for Java 遷移到 WebSphere Studio V5 的過程和經驗。如果您想了解詳細的說明,請參閱 Migration Guide的第 8 章。

    獲取 EJB 導出工具
    把 EJB 項目從 VisualAge for Java 遷移到 WebSphere Studio 的最好的方法是使用 VisualAge for Java V4 的 EJB 導出工具。如果您有 VisualAge for Java 的以前的版本,那么您需要升級。EJB 導出工具是 VisualAge for Java V4 的標準的功能部件。使用它的方法是按 F2鍵,然后單擊 Add Features,選擇 Export Tool for Enterprise Java Beans 1.1 4.0。如果您的舊的 EJB 項目有一些高級的功能(例如,EJB 關聯)并且它的一個“組的關系有兩個或多個外鍵被映射到相同的兩個或多個表”,那么您必須安裝這個工具的另一個修訂包。您可以從 IBM VisualAge for Java 支持站點下載這個修訂包 Export tool for EJB Fixpack 1.1 Version 4.1.5。

    導出 EJB 1.1 JAR
    在您完成了以上的步驟后,您可以把舊的 EJB 項目作為 EJB 1.1 jar 導出:

    1. 在工作臺的 EJB 頁面中,用鼠標右鍵單擊您要導出的 EJB 組,然后單擊 Export -> EJB 1.1 JAR。您不能導出個別的 bean。
    2. 請確保 .class.java復選框都被選中。
    3. 選擇您的數據庫、導出目錄和 jar 文件名,然后單擊 Finish。

     

    圖 2. 導出 EJB 組
    導出 EJB 組

    通過完成以上的導出過程,您把 EJB 組的所有的模式和映射信息導出到這個 EJB 1.1 jar 文件。

    技巧:沒有別的方法可以從 VisualAge for Java 中導出完整的模式和映射信息。

    把 EJB 1.1 JAR 導入到 WebSphere Studio
    在新的 WebSphere Studio IDE J2EE 透視圖中:

    1. 選擇 File -> Import -> EJB JAR file。
    2. 單擊 Next,然后選擇從 VisualAge for Java 導出的 JAR 文件。
    3. 指定 EJB 項目和 .EAR 文件。
    4. 單擊 Finish。

     

    您應當看到所有的東西(包括所有的模式和映射信息)被正確地導出到 WebSphere Studio。有兩個新項目被創建:

    1. EJB 項目: InterimDB(這個名稱與 VisualAge for Java 項目中的舊名稱相同)
    2. 企業應用程序項目: InterimDBEAR

    您還將在任務面板中看到警告。它們與 EJB 1.1 規范的新要求有關。稍后我們將解決有關的問題。

    關于限定符的注意事項:在導出 EJB 1.1 jar 之前,您必須在 VisualAge for Java 的表編輯器中指定限定符。否則,您將看到如圖 3 所示的 NULLID.CruiseTableColumns 。

    圖 3. 表編輯器
    表編輯器

    生成部署代碼
    您必須重新生成 Application Server 的部署代碼。如果您想了解詳細的說明,請參閱 Migration Guide的第 8 章。

    創建服務器和添加 JDBC 數據源
    如果您想了解詳細的說明,請參閱 Migration Guide第 8 章。

    關于 JNDI 名稱的注意事項:JNDI 名稱(例如 jdbc/InterimDBDS )被用來配置實體 bean。如果您成功地啟動 WebSphere Application Server 4 測試環境,那么您可在控制臺中看到這樣的消息:

    clearcase/" target="_blank" >cccccc" border="1">
    
                [11/29/02 11:02:38:399 SGT] 58d81d1f ResourceBinde I WSVR0049I: Binding InterimDBDS as jdbc/InterimDBDS
                [11/29/02 11:02:38:399 SGT] 58d81d1f ResourceBinde I binding jdbc/InterimDBDS into global name space
                [11/29/02 11:02:38:459 SGT] 58d81d1f ResourceBinde I binding jdbc/jdbc/InterimDBDS into local: name space
                

    不要擔心 jdbc/jdbc/InterimDBDS 。這是 WebSphere 在它的本地名稱空間中指定 JNDI 名稱的方式。

    圖 4. 編輯數據源
    編輯數據源

    修改代碼
    如果您想詳細地了解從 EJB 1.0 升級到 EJB 1.1 所需進行的代碼修改,請參閱 Migration Guide的第 9 章。這項工作很簡單的。主要的修改是用新的 javax.ejb.EJBException 取代 java.rmi.RemoteException 。請確保在代碼修改之后任務面板中不再出現警告。

    關于 java.rmi.MarshalException 的經驗:EJB 1.1 規范要求遠程對象的參數或返回值是任何可序列化的對象。您需要注意 WebSphere Studio 任務面板中的警告,例如:“ The return type must be serializable at runtime. (EJB 1.1: 9.2.7) (RMI 1.3: 2.6) ”。請注意編譯器的警告。

    如果您遇到類似“ java.rmi.MarshalException: CORBA MARSHAL 0 ”和“ Unable to read value from underlying bridge ”的錯誤,那么您很可能把某些接口(例如 Collection、List 和 Map)用作遠程方法的返回類型或參數。除非您很了解這個問題,否則很難找出它。

    即使您使用了可序列化的對象 Vector,也可能會遇到這個問題。為了解決 Vector 問題,IBM 有一個 WebSphere Application Server V4 的修訂包:e-fix PQ60580。不幸的是您無法在 WebSphere 支持頁面上找到它。您不得不要求 IBM 支持為您提供它。但是,把 Vector 改為 ArrayList 常??梢越鉀Q這個問題。您可在 IBM WebSphere Studio 新聞組 有關 Collection 接口的討論中看到有關這個問題的詳細的討論?;蛘?,您可在 Google 的新聞組 ibm.software.websphere.studio.j2ee中搜索“Session home interface returns Collection”短語。

    下一節討論您的測試客戶機與服務器(WebSphere Application Server V4)之間的 JRE 版本的區別。

    遷移業務委托層
    因為業務委托層委托 EJB 代碼,所以打包委托類的最容易的解決方案是把它們放在 EJB 項目中。在我們的情況中,我們有用于委托類的 net.lido.aims.interimdb.client 包,而所有的 EJB 都在 net.lido.aims.domain 中。我們可以把 net.lido.aims.interimdb.client 包與 EJB 包一起導入到 InterimDBEJB項目中。在這層中應該沒有其它修改。

    遷移 EJB JUnit 測試客戶機
    保證單元測試套件可以運行是確保 EJB 可以運行的最佳方法。在我們的項目中,JUnit 起到了關鍵性的作用:它與其它工具(例如 Apache Ant 和自制的框架 JDBCFramework)一起幫助我們實現了幾乎自動的單元測試環境。每個 EJB 包有不同的 *.test 包。例如, InterimDB項目采用以下打包策略:

    • Country 的域對象在 net.lido.aims.interimdb.domain.country 中;
    • 單元測試代碼在 net.lido.aims.interimdb.domain.country.test 中。

    有了以上的設置,您就可以容易地導出 VisualAge for Java 中的測試代碼,然后把它們作為一般的 Java 源文件導入到 WebSphere Studio。如果您想了解有關 Java 項目的遷移的更為詳細的信息,請參閱 Migration Guide的第 6 章。簡而言之,您:

    1. 選擇所有的測試包,把 Java 源代碼從 VisualAge for Java 導出到 jar 文件中。
    2. 在 WebSphere Studio 中創建新的應用程序客戶機項目 InterimDBEJBClient。
    3. 在項目的構建路徑中,選擇以前的 EJB 項目 InterimDBEJB,這樣,所有的服務器類都在構建類路徑中。
    4. 使用現有的 EAR 項目 InterimDBEAR把 Java 源文件導入到以上創建的項目中。

    關于類路徑的經驗:當您在客戶機項目的構建路徑中選擇服務器 EJB 項目的時候,所有的服務器類路徑被自動地添加到客戶機項目的構建類路徑和運行時類路徑。但是,如果您有系統屬性,那么您仍然需要配置它們。在我們的項目中,為了使服務器端的框架可以在客戶機 JVM 和服務器 JVM(WebSphere Application Server 4)中運行,我們不得不設置一些系統屬性。

    關于 JVM 版本的注意事項:在缺省的情況下,您創建的應用程序客戶機項目在 WebSphere Studio 的缺省 JVM 中運行,這個 JVM 與服務器 JVM(例如針對客戶機應用程序優化的 WebSphere Application Server 4 的 JVM)之間存在細微的差別。這可能導致出現 java.rmi.MarshalException 錯誤。把缺省的 JRE 改為“WebSphere V4 JRE”就可以解決這個問題。

    圖 5. JRE 版本
    JRE 版本

    遷移 Struts
    把 Struts V1.02 應用程序遷移到 WebSphere Studio 并不困難。步驟如下:

    1. 在 WebSphere Studio 中創建新的 Web 項目(例如,在我們的情況中是 InterimDBWeb),使用現有的 EAR 項目 InterimDBEAR。完成之后,您將看到在 Web 項目中創建了標準的 Java Source 和 Web Content 目錄。
    2. 從 VisualAge for Java 中導出 Java 源代碼并且導入到 Java Source 目錄。
    3. 把 Web 內容 html/jsp/resource/etc 導入到 WebSphere Studio 中。最容易的導入方法是直接從 WebSphere Application Server 的已部署的目錄中導入這些文件。例如,Web 內容被部署在 deployDIR/InterimDB/webapp 。把 /webapp 中的所有內容導入到 Web Content 目錄。
    4. 把項目構建路徑設置為服務器項目 InterimDBEJB。在這個 Web 項目中有服務器類路徑的引用。
    5. 為了添加必要的 servlet 和標記庫配置,請編輯 web.xml 文件,因為 WebSphere Application Server V3.5 不使用它。以下是我們的項目中用到的簡單示例:
      
                      <?xml version="1.0" encoding="ISO-8859-1"?>
                      <!DOCTYPE web-app
                      PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.2//EN"
                      "http://java.sun.com/j2ee/dtds/web-app_2_2.dtd">
                      <web-app>
                      <!-- Action Servlet Configuration -->
                      <servlet>
                      <servlet-name>action</servlet-name>
                      <servlet-class>org.apache.struts.action.ActionServlet</servlet-class>
                      <init-param>
                      <param-name>application</param-name>
                      <param-value>ApplicationResources</param-value>
                      </init-param>
                      <init-param>
                      <param-name>config</param-name>
                      <param-value>/WEB-INF/struts-config.xml</param-value>
                      </init-param>
                      <init-param>
                      <param-name>debug</param-name>
                      <param-value>2</param-value>
                      </init-param>
                      <init-param>
                      <param-name>detail</param-name>
                      <param-value>2</param-value>
                      </init-param>
                      <init-param>
                      <param-name>validate</param-name>
                      <param-value>true</param-value>
                      <init-param>
                      <load-on-startup>2</load-on-startup>
                      </servlet>
                      <servlet>
                      <servlet-name>SSFStartup</servlet-name>
                      <display-name>SSFStartup</display-name>
                      <servlet-class>framework.startup.SSFStartup</servlet-class>
                      <load-on-startup>3</load-on-startup>
                      </servlet>
                      <servlet>
                      <servlet-name>Startup</servlet-name>
                      <display-name>Startup</display-name>
                      <servlet-class>net.lido.aims.interimdb.domain.values.Startup</servlet-class>
                      <load-on-startup>4</load-on-startup>
                      </servlet>
                      <!-- Action Servlet Mapping -->
                      <servlet-mapping>
                      <servlet-name>action</servlet-name>
                      <url-pattern>*.do</url-pattern>
                      </servlet-mapping>
                      <!-- The Welcome File List -->
                      <welcome-file-list>
                      <welcome-file>index.jsp</welcome-file>
                      <welcome-file-list>
                      <!-- Application Tag Library Descriptor -->
                      <!-- Struts Tag Library Descriptors -->
                      <taglib>
                      <taglib-uri>/WEB-INF/struts-bean.tld</taglib-uri>
                      <taglib-location>/WEB-INF/struts-bean.tld</taglib-location>
                      </taglib>
                      <taglib>
                      <taglib-uri>/WEB-INF/struts-html.tld</taglib-uri>
                      <taglib-location>/WEB-INF/struts-html.tld</taglib-location>
                      </taglib>
                      <taglib>
                      <taglib-uri>/WEB-INF/struts-logic.tld</taglib-uri>
                      <taglib-location>/WEB-INF/struts-logic.tld</taglib-location>
                      </taglib>
                      </web-app>
                      

    關于 ApplicationResources.properties 文件的注意事項:您必須按照 web.xml 中操作 servlet 的定義把這個文件添加到 Java Source 中的正確的包中。在以上的示例中,它位于 Java Source 的根目錄中。在編譯期間,它被自動地復制到 WEB-INF\classes 目錄中。

    如果您把這個文件放在 WEB-INF\classes 目錄中而 Java Source 中沒有它的副本,那么在編譯之后它將被轉移。

    圖 6. Application.properties 文件
    Application.properties 文件

    WebSphere Studio V5 中 Struts 的支持

    各種各樣的新工具可以支持 WebSphere Studio 中 Struts 的開發。這些工具不在本文的討論范圍之內。感興趣的讀者可在 WebSphere Studio 的聯機幫助中找到更多的信息。

    但是,您必須解決由強大的新功能所帶來的小問題。例如,您必須總是在 struts-config.xml 文件中的操作定義中給出表單 bean 的名稱,有時候這并不適用。這是我們在這個項目中遇到的唯一的問題。您可能遇到的另一個問題是每當您修改 struts-config.xml 文件時 WebSphere Studio 把許多時間花在驗證上。通過禁用 Struts 插件,您可以繞開驗證。為此,您可以修改位于 <WebSphere Studio V5 Install>\wstools\eclipse\plugins\com.ibm.etools.struts_5.0.1 目錄中的 plugin.xml 的名稱。請確保不要刪除 plugin.xml 文件。修改它的名稱,例如 plugin_org.xml 。

    項目實用程序 JAR
    來自 IBM 的 Tim deBoer 提供了您可以下載的好插件: ZIP 創建工具,這個工具使您可在 WebSphere Studio V4 中從您的實用程序 Java 項目中自動地在 EAR 項目中創建實用程序 jar 文件。在開發期間,這個 jar 文件總是與實用程序項目同步。

    WebSphere Studio 有一個類似于這個 ZIP 創建工具的功能。您可在企業應用程序的應用程序部署描述符的模塊面板中使用它。它被稱為項目實用程序 JAR。如果您在這里添加您的 Java 項目,那么當您導出 EAR 項目時將自動地創建 jar 文件。

    區別在于您無法在 EAR 項目中看到創建的 jar 文件。您無法使 EAR 中的其它項目創建對它的引用。通過在 WebSphere Studio V4 中使用 ZIP 創建工具,項目的 jar 文件在開發期間被創建并被自動地更新。在編譯時和運行時也引用這個文件。由 WebSphere Studio 中項目實用程序 JAR 文件創建的 jar 文件僅用于運行時。您需要使編譯器能夠打開實用程序項目。那些沒有項目源文件的其他開發者怎么辦?對于這個問題,我們在我們的項目中采用了另一種方式。

    圖 7. 項目實用程序 Jar
    項目實用程序 Jar

    再談類路徑
    Migration Guide的第 12 章討論了如何設置構建路徑和把所有的相關的 jar 文件放在哪里。一般的規則是:使它成為局部的和內部的。如果類或 jar 僅由一個模塊使用,那么把它們放在這個模塊中。否則,把它們放在 EAR 項目中。

    根據我們的經驗,最好的解決方案是把所有的相關的類和 jar 文件都放在 EAR 項目中。它們包括我們的框架類 SSFramework.jar、第三方 jar(例如 ant.jar 和 log4j.jar)等。您的項目的構建類路徑可以容易地引用它們,您不必擔心運行時,因為它們已在 EAR 文件中。

    圖 8. Java 構建路徑
    Java 構建路徑

    圖 9. Java JAR 相關性
    Java JAR 相關性

    結束語
    本文提供了有關把 J2EE 應用程序從 VisualAge for Java 遷移到 WebSphere Studio V5 的 IDE 的建議。討論的主題包括 EJB、Struts、JUnit、類路徑和打包。通過閱讀本文和來自 IBM 的各種資料,現在開發者的水平有所提高,因而能夠更高效地完成他們的工作。

    原文轉自:http://www.kjueaiud.com

    評論列表(網友評論僅供網友表達個人看法,并不表明本站同意其觀點或證實其描述)
    老湿亚洲永久精品ww47香蕉图片_日韩欧美中文字幕北美法律_国产AV永久无码天堂影院_久久婷婷综合色丁香五月

  • <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>