论坛首页 Java企业应用论坛

java 应用程序 自动检测更新,并自动关闭重启程序。

浏览 21407 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (5)
作者 正文
   发表时间:2011-03-23  
它不是客户端,它是放在客户机房的一个中间服务器,客户端去连接它,这个中间服务器一般不关闭,所以要求每天定时自动去检查更新,关闭服务,更新文件,启动服务。
0 请登录后投票
   发表时间:2011-03-23  
还有原理好多人都懂,但是看用那种方式了,URLClassLoader  好像也需要重启 触发用个线程去检查它,  URLClassLoader 检查jar也不好,你们试过吗?
0 请登录后投票
   发表时间:2011-03-23  
java webstart 不就是我说的jnlp吗? 它怎么能让程序启动和关闭?
0 请登录后投票
   发表时间:2011-03-23  
要根据需求来定方案.
如果比较小,又没什么特别的需求,使用楼上某个哥们说的,ABA交替启动就行.成本很低.
如果项目很重要,比如要求不允许下线,或者说应用有监控或者固定端口之类的,那就只能考虑热更新了.那就给考虑OSGI了.

1 请登录后投票
   发表时间:2011-03-23  
cruisecontrol 工具有没有人用过  从cvs上下hello.jar  可以判断cvs是否更新,然后定时调用ant去关闭、更新,启动
  不知道是否可行,有谁用过?
0 请登录后投票
   发表时间:2011-03-24  
谢谢大家 已经弄好了用的就是URLClassLoader
0 请登录后投票
   发表时间:2011-03-24  
chacha 写道
谢谢大家 已经弄好了用的就是URLClassLoader

能能写出你的详细解决方案吗?参考一下!
谢谢!
0 请登录后投票
   发表时间:2011-03-24  
chacha 写道
谢谢大家 已经弄好了用的就是URLClassLoader

莫非是利用的applet这样的形式??

0 请登录后投票
   发表时间:2011-03-28  
不好意思大家,想法是有了,但是好像现在还是不行。
原因是:URLClassLoader 它一旦打开了它所知的classpath上的文件就会把那些文件全部锁住,直到它被卸载前都不会释放掉。但是ClassLoader什么时候才被释放这就无法预测了,里面引用的JarFile的finalizer什么时候被调用又得看RP。
在Java 7当中URLClassLoader新实现了Closeable接口,添加了一个close()方法,专门用于处理这个问题。在调用了某个URLClassLoader实例上的close()方法后,该实例就无法再用于加载类或资源;原本已经打开的类或资源仍然是可用的。
  但在Java 7正式发布之前,要是想修改已经被URLClassLoader打开的JAR包就没好办法了。

之前我用Update.jar UrlClassLoader加载A.jar包的 类的close方法(里面写了System.exit(0)),但它会把所有的类关闭,而不仅仅是A.jar包。

最后我想URLClassLoader这个东西在jdk1.7以前估计是没办法用了,
我现在在想别的方法。希望高手过来在给个方案。嘿嘿 谢谢了

0 请登录后投票
   发表时间:2011-03-28   最后修改:2011-03-28
原理很简单

先来个约定:
startA.bat 用来启动A应用,内容大约如下:
start java -jar A.jar ......

updateA.bat 用来更新,内容大约如下:
start java -jar B.jar ......


处理流程:
在A.jar 中,定时或启动时检查是否有新版本,如果有则 运行updateA.bat,然后自身退出

在B.jar中,下载最新的版本,然后运行startA.bat,再自身退出

运行*.bat,可用Runtime.getRuntime().exec(...)
自身退出,可用System.exit(0)

linux环境,*.bat 改成 *.sh即可
1 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics