成人午夜激情影院,小视频免费在线观看,国产精品夜夜嗨,欧美日韩精品一区二区在线播放

當前位置:首頁>>軟件教程>>新聞內容  
開發基于JBoss的J2EE應用
作者:羅時飛 發布時間:2003-11-21 9:24:04 | 【字體:

    JBoss,作為J2EE應用服務器,以其EJB容器卓越的性能、技術的潮流性、開發部署J2EE應用的方便性贏得了很多J2EE開發者的信賴。其中,免安裝、基于JMX構架、熱部署(Hot Deploy)、快速開發EJB應用等幾項特征與其他商用服務器相比,顯得有些得意忘形的樣子。盡管其本身沒有重大的缺陷,但畢竟是Open Source的開發模式,文檔很少,因此要很好的掌握、精通開發基于JBoss的應用還是顯得有些力不從心。

    本文結合自己的開發經驗,給出在JBoss 3.2.1下開發J2EE一些相關的注意事項和規則。其中,讀者一定要知道JBoss 3.2.1作為JBoss的過渡產品(與JBoss 3.0.x、JBoss 4.x相比),自然有些東西和JBoss 3.0.x、JBoss 4.x有很大差別。但是,一般情況下,本文介紹的內容,大體上都適合JBoss各個版本。

    下載完JBoss 3.2.1后,解壓到一個沒有空格的目錄路徑下面就可以運行JBoss,所以很方便,但前提是目標機器安裝了Java 2 Standard Edition。一切就緒后,開始我們的旅程。

    (假設JBoss 3.2.1安裝在:C:\jboss-3.2.1_tomcat-4.1.24,本使用default配置)

一,相關配置文件的設置
    為開發J2EE應用,操作數據庫成了必不可少的內容;調節日志輸出的詳細程度成了調試J2EE應用的關鍵;EJB應用的調優過程是J2EE應用的核心。等等,這些內容都是我們需要知道的。

(1)數據源的配置:

    在JBoss 3.2.1中,配置數據源的步驟很簡單,JBoss 3.2.1本身帶了主流數據庫的配置實例,于目錄下:C:\jboss-3.2.1_tomcat-4.1.24\docs\examples\jca。具體使用那個配置文件取決于目標用戶的數據庫。如果是SQL Server 2000,則需要使用mssql-ds.xml文件(支持本地事務)或者mssql-xa-ds.xml文件(支持全局事務);如果是Oracle 9i數據庫,則需要使用oracle-ds.xml文件或者oracle-xa-ds.xml文件。等等。這里以SQL Server 2000為例。

    首先將mssql-ds.xml文件拷貝到目錄:C:\jboss-3.2.1_tomcat-4.1.24\server\default\deploy下。然后打開文件,并作如下修改:

<datasources>

       <local-tx-datasource>

              <jndi-name>VSSDB</jndi-name>

              <connection-url>jdbc:microsoft:sqlserver://125.16.45.158:1433;DatabaseName=DDD

</connection-url>

              <driver-class>com.microsoft.jdbc.sqlserver.SQLServerDriver</driver-class>

              <user-name>sa</user-name>

              <password>sa</password>

        <min-pool-size>50</min-pool-size>

        <max-pool-size>200</max-pool-size>

       </local-tx-datasource>

</datasources>

    如果目標J2EE應用只需要本地事務,則上述過程已經完成了Datasource的配置,同時這個配置將用于JDBC以及EJB通過JNDI使用。如果要實現EJB使用Datasource,則還需要修改位于目錄:C:\jboss-3.2.1_tomcat-4.1.24\server\default\conf下的standardjbosscmp-jdbc.xml文件。比如,

<jbosscmp-jdbc>

 

   <defaults>

      <datasource>java:/VSSDB1</datasource>

      <datasource-mapping>MS SQLSERVER2000</datasource-mapping>

 

      <create-table>true</create-table>

      <remove-table>false</remove-table>

      <read-only>false</read-only>

      <time-out>300</time-out>

      <pk-constraint>true</pk-constraint>

      <fk-constraint>false</fk-constraint>

。。。。。。。。

    其中,<datasource>java:/VSSDB</datasource>中的VSSDB就是mssql-ds.xml配置的數據源;而“java:/”前綴表明該命名空間只是對JBoss本身可見,即運行于JBoss外的應用是不能夠使用這里定義的數據源,這一點希望讀者注意。

    其次,<datasource-mapping>MS SQLSERVER2000</datasource-mapping>中的MS SQLSERVER2000可以在該文件的其他地方找到。(如果是其他數據庫,情況都是類似的,希望讀者加以思考!)

