读书人

java抛什么错误能让tomcat停止

发布时间: 2012-12-21 12:03:49 作者: rapoo

java抛什么异常能让tomcat停止?
做项目的时候比如
数据库连接不上,配置文件错误,基本信息加载失败...
这个时候tomcat继续启动也没有什么意义了,java抛个什么异常能让tomcat停止呢?
[最优解释]
...好消息 我找到如何关闭Tomcat服务了 坏消息 只能本地IP使用

首先你的server.xml里 关于上方是设置监听关闭请求端口的地方

<Server port="8005" shutdown="SHUTDOWN">

<!--APR library loader. Documentation at /docs/apr.html -->
<Listener className="org.apache.catalina.core.AprLifecycleListener" SSLEngine="on" />
<!--Initialize Jasper prior to webapps are loaded. Documentation at /docs/jasper-howto.html -->
<Listener className="org.apache.catalina.core.JasperListener" />
<!-- Prevent memory leaks due to use of particular java/javax APIs-->....


向指定主机的8005端口发送信息"SHUTDOWN"(shutdown属性定义的是啥命令值就是啥) 即可关闭端口
你可以用JAVA的Socket来做 也可以先用telnet来做

telnet localhost 8005
//然后输入SHUTDOWN

[其他解释]
System.exit能让tomcat挂掉
[其他解释]
方法一:System.exit()方法,是可以使Tomcat停止的。
方法二:出现你想要的异常,手动调用方法可以杀死Tomcat进程,在Java中有杀死进程的方法,具体可以参考下互联网的搜索结果。
[其他解释]

通过抛出异常通过调用操作系统的进程停掉tomcat

System.exit能让tomcat挂掉

可是,有很多时候一个tomcat会部署很多项目的啊

为什么要停掉啊?

[其他解释]
楼主。给分了。相较以上的解决方案,俺自认为最优雅的方式:

在你的servlet 或者 jsp 中调用:

try{
MBeanServer server = MBeanUtils.createServer();
ObjectName name = new ObjectName("Catalina:type=Service,serviceName=Catalina");
server.invoke(name, "stop", new Object[0], new String[0]);
} catch (Exception e) {
e.printStackTrace();
}

然后,tomcat 停止了。就这么简单。

需要的jar文件,tomcat lib目录自带的 catalina.jar。

window tomcat 6 调试通过。
[其他解释]
引用:
引用:
请查看 #30楼
难道我木有直入主题么?


那请问你你在28楼又说的什么???
晕.直入...

你问题回答不错,但你又再41楼玩文字游戏...


第一,28楼说的话,比起你所说的话,要平和的多。尊重别人才能赢得别人的尊重。事实上,我就是很不爽你的态度,才参与了这个主题的讨论。大家在关注你的问题,在认真的思索,不管回答是否正确,你都应该感激,而不是不屑。

第二,朋友,这个不是文字游戏。

编程语言作为一门人工语言,我们每天都在通过玩儿所谓的“文字游戏”进行着从problem space到solution space的跨越。这个游戏,要的是精确的描述、直达问题的核心、优雅的解决方式。

从主贴的描述开始,关注这个论题的人就被你带入了一个错误的方向,可以说,你所反感的所谓“不着调”的回答,有一部分原因就在于你描述问题的方式上。事实上,你阐述自己的意图是非常含糊的。

#23 的 BearKin 同学很快理清了解决问题的正确方向,也就是:我们的工作重心是 shutdown tomcat SAFELY。tomcat本身的shutdown.sh脚本就做到了这一点。如果我们对它的实现机制一无所知,那我们就应该围绕这个解决问题的入口做逆向分析。BearKin 同学其实可以走的更远。

不管你是否本意如此,对于“文字游戏”的说法上,我想说的是,Exception 是你在离海岸还不远的时候使用的救生圈,而不是描述、传递、控制对象状态的主要方式。

从你主贴的阐述上,我看到的是,

