精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (5)
|
|
---|---|
作者 | 正文 |
发表时间:2011-03-23
它不是客户端,它是放在客户机房的一个中间服务器,客户端去连接它,这个中间服务器一般不关闭,所以要求每天定时自动去检查更新,关闭服务,更新文件,启动服务。
|
|
返回顶楼 | |
发表时间:2011-03-23
还有原理好多人都懂,但是看用那种方式了,URLClassLoader 好像也需要重启 触发用个线程去检查它, URLClassLoader 检查jar也不好,你们试过吗?
|
|
返回顶楼 | |
发表时间:2011-03-23
java webstart 不就是我说的jnlp吗? 它怎么能让程序启动和关闭?
|
|
返回顶楼 | |
发表时间:2011-03-23
要根据需求来定方案.
如果比较小,又没什么特别的需求,使用楼上某个哥们说的,ABA交替启动就行.成本很低. 如果项目很重要,比如要求不允许下线,或者说应用有监控或者固定端口之类的,那就只能考虑热更新了.那就给考虑OSGI了. |
|
返回顶楼 | |
发表时间:2011-03-23
cruisecontrol 工具有没有人用过 从cvs上下hello.jar 可以判断cvs是否更新,然后定时调用ant去关闭、更新,启动
不知道是否可行,有谁用过? |
|
返回顶楼 | |
发表时间:2011-03-24
谢谢大家 已经弄好了用的就是URLClassLoader
|
|
返回顶楼 | |
发表时间:2011-03-24
chacha 写道 谢谢大家 已经弄好了用的就是URLClassLoader
能能写出你的详细解决方案吗?参考一下! 谢谢! |
|
返回顶楼 | |
发表时间:2011-03-24
chacha 写道 谢谢大家 已经弄好了用的就是URLClassLoader
莫非是利用的applet这样的形式?? |
|
返回顶楼 | |
发表时间: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以前估计是没办法用了, 我现在在想别的方法。希望高手过来在给个方案。嘿嘿 谢谢了 |
|
返回顶楼 | |
发表时间: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即可 |
|
返回顶楼 | |