前几天部署了一下SmartGWT做的应用,今天有些小修改,又重新 compile 之后,
把目标目录覆盖了一下。这个时候,噩梦开始了。
首先,表现出来的症状就是后台抛出个异常,是 org.eclipse.jetty.util.log.StdErrLog.format
里面的NullPointerException。这个 jetty7,也没判断一下 Throwable 是不是空,当然,主要
还是 GWT的 RemoteServiceServlet 里面,它发现找不到 policyfile 的时候,log了一段话,神奇
的是,它不是调用 log(message),而是非要去调用 log( message, null),不知道为什么,难道
是要提高log的错误等级?就是因为这个 null,导致 format的时候试图format一个 null 的 exception。
好了,这个其实不是重点,不过它确实吸引我的注意力,害得我把gwt 从2.0.0 升级到 2.0.1,结果也
没有好转,正在我考虑是不是要把 jetty7降级到 jett6 的时候,突然想起来,为啥 gwt的 policyfile的
strongname为啥会好好的突然找不到了呢?
开发期一直没有问题,因为用的是development模式。上一次部署之后也没问题,而且我只是做了一个
小改动,按说也不会有大问题。就算是重新compile,它也应该能认识到新的 strongname啊。那么,唯一
的解释就是某个地方有缓存。开始逐个排除,eclipse没有,jetty也没有,真相只有一个,凶手就是 Firefox !
由于FireFox的缓存,它保留了我上一次的html文件,而正是这个html文件里面有上一次自动生成的 strongname。
而用一个不存在的 strongname 去获取 policyfile,自然就会出错了。
因此,提醒一下自己,以后每次部署完了之后,一定要让firefox清空一下缓存。不知道gwt有没有类似的机制来
把 cache 给 expire掉,要是能加上这个特性就完美了。