2.0.1 JBOSS 的一點說明
$JBOSS-HOME/server/下有3個目錄,all/default/minimal,它們是表示3種配置,全部的配置、默認配置、最小配置,我們在啟動JBOSS服務時,可以指定
run –c all 表示是啟動all配置(將會加載所有服務);run 表示是以默認配置啟動;
run –c mimimal 表示是啟動mimimal配置。這三者所加載的服務數量不同,具體區別可查閱JBOSS相關文檔,你還可以自己定義一個配置,如test,屬於高手去為了性能上的考慮了,那這份文檔對你的幫助不會太大了。
如果你確定了JBOSS服務啟動的配置,那麼你的應用及相關配置就需要部署在對應的目錄下的相關的路徑下,如all/,default/,minimal/下。
2.0.1 JBOSS常用配置文件的路徑
為了描述方便,以下描述將以JBOSS3.2.6版本,default配置為例,如果你以別的配置啟動,則在對應的目錄下尋找或配置相關文件。
1、相關DTD定義文件位於$JBOSS-HOME/docs/dtd,在其下的文件中可以查閱某個XML配置文件中某個元素或屬性的意義。
2、數據源配置文件的路徑,$JBOSS-HOME/server/default/deploy,文件格式必須是*-ds.xml的樣式。不同的 數據庫配置參數可參考$JBOSS-HOME/docs/examples/jca/下的示例文檔。有關參數的細節在下面會有一定的描述。
3、公共的 jar包我們可以放在$JBOSS-HOME/server/default/lib下,如數據庫的JDBC jar,log4j.jar等,如果這些JAR已經在該lib下放置了,那麼我們的應用WEB-INF/lib下不應該再放置,否則JBOSS也會將他們 再一次加載,白白占用內存。
4、配置日志的文件,log4j.xml位於$JBOSS-HOME/server/default/conf下,具體配置下文還會有一點介紹
5、 $JBOSS-HOME/server/default/work下存放的是JSP編譯後的.java及.class文件,如果調試JSP時出錯了,可以 到該目錄下(一級級去翻吧)去找對應的文件,調試問題。還有個小TIPS,有時我們明明把一個JSP更新到對應的目錄裡了,可是去刷新頁面時,內容還是舊 的,為了解決該問題,我們可以到work目錄下,將對應的.java及.class文件刪了,再刷新即可,這個原因不好推測,有時可以自動刷新,有時不 行。單個的TOMCAT都能自動刷新,不知為何集成到JBOSS裡卻有時不行。還需注意的事,你在清除舊的java、class文件時,不能為了省事,而 直接刪除目錄,否則刷新時會報錯的,等著你的就是要重啟JBOSS服務了。
6、$JBOSS-HOME/server/default/log下存放的是日志文件,默認的log4j.xml配置是將日志輸出到該文件夾下的server.log文件,可以去查看信息進行調試。
7、我們的應用一般部署在$JBOSS-HOME/server/default/deploy/jbossweb-tomcat50.sar/ 下,建個 TestCrm.war目錄,把我們的整個應用部署在該.war目錄下,這樣JSP、Servlet將由tomcat引擎來解析處理。
8、配置應用的WEB服務的端口號及參數。
JBOSS3.2.6是在…./ deploy/jbossweb-tomcat50.sar/server.xml中,自己找8080,修改為你想設定的端口即可。
JBOSS3.2.3是在…/default/deploy/jbossweb-tomcat41.sar/META-INF/jboss-service.xml中配置。
2.1 JBOSS 應用程序的下載及安裝
前往http://www.jboss.com去下載相應的版本。直接解壓到相關的目錄即可。
2.2 JBOSS 應用程序的配置調整
2.2.1配置負載均衡,調整參數
需要修改配置文件以適應apache中配置的“session sticky配置”。如下:
Jboss3.2.3修改:
%JBOSS_HOME%/server/default/deploy/jbossweb-tomcat41.sar/META-INF/ jboss-service.xml
修改<Engine name="MainEngine" defaultHost="localhost">為
<Engine name="MainEngine" jvmRoute=" server106" defaultHost="localhost">
與上述workers2.properties定義的內容一致。
Jboss3.2.6修改:
%JBOSS_HOME%/server/default/deploy/jbossweb-tomcat50.sar/server.xml
修改<Engine name="jboss.web" defaultHost="localhost">為:
<Engine name="jboss.web" jvmRoute=" server106" defaultHost="localhost">
與上述workers2.properties定義的內容一致。
Jboss4.0的修改和Jboss3.2.6的一致。
如上配置後,就可以實現apache+jboss的負載均衡。
2.2.2配置集群(Clustering),調整參數
如果我們要想使得幾台JBOSS應用服務器互為備份(僅限於SESSION),在群內一台JBOSS服務器down掉的時候,用戶不受影響,繼續以登陸用戶身份進行工作,則我們需要配置Clustering,並啟動相關服務。下面將描述相關配置項:
1)、修改應用APP的web.xml:
Jboss3.2.6:
../default/deploy/jbossweb-tomcat50.sar/Test.war/WEB-INF/web.xml
Jboss3.2.3:
../default/deploy/jbossweb-tomcat41.sar/Test.war/WEB-INF/web.xml
修改內容如下:
<?xml version="1.0"?>
<!DOCTYPE web-app PUBLIC
"-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"http://java.sun.com/dtd/web-app_2_3.dtd ">
<web-app>
…….
…..
….
<distributable/>
</web-app>
jboss配置入門(2)2007-11-01 10:442)、需要啟動一個服務cluster-service.xml
如果是以run -c all 來啟動jboss服務,則默認是將cluster服務啟動,無需做什麼配置工作,只需確認相關文件是否存在即可。
確認…/server/all/deploy/下存在cluster-service.xml文件;
確認…/server/all/lib/下存在jgroups.jar文件,如果沒有則重新安裝jboss。
如果應用程序部署在default配置下,則需將上述的兩個文件分別拷入
…/server/default/deploy/、…/server/default/lib/目錄下。
配置完畢,如有異常,請查看日志。更詳細的信息請參閱JBOSS.com上提供的admin.pdf。
2.2.3配置數據源,調整參數
各種類型的數據庫,都可以根據%JBOSS_HOME%/docs/examples/jca/下的示例文檔配置,更詳細的參數配置可參閱JBOSS.com上的文檔或…/docs/dtd/下的dtd定義來配置。
下面以oracle為例,提供我們在生產機環境的配置。
該xml文件需要被部署在%JBOSS_HOME%/server/all(or default)/deploy/下,對應的數據庫驅動程序jar需copy至部署的配置的lib下,如…all/lib/或…default/lib/下。
<datasources>
<local-tx-datasource>
<jndi-name>jdbc/TestDataSource</jndi-name>
<connection-url>jdbc:oracle:thin:@192.168.1.2:1521:test</connection-url>
<!--<connection-url>jdbc:oracle:oci:@youroracle-tns-name</connection-url>-->
<driver-class>oracle.jdbc.driver.OracleDriver</driver-class>
<user-name>test</user-name>
<password>test</password>
<!-- Uses the pingDatabase method to check a connection is still valid before handing it out from the pool -->
<valid-connection-checker-class-name>org.jboss.resource.adapter.jdbc.vendor.OracleValidConnectionChecker</valid-connection-checker-class-name>
<!-- Checks the Oracle error codes and messages for fatal errors -->
<exception-sorter-class-name>org.jboss.resource.adapter.jdbc.vendor.OracleExceptionSorter</exception-sorter-class-name>
<!-- sql to call when connection is created
<new-connection-sql>some arbitrary sql</new-connection-sql>
-->
<min-pool-size>5</min-pool-size><!—最小連接池數目-->
<max-pool-size>800</max-pool-size><!—最大連接池數目-->
<idle-timeout-minutes>5</idle-timeout-minutes><!—數據庫連接空閒時間,單位為分鐘,如果負載較大,可以設為5,如果一般,可以設為3-->
<!—在從連接池裡獲得一個連接之前先通過執行一個簡單的SQL來校驗connection的有效性-->
<check-valid-connection-sql>select 1 from dual</check-valid-connection-sql>
</local-tx-datasource>
</datasources>
如有多個數據源,則根據數據庫的類型,配置完成,部署在上述路徑下即可。
在代碼中可通過JNDI來從連接池中獲取連接。
……
Context ctx = new javax.naming.InitialContext();
DataSource ds = (DataSource)ctx.lookup("java:jdbc/TestDataSource ");
Connection con = ds.getConnection();
……
2.2.4配置jboss Connector參數
以下的配置是介紹load balancing所使用的協議(AJP 1.3 Connector)的服務,
更准確的有效參數以及HTTP/1.1 Connector的配置。
請參閱:
http://tomcat.apache.org/tomcat-5.0-doc/config/ajp.html
http://tomcat.apache.org/tomcat-5.0-doc/config/http.html
jboss3.2.3配置…/jbossweb-tomcat41.sar/META-INF/jboss-service.xml,jboss3.2.6配置…./jbossweb-tomcat50.sar/server.xml
<!-- jboss3.2.3 jboss-service.xml -->
<!-- A AJP 1.3 Connector on port 8009 -->
<Connector className="org.apache.coyote.tomcat4.CoyoteConnector"
address="${jboss.bind.address}" port="8009" minProcessors="5" maxProcessors="1000" enableLookups="true" redirectPort="8443" acceptCount="100" debug="0" connectionTimeout="20000" useURIValidationHack="false"
protocolHandlerClassName="org.apache.jk.server.JkCoyoteHandler"/>
<!-- jboss3.2.6 server.xml -->
<!-- A AJP 1.3 Connector on port 8009 -->
<Connector port="8009" address="${jboss.bind.address}"
enableLookups="false" redirectPort="8443" debug="0"
maxProcessors ="1000" minProcessors=”5” acceptCount="100"
protocol="AJP/1.3"/>
簡單解釋一兩個參數(以tomcat5.0為准):
maxProcessors:最大並發數(連接數)
minProcessors:初始化時啟動的最小的進程數
acceptCount:在當前connector的連接數達到最大時,允許進入等待隊列的數目
connectionTimeout:連接超時時間,單位為毫秒
enableLookups:是否允許通過DNS lookups,返回遠程客戶端的機器名,如果設為false,則只能返回IP地址。該參數默認為true,如果不需要,可以禁掉,設為false,可以提高服務器的性能
maxPostSize:設定允許透過POST上傳參數的字節數,默認是2M(2097152),如果想禁掉該限制,則將該值設為一個小於或等於0 的值,如0、-1,如果所部署的應用中有上傳工作,則需注意該配置
port="8009":這個值要與上述”1.4.3.workers2.properties”中的port一致
redirectPort="8443":是制定如果用了SSL機制訪問服務的話,將會轉向的端口,請參閱SSL相關的配置文檔。
debug="0":這是配置日志級別的,可以忽略,因為該設置依賴於log4j的配置文件的設置,server/all/conf/log4j.xml
jboss配置入門(3)2007-11-01 10:452.2.5訪問URL如果是目錄,不想顯示該目錄下文件
jboss3.2.3:
修改…/server/all(or default)/deploy/….sar/web.xml
jboss3.2.6/jboss4.0:
修改…/server/all(or default)/deploy/….sar/conf/web.xml
查看紫色斜體字符,設為false表示不列出目錄。默認是設為true
<servlet>
<servlet-name>default</servlet-name>
<servlet-class>
org.apache.catalina.servlets.DefaultServlet
</servlet-class>
<init-param>
<param-name>debug</param-name>
<param-value>0</param-value>
</init-param>
<init-param>
<param-name>listings</param-name>
<param-value>false</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
2.2.6設置某個應用APP為默認應用
通常情況下,如果我們部署的應用目錄為…/server/all(or default)/deploy/….sar/Test.war/,則我們應用部署完後,我們訪問的路徑類似於:http://…. /Test/index.htm,如果我們想去掉Test這個APP Name,則如下設置即可。
在你需要設為默認應用的那個war目錄,如上述Test.war/WEB-INF/ 下新建一個文件,文件名為jboss-web.xml,內容如下:
<jboss-web>
<context-root>/</context-root>
</jboss-web>
重啟服務後,以http://…./index.htm即可訪問部署於Test.war/下的應用。
2.2.7配置數據源在APP應用加載前有效(各相關服務加載完畢)
這個經驗的獲知花費了一周多,後來結合jboss wiki/forum的文檔,有了靈感,才得以解決。詳細的介紹可參閱下面帖子,這是我發的一個帖,後來自己給解決後把答案貼上了。
http://www.jboss.com/index.html?module=bb&op=viewtopic&t=70600
http://www.javaworld.com.tw/jute/post/view?bid=9&id=129747&sty=1&tpg=1&age=0(中文)
以下簡略說明一下。
我們部署一個應用(項目),應用啟動之初一般都進行若干初始化吧,可能會從文件裡、數據庫裡獲取一些基礎數據或配置項等等。
如果從數據庫裡獲取基礎數據,則我們必須確保配置的那些數據源及相關的服務在我們應用開始加載之前生效(已經啟動或加載完畢);也就是說,在我們部 署應用的一些初始化數據方法裡要能正常獲取數據。如果你不做一些設置,僅僅是將配好的ds_oracle_test.xml扔到…/deploy/下,那 麼很遺憾的告訴你,你的應用在初始化數據階段根本不能從連接池中獲取到連接,進而獲取數據。如要達到你初始化數據的目的,請按照上面我提供的那個帖子連接 去查看詳細的信息,下面我僅提供解決方法。
1)、配置數據源:
<!--oracle_ds.xml-->
<datasources>
<local-tx-datasource>
<jndi-name>jdbc/test</jndi-name>
2)確認datasource依賴的服務名
透過http://wiki.jboss.org/wiki/Wiki.jsp?page=DependOnDataSource我們發現:
======原文引用==============
! Depending on a DataSource
To specify a dependency on a DataSource deployment, you need to depend on the service which binds the DataSource into JNDI.
The DataSource is not bound into JNDI until the service jboss.jca:service=DataSourceBinding,name=(jndi-name) has been
started. The (jndi-name) is the value of the jndi-name attribute for your DataSource as defined in the *-ds.xml.
The associated connection manager service is a function of the type of DataSource and its jndi-name attribute value. The
MBean names for the types of DataSource deployments are:
no-tx-datasource
jboss.jca:service=NoTxCM?,name=(jndi-name)
local-tx-datasource
jboss.jca:service=LocalTxCM?,name=(jndi-name)
xa-datasource
jboss.jca:service=XATxCM?,name=(jndi-name)
no-tx-connection-factory
jboss.jca:service=NoTxCM?,name=(jndi-name)
tx-connection-factory
jboss.jca:service=TxCM?,name=(jndi-name)
通過上述描述可以知道,數據源配置不同,則對應的依賴服務名信息也不同。
根據上述描述及數據源配置,相關的服務名就是:
"jboss.jca:service=LocalTxCM,name=jdbc/test".
我修改了 ...sar/...war/WEB-INF/jboss-web.xml(如果不存在該文件,就創建它),然後運行jboss,就可以在初始化時找到datasource,並正確獲取數據了!!!
配置文件如下:
<jboss-web>
<depends>jboss.jca:service=LocalTxCM,name=jdbc/test</depends>
</jboss-web>
2.2.8日志配置,配置log4j.xml
JBOSS的日志模塊集成了強大的LOG4J組件,我們可以直接配置$JBOSS_HOME/server/default/conf/log4j.xml,來定義日志級別或是將某幾個類的日志輸出到一個單獨的文件。
以下簡單羅列一下配置文件,具體的LOG4J的使用請參閱LOG4J文檔或JBOSS的文檔。
<appender name="ImportCharge" class="org.jboss.logging.appender.DailyRollingFileAppender">
<errorHandler class="org.jboss.logging.util.OnlyOnceErrorHandler"/>
<param name="File" value="${jboss.server.home.dir}/log/importCharge.log"/>
<param name="Append" value="true"/>
<!-- Rollover at midnight each day -->
<param name="DatePattern" value="'.'yyyy-MM-dd"/>
<layout class="org.apache.log4j.PatternLayout">
<!-- The default pattern: Date Priority [Category] Message\n -->
<param name="ConversionPattern" value="%d %-5p [%c] %m%n"/>
</layout>
</appender>
<logger name="com.tt.bs.action.corp.ImportChargeFileAction">
<level value="DEBUG" />
<appender-ref ref="ImportCharge"/>
</logger>
<category name=" com.tt.bs.action.corp.UploadChargeFileAction ">
<priority value="DEBUG" />
<appender-ref ref=" ImportCharge "/>
</category>
category或logger的寫法都可以,建議用最下面的寫法,這是文檔中的標准寫法。
上面的最後兩個代碼塊,表示所列的兩個ACTION將會引用“ImportCharge”這個appender,他們中的log.debug….的日志將會同時寫入“importCharge.log”文件。
還可以參考:
http://wiki.jboss.org/wiki/Wiki.jsp?page=Logging
http://logging.apache.org/log4j/docs/
jboss配置入門(4)2007-11-01 10:462.2.9配置contentType及charset,TOMCAT5.0下JSP統一配置
在JSP裡頭部一般要用page語句指定contentType及charset。
如:<%@ page contentType="text/html; charset=GBK" %>
或分開寫:
– <%@ page contentType="MIME-Type" %>
– <%@ page pageEncoding="Character-Set" %>
該語句的作用是“指定由JSP頁面生成的servlet生成的頁面的MIME類型及charset”。默認的字符集是“ISO-8859-1”,如果不指定正確的charset,則我們的頁面如有中文,是會亂碼的。
我主要描述的是後者,charset,字符集。發生的場景位於一個頁面包含另一個頁面的情況下。
在JBOSS3.2.3 下集成的是tomcat4.0*,用的是JSP1.2/Servlet2.3標准,要求JSP主頁面和所包含頁面中的“pageEncoding”必須一 致,基於這一情況,我們一般做法是包含頁面不指定“pageEncoding”,它的屬性直接繼承父頁面即可。
在JBOSS3.2.6下,集成的是tomcat5.0*,要求每個JSP中必須有“pageEncoding”,換句話說,父頁面中的指定對子頁面沒有影響。
有兩個方法可解決該問題:
1、為每個頁面指定“pageEncoding”,顯然不可取!
2、用JSP2.0/Servlet2.4標准,統一配置一下WEB.XML,解析JSP時統一用一個“pageEncoding”.這樣我們就不需要為每個JSP裡加個聲明了。
法2的配置細節如下:
配置$JBOSS-HOME/server/default/deploy/jbossweb-tomcat50.sar/TestCrm.war/WEB-INF/web.xml,為下面紫色斜體內容。
替換頭部的命名空間聲明:
<?xml version="1.0" encoding="ISO-8859-1"?>
<web-app xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"
version="2.4">
………
………
<jsp-config>
<jsp-property-group>
<description>jsp encoding example</description>
<display-name>JSPConfiguration</display-name>
<url-pattern>*.jsp</url-pattern>
<el-ignored>true</el-ignored>
<page-encoding>GBK</page-encoding>
<scripting-invalid>false</scripting-invalid>
<include-prelude></include-prelude>
<include-coda></include-coda>
</jsp-property-group>
</jsp-config>
</web-app>
說明:<jsp-config>的配置說明
你可以在<jsp-property-group>中使用以下的配置元素:
Element
描述
<el-ignored>
如果設置為true, 在匹配指定的URL模式的JSP 頁面中,EL 表達式被當作常規的文本而不是EL 表達式。當移植看起來有EL表達式文本的JSP 1.2頁面到JSP 2.0的時候,這非常有用。在已經轉換為JSP 2.0的頁面中,你可以使用一個新增的“elIgnoredpage”屬性來選擇EL是否有效
<scripting-invalid>
如果設置為true, 在某個匹配的JSP頁面使用腳本
<page-encoding>
為匹配指定的URL模式的JSP頁面指定編碼。這是一個可選的配置(在每一個JSP頁面中指定頁面的編碼),並且對於JSP頁面來說這是使用某些文件編碼(比如:EBCDIC)唯一的辦法
<include-coda>
為所有匹配指定的URL模式的JSP頁面的末尾自動包含一個文件,而指定相關的context路徑。你可以在一個<jsp-property-group>中多次使用,或者通過多個<jsp-property-group>來實現
<include-prelude>
為所有匹配指定的URL模式的JSP頁面的開頭自動包含一個文件,而指定相關的context路徑。你可以在一個<jsp-property-group>中多次使用,或者通過多個<jsp-property-group>來實現
<is-xml>
如果設置為true, 所有匹配指定的URL模式的JSP頁面使用JSP XML語法(它們是JSP Document)
可參見http://www.oreilly.com.cn/news/jsppart2.php?c=java
jboss配置入門(5)2007-11-01 10:472.3 JVM最小、最大內存的設定
如果采取默認配置的話,JVM默認只能分配到最大64M內存(默認大小和JVM版本有關系),這在生產環境裡肯定是不夠,將會導致用戶通過WEB方式無法訪問應用服務,但是系統進程中,JBOSS服務卻沒有宕掉的奇怪現象。
修改$jboss/bin/run.conf文件,找到“#JAVA_OPTS=”,如果沒有該字符串,請添加,並去掉最前面的“#”,修改該字符 串(含雙引號)為JAVA_OPTS="-server -Xms512m -Xmx512m”,這是分配JVM的最小和最大內存,取決於硬件物理內存的大小,建議均設為物理內存的一半。
更詳細的介紹請參見http://java.sun.com/docs/hotspot/VMOptions.html
2.4 OS字符集問題
如果應用服務需要OS支持GBK字符集,修改文件/etc/sysconfig/i18n
內容為:
LANG="zh_CN.GB18030"
LANGUAGE="zh_CN.GB18030:zh_CN.GB2312:zh_CN"
SUPPORTED="zh_CN.GB18030:zh_CN:zh"
SYSFONT="lat0-sun16"
SYSFONTACM="8859-15"
2.5 JBOSS服務的啟動、停止
$JBOSS_HOME以及%JBOSS_HOME%為jboss在linux、win下安裝的路徑,如果配置了,直接照樣引用即可。
啟動:
1、for linux: $JBOSS_HOME /bin/run.sh
2、for win :%JBOSS_HOME%/bin/run.bat
關閉/停止:
1、for linux: $JBOSS_HOME /bin/ shutdown.sh –S
2、for win :%JBOSS_HOME%/bin/ shutdown –S
可以用tail –f $JBOSS_HOME /server/default/log/server.log來查看jboss服務的啟動或停止的信息。