碧荷故乡_胡奇的专栏

清清华堂,碧荷流香。悠悠十载,水木齐昌。鸿儒相往,以为故乡。日月沧沧,不弃不忘。千里殷望,难舍难量。祝纳四方,既寿永康。

用户操作
[即时聊天] [发私信] [加为好友]
胡奇(依天把剑)ID:kthq
18829次访问,排名6369好友6人,关注者7
kthq的文章
原创 36 篇
翻译 1 篇
转载 6 篇
评论 39 篇
胡奇(依天把剑)的公告

胡奇 TIBCO CDC
——致力于企业流程管理和应用集成(Workflow, EAI, BPM)领域\面向服务的Web应用模式,及其相关SOA架构和JAVA技术应用
::开源项目::
ClearWork
DocBookBlank

Locations of visitors to this page
最近评论
DSDSDF:www.sap99.com/,SAP99资料多多

SAP免费资料下载
http://www.sap99.com

有很多的学习资料,推荐一下,
网站建设:谢谢!帮我解决了大问题!!
网站建设:谢谢!帮我解决了大问题!!
网站建设:谢谢!帮我解决了大问题!!
网站建设:谢谢!帮我解决了大问题!!
文章分类
收藏
    相册
    Blogger
    Workflow
    俠盜躶奔漢的专栏(RSS)
    胡长城(银狐999)BLOG(RSS)
    存档
    软件项目交易
    订阅我的博客
    XML聚合  FeedSky
    订阅到鲜果
    订阅到Google
    订阅到抓虾
    订阅到BlogLines
    订阅到Yahoo
    订阅到GouGou
    订阅到飞鸽
    订阅到Rojo
    订阅到newsgator
    订阅到netvibes

    原创 导致Lucene无法索引查询的NoClassDefFoundError收藏

    新一篇: Sourceforge.net怎么又被封了? | 旧一篇: 面向对象的设计和开发不得不说的一些事

    Lucene乃是当今免费开源搜索引擎的霸主,确实它十分好用,发展势头也很生猛,在Apache组织的支持下不断的更新、推出新版本。

    但是其存在一个隐藏的很深的bug,相信困扰了不少和我一样研究使用过它的人,这个bug从早期的版本到目前的V2.3.1一个存在,不能不说是一个遗憾。

    具体触发这个bug的原因很复杂,在某些环境、服务器、应用中……

    表现为建立索引文件和执行查询时报“NoClassDefFoundError”,跟进代码会发现是“SegmentReader”这个类型不能创建实例,但怎么看这个类都是存在的。其实问题在这(SegmentReader.java):

      /** The class which implements SegmentReader. */
      
    private static Class IMPL;
      
    static {
        
    try {
          String name 
    =
            System.getProperty(
    "org.apache.lucene.SegmentReader.class",
                               SegmentReader.
    class.getName());
          IMPL 
    = Class.forName(name);
        }
     catch (ClassNotFoundException e) {
          
    throw new RuntimeException("cannot load SegmentReader class: " + e, e);
        }
     catch (SecurityException se) {
          
    try {
            IMPL 
    = Class.forName(SegmentReader.class.getName());
          }
     catch (ClassNotFoundException e) {
            
    throw new RuntimeException("cannot load default SegmentReader class: " + e, e);
          }

        }

      }

    看到这句没有“System.getProperty("org.apache.lucene.SegmentReader.class", SegmentReader.class.getName());”,鬼知道它什么时候把这个系统属性设入内存中的!它的本意是想动态加载SegmentReader,但反而有可能弄巧成拙,导致Class.forName报出NoClassDefFoundError,更要命的是在static{}代码段中的Error不会明确的显示在异常堆栈中,任你用什么debug手段都不能立即定位问题。

    知道了问题,最简单的解决方法,很直接,改代码。把那个IMPL和static{}段干脆去掉,不利用系统属性动态加载就是了,就直接使用SegmentReader,就认准它了:-)

    发表于 @ 2008年03月07日 15:52:00|评论(loading...)|编辑

    新一篇: Sourceforge.net怎么又被封了? | 旧一篇: 面向对象的设计和开发不得不说的一些事

    评论:没有评论。

    发表评论  


    登录
    Csdn Blog version 3.1a
    Copyright © 胡奇(依天把剑)