|
该帖已经被评为精华帖
|
|
|---|---|
| 作者 | 正文 |
|
时间:2004-07-25
200x年x月x日:
老大: 今天我们客户说他们来了个新头头, 不大懂鸟语, 要把1.0版本的那个SIHT系统做一个汉化版本, 要求3天内完成. 偶: 老大啊, 你今天出门的时候是不是脑袋被门夹了一下? 这种事情也能答应客户啊? 老大: 你不想混了是不是? 客户是给了大笔钱的! 偶: 哦, 哦, 哦 老大: 到底能完成么? 偶: 还好我们原来的系统都是UTF-8编码, 只要修改一些关键代码, 剩下的都是于苦力活了, 多找几个人来做还是能够在一个星期内完成的. 老大: 一个星期啊, 那么你只能从项目组里最多挑3个人吧, 我再去和用户沟通一下, 下个星期一定要出货. 偶: 保证拼死拼活完成任务. (心里暗爽中: 难得这次老大您没有和我讨价还价, 莫非今天真的被门夹了一下?, 开始干活了: 多语言, 虽然以前没有做过, 但是俗话说没有看过猪跑步, 难道还没有吃过猪肉? (嘿嘿, 或许这句俗话我记反了?) 地球人都知道用java.util.ResourceBundle. 要做的改动: 1. 添加了一个用户设置选项, 让他们可以选择语言. 2. 用户登陆以后, 根据他们设置的语言读取不同的资源文件. 3. 页面上所有的label不要hard code, 修改成从资源文件读取. 4. 代码里的错误信息, 提示信息等, 也不要hard code, 修改成从资源文件读取. OK, 那么先找一个模块做个例子吧, 然后就丢给弟兄们抄, ResourceBundle提供了这个api: public static ResourceBundle getBundle(String baseName, Locale locale, ClassLoader loader) 看起来不错, 还能接受ClassLoader, 稍微封装了一下, 然后霹雳啪啦改动了一堆代码, 启动我可爱的Jetty看一下效果, Yeah, 成功, 准备收队. 慢, 发现打错了一个字, 原来应该是翻译成狗屎的, 结果被打成了够屎, 唉, 谁叫我用拼音输入法呢. 偶那就修改一下资源文件, 刷新一下页面, 奇怪了, 还是够屎. 难道ResourceBundle不支持实时更新么? 重启动一下试试看, !@#@#$%, 这下狗屎就出来了. 这可太不方便了, 改动个字都要重起, 不爽, 看看ResourceBundle的api有什么说明吧: 扫描了一下, kao, 相关reload的说明都没有, 那只有看源代码了: 嗯, 首先看到的就是这个cache: private static SoftCache cacheList = new SoftCache(INITIAL_CACHE_SIZE, CACHE_LOAD_FACTOR); 不错, sun还知道用Cache来提高性能, 那么我们清除这个cache就行了. 但是从头到尾扫描了一遍, 没有找到相关的清除cache的代码, tnnd, sun的脑袋一定被门夹过了, 用了private cache也不提供getter, 起码暴露出来给大家个清理门户的机会, 绝对愚蠢的设计...... 唉, 只好自己扩展一下了, 加了个清除Cache的功能, 自动监控资源文件更新的功能就免了, 有时间再做......, 这个星期还想好好休息呢. 后记: 现在已经有很多open source的lib提供了reloadable的ResourceBundle了, 比如spring: http://www.springframework.org/docs/api/org/springframework/context/support/ReloadableResourceBundleMessageSource.html 声明:JavaEye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
|
|
| 返回顶楼 | |
|
时间:2004-07-25
楼主很有意思,SUN的代码明显的是使用软引用(SoftReference)来构造缓存。而软引用的清理是由虚拟机完成的,自然就不会需要你自己去清理去控制。这类缓存和你另外说的Spring缓存以及其他什么osCache等等是完全不同的概念(严格说来,sun代码中并不是真正缓存,而是可明确优先释放的对象内存分配而已)
所以,楼上的问题,也够不成问题,自然,也就没有骂他的道理。这个,如同struts已经各种读取XML配置文件的程序一样(比如所有的应用服务器,至少我还没有看到有改了配置文件而不需要重启的)。 呵呵,所以,楼上还是冷静些。 |
|
| 返回顶楼 | |
|
时间:2004-07-25
楼上的是初学者吧? 估计是刚刚明白了SoftReference是什么意思就来匆忙地摆一下了.
改动个文字描述, 修改个错别字就要重起服务, 在开发中你不嫌麻烦啊? 在实际应用中你不怕被用户扁死啊? Sun用SoftReference Cache, 偶没有意见, 但是不提供清除cache的api, 都是private, 让别人怎么混啊? 偶我总不能让强迫它达到out of memory的临界, 再让jvm帮我清理cache吧. 去好好看看SoftReference是什么意思吧. 偶说的Spring的东西和OSCache有什么关系, 它只是ReloadableResourceBundleMessageSource --在提高自己的知识,技术,思考之前, 先提高你的阅读能力吧-- |
|
| 返回顶楼 | |
|
时间:2004-07-25
faint,我终于找到一个新的偶像了。
以前在一个项目中我自己做过一个简单的cache,但是没有想过要强制刷新单项内容(整个刷新的接口倒是有,但是我那个cache里面东西太多,代价太大了),结果@#!$%,虽然被cache的那些东西变化频度不高,但总是有被用户叫到去重启应用的机会。后来费了老大的劲才搞定。 |
|
| 返回顶楼 | |
|
时间:2004-07-26
Readonly 写道 楼上的是初学者吧? 估计是刚刚明白了SoftReference是什么意思就来匆忙地摆一下了.
改动个文字描述, 修改个错别字就要重起服务, 在开发中你不嫌麻烦啊? 在实际应用中你不怕被用户扁死啊? Sun用SoftReference Cache, 偶没有意见, 但是不提供清除cache的api, 都是private, 让别人怎么混啊? 偶我总不能让强迫它达到out of memory的临界, 再让jvm帮我清理cache吧. 去好好看看SoftReference是什么意思吧. 偶说的Spring的东西和OSCache有什么关系, 它只是ReloadableResourceBundleMessageSource --在提高自己的知识,技术,思考之前, 先提高你的阅读能力吧-- 呵呵,楼主有些激动啊!当然,每改一个字符都需要重启的确麻烦了,我承认啊。可是sun的实现中不是用的你所谓的cache,自然不会有清除的API了。如果像楼上这么冲动,是不是每个服务器商都得挨骂啊? 至于楼上说什么 引用 但是不提供清除cache的api, 都是private, 让别人怎么混啊? 偶我总不能让强迫它达到out of memory的临界, 再让jvm帮我清理cache吧 ,我只能说,我有点想笑,不过,没有任何看不起楼上的意思,只是楼上在理解这个问题上该好好看看书的是你了。
|
|
| 返回顶楼 | |
|
时间:2004-07-26
凤舞凰扬 写道 呵呵,楼主有些激动啊!当然,每改一个字符都需要重启的确麻烦了,我承认啊。可是sun的实现中不是用的你所谓的cache,自然不会有清除的API了。如果像楼上这么冲动,是不是每个服务器商都得挨骂啊?
说话要经过大脑好么? SoftCache这么大的字摆在你面前, 你还说它不是Cache? SoftCache有提供清除cache的api, 但是ResourceBundle把它作为private, 而且还不提供getter, 我怎么清除它? 所以我骂的是愚蠢的ResourceBundle设计, 而不是愚蠢的SoftCache设计. tnnd, 心情大差, 这个论坛上是个人就比我还唐僧 顺便做一下连载广告: 2. 愚蠢的java.util.zip 3. 愚蠢的java.util.logging 等过几天心情恢复了, 再来继续. |
|
| 返回顶楼 | |
|
时间:2004-07-26
Readonly的确有些偏激. 这使我想起一句话,只有偏激的人才能做一个好的程序员. 不过呢,我建议在论坛上不要有说别人是初学者之类的话.因为你没有证据就这样说不太好吧.
另外一点,我想上这个论坛的人,都是希望从中能学习一些东西,上了论坛后如果大家心情不好,是没必要的.是不是呀! 而且楼上这么痛恨 java.util.zip之类,那他就自已设计一个嘛! |
|
| 返回顶楼 | |
|
时间:2004-07-26
dhj1 写道 Readonly的确有些偏激. 这使我想起一句话,只有偏激的人才能做一个好的程序员. 不过呢,我建议在论坛上不要有说别人是初学者之类的话.因为你没有证据就这样说不太好吧.
另外一点,我想上这个论坛的人,都是希望从中能学习一些东西,上了论坛后如果大家心情不好,是没必要的.是不是呀! 严重同意, Readonly这就是你的不对了,心情不好也不要在这里说这些偏激的话阿,技术高一点固然是好,但以此作为资本说高话就不大好了吧!我们提倡一个大家互助的环境而不是这样的偏激的讨论! |
|
| 返回顶楼 | |
|
时间:2004-07-26
大家都是从初学者过来的嘛, 哪怕写过很多代码了, 遇到自己不熟悉的东东也还是初学者, 为什么对这个这个词强烈抵触呢......
但是斑竹大人发话了, 偶虚心接受, 然而俗话说狗改不了吃那个, 万一偶以后老毛病又犯了, 大伙就将就着看吧. |
|
| 返回顶楼 | |
|
时间:2004-07-26
hehe, Readonly有意思,我喜欢.偏激一点也无妨,
有想法的人都比较偏激呵呵.骂东西我也骂得,包括当时作Tree,用Tapestry的Tree折腾了n天没搞定,干脆完全放弃自己写,一天就搞定了.本来想写到blog上的,丫的那天blog也瘫痪,就懒得写了. |
|
| 返回顶楼 | |