第一:你的第一直觉是想停止服务,而没有考虑到这种停止 是 shutdown safely 或者是 terminate 甚至是 crash。
第二:你希望能通过一个Exception的抛出去影响容器的状态,虽然你很不买账大家对“用异常终止服务”的异议,但是,我想和你分享我的一个编程准则,即:这种方式是绝对不允许的。
第三:Exception 和 Message 的微妙分野。 异常也是消息,但是,请仔细品味异常的真正使用场合。我举个极端的例子:你甚至可以如下这么写,程序不会报错的。


public Exception handle(){


case
1 : return new MyException("stat1");
2 : return new MyException("stat2");
3 : return new MyException("stat3");
}



好了,我找了一种操纵tomcat的方式,有收获,这样就足够了。就此结束这个话题。
[其他解释]
.......未咩还没结贴 俺走的更远要干嘛 他只是想要一个在程序中安全结束的方式 我告诉他TOMCAT会起个端口用来监听关闭TOMCAT的请求(那个关闭脚本也是这么个功能 可是我不喜欢在代码中执行脚本 尤其是当程序不知道会在什么地方执行的情况下)

说实话 这个贴的能够得到的知识只是有趣 并不太有用(我唯一想到的地方就是我做了套软件给客户试用 如果客户用过期了我就用这种方式强关)

LZ的态度我没觉得有啥不好 他没说回复的人是S.B 也不是直接索要代码 当有回复时候他能马上做出反应 至少他是关心这个帖的 反倒是有些回复的人 要么说完全实现不了 要么实现了没有用 LZ反驳了几句 就被喷成这个样子 我真是感到无奈

看帖的态度要正确 要抱着学习的态度而来 不知道的话没什么丢人的 我也从帖子里学了很多东西 比如火龙果大神说的比较常识性的问题我是在看完之后才知道的(MBeanUtils的话 测试阶段还可以 开发阶段的话太麻烦了)

[其他解释]
引用:
开发期间我很少引用Tomcat的系统包(不导入的话无法编译 我是用IDE开发的..)
如果导入的话 这种JAR一般都是依赖具体的容器的 没办法保证TOMCAT7的LIB能在5下运行(毕竟现在没多少一个人开发的项目了..)
这样就是我说的主要原因 还有个我不确认的是 如果启动服务要通过你这种方式(你这个是启动服务再关闭的代码么) 我的IDE的很多功能不是都用不了了么


请查阅#30,再解释一下,我是在window xp 系统下,运行的tomcat 6。tomcat常规启动,图省事,我提供的代码是写在一个jsp页面里,
webapps/test/index.jsp
访问该jsp页面 http://localhost:8080/test/index.jsp,即可停止tomcat。查阅tomcat logs,可以看到,shutdown的整个过程是常规正常的。

刚下载了一个tomcat 7.0.21, 在 mac os 下运行,发现taomcat系统日志提示:
InstanceNotFoundException: Catalina:type=Service,serviceName=Catalina

name = new ObjectName("Catalina:type=Service,serviceName=Catalina");
修改为:
ObjectName name = new ObjectName("Catalina:type=Service");
之后,
虽然可以停止提供服务,但是,停止的过程显然不符合要求,日志显示:
org.apache.coyote.AbstractProtocol pause
Pausing ProtocolHandler ["http-bio-8080"]
org.apache.coyote.AbstractProtocol pause
Pausing ProtocolHandler ["ajp-bio-8009"]
org.apache.catalina.core.StandardService stopInternal
Stopping service Catalina
org.apache.coyote.AbstractProtocol stop
Stopping ProtocolHandler ["http-bio-8080"]
org.apache.coyote.AbstractProtocol stop
Stopping ProtocolHandler ["ajp-bio-8009"]

而 ps -ef 显示 tomcat的进程依然存在。



因为有比较长的时间没有接触这方面的工作,我暂时猜测可能是版本升级之后,mbean做了一定的调整,需要详细查看一下源码和descriptors。

粗略的翻阅了一下tomcat的manual,发现其实官方文档上已经说的很清楚,如何对容器进行操作,容器本身提供了三种方式: gui , script 和 jmx。
就本楼的问题而言,script 和 jmx 的方式都可以满足要求。

