熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> Java編程 >> Java開源技術 >> 正文

部署基於JBoss 的 J2EE應用程序

2022-06-13   來源: Java開源技術 

  JBoss作為JEE應用服務器以其EJB容器卓越的性能技術的潮流性開發部署JEE應用的方便性贏得了很多JEE開發者的信賴其中免安裝基於JMX構架熱部署(Hot Deploy)快速開發EJB應用等幾項特征與其他商用服務器相比顯得有些得意忘形的樣子盡管其本身沒有重大的缺陷但畢竟是Open Source的開發模式文檔很少因此要很好的掌握精通開發基於JBoss的應用還是顯得有些力不從心
  
  本文結合作者的開發經驗給出在JBoss 下開發JEE的一些很實用的相關的注意事項和規則其中讀者一定要知道JBoss 作為JBoss的過渡產品(與JBoss xJBoss x相比)自然有些東西和JBoss xJBoss x有很大差別但是一般情況下本文介紹的內容大體上都適合JBoss各個版本
  
  下載完JBoss 解壓到一個沒有空格的目錄路徑下面就可以運行JBoss所以很方便但前提是目標機器安裝了Java Standard Edition一切就緒後我們就開始吧(假設JBoss 安裝在C:\jboss_tomcat本使用default配置)
  
  相關配置文件的設置
  
  為開發JEE應用操作數據庫成了必不可少的內容調節日志輸出的詳細程度成了調試JEE應用的關鍵EJB應用的調優過程是JEE應用的核心
  
   數據源的配置
  
  在JBoss 配置數據源的步驟很簡單JBoss 本身帶了主流數據庫的配置實例於目錄下C:\jboss_tomcat\docs\examples\jca具體使用哪個配置文件取決於目標用戶的數據庫如果是SQL Server 則需要使用mssqldsxml文件(支持本地事務)或者mssqlxadsxml文件(支持全局事務)如果是Oracle i數據庫則需要使用oracledsxml文件或者oraclexadsxml文件等這裡以SQL Server 為例
  
  首先將mssqldsxml文件拷貝到目錄C:\jboss_tomcat\server\default\deploy下然後打開文件並作如下修改
  
  <datasources>
  <localtxdatasource>
  <jndiname>VSSDB</jndiname>
  <connectionurl>jdbc:microsoft:sqlserver://:;DatabaseName=DDD
  </connectionurl>
  <driverclass>commicrosoftjdbcsqlserverSQLServerDriver</driverclass>
  <username>sa</username>
  <password>sa</password>
  <minpoolsize></minpoolsize>
  <maxpoolsize></maxpoolsize>
  </localtxdatasource>
  </datasources>
  
  如果目標JEE應用只需要本地事務則上述過程已經完成了Datasource的配置同時這個配置將用於JDBC以及EJB通過JNDI使用如果要實現EJB使用Datasource則還需要修改位於目錄C:\jboss_tomcat\server\default\conf下的standardjbosscmpjdbcxml文件比如
  
  <jbosscmpjdbc>
  
  <defaults>
  <datasource>java:/VSSDB</datasource>
  <datasourcemapping>MS SQLSERVER</datasourcemapping>
  
  <createtable>true</createtable>
  <removetable>false</removetable>
  <readonly>false</readonly>
  <timeout></timeout>
  <pkconstraint>true</pkconstraint>
  <fkconstraint>false</fkconstraint>
  
  其中java:/VSSDB中的VSSDB就是mssqldsxml配置的數據源java:/前綴表明該命名空間只是對JBoss本身可見即運行於JBoss外的應用是不能夠使用這裡定義的數據源這一點希望注意
  
  其次MS SQLSERVER中的MS SQLSERVER可以在該文件的其他地方找到(如果是其他數據庫情況都是類似的)
  
   日志的輸出詳細程度配置
  
  由於JBoss 開發采用了Logj管理其日志信息(嚴格地講它擴展了Logj)因此了解Logj的機理有助於理解JBoss 管理日志的方式JBoss 采用JMX架構的同時且以xml文件類型為配置文件因此可以找到位於目錄C:\jboss_tomcat\server\default\conf下的logjxml文件比如其中一段配置示例如下
  
  <appender name=CONSOLE class=orgapachelogjConsoleAppender>
  <param name=Target value=Systemout/>
  <param name=Threshold value=INFO/>
  
  <layout class=orgapachelogjPatternLayout>
  <! The default pattern: Date Priority [Category] Message\n >
  <param name=ConversionPattern value=%d{ABSOLUTE} %p [%c{}] %m%n/>
  </layout>
  </appender>
  
  比如為了調節JBoss 控制台日志輸出的詳細程度(調整為DEBUG級別)我們需要修改value=INFO將INFO改為DEBUG 如果開發Entity Beans可以調節位於與logjxml文件同一目錄下的standardjbossxml文件(該文件主要是提供修改EJB相關的調試運行調優部署參數)如果Entity Beans采用的為Standard CMP x EntityBean則將其中的屬性的取值改為true
  
  <containerconfiguration>
  <containername>Standard CMP x EntityBean</containername>
  <calllogging>false</calllogging>
  <invokerproxybindingname>entityrmiinvoker</invokerproxybindingname>
  <synconcommitonly>false</synconcommitonly>
  
  完成上述兩步後在調試Entity Beans時通過控制台可以看到Entity Beans發出的JDBC調用細節
  
   Tomcat容器相關參數的配置
  
  如果使用JBoss 與Tomcat 的集成版本則可以通過調節分別位於目錄C:\jboss_tomcat\server\default\deploy\jbosswebtomcatsar下的webxml和目錄C:\jboss_tomcat\server\default\deploy\jbosswebtomcatsar\METAINF下的jbossservicexml文件來達到目標讀者特定需求比如如果想將HTTP服務端口改為則可以修改jbossservicexml文件如果想使目標JEE應用處理更多的文件類型可以修改webxml文件
  
   相關類庫的放置
  
  如果應用涉及到第三方類庫比如JDBC Driver則可以將這些JDBC Driver存放到目錄下C:\jboss_tomcat\server\default\lib注意不是目錄C:\jboss_tomcat\lib下
  
  如果是與目標JEE應用相關則可以存放到目標war(或者ear)裡面或者xxxwar目錄中的WEBINFO\lib下無論那種情形都需要遵循JEE規范當然JBoss 的配置文件有很多比如還有提供郵件服務的mailservicexml文件等
  
  開發EJB應用
  
  如果開發EJB應用建議采用JBoss作為開發服務器因為開發調試部署速度快如果采用其他商用服務器由於實現機理的不同其編譯的速度很慢如果采用Entity Beans技術則您需要知道這幾點第一您目標系統的數據源有多少個操作入口即是否存在Entity Beans之外的方式來操作數據庫如果有則需要調節相應的提交策略以及策略
  
  比如JBoss 采用的方式有ABCD當然如果除了Entity Beans訪問數據庫外別無它出采用A是很理智的如果有則需要取決於具體的情況使用方式同時方式的選擇與策略有關系能夠采用的Entity Beans或Entity Beans Methods則盡量采用這樣會減少或消除死鎖發生的可能性盡量采用:n的關系來操作n方的數據表結構這樣能夠提高EJB Container的效率
  
  一般情況下JEE應用服務器支持JDBC事務JTA事務容器管理事務同時最好不要在程序中同時使用上述三種事務類型比如在JTA事務中嵌套JDBC事務第二方面事務要在盡可能短的時間內完成不要在不同方法中實現事務的使用比如下面給出了回滾JDBC事務的代碼示例
  
  public void processT(String orders) {
  Context initCtx = new InitialContext();
  javaxsqlDataSource ds = javaxsqlDataSource)initCtxlookup
  (java:comp/env/jdbc/OrdersDB);
  javasqlConnection conn = dsgetConnection();
  try{
  connsetAutoCommit( false ); //更改JDBC事務的默認提交方式
  orderNo = createOrder( orders );
  updateOrderStatus(orderNo orders created);
  mit();//提交JDBC事務
  }catch( Exception e ){
  try{
  connrollback();//回滾sJDBC事務
  throw new EJBException(事務回滾 + egetMessage());
  }catch( SQLException sqle ){
  throw new EJBException(出現SQL操作錯誤 + sqlegetMessage());
  }
  }
  }
  
  下面給出了JTA事務代碼示例
  
  public void processOrder(String orderMessage) {
  UserTransaction transaction = mySessionContextgetUserTransaction();//獲得JTA事務
  try{
  transactionbegin();//開始JTA事務
  orderNo = sendOrder(orderMessage);
  updateOrderStatus(orderNo order sent);
  mit();//提交JTA事務
  }catch(Exception e){
  try{
  transactio
From:http://tw.wingwit.com/Article/program/Java/ky/201311/28619.html
    推薦文章
    Copyright © 2005-2022 電腦知識網 Computer Knowledge   All rights reserved.