2. 开启远程调试端口JAVA_OPTS="$JAVA_OPTS -Xrunjdwp:transport=dt_socket,address=8787,server=y,suspend=n"
3. 开启jmx服务,使用jconsole进行远程监控及热修改
CATALINA_OPTS="$CATALINA_OPTS -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=8849 -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false -Djava.rmi.server.hostname=10.20.136.203"
4. 关于产品级别的JVM参数参考
JAVA_OPTS="$JAVA_OPTS -server -Xms3G -Xmx3G -Xss256k -XX:PermSize=128m -XX:MaxPermSize=128m -XX:+UseParallelOldGC -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/usr/dump -XX:+PrintGCDetails -XX:+PrintGCTimeStamps -Xloggc:/usr/dump/heap_trace.txt -XX:NewSize=1G -XX:MaxNewSize=1G"
5. 配置多root
在jboss-service.xml中配置URLDeploymentScanner Mbean,修改URLs属性
deploy/,file:/data/webapps/simple-web/current,file:/data/webapps/complex-web/current
在simple-web/current目录下分别解压缩simple-web.war包到simple-web.war目录下,即simple-web/current/simple-web.war目录,后者类似,在各自目录下的WEB-INF下创建jboss-web.xml文件,内容如下
PUBLIC "-//JBoss//DTD Web Application 2.3V2//EN"
"http://www.jboss.org/j2ee/dtd/jboss-web_3_2.dtd">
这样就可以在一台机器上将多个项目配置成不同域名下的root路径
6. 两个JBoss 实例再一台机器上启动的端口配置
refer to: http://wwtyler.iteye.com/blog/210234
经验证主要有以下几个地方需要改动,用来避免启动时的地址已经被绑定的异常。
环境:JBoss 4.2.2GA,JDK 1.5
1. $JBoss_home/server/default/deploy/ejb3.deployer/META-INF/jboss-service.xml
修改3873端口的值;
2. $JBoss_home/server/default/deploy/jboss-web.deployer/server.xml
修改8080,8009,8443端口值。
3. $JBoss_home/server/default/conf/jboss-service.xml
修改8083,1098,1099,4444,4445,4446端口值
4. $JBoss_home/server/default/conf/jboss-minimal.xml
修改1099端口值,与3中保持一致。
5. $JBoss_home/server/default/deploy/jms/uil2-service.xml
修改8093端口值。
7. JBoss启动时加载应用程序的顺序
refer to: http://tanyankai.iteye.com/blog/569627
引用
1. 以下说到的版本是jboss-4.2.3.GA
2.
3. 并且假设JBoss安装在D:\Java\jboss-4.2.3.GA
4.
5. JBoss部署的时候支持很多种格式打的包,比如说我们从deploy目录下面会看到有后缀名为deployer、sar,war,rar,xml ... (后来发现其实JBoss部署支持的格式,远远不止这些)
6.
7. 但是这些不同格式的应用是怎样的一个加载顺序呢?或者说有没有什么规律?带着这个疑问我在Jboss启动的时候仔细的看了一下命令行中的信息,发现两个信息:
8.
9. 1、 最先加载的是后缀名为deployer目录下应用或者服务;
10.
11. 2、 每次都会等有相同后缀名的应用(或者目录下的应用)完全加载完之后才会去加载另外一种后缀名
12.
13. 发现这两点之后,我就找了一下Jboss的一些配置文件,原来在D:\Java\jboss-4.2.3.GA\server\default\conf \xmdesc org.jboss.deployment.MainDeployer-xmbean.xml文件里面有这么一段内容:
引用
1.
2.
3.
4.
5.
6.
17.
18.
19.
20.
8. Jboss后台运行
nohup ./run.sh -b 0.0.0.0 >/dev/null &
9.
引用
首先如果仅仅是想改变部署是加载war包的先后顺序,只需设置jboss-server.xml 里面的
如果需要完全自定义的加载顺序,而且不想改包的名称,那就重新实现一个URLComparator吧。
JBOSS 加载 应用依赖jboss-server.xml 里的下面mbean实现。
其中URLComparator属性决定排序,所以要从这个地方入手。重新实现一个。
如果需要获取Jboss的配置信息可以从 org.jboss.system.server.ServerConfigLocator获取。
还有个问题,如果要让自己写的类能加载,还需要修改启动参数:
set JAVA_OPTS=%JAVA_OPTS% -Djboss.boot.library.list=log4j-boot.jar,jboss-common.jar,jboss-system.jar,jboss-xml-binding.jar,namespace.jar,xxx.jar
在原来几个jar包基础上增加自己的xxx.jar。
参考资料:
http://doc.javanb.com/jboss-4-0-1-sp1-system-api/org/jboss/deployment/package-tree.html
http://onecan.iteye.com/blog/83145
下面贴出代码,这个类比较有意思,没有用简单的继承重写DeploymentSorter,而是使用装饰模式,思路清晰,一目了然。
package org.jboss.deployment.scanner;
import java.net.URL;
import java.util.Comparator;
import org.jboss.deployment.DefaultDeploymentSorter;
import org.jboss.deployment.DeploymentSorter;
public class PrefixDeploymentSorter
implements Comparator, DefaultDeploymentSorter
{
private DeploymentSorter sorter;
public PrefixDeploymentSorter()
{
this.sorter = new DeploymentSorter();
}
public String[] getSuffixOrder() {
return this.sorter.getSuffixOrder();
}
public void setSuffixOrder(String[] suffixOrder)
{
this.sorter.setSuffixOrder(suffixOrder);
}
public int compare(Object o1, Object o2)
{
int comp = getPrefixValue((URL)o1) - getPrefixValue((URL)o2);
return ((comp == 0) ? this.sorter.compare(o1, o2) : comp);
}
private int getPrefixValue(URL url)
{
String path = url.getPath();
int nameEnd = path.length() - 1;
if (nameEnd <= 0) {
return 0;
}
if (path.charAt(nameEnd) == '/') {
--nameEnd;
}
int nameStart = path.lastIndexOf(47, nameEnd) + 1;
int prefixEnd = nameStart;
while ((prefixEnd <= nameEnd) && (Character.isDigit(path.charAt(prefixEnd)))) {
++prefixEnd;
}
if (prefixEnd == nameStart) {
return -1;
}
while ((nameStart < prefixEnd) && (path.charAt(nameStart) == '0')) {
++nameStart;
}
return ((nameStart == prefixEnd) ? 0 : Integer.parseInt(path.substring(nameStart, prefixEnd)));
}
}