读着文档的时候,脑海回响着 read the fucking manual, search the fucking web, explore the fucking source code 的警句,真是一身冷汗啊。呵呵。

当前是节假日期间,休息娱乐为主,过几天在来仔细探索这个问题。祝节日快乐。
[其他解释]
楼主 从你的主贴看 一开始 你的思路就走偏了。

Exception <-> Termination

very bad smell.

Message <-> Service . this way pls.
[其他解释]

/**
* 执行注册、卸载、启动、停止服务相关操作
*
*/
public void executeOperate(int operateType)
{
String outText = null;


ServerOperate serverOperate = new ServerOperate();
String path = serverOperate.getTomcatPath();
String fileName = "";

switch (operateType)
{
case 1:
fileName = "regServer.bat";
break;
case 2:
fileName = "uninstallServer.bat";
break;
case 3:
fileName = "startServer.bat";
break;
case 4:
fileName = "stopServer.bat";
break;
default:
fileName = "regServer.bat";
}

path = "cmd /c " + path + "\\bin\\" + fileName + " " + path + "\\bin";

String command = path;

try
{
Process process = Runtime.getRuntime().exec(command);
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(process.getInputStream()));

while ((outText = bufferedReader.readLine()) != null)
{
System.out.println(outText); //输出测试
}
}
catch (IOException ioError)
{
ioError.printStackTrace();
}
}




试试看吧,从别的帖子看见的

[其他解释]
你这种想法本来就有问题,tomcat作为容器要管理多个项目,你一个项目出错就停tomcat,那其他项目怎么办?
真要弄,抛啥异常都不好使,除非你通过抛出异常通过调用操作系统的进程停掉tomcat
------其他解决方案--------------------


哥们,很确定的告诉你有,我遇到过!
[其他解释]
Tomcat有一个端口监听关闭请求 我觉得应该有正常一点的方式去做
我只知道ant可以通过catalina.jar远程上传项目 我想这个jar包可以做的事情更多
[其他解释]
该回复于2011-11-21 15:27:36被版主删除
[其他解释]
手动来吧~
[其他解释]
Just one!!!
现实中...没人往里放好几个项目吧???见过启多个tomcat的,在实际的项目中我基本没见过往tomcat放N个项目的.weblogic等我才放多个项目...汗一下.
我只是提问,找答案而已...有木有!!!
[其他解释]
我就不信不可以!
[其他解释]

引用:
System.exit能让tomcat挂掉


3Q楼上!!!还有其他的办法么?呵呵还想了解下
[其他解释]
tomcat 的设计的出发点不让exception 影响tomcat的运行
如果你在扒tomcat的漏洞,这好像不是地方
[其他解释]
不好意思,我就在同一个Tomcat上部署了多个项目。

引用:
Just one!!!
现实中...没人往里放好几个项目吧???见过启多个tomcat的,在实际的项目中我基本没见过往tomcat放N个项目的.weblogic等我才放多个项目...汗一下.
我只是提问,找答案而已...有木有!!!

[其他解释]
可以 你把内存搞爆 我们支持你哈
[其他解释]
引用:
通过抛出异常通过调用操作系统的进程停掉tomcat

System.exit能让tomcat挂掉

可是,有很多时候一个tomcat会部署很多项目的啊

为什么要停掉啊?


很多时候?真不知道你们项目有几个人用...量大了我们都分开放,从来不都放到一个tomcat中...
有些项目我们都用的weblogic...

汗...很多人都做玩具的???木人理解我意思...
[其他解释]
关键是tomcat支持多个项目发布,可如果有提供很好的方法让tomcat挂掉!
是否有点矛盾,就像一个被定义成final的常量,你却想要用办法去改变他的值。。。
[其他解释]
.......关于为什么我都已经回答了....
难道都没有看到???
我说了是tomcat启动的时候报错....
难道启动的时候报错你重启tomcat?只改某个工程中的?
比如status的配置文件错了呢
???
或要改呢?????


............................................................................................晕!
神马矛盾....都看题目没....
[其他解释]
这个贴我给100分,现在看来,真是给多了.

