寫在前面的話:
由于本人也是JBOSS的初級用戶,JBOSS又很強大,在工作中也是摸索積累的過程,因此總結難免有所錯誤或紕漏,但已經是盡我的努力,力求正確,如有錯誤或紕漏,敬請指正。
文檔作者:周懷進
聯系方式:
blog: http://spaces.msn.com/members/zhj-michael/
目 錄
1 .Apache2.0及連接器jk1.2的編譯部署... 1
1.4.3.workers2.properties的所有內容... 4
2.JBOSS3.2.3/3.2.6部署及配置修改... 5
2.2.2配置集群(Clustering),調整參數... 7
2.2.5訪問URL如果是目錄,不想顯示該目錄下文件... 9
2.2.7配置數據源在APP應用加載前有效(各相關服務加載完畢) 10
2.2.9配置contentType及charset,TOMCAT5.0下JSP統一配置... 12
1 .Apache2.0及連接器jk1.2的編譯部署
1.1下載相關軟件包
我們需要軟件及其版本說明:
a) apache服務器:httpd-2.0.54
下載地址: http://httpd.apache.org/download.cgi
b) apache/tomcat連接器:jk1.2.14,這里選用1.2.*版本,雖然有jk2.0,但據相關文檔介紹,jk2.0已不再開發,而 jk1.2.*版本使用范圍很廣,久經考驗了,穩定性有保障.兩個版本系列對應的配置也有很大的變化,故而這里選用jk1.2系列
下載地址:
http://www.apache.org/dist/tomcat/tomcat-connectors/jk/source/jk-1.2.14/
安裝apache本文檔依據的版本是httpd-2.0.54,下載Unix Source,下文介紹主要以linux OS為主,間或會介紹一點windows下安裝的細節。
我們的目標是用apache來做前端的web服務器,后端用jboss3.2.6,實現負載均衡。
1.2 apache2.0的編譯安裝
下載完源程序包之后,放到一個臨時目錄中,如 /home/software/:
#cd /home/software/
#tar zxvf httpd-2.0.54.tar.gz
#cd /home/software/httpd-2.0.54
#./configure --enable-MODULE=shared --enable-so --with-mpm=worker
#make
#make install
參數解釋:
--enable-MODULE=shared :該參數是使得相關的模塊編譯為可動態加載模塊(DSO模式),如果不選用該選項,apache默認的選項是: --enable-MODULE=static,表示將相關的模塊靜態編譯。
兩者的區別是:前者使得可以需要更新、重編譯某模塊(核心模塊不受限于這種模式,如core、mod_so)時,只需單獨編譯該模塊即可,而不需重新編譯整個apache source code,做到單獨升級。前者弊端是導致apache啟動時慢20%左右,在運行階段慢5%左右,另外DSO模式不是所有OS都支持的,和軟件環境有關系。
--enable-so :該參數表示支持用mod_so模塊提供的功能,用LoadModule在httpd.conf文件或包含的conf文件中動態加載某個模塊。
--with-mpm=worker :該參數是配置apache將以何種模式編譯的。Apache網站文檔指出不同操作系統下的不同的默認模式.
BeOS |
|
Netware |
|
OS/2 |
|
Unix |
|
Windows |
在安裝完apache后,在類unix OS下,可以在./bin目錄下用./httpd –l 來看到編譯時指定的mpm參數,他們對應著不同的.c模塊。
在windows環境下,可以用./bin/Apache –l 來查看相關被編譯的模塊。Win環境下默認是 mpm_winnt,則可以看到:
C:\Apache Group\Apache2\bin>apache -l
Compiled in modules:
core.c
mod_win32.c
mpm_winnt.c
http_core.c
mod_so.c
各模式的區別,更具體的描述請參見http://httpd.apache.org/docs/2.0/mpm.html,下面只簡單說明一下,worker模式是以process/thread混和模式運行的,如果WEB服務器的期望負載較大的話,則推薦使用worker模式,如果需要一個穩定性考慮為優先的服務器的話,推薦使用prefork模式,同樣的負載條件下,prefork模式的apache占用的內存會大很多。
默認安裝的路徑為: /usr/local/apache2/,如果要指定安裝路徑,則用參數./configure --prefix=PREFIX來指定安裝路徑,PREFIX為指定的絕對路徑。
可以用PREFIX/bin/apachectl start 來測試是否可以正常啟動服務。
可以用PREFIX/bin/httpd –t來測試http.conf的語法是否合法。
1.3 jk1.2.14的編譯安裝
下載完源程序包之后,放到一個臨時目錄中,如 /home/software/:
1、#cd /home/software/
2、#tar zxvf jakarta-tomcat-connectors-1.2.14.1-src.tar.gz
3、#cd /home/software/jakarta-tomcat-connectors-1.2.14.1-src/jk/native
4、# ./configure --with-apxs=/usr/local/apache2/bin/apxs
5、#make
6、# cp ./apache-2.0/mod_jk.so /usr/local/apache2/modules
查看…/native目錄,會看到有apache-1.3以及apache-2.0目錄,在第4步,用--with-apxs參數來指定擴展程序apxs的位置,make程序會根據提供的apxs的版本來辨別需要針對apache的哪個版本來生成mod_jk.so,如本文所示例,程序將知道需要為apache2.0生成mod_jk.so,因此編譯工作將會在...jk/native/apache-2.0中進行,瀏覽編譯日志信息會看到這些信息。
第6步是將編譯后的so拷貝至apache的安裝路徑的modules目錄中,應該根據安裝路徑去調整上述腳本中的路徑。
另外可以將mod_jk.so靜態連接到apache2.0中,然后再一次編譯apache2.0,在上述腳本中加上參數:
./configure --with-apache=/home/software/httpd-2.0.54
具體請參閱:
http://tomcat.apache.org/connectors-doc/howto/apache.html
以上工作就算結束了編譯、安裝工作,下面將進行參數調整,部署工作。
1.4 apache及jk1.2的參數配置
1.4.1.httpd.conf的修改
該文件的路徑位于$APACHE-HOME/conf
上述編譯過程中我們選用的worker模式,因此我們將修改worker模塊的配置
<IfModule worker.c>
StartServers 4 #最初建立進程的數量
ServerLimit 24 #進程建立的最大數量,硬限制
ThreadLimit 128 #每一進程能創建線程的最大數量,硬限制,該參數建議#和ThreadsPerChild一致,如果ThreadLimit > ThreadsPerChild的話,會造成不##必要的內存消耗。
MaxClients 3072 #同時可以得到處理的客戶端的最大數量
MinSpareThreads 100 #所有進程中空閑線程的總數最小數值
MaxSpareThreads 200 #所有進程中空閑線程的總數最大數值
ThreadsPerChild 128 #每個子進程可以建立的固定數量的線程
MaxRequestsPerChild 0 #用于控制服務器建立和結束進程的頻率,為0表示沒有#限制,但在solaris OS下該值可能會出錯,可以設置為1000或2000。根據系統#的并發負載吧。
</IfModule>
在httpd.conf文件的最后一行加上:Include conf/mod_jk2.conf
另外還需修改#ServerName www.example.com:80為ServerName 127.0.0.1:80
1.4.2.mod_jk2.conf的所有內容
新建該文件,并將該文件置于$APACHE-HOME/conf
LoadModule jk_module modules/mod_jk.so
JkWorkersFile conf/workers2.properties
JkLogFile logs/mod_jk.log
# Set the jk log level [debug/error/info]
JkLogLevel info
# Select the log format
JkLogStampFormat "[%a %b %d %H:%M:%S %Y] "
# JkOptions indicate to send SSL KEY SIZE,
JkOptions +ForwardKeySize +ForwardURICompat -ForwardDirectories
# JkRequestLogFormat set the request format
JkRequestLogFormat "%w %V %T"
JkMount /* loadbalancer
#apache will serve the static picture.
#以下命令意味著所有的圖片將由APACHE解析
JkUnMount /*.jpg loadbalancer
JkUnMount /*.gif loadbalancer
JkUnMount /*.swf loadbalancer
JkUnMount /*.bmp loadbalancer
JkUnMount /*.png loadbalancer
在上述配置中,是配置所有圖片由APACHE來解析,因此我們需要將項目中的所有圖片均拷貝到$APACHE-HOME/htdocs/下,如果你的部署的項目(應用),在訪問時需要輸入前綴,如http://www.DDD.com/TestCrm/login.do,則請注意,在$APACHE-HOME/htdocs/下需要建一個目錄“TestCrm”,然后按照你項目中圖片所在的路徑,連同路徑中所有目錄一并考入TestCrm目錄,例如你的圖片位于
…./TestCrm.war/images/1.jpg,那么為了APACHE能找到圖片,則你在APACHE中的圖片位置應是$APACHE-HOME/htdocs/TestCrm/images/1.jpg。
1.4.3.workers2.properties的所有內容
新建該文件,并將該文件置于$APACHE-HOME/conf
請注意:下列配置中的server105,server106等紫色的斜體字符串都是根據部署的jboss的信息來部署的,其中server105,server106需要在jboss的相關配置中修改,具體詳見下文介紹。對應的IP地址應改為JBOSS所在的server IP。
#以下為workers2.propertie的內容
worker.list=loadbalancer,server105,server106
# Define the first node...
worker.server105.port=8009
worker.server105.host=192.10.12.105
worker.server105.type=ajp13
worker.server105.lbfactor=1
#worker.server105.local_worker=1
worker.server105.cachesize=100
# Define the 2nd node...
worker.server106.port=8009
worker.server106.host=192.10.12.106
worker.server106.type=ajp13
worker.server106.lbfactor=1
#worker.server106.local_worker=1
worker.server106.cachesize=100
# Now we define the load-balancing behaviour
worker.loadbalancer.type=lb
worker.loadbalancer.balanced_workers=server105,server106
worker.loadbalancer.sticky_session=1
說明:worker.loadbalancer.sticky_session=1參數的設定,意味著一旦用戶通過APACHE連接到某臺JBOSS SERVER(創建了session),則只要在該臺JBOSS服務正常的情況下,該用戶所有的請求都將會發送至該JBOSS SERVER。
1.5 apache服務的啟動和停止
/usr/local/apache2/bin/apachectl start
/usr/local/apache2/bin/apachectl stop
如果啟動時報錯,提示80端口被綁定,請注意有可能是在裝linux OS時選裝了apache并且啟動了服務,請直接在命令行用apachectl stop ,停止原先的服務,其存在路徑一般為/usr/sbin/apachectl
2.JBOSS3.2.3/3.2.6部署及配置修改
2.0 FOR NEW USER
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>
2)、需要啟動一個服務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
2.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:
1 |
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,并正確獲取數據了!!!
配置文件如下:
1 |
<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/
2.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
2.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服務的啟動或停止的信息。
3.附apache https 服務器的安裝
以下為李響、譚述綱提供。感謝他們。
apache https 服務器的安裝
apache 1.x版本需要裝第三方的模塊,mod_ssl,由于我們公司全部采用的是apahce2.x,所以這個版本的安裝不做討論
apache 2.0以上自帶ssl支持,
但首先要安裝openssl,一般系統自帶的openssl版本較低,最好下載
源碼安裝,例如openssl-0.9.7i
./config
Make
Make test
make install
就可以了
在apache2源碼目錄下執行
./configure --prefix=/usr/local/apache --enable-module=so --enable-shared=max --enable-ssl=static --with-ssl=/usr/local/ssl --enable-mods-shared=all
然后
Make
make install
修改httpd.conf 加入SSL支持部分,這里指定使用SSL v2協議
SSLProtocol -all +SSLv2
SSLCipherSuite SSLv2:+HIGH:+MEDIUM:+LOW:+EXP
生成認證證書
先建立一個 CA 的證書,
首先為 CA 創建一個 RSA 私用密鑰,
[S-1]
openssl genrsa -des3 -out ca.key 1024
系統提示輸入 PEM pass phrase,也就是密碼,輸入后牢記它。
生成 ca.key 文件,將文件屬性改為400,并放在安全的地方。
[S-2]
chmod 400 ca.key
你可以用下列命令查看它的內容,
[S-3]
openssl rsa -noout -text -in ca.key
利用 CA 的 RSA 密鑰創建一個自簽署的 CA 證書(X.509結構)
[S-4]
openssl req -new -x509 -days 3650 -key ca.key -out ca.crt
然后需要輸入下列信息:
Country Name: cn 兩個字母的國家代號
State or Province Name: An Hui 省份名稱
Locality Name: Bengbu 城市名稱
Organization Name: Family Network 公司名稱
Organizational Unit Name: Home 部門名稱
Common Name: Chen Yang 你的姓名
Email Address: sunstorm@263.net Email地址
生成 ca.crt 文件,將文件屬性改為400,并放在安全的地方。
[S-5]
chmod 400 ca.crt
你可以用下列命令查看它的內容,
[S-6]
openssl x509 -noout -text -in ca.crt
下面要創建服務器證書簽署請求,
首先為你的 Apache 創建一個 RSA 私用密鑰:
[S-7]
openssl genrsa -des3 -out server.key 1024
這里也要設定pass phrase。
生成 server.key 文件,將文件屬性改為400,并放在安全的地方。
[S-8]
chmod 400 server.key
你可以用下列命令查看它的內容,
[S-9]
openssl rsa -noout -text -in server.key
用 server.key 生成證書簽署請求 CSR.
[S-10]
openssl req -new -key server.key -out server.csr
這里也要輸入一些信息,和[S-4]中的內容類似。
至于 extra attributes 不用輸入。
你可以查看 CSR 的細節
[S-11]
openssl req -noout -text -in server.csr
下面可以簽署證書了,需要用到腳本 sign.sh
[S-12]
sign.sh server.csr
就可以得到server.crt。
將文件屬性改為400,并放在安全的地方。
[S-13]
chmod 400 server.crt
刪除CSR
[S-14]
rm server.csr
Sign.sh在openssl目錄中沒有。我是在mod_ssl第三方模塊中提取的。
把生成好的文件放在相應的認證目錄下。如果沒有相應的目錄,可以手工建立
以SSL支持的方式啟動apache
/usr/local/apache/bin/apachectl startssl