应用系统之所以会在客户机弹出窗口,是因为应用程序代码可以绘制报表和图片,客户机在启动了XmanagerBroadcast之后,会在客户机端弹出窗口
出现的问题:当服务器中程序触发x窗口时,会在连接服务器的PC机本地xshell中生成一个x11窗口,这就出现了问题,这个xshell会话不能关闭了,此台PC机也不能重启,否则就会影响远程服务器应用就会停止,并且让人头痛的是不止一台PC机(IP不同的机器)会连接这台服务器对应用进行启动和停止,有的由于没启动XmanagerBroadcast,所以就无法弹出窗口,导致应用停止
解决方法:不使用实际的应用程序如XmanagerBroadcast来处理弹出的窗口,而使用JVM在服务器端来虚拟出这些功能
画图的库要使用 Java AWT,所以需要确保 JVM 运行在 headless 模式。
1. java.awt.headless概念
Headless模式是系统的一种配置模式。在该模式下,系统缺少了显示设备、键盘或鼠标。
2. 何时使用headless mode
Headless模式虽然不是我们愿意见到的,但事实上我们却常常需要在该模式下工作,尤其是服务器端程序开发者。因为服务器(如提供Web服务的主机)往往可能缺少前述设备,但又需要使用他们提供的功能,生成相应的数据,以提供给客户端(如浏览器所在的配有相关的显示设备、键盘和鼠标的主机)。
3. 如何使用和Headless mode
一般是在程序开始激活headless模式,告诉程序,现在你要工作在Headless mode下,就不要指望硬件帮忙了,你得自力更生,依靠系统的计算能力模拟出这些特性来:
4. 设置方式:
JVM已经设置好了Headless mode的参数,在启动应用时加上 –D参数,-Djava.awt.headless=true ,或者在JBOSS的run.conf 中插入JAVA_OPTS="-Djava.awt.headless=true",这样在初始化JVM时就会默认选择系统配置模式为Headless mode
效果测试:
测试应用环境:呼叫中心报表管理系统
测试目的:由于此应用的查询报表功能一定会弹出窗口(已经反复测试),通过加入-Djava.awt.headless=true参数和不加验证查询报表时是否会在客户机弹出窗口,解决由于服务器端无法显示表格或图片而是通过客户机xmanager显示的问题。
测试过程:
1、启动应用(初始化JVM未加入-Djava.awt.headless=true),打开页面查询报表
2、点击查询后看到shell后台出现x11窗口
3、尝试关闭shell会话时,应用异常宕掉,并报错
4、在启动脚本配置文件run.conf中加入-Djava.awt.headless=true
5、重新启动应用后查询报表
6、 客户机后台未弹出窗口,关闭shell窗口应用也不会停止,到此为止,服务器端的生成报表和图片功能已经完全由JVM来处理,不需要通过客户机的XmanagerBroadcast来显示
结论:进行了Headless mode配置后,已经试运行1天,未出现过弹出窗口现象,并且报表功能访问正常,基本可以确定此方案的可行性,今天会把Headless mode加入到其他几个有类似现象的应用系统中,在下次应用重启后生效,继续观察运行情况
如进行完Headless mode配置后启动应用出现java.awt.HeadlessException异常
使用另一个方法,在服务器端搭建虚拟图形界面工具
解决办法:1、服务器端运行 Xvfb :0 -screen 0 1024x768x16 &
(如果提示已经运行Xwindows,可以用root用户再次执行此命令,其他用户启动的应用是可以访问root启动的虚拟窗口的)
2、将启动应用用户.bash_profile里添加DISPLAY=127.0.0.1:0.0
3、Source .bash_profile
4、启动应用即可
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/29018063/viewspace-2059514/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/29018063/viewspace-2059514/