感谢:ticmy和hpjianhua
[其他解释]
你的需求是:当项目抛出异常时,停止tomcat,我们不管这个需求合不合理,总之楼主是要实现它
对于上面的两种方式我有点疑问
system.exit 我没试过 如果真的能够shutdown tomcat 那么自然是最简单的

另外杀进程的方式 我有一点疑问:是杀java进程 还是按照进程id去杀? tomcat好像起的是java的进程吧 如果杀java进程的话 会误杀很多其他的进程 杀进程id那么还要先去查下
[其他解释]
你们都是做玩具项目的,我擦!想想就想掐死你们!
[其他解释]
你搞个死循环 tomcat占你的内存过高
自动挂掉!!
[其他解释]
我来帮顶的 佩服楼主的精神~!!
[其他解释]
我就说有人能做到嘛!哇哈哈.BearKin佩服佩服!
[其他解释]
正式环境中如果部署的 tomcat 应该将 SHUTDOWN 端口号使用防火墙封掉,仅允许本地通过,再将 SHUTDOWN 改成其他的字符就可以了。
------其他解决方案--------------------


所以说要使用安全策略文件启动 tomcat,使得 System.exit、Runtime.exec 等危险的方法禁用掉。
[其他解释]

引用:
你们都是做玩具项目的,我擦!想想就想掐死你们!


好牛B的存在啊。。。技术论坛也有炫富哥?
本来以为是个geek,在追求不可思议之解。
原来我错了,这个问题还是真的打算搞到产品代码中去的啊~~
[其他解释]
直接掉tomcat下的关闭批处理不久行了
[其他解释]
如何异常严重的话就可以了
[其他解释]
引用:
可以 你把内存搞爆 我们支持你哈


+
[其他解释]
引用:
楼主 从你的主贴看 一开始 你的思路就走偏了。

Exception <-> Termination

very bad smell.

Message <-> Service . this way pls.


你非要纠结字眼是不是???基本配置加载失败当然就是异常了!!!就算写消息那也是在异常里啊!!别纠结字眼.都程序员搞什么窟窿文字!!!意思到位就行了.
[其他解释]
引用:
这样如果一个项目导致tomcat挂掉,那别的还正在运行的项目怎么办??
引用:
不好意思,我就在同一个Tomcat上部署了多个项目。


引用:
Just one!!!
现实中...没人往里放好几个项目吧???见过启多个tomcat的,在实际的项目中我基本没见过往tomcat放N个项目的.weblogic等我……



请顺着往下看...真想
[其他解释]
这样如果一个项目导致tomcat挂掉,那别的还正在运行的项目怎么办??
引用:
不好意思,我就在同一个Tomcat上部署了多个项目。


引用:
Just one!!!
现实中...没人往里放好几个项目吧???见过启多个tomcat的,在实际的项目中我基本没见过往tomcat放N个项目的.weblogic等我才放多个项目...汗一下.
我只是提问,找答案而已...有木有!!!

[其他解释]
引用:
正式环境中如果部署的 tomcat 应该将 SHUTDOWN 端口号使用防火墙封掉,仅允许本地通过,再将 SHUTDOWN 改成其他的字符就可以了。


默认不是只有本地能使用这个端口么..
[其他解释]
引用:
引用:

引用:

你们都是做玩具项目的,我擦!想想就想掐死你们!


好牛B的存在啊。。。技术论坛也有炫富哥?
本来以为是个geek,在追求不可思议之解。
原来我错了,这个问题还是真的打算搞到产品代码中去的啊~~


就知道有人会这么说!请问哪里炫了?我问问题,你们纠结字眼,又不是搞文字游戏,就不能直……


请查看 #30楼
难道我木有直入主题么?

[其他解释]
引用:
引用:

引用:

你们都是做玩具项目的,我擦!想想就想掐死你们!


好牛B的存在啊。。。技术论坛也有炫富哥?
本来以为是个geek,在追求不可思议之解。
原来我错了,这个问题还是真的打算搞到产品代码中去的啊~~


就知道有人会这么说!请问哪里炫了?我问问题,你们纠结字眼,又不是搞文字游戏,就不能直……


干脆再发一次:


