情景描述
- 使用jenkins的分布式构建
- 设置ubuntu分别作为jenkins master service以及slave service
- 使用java web start的方式进行slave connect master
- 此时在ubunut的slave node上执行
javaws http://localhost:8080/computer/mac_test/slave-agent.jnlp
(请求路径没问题) - 爆出错误:
Java Web Start splash screen process exiting ….. vagrant@vagrant-ubuntu-trusty-64:/vagrant$ Splash: X11 connection failed: No such file or directory
问题解决
- Q6:错误原因分析完毕。因为没有GUI只好采用另外一种connect 的指令
java -jar slave.jar -jnlpUrl http://180.76.159.182:8088/computer/mac_test/slave-agent.jnlp
发现这就没有问题了,为什么? - A6:在本地使用java -jar运行slave.jar中的主类,并仍然使用javaws 启动jnlp应用程序,发现不会弹出GUI,因此在vagrant中也可以正常运行。
Q7:为什么使用java -jar就没有问题,而使用javaws就有问题?
-
A7:首先java和javaws是两种不同的指令造成的肯定就是启动方式不同:那么有什么不同?
java:
- what:是一个工具用来触发java application
- how:构建java环境加载java类,然后运> 行main方法
- when:启动一个java application
- why:使用这个指令启动的application可以关联一个控制台展示结果和error(而不是一个GUI)
javaw:
- what:功能作用和java一样唯一不同就是不会将错误和结果打印到控制台而是直接把错误结果放入textfile。通常用于基于GUI的application的启动
javaws:功能作用和java一样唯一不同就是不会将错误和结果打印到控制台。通常用于下载并运行分布式web程序。
- Q8:那么什么又叫做web应用程序,能不能说明web应用程序一定需要使用GUI呢?
- A8: web application是完全依赖于浏览器的分布式应用。web application is stored on a remote server and delivered over the Internet through a browser interface.因此他通过浏览器使用那么必然是需要GUI的。因此使用javaws启动的应用程序中一定是包含GUI的
- Q9:那么可以理解java -jar执行了slave.jar包,jar包可以是一个打包好的应用程序,那么为什么又要执行-jnlp呢?并且又要向url请求获取.jnlp文件?是否说明在执行jnlp这个application?
- A9:网上竟然找不到java -jnlpUrl这个option。在jenkins的提问中找到了这个:instead of talking to the master via stdin/stdout, emulate a JNLP client by making
a TCP connection to the master. Connection
parameters are obtained by parsing the JNLP
file.也就是说使用这个参数我们可以仿真一个JNLP客户端使用TCP链接master。也就是说我们并不是真正启动了这个.jnlp application,而是使用java -jnlpUrl模拟了一个客户端,这个客户端不需要GUI。也就是说我们使用java指令启动了.jnlp而不是使用javaws启动了.jnlp app使用前者我们就不需要GUI了。
- Q10:那么这个jnlp到底是什么呢?
- A10:是java提供的一种可以通过浏览器直接执行java应用程序的途径(协议),它使你可以直接通过一个网页上的url连接打开一个java应用程序。因此我们就是通过向网页请求拿到jnlp包即可通过指令运行这个应用程序。
反思
- 昨天研究到javaws是什么用来做什么,但是有了work的方式并没有去考虑第二种方式可以work而第一种方式不行。
- 看javaws也不够认真,我把需要GUI的原因归结到我尝试之后发现弹出GUI。因此并没有认真看文档中说启动的web application。
action
- 以后不仅仅是出现问题,问为什么会出现。当有方法解决还要说清楚为什么这个方法可以解决这个问题。
- 看文档还是捕捉不到重点,还是太快了,太求速度,以后看文档认真的把一个字一个字给念出来!