spring+hibernate search时抛java.lang.LinkageError

环境
tomcat6.0.18
spring2.5.6
hibernate-search-3.0.0.GA.jar(hibernate-search-3.1.0.GA.jar也不行)
hibernate-3.2.5.ga.jar

部分程式
import org.apache.lucene.analysis.StopAnalyzer;
import org.apache.lucene.queryParser.ParseException;
import org.apache.lucene.queryParser.QueryParser;
import org.hibernate.HibernateException;
import org.hibernate.Query;
import org.hibernate.Session;

1 Session session = super.getSessionFactory().getCurrentSession();

2 FullTextSession fullTextSession = Search.createFullTextSession(session);

3 Transaction tx = fullTextSession.beginTransaction();

4 QueryParser parser = new QueryParser("keyword", new StopAnalyzer());

第1行可以得到current session 类型为org.hibernate.Session;
第2行抛
java.lang.LinkageError: loader constraint violation: loader (instance of org/apache/catalina/loader/StandardClassLoader) previously initiated loading for a different type with name "org/hibernate/Session"

请大家帮忙看看,急坏了
[b]问题补充:[/b]
1.方法createFullTextSession是hibernate-search-3.0.0.GA.jar中的方法
/**

  • Helper class to get a FullTextSession out of a regular session.
  • @author Emmanuel Bernard
  • @author Hardy Ferentschik
    */
    public final class Search {

    private Search() {
    }

    public static FullTextSession getFullTextSession(Session session) {
    if (session instanceof FullTextSessionImpl) {
    return (FullTextSession) session;
    }
    else {
    return new FullTextSessionImpl(session);
    }
    }

    /**

    • @deprecated As of release 3.1.0, replaced by {@link #getFullTextSession(Session)} */ @Deprecated public static FullTextSession createFullTextSession(Session session) { return getFullTextSession(session); } }

2.我装的是解压版的tomcat6

3.不是tomcat/lib下的el-api.jar与项目WEB-INF/lib目录下的el-api.jar冲突。

[b]问题补充:[/b]
4.环境换成hibernate-search-3.1.0.GA.jar
hibernate-core-3.3.1.GA.jar
的组合,问题依然存在。。。

[b]问题补充:[/b]
5.很抱歉忘记注明“spring+hibernate search时抛java.lang.LinkageError”是在zk框架下应用的,脱离ZK,重新写了个测试的方法
通过ClassPathXmlApplicationContext获取有session的bean,在该bean中调用hibernate search 就没有错误了
还要try是不是zk下的包和和ibernate search中的jar有冲突

如果是这样还有问题的话..再找找hibernate依赖的包...很有可能是jar包出现了冲突.

仔细检查下你的各个jar包.

可以参考下面的方法:

[quote]1 重新安装tomcat 6,保证tomcat自带的jar不会被覆盖
2 删除你的WEB-INF/lib下面的jar
3 把不冲突的jar复制到 tomcat/lib 目录下面 [/quote]

1.看看你这个方法createFullTextSession 的代码.

2.貌似和tomcat 有关系,加载器不能实例化

在网上查了下,好像是tomcat 少了某个jar包,请问你的是不是安装版本的,你换一个解压缩版本的tomcat 试试,看结果

java.lang.LinkageError

链接错误。该错误及其所有子类指示某个类依赖于另外一些类,在该类编译之后,被依赖的类改变了其类定义而没有重新编译所有的类,进而引发错误的情况。

检查一下是否是tomcat/lib下的el-api.jar与项目WEB-INF/lib目录下的el-api.jar冲突。

把项目目录下的el-api.jar删除。

你看下是不是运行到了 这句 return new FullTextSessionImpl(session);

如果是的,可能是你的FullTextSessionImpl的实现有问题.还得看他里面的构造函数了:)

官方上面

Latest release: 3.1.0 GA (Changelog) (Road Map)
Release date: 04.12.2008
Requirements: Hibernate Core 3.3, JDK 5.0

Hibernate Search要求的hibernate核心版本是3.3,你给出的版本是hibernate-3.2.5.ga.jar,或许是这个问题导致的链接错误,用3.3版本重新试试