(2)日志的輸出詳細程度配置:
   
    由于JBoss 3.2.1開發采用了Log4j管理其日志信息(嚴格地講,它擴展了Log4j),因此了解Log4j的機理,有助于理解JBoss 3.2.1管理日志的方式。

    JBoss 3.2.1采用JMX架構的同時,且以.xml文件類型為配置文件,因此可以找到位于目錄:C:\jboss-3.2.1_tomcat-4.1.24\server\default\conf下的log4j.xml文件。比如,其中一段配置示例如下:

      <appender name="CONSOLE" class="org.apache.log4j.ConsoleAppender">

    <param name="Target" value="System.out"/>

    <param name="Threshold" value="INFO"/>

 

    <layout class="org.apache.log4j.PatternLayout">

      <!-- The default pattern: Date Priority [Category] Message\n -->

      <param name="ConversionPattern" value="%d{ABSOLUTE} %-5p [%c{1}] %m%n"/>

    </layout>

  </appender>

    比如,為了調節JBoss 3.2.1控制臺日志輸出的詳細程度(調整為DEBUG級別),我們需要修改value=”INFO”,將INFO改為DEBUG。

    如果目標讀者在開發Entity Beans,可以調節位于與log4j.xml文件同一目錄下的standardjboss.xml文件(該文件主要是提供修改EJB相關的調試、運行、調優、部署參數)。如果目標讀者Entity Beans采用的<container-name>為Standard CMP 2.x EntityBean,則將其中的<call-logging>屬性的取值改為true。

<container-configuration>

        <container-name>Standard CMP 2.x EntityBean</container-name>

        <call-logging>false</call-logging>

<invoker-proxy-binding-name>entity-rmi-invoker</invoker-proxy-binding-name>

        <sync-on-commit-only>false</sync-on-commit-only>

。。。。。。。。。

    完成上述兩步后,讀者在調試Entity Beans時通過控制臺,可以看到Entity Beans發出的JDBC調用細節。

(3)Tomcat容器相關參數的配置:

    如果目標讀者使用JBoss 3.2.1與Tomcat 4.1.24的集成版本,則可以通過調節分別位于目錄:C:\jboss-3.2.1_tomcat-4.1.24\server\default\deploy\jbossweb-tomcat.sar下的web.xml和目錄:C:\jboss-3.2.1_tomcat-4.1.24\server\default\deploy\jbossweb-tomcat.sar\META-INF下的jboss-service.xml文件來達到目標讀者特定需求。

    比如,如果想將HTTP服務端口改為80,則可以修改jboss-service.xml文件;如果想使目標J2EE應用處理更多的文件類型,可以修改web.xml文件。

(4)相關類庫的放置:

    如果您的應用涉及到第三方類庫,比如JDBC Driver,則可以將這些JDBC Driver存放到目錄下:C:\jboss-3.2.1_tomcat-4.1.24\server\default\lib。注意,不是目錄:C:\jboss-3.2.1_tomcat-4.1.24\lib下。

    如果是與目標J2EE應用相關,則可以存放到目標.war(或者.ear)里面,或者xxx.war目錄中的WEB-INFO\lib下。無論那種情形,都需要遵循J2EE規范。

    當然,JBoss 3.2.1的配置文件有很多,比如提供郵件服務的mail-service.xml文件,等等。在這里只是給讀者一些信息,如果您有相關問題,都可以試著本文介紹的一些內容解決您的問題。謝謝。


二,開發EJB應用
    如果開發EJB應用,建議采用JBoss作為開發服務器,因為開發、調試、部署速度快。如果采用其他商用服務器,由于實現機理的不同,其編譯的速度很慢。

    如果采用Entity Beans技術,則您需要知道這么幾點。第一,您目標系統的數據源有多少個操作入口,即是否存在Entity Beans之外的方式來操作數據庫。如果有,則需要調節相應<container-name>的<commit-option>提交策略以及<locking-policy>策略。

    比如,JBoss 3.2.1采用的<commit-option>方式有4種:A、B、C、D。當然,如果除了Entity Beans訪問數據庫外,別無它出,采用A是很理智的。如果有,則需要取決于具體的情況使用<commit-option>方式。同時,<commit-option>方式的選擇與<locking-policy>策略有關系。

    能夠采用<read-only>的Entity Beans或Entity Beans Methods,則盡量采用,這樣會減少或消除死鎖發生的可能性。

    盡量采用1:n的關系來操作n方的數據表結構,這樣能夠提高EJB Container的效率。

    其中,本文重點給出EJB事務處理方面的探討。

    一般情況下,J2EE應用服務器支持JDBC事務、JTA事務、容器管理事務。同時,最好不要在程序中同時使用上述三種事務類型,比如在JTA事務中嵌套JDBC事務;第二方面,事務要在盡可能短的時間內完成,不要在不同方法中實現事務的使用。比如,下面給出了回滾JDBC事務的代碼示例:

public void processT(String orders) {

Context initCtx = new InitialContext();

javax.sql.DataSource ds = javax.sql.DataSource)initCtx.lookup

(“java:comp/env/jdbc/OrdersDB”);

java.sql.Connection conn = ds.getConnection();

try{

conn.setAutoCommit( false ); //更改JDBC事務的默認提交方式

orderNo = createOrder( orders );

updateOrderStatus(orderNo, “orders created”);

conn.commit();//提交JDBC事務

}catch( Exception e ){

try{

conn.rollback();//回滾sJDBC事務

throw new EJBException(“事務回滾: “ + e.getMessage());

}catch( SQLException sqle ){

throw new EJBException(“出現SQL操作錯誤: “ + sqle.getMessage());

}

}

}

