目录
完整参考资料 JBOSS4指南
http://docs.jboss.org/jbossas/jboss4guide/r5/jboss4guide.zip
run.bat或run..conf 文件中的jvm堆大小,如果是用Sun或HP的JDK需要设置MaxPermSize
如:
set JAVA_OPTS=%JAVA_OPTS% -Xms256m -Xmx1024m -XX:MaxPermSize=128m
执行$JBOSS_HOME/bin/run.sh 或run.bat
执行 run.bat –h 显示帮助
usage: run.bat [options]
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
执行$JBOSS_HOME/bin/ shutdown.sh 或shutdown.bat
shutdown.sh -S
将$JBOSS_HOME /docs/examples/jca/oracle-ds.xml复制为$JBOSS_HOME/server/default/deploy/trms-ds.xml并修改连接参数。
如下:
$JBOSS_HOME/server/default/conf/jboss-log4j.xml
注释按日期滚动的日志
将应用程序的包复制到$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
从容器外能够正常调用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
将EJB的jar包和WEB的 war 复制到$JBOSS_HOME/server/default/deplay
如果是集群环境则复制到$JBOSS_HOME/server/default/farm
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
EJB集群的结构图
Web负载均衡集群结构图
用 $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
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等集群
找到
找到
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同步没有滞后,但效率低。
在应用程序的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
http://apache.mirror.phpchina.com/tomcat/tomcat-connectors/jk/binaries/ 到%apache%/modules 下
在文件末尾添加: Include 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 [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 /* router
其中JkMount /* router的意思是,把所有的请求都发给router处理。可以通过修改url来控制发送某些request。
其内容为:
# 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参数,它是节点的负载加权,它的值越大,获得负载的机会就越大。可以根据node的硬件性能进行调整。worker. router.sticky_session参数是指定是否使用粘性session。配置了http session复制就可以不需要粘性session。上面配置的是不使用粘性session。worker.server1.redirect=为failover转移到哪个worker
修改$JBOSS_HOME/ server/default/deploy/jboss-web.deployer/META-INF/jboss-service.xml
修改$JBOSS_HOME/ server/default/deploy/jboss-web.deployer/META-INF/jboss-service.xml
注意:jvmRoute的值必须和mod_jk中的节点名字正确对应,否则无法正确路由