JBOSS4.2.2 EJB WEB 群集配置與部署全過程
1. 修改虛擬機的參數run.bat或run..conf 文件中的jvm堆大小,如果是用Sun或HP的JDK需要設置MaxPermSize如:
set JAVA_OPTS=%JAVA_OPTS% -Xms256m -Xmx1024m -XX:MaxPermSize=128m
2. 啟動執行$JBOSS_HOME\bin\run.sh 或run.bat
執行 run.bat –h 顯示幫助
usage: run.bat
options:
-h, --help Show this help message
-V, --version Show version information
-- Stop processing options
-D
-d, --bootdir=
-p, --patchdir=
-n, --netboot=
-c, --configuration=
-B, --bootlib=
-L, --library=
-C, --classpath=
-P, --properties=
-b, --host=
-g, --partition=
-u, --udp=
-l, --log=
如啟動所有配置并綁定IP為192.168.101.20
run.sh –c all –b 192.168.101.20
3. 停止執行$JBOSS_HOME\bin\ shutdown.sh 或shutdown.bat
shutdown.sh -S
4. 配置控制臺安全5. 數據庫連接池將$JBOSS_HOME \docs\examples\jca\oracle-ds.xml復制為$JBOSS_HOME\server\default\deploy\trms-ds.xml并修改連接參數。
如下:
6. 配置服務器日志$JBOSS_HOME\server\default\conf\jboss-log4j.xml
注釋按日期滾動的日志
7. 配置服務端lib包將應用程序的包復制到$JBOSS_HOME \server\default\lib下,并下刪與JBOSS沖突的應用包
antlr-2.7.6.jar
cglib-nodep-2.1_3.jar
commons-collections-3.2.jar
commons-logging-1.1.jar
dom4j-1.6.1.jar
junit-4.1.jar
quartz-1.5.2.jar
r
8. 配置EJB調用從容器外能夠正常調用EJB,但是web 應用中spring bean調用EJB出現下面異常
RemoteProxyFailureException: No matching RMI stub method found for: public abstract
從JSP頁面直接調用EJB <% Hashtable hs = new Hashtable(); hs.put("java.naming.factory.initial","org.jnp.interfaces.NamingContextFactory"); hs.put("java.naming.provider.url","jnp://localhost:1099"); hs.put("java.naming.factory.url.pkgs","org.jboss.naming:org.jnp.interfaces"); Context iniCtx = new InitialContext(hs); Object ref = iniCtx.lookup("oss.service.security.business.SecuContainerBo"); oss.service.security.business.SecuContainerBoEJBHome ejbHomeObject = (oss.service.security.business.SecuContainerBoEJBHome) PortableRemoteObject.narrow(ref, oss.service.security.business.SecuContainerBoEJBHome.class); out.print((ejbHomeObject.create()).loadAllAuth(new oss.service.security.domain.SysStaffMember())); %>java.rmi.ServerException: EJBException:; nested exception is: javax.ejb.EJBException: Invalid invocation, check your deployment packaging, method=public abstract
解決辦法:
1.修改 conf/jboss-service.xml 中NamingService 的CallByValue 參數值為'true'
2.修改 deploy/ear-deployer.xml,中的Isloated和CallByValue 為 true
3.修改 deploy\jboss-web.deployer\META-INF\jboss-service.xml中的Java2ClassLoadingCompliance 和 UseJbossWebLoader為true
9. 應用部署將EJB的jar包和WEB的 war 復制到$JBOSS_HOME\server\default\deplay
如果是集群環境則復制到$JBOSS_HOME\server\default\farm
10. 客戶端調用l 將$JBOSS_HOME\client\jbossall-client.jar復制到lib目錄下
l 修改jndi.properties內容為
java.naming.factory.initial=org.jnp.interfaces.NamingContextFactory
java.naming.factory.url.pkgs=org.jboss.naming:org.jnp.interfaces
java.naming.provider.url=localhost:1099
11. JBOSS集群
EJB集群的結構圖
Web負載均衡集群結構圖
11.1. 部署JBOSS集群服務
用 $JBOSS_HOME \server\all的配置來部署集群則不需這一步,只有下面1、2兩步是default配置要多做的工作。
1. 將$JBOSS_HOME \server\all\deploy 下的cluster-service.xml和jboss-web-cluster.sar復制到$JBOSS_HOME \server\default\deploy
2. 將$JBOSS_HOME \server\all\lib 下的jgroups.jar、jbossha.jar復制到$JBOSS_HOME \server\default\lib
11.2. 配置Jboss節點
session復制配置
jboss session復制是jboss session同步的一種實現。原理是在各Jboss節點間建立橫向聯系,每個節點都將本節點的session變化同步到其他所有節點上。
jboss的session復制與HTTP集群是相互配合、相互獨立的兩個系統。session復制是節點間的橫向聯系,HTTP集群是負載均衡器與節點的縱向聯系。
l $JBOSS_HOME/ server/default/deploy/jboss-web-cluster.sar /META-INF/jboss-service.xml和 $JBOSS_HOME/ server/default/deploy/cluster-service.xml
注意:集群的各節點需要在同一網段.
兩個文件都要修改,前者是web session復制的,后者是jboss EJB等集群
找到
找到
將全部down_thread和up_thread的false都改為true.
在
在
l $JBOSS_HOME/ server/default/deploy/jboss-web-cluster.sar /META-INF/jboss-service.xm中的其他參數
ClusterName是集群名稱 在同一局域網內,可以存在多個jboss集群,根據集群名稱區分它們.所以,集群中各節點配置的集群名稱必須一致,而機器IP則沒有特殊要求,只要它們能相互連通. 理論上,可以在一臺機器上安裝多個Jboss實例,分屬于不同的集群.但這會極大地增加復雜度,是不好的配置方式.嚴重不建議給自己找麻煩。
IsolationLevel是隔離等級. 可選值包括:SERIALIZABLE, REPEATABLE_READ, READ_COMMITTED, READ_UNCOMMITTED, 和 NONE。這里的隔離級別和數據庫的隔離級別有同樣的含義,對于大多數WEB應用程序來講通常設置為REPEATABLE_READ。
CacheMode是緩存模式。 由于session復制是通過緩存實現的,所以實際上是復制模式.可選值包括:REPL_SYNC 和REPL_ASYNC,確定改變是應該同步還是異步復制。缺省值是REPL_ASYNC.使用同步復制,確保在請求完成之前傳播改變,session同步沒有滯后,但效率低。
11.3. 配置應用程序
在應用程序的web.xml的
在jboss-web.xml中增加以下內容:
l 客戶端jndi.properties內容為
java.naming.factory.initial=org.jnp.interfaces.NamingContextFactory
java.naming.factory.url.pkgs=org.jboss.naming:org.jnp.interfaces
java.naming.provider.url=192.168.101.19:1099, 192.168.101.20:1099
11.4. Apache負載均衡
11.4.1. 下載mod_jk
http://apache.mirror.phpchina.com/tomcat/tomcat-connectors/jk/binaries/ 到%apache%\modules 下
11.4.2. 修改%apache%\conf\httpd.conf
在文件末尾添加: Include conf/mod_jk2.conf
11.4.3. 在%apache%\conf下新建文件mod_jk2.conf
文件內容如下:
# Load mod_jk module. Specify the filename
# of the mod_jk lib you’ve downloaded and
# installed in the previous section
LoadModule jk_module modules/mod_jk.so
# Where to find workers.properties
JkWorkersFile conf/workers2.properties
# Where to put jk logs
JkLogFile logs/mod_jk.log
# Set the jk log level
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 /* router
其中JkMount /* router的意思是,把所有的請求都發給router處理??梢酝ㄟ^修改url來控制發送某些request。
11.4.4. 在%apache%\conf下新建文件workers2.properties
其內容為:
# The advanced router LB worker
worker.list=router
# Define the first node...
worker.server1.port=8009
worker.server1.host=192.168.101.19
worker.server1.type=ajp13
worker.server1.lbfactor=1
worker.server1.redirect=server2
# Define the first node...
worker.server2.port=8009
worker.server2.host=192.168.101.20
worker.server2.type=ajp13
worker.server2.lbfactor=1
# Define prefered failover node for server1
worker.server2.redirect=server1
# Now we define the load-balancing behaviour
worker.router.type=lb
worker.router.balance_workers=server2,server1
worker.router.sticky_session=0
# Add the status worker to the worker list
worker.list=jkstatus
# Define a 'jkstatus' worker using status
worker.jkstatus.type=status
# Add the jkstatus mount point
JkMount /jkmanager/* jkstatus
# Enable the JK manager access from localhost only
JkMount jkstatus
Order deny,allow
Deny from all
Allow from 127.0.0.1
其中對于node的命名規則是worker.節點名.xxxx。所以上述文件定義了兩個節點:server1和server2。8009端口是jboss默認的ajp端口,另外需要注意的是worker.server2.lbfactor參數,它是節點的負載加權,它的值越大,獲得負載的機會就越大??梢愿鶕ode的硬件性能進行調整。worker. router.sticky_session參數是指定是否使用粘性session。配置了http session復制就可以不需要粘性session。上面配置的是不使用粘性session。worker.server1.redirect=為failover轉移到哪個worker
11.4.5. 配置JBOSS支持粘性mod_jk
修改$JBOSS_HOME/ server/default/deploy/jboss-web.deployer/META-INF/jboss-service.xml
11.4.6. 配置JBOSS支持粘性session
修改$JBOSS_HOME/ server/default/deploy/jboss-web.deployer/META-INF/jboss-service.xml
1. 修改虛擬機的參數... 1
2. 啟動... 1
3. 停止... 2
4. 配置控制臺安全... 2
5. 數據庫連接池... 2
6. 配置服務器日志... 3
7. 配置服務端lib包... 4
8. 配置EJB調用... 4
9. 應用部署... 6
10. 客戶端調用... 6
11. JBOSS集群... 6
11.1. 部署JBOSS集群服務... 8
11.2. 配置Jboss節點... 8
11.3. 配置應用程序... 10
11.4. Apache負載均衡... 10
11.4.1. 下載mod_jk. 10
11.4.2. 修改%apache%\conf\httpd.conf10
11.4.3. 在%apache%\conf下新建文件mod_jk2.conf11
11.4.4. 在%apache%\conf下新建文件workers2.properties. 11
11.4.5. 配置JBOSS支持粘性mod_jk. 12
11.4.6. 配置JBOSS支持粘性session. 12-
posted on 2010-04-14 16:33 大魚 閱讀(898) 評論(0) 編輯 收藏 所屬分類: JBOSS