try{
MBeanServer server = MBeanUtils.createServer();
ObjectName name = new ObjectName("Catalina:type=Service,serviceName=Catalina");
server.invoke(name, "stop", new Object[0], new String[0]);
} catch (Exception e) {
e.printStackTrace();
}

[其他解释]
引用:
引用:

你们都是做玩具项目的,我擦!想想就想掐死你们!




好牛B的存在啊。。。技术论坛也有炫富哥?
本来以为是个geek,在追求不可思议之解。
原来我错了,这个问题还是真的打算搞到产品代码中去的啊~~



就知道有人会这么说!请问哪里炫了?我问问题,你们纠结字眼,又不是搞文字游戏,就不能直入主题吗???
[其他解释]
NB
引用:
你们都是做玩具项目的,我擦!想想就想掐死你们!

[其他解释]
晕死,你咋知道我没有考虑.
文字游戏?
你真肤浅!
[其他解释]
引用:
引用:

楼主 从你的主贴看 一开始 你的思路就走偏了。

Exception <-> Termination

very bad smell.

Message <-> Service . this way pls.


你非要纠结字眼是不是???基本配置加载失败当然就是异常了!!!就算写消息那也是在异常里啊!!别纠结字眼.都程序员搞……


相当混乱啊 什么叫做写消息也在异常里面?

你在主贴说:java抛个什么异常能让tomcat停止呢?

其实思路应该是 catch exception, send message to service, shutdown tomcat safely。
你的思路呢? throw out a exception to terminate tomcat service directly.

[其他解释]
引用:
请查看 #30楼
难道我木有直入主题么?


那请问你你在28楼又说的什么???
晕.直入...

你问题回答不错,但你又再41楼玩文字游戏...
[其他解释]
看来你。。。。唉
引用:
Just one!!!
现实中...没人往里放好几个项目吧???见过启多个tomcat的,在实际的项目中我基本没见过往tomcat放N个项目的.weblogic等我才放多个项目...汗一下.
我只是提问,找答案而已...有木有!!!

[其他解释]
同感
引用:
lz,请注意下态度,说真的,态度真的很不好,甚至是恶劣,楼上的都是认真帮你解决问题的。
lz,希望过几天你自己再看下你的言论,如果,你还觉得你的言论没什么不对的,那就当我没说。

[其他解释]
lz,请注意下态度,说真的,态度真的很不好,甚至是恶劣,楼上的都是认真帮你解决问题的。
lz,希望过几天你自己再看下你的言论,如果,你还觉得你的言论没什么不对的,那就当我没说。

[其他解释]
大到世界风云,小到吃饭拉屎,任何一条新闻都可以引起中国网民的对骂,唯独上黄色论坛的网民素质高,从来没见过骂人的,全部是:楼主辛苦了,谢谢楼主,楼主好人一生平安。

[其他解释]
引用:
引用:

引用:
请查看 #30楼
难道我木有直入主题么?


那请问你你在28楼又说的什么???
晕.直入...

你问题回答不错,但你又再41楼玩文字游戏...


第一,28楼说的话,比起你所说的话,要平和的多。尊重别人才能赢得别人的尊重。事实上,我就是很不爽你的态度,才参与了这个主题的讨论。大……


膜拜中..相当赞同此楼。
[其他解释]
楼主真高深,佩服佩服
[其他解释]
恶心把啦的!放条狗咬死你
[其他解释]
引用:
引用:

.......未咩还没结贴 俺走的更远要干嘛 他只是想要一个在程序中安全结束的方式 我告诉他TOMCAT会起个端口用来监听关闭TOMCAT的请求(那个关闭脚本也是这么个功能 可是我不喜欢在代码中执行脚本 尤其是当程序不知道会在什么地方执行的情况下)