(修改自,Transactions in J2EE(RedBooks).pdf中的一段Bean管理的JDBC事務)


下面給出了JTA事務代碼示例:

public void processOrder(String orderMessage) {

UserTransaction transaction = mySessionContext.getUserTransaction();//獲得JTA事務

try{

transaction.begin();//開始JTA事務

orderNo = sendOrder(orderMessage);

updateOrderStatus(orderNo, “order sent”);

transaction.commit();//提交JTA事務

}catch(Exception e){

try{

transaction.rollback();//回滾JTA事務

}catch(SystemException se){

se.printStackTrace();

}

throw new EJBException(“事務回滾: “ + e.getMessage());

}

}

(修改自,Transactions in J2EE(RedBooks).pdf中的一段Bean管理的JTA事務)

    同時,如果Session Bean采用JTA管理事務,一定不要通過JNDI獲取JTA事務,否則結果不堪設想;而是采用類似,“mySessionContext.getUserTransaction()”的方法獲取。

    最后,可以使用容器管理事務(CMT)。在使用CMT過程中,如果聲明讓容器完成事務回滾,則目標EJB應用必須拋出系統級異常,否則容器是不會滿足事務的ACID。在包javax.ejb的異常類中,除了NoSuchEntityException和EJBException屬于系統級異常外,其他的異常全部是應用級異常。

    上述3點內容,值得讀者注意。可能有些讀者在使用EJB CMT過程中,總是會遇到自己已經將事務聲明為“Required”,但就是不能夠保證事務的ACID。因此,希望讀者注意J2EE應用中事務使用的不同方式。詳細情況,可以參考J2EE Tutorial一書中的事務處理章節。

另外,

1) 在開發Entity Beans過程中,能夠使用CMP的地方盡量不要采用BMP的方式。如果擬采用BMP的方式,還不如采用Session Bean + JDBC,其中可以通過JTA控制事務(如果性能問題不是很重要的話)。

2) 能夠通過容器實現的事務(即,通過聲明)的地方盡量采用,提高開發效率,使得您可以更加專注于業務邏輯本身。

3)盡量采用J2EE規范采用的各項技術。如果目標系統需要移植,但使用了很多與JBoss特有的技術,其移植工作則很麻煩。

三,開發Web應用
    一般情況下,開發Web應用最好采用一些Thirty-Part軟件或者Framework。比如,Struts、Log4j、webMethods等等。其優勢顯而易見。

    就目前而言,Struts的應用基本上成為了開發Web應用的標準。即將推出來的JSF很好的實現了與Struts的補充和集成。同時,JSF也將給快速開發JSP Web前端應用帶來革命。另外,Struts也恰恰促進了JSF的發展。

    開發JBoss 3.2.1下的Web應用的過程和其他應用服務器下都差不多。同時,JBuilder 8、9都已經支持Struts 1.1。如果讀者需要JBoss     3.2.1下,結合Struts、EJB、JSP、Servlet、JavaBean相關實例的文章,可以給我提些建議。

四,總結
    通過這兩次的文章,將開發J2EE應用相關的幾個基本問題做了初步的探討。開發J2EE應用涉及到的問題是一個系統工程問題,也不是幾篇文章、幾本書能夠回答清楚的,很多內容需要大家在實踐中摸索、學習,去進步。

    謝謝大家。歡迎大家給我來信,共同探討J2EE相關開發、應用問題。

 


文章來源:CSDN
 放生
 愚愛
 夠愛
 觸電
 白狐
 葬愛
 光榮
 畫心
 火花
 稻香
 小酒窩
 下雨天
 右手邊
 安靜了
 魔杰座
 你不像她
 邊做邊愛
 擦肩而過
 我的答鈴
 懷念過去
 等一分鐘
 放手去愛
 冰河時代
 你的承諾
 自由飛翔
 原諒我一次
 吻的太逼真
 左眼皮跳跳
 做你的愛人
 一定要愛你
 飛向別人的床
 愛上別人的人
 感動天感動地
 心在跳情在燒
 玫瑰花的葬禮
 有沒有人告訴你
 即使知道要見面
 愛上你是一個錯
 最后一次的溫柔
 愛上你是我的錯
 怎么會狠心傷害我
 不是因為寂寞才想
 親愛的那不是愛情
 難道愛一個人有錯
 寂寞的時候說愛我
主站蜘蛛池模板: 潜山县| 新干县| 榆林市| 永福县| 唐河县| 巴彦淖尔市| 尉犁县| 河东区| 临夏县| 饶河县| 新巴尔虎左旗| 孟村| 西峡县| 武川县| 进贤县| 遂平县| 渝北区| 镇远县| 玛纳斯县| 乌拉特中旗| 庆安县| 广河县| 舟山市| 闸北区| 宝清县| 镇坪县| 晋宁县| 石城县| 邢台市| 乡城县| 张掖市| 阿坝县| 五原县| 台南县| 淮安市| 简阳市| 广河县| 新乐市| 塔城市| 保山市| 天长市|