说实话 这个贴的能够得到的知识只是有趣 并不太有用(我唯一想到的地方就是我做了套软件给客户试用 ……


本人至今也没调通 不是说不好使 我机器上目前只有个TOMCAT7 每次调用你这个东西的时候不是缺包就是少类
我就简单的问一下 我之所以说这句话的原因是因为我以为每次启动TOMCAT貌似都要通过你这种方式启动对么?
如果你这段代码放到Servlet中就能正常执行的话 我收回

另外 用JETTY不是不好 但是讨论重点是TOMCAT的说...我在我的回复中已经写明了我不在乎这个东西是干嘛用的 只是有趣



您的技术貌似很好哇 可否来俺的群呢
QQ群 群号53596919
[其他解释]
MBeanUtils的话 测试阶段还可以 开发阶段的话太麻烦了

指什么??
[其他解释]

引用:
.......未咩还没结贴 俺走的更远要干嘛 他只是想要一个在程序中安全结束的方式 我告诉他TOMCAT会起个端口用来监听关闭TOMCAT的请求(那个关闭脚本也是这么个功能 可是我不喜欢在代码中执行脚本 尤其是当程序不知道会在什么地方执行的情况下)

说实话 这个贴的能够得到的知识只是有趣 并不太有用(我唯一想到的地方就是我做了套软件给客户试用 如果客户用过期了我就用这种方式强关)

L……


我所说的“走的更远”,是指逆向分析的更进一步。

你所说的“MBeanUtils的话 测试阶段还可以 开发阶段的话太麻烦了”,我还不太明确你所指的场景,希望你能解惑。

如果我们回到需求的原点:一旦发现无法正常获得所需要的资源(数据库链接/配置文件等),那么就停止提供web服务。那么,我个人认为:相较 “相互控制对方的生命状态”的处理方式而言,“主从”结构的控制方式更为清晰健壮。

因此,选择内嵌式的容器可能是更好的决定。比如 embbed-tomcat or jetty。
[其他解释]
应该有 具体是什么我忘了 但是 你只要运行上几次你的tomcat就再也别想起来了 只能重装 我试过 以后在遇见 我就给你说
[其他解释]
这个贴是我现在看过的牛人最多的,也是楼主有面子,能请动如此多的大神为你解答(虽然火药味十足)
[其他解释]
引用:
斑竹,管管吧,看来在一起的话要打架了……


介个。。。俺木有掐架的打算,至少整体上来说,现在还停留在讨论问题/解决问题/引申问题的阶段。
[其他解释]
斑竹,管管吧,看来在一起的话要打架了……
[其他解释]
开发期间我很少引用Tomcat的系统包(不导入的话无法编译 我是用IDE开发的..)
如果导入的话 这种JAR一般都是依赖具体的容器的 没办法保证TOMCAT7的LIB能在5下运行(毕竟现在没多少一个人开发的项目了..)
这样就是我说的主要原因 还有个我不确认的是 如果启动服务要通过你这种方式(你这个是启动服务再关闭的代码么) 我的IDE的很多功能不是都用不了了么
[其他解释]
感谢:
ticmy
hpjianhua
EverWHL
BearKin
deltatang

谢谢你们的解答.
[其他解释]
引用:
斑竹,管管吧,看来在一起的话要打架了……


我在想版主问啥不来推荐这个贴 我去找下
[其他解释]
引用:
引用:

开发期间我很少引用Tomcat的系统包(不导入的话无法编译 我是用IDE开发的..)
如果导入的话 这种JAR一般都是依赖具体的容器的 没办法保证TOMCAT7的LIB能在5下运行(毕竟现在没多少一个人开发的项目了..)
这样就是我说的主要原因 还有个我不确认的是 如果启动服务要通过你这种方式(你这个是启动服务再关闭的代码么) 我的IDE的很多功……


哦 如果是这样的话大概可以了 除了JAR包问题外 别的都还好 也节日快乐
我不太清楚 您这么了解Tomcat 我想问下 我发的那种方式也是通过关闭服务的方式关闭的么(就是说服务端接受到请求执行了跟你一样的方法)
我文化低 看不懂英文的说
节日快乐..
[其他解释]
引用:
.......未咩还没结贴 俺走的更远要干嘛 他只是想要一个在程序中安全结束的方式 我告诉他TOMCAT会起个端口用来监听关闭TOMCAT的请求(那个关闭脚本也是这么个功能 可是我不喜欢在代码中执行脚本 尤其是当程序不知道会在什么地方执行的情况下)

说实话 这个贴的能够得到的知识只是有趣 并不太有用(我唯一想到的地方就是我做了套软件给客户试用 如果客户用过期了我就用这种方式强关)

LZ……

我如果发帖提问,对于各种回答都会认真对待,即使对方的回答不着边际,毕竟人家付出的劳动,用心是好的。楼主的作法使想起了南京的徐老太。
[其他解释]
lz是猥琐男
[其他解释]
lz很牛b weblogic都会用
tomcat是玩具 lz能做一个玩具么
[其他解释]
引用:
关键是tomcat支持多个项目发布,可如果有提供很好的方法让tomcat挂掉!


是否有点矛盾,就像一个被定义成final的常量,你却想要用办法去改变他的值。。。


楼主太操蛋。
[其他解释]
引用:
LZ的态度我没觉得有啥不好 他没说回复的人是S.B 也不是直接索要代码 当有回复时候他能马上做出反应 至少他是关心这个帖的 反倒是有些回复的人 要么说完全实现不了 要么实现了没有用 LZ反驳了几句 就被喷成这个样子 我真是感到无奈


这个问题我再做最后一次辩解.(本来想打个叹号的,怕你又要说我喷...)
1.无论如何来帮忙的我都干些.
2.但对于一些问题,我开始就解释说:由于并发量和环境的问题,每个tomcat中我只放一个项目,结果大家还是都对我的问题质疑,然后说我的想法有问题...当时我确实很急的需要一个合理的解决方案.
3.deltatang一直说
其实思路应该是 catch exception, send message to service, shutdown tomcat safely。
你的思路呢? throw out a exception to terminate tomcat service directly.
我想说,我能问出这个问题,当然知道该如何选择一个安全的解决方法,当然也知道该如何处理.在这里我也不想写几段code来反驳这段话中的bug.
4.我很少发帖,很少回帖,当然除了VB版块中...CSDN我也算老潜水的了.03年的号.有时想来回答问题,但看了那些人的提问后我气不打一出来,什么样的帖子大家也都看过了...对于这个帖子造成不好的影响也确实我错了,对于deltatang说声sorry...
5.我想知道解决方法,但deltatang像本山大叔夸人一样...让我当时看了后确实有些激动

感谢大家的解答,大家都有分,过几天在结贴,等待大家的讨论结果.
如果届时有人觉得分给少了可以说,本人另开贴单给.本人分多的是.
最后祝大家节日快乐...我北漂人士.刚吃完水煮白面...
[其他解释]
我文化低 看不懂英文的说
节日快乐..
[其他解释]
引用:
引用:
LZ的态度我没觉得有啥不好 他没说回复的人是S.B 也不是直接索要代码 当有回复时候他能马上做出反应 至少他是关心这个帖的 反倒是有些回复的人 要么说完全实现不了 要么实现了没有用 LZ反驳了几句 就被喷成这个样子 我真是感到无奈


这个问题我再做最后一次辩解.(本来想打个叹号的,怕你又要说我喷...)
1.无论如何来帮忙的我都干些.
2.但……


最近挂面不安全的说
[其他解释]
这贴关注蛮高的
对tomcat了解没那么深入
来学习下 
大家节日快乐哈
[其他解释]
引用:
引用:

正式环境中如果部署的 tomcat 应该将 SHUTDOWN 端口号使用防火墙封掉,仅允许本地通过,再将 SHUTDOWN 改成其他的字符就可以了。

tcp6 0 0 127.0.0.1:8005 :::* LISTEN
默认SHUTDOWN就是只监听127.0.0.1,一般改SHUTDOWN命令就可以了。


不晓得火龙果用的是虾米版本的Tomcat 不清楚通过改源代码能不能让SHUTDOWN监听整个局域网呢...~~
[其他解释]
引用:
引用:
引用:

正式环境中如果部署的 tomcat 应该将 SHUTDOWN 端口号使用防火墙封掉,仅允许本地通过,再将 SHUTDOWN 改成其他的字符就可以了。

tcp6 0 0 127.0.0.1:8005 :::* LISTEN
默认SHUTDOWN就是只监听127.0.0.1,一般改SHUTDOW……

你是说监听0.0.0.0吧,当然可以,不过没人会这么做吧
[其他解释]
有必要这么做吗?把你觉得足够重要的log直接打出来,启动tomcat时盯着看,出错了手动关掉tomcat。
在这上面浪费时间。
[其他解释]
引用:
有必要这么做吗?把你觉得足够重要的log直接打出来,启动tomcat时盯着看,出错了手动关掉tomcat。
在这上面浪费时间。


上生产了启tomcat的人一定不是我啊.
[其他解释]
其实只要围绕着LZ提出的问题来解决问题就行了。。不用开战的呢。。。OVER。。闪
[其他解释]
引用:
我如果发帖提问,对于各种回答都会认真对待,即使对方的回答不着边际,毕竟人家付出的劳动,用心是好的。楼主的作法使想起了南京的徐老太。


可惜你不是我.

只有裤衩级别的才会这么答.
[其他解释]
引用:

正式环境中如果部署的 tomcat 应该将 SHUTDOWN 端口号使用防火墙封掉,仅允许本地通过,再将 SHUTDOWN 改成其他的字符就可以了。

tcp6 0 0 127.0.0.1:8005 :::* LISTEN
默认SHUTDOWN就是只监听127.0.0.1,一般改SHUTDOWN命令就可以了。
[其他解释]
内存溢出呢~
[其他解释]
写个方法,让JVM内存溢出,或者修改tomcat配置信息,内存容量搞小点(tomcat可配置),项目搞大点,哈哈
[其他解释]
deltatang虽然比较较真,不过他说的方案是正路。走jmx mbean的路线能让服务器正常关闭,而用kill线程或者exit jvm的方式都可能导致非正常中断,引起一些数据完整性的问题。

通过jmx不但可以关闭server,其实可以关闭(或操纵)服务器上任何服务,包括其他应用。刚好我最近也做了一个类似的需求,不过基于jboss的。我们有一个Message Driven Bean在消费JMS里的消息,但如果发现数据库离线超过5分钟(每隔一分钟重试一次,重试5次后),就通过jmx先关闭Message Driven Bean本身,如果失败,就尝试关闭Queue,如果还失败,停止整个EJB应用,如果还失败,就shutdown服务器,如果还失败,就exit jvm。除了exit jvm外,前面几步都通过jmx来完成,而且测试成功。

通过jmx来控制同一个jvm上的服务器(不走jmx remote),必然要用到与具体产品相关的内部API来获取MbeanServer。Tomcat6的deltatang已经写出来的,我只知道jboss5.1的。楼主需要的话可以搜索一下你用的服务器的jmx文档。
[其他解释]
内存溢出~
[其他解释]
引用:
晕死,你咋知道我没有考虑.
文字游戏?
你真肤浅!


反正我觉得楼主不是好人,看你滴素质就知道永远是当不上管理层滴,基本马上就会被炒....

[其他解释]
哇噻,人气很旺也,,,,,,,
我也顶,,,,
程序只能是程序,没有做不到的,只有你想不到的!
[其他解释]
哥们的想法很独道啊,还从来没敢想这事,这不是客户提出的需求吧?_?
[其他解释]
楼主,好像有一个application listener的东西吧,可以监听整个应用的启动情况。从这入手试试看
[其他解释]
学习了!
[其他解释]
你这种人,我就算知道怎么弄,也不告诉你。
[其他解释]
该回复于2011-11-21 15:19:33被版主删除
[其他解释]
null
[其他解释]
该回复于2011-12-02 17:32:10被版主删除
[其他解释]
都是强人那,唉,就是关个tomcat的事
[其他解释]
感触颇多,学习至上
[其他解释]
话说,这个问题确实挺深奥的哦,不过论坛自古都是这样,确实出了黄色的,其他的一律基本上都有对骂的情况,当然了,散分的除外啊
[其他解释]
null
[其他解释]
null
[其他解释]
null
[其他解释]
null

读书人网 >Java Web开发

热点推荐