【问题标题】:NoSuchMethodError when using Infinispan Query API使用 Infinispan 查询 API 时出现 NoSuchMethodError
【发布时间】:2015-07-18 02:02:55
【问题描述】:

我正在尝试使用 hibernate 和 lucene 在 infinispan 中进行查询。但我得到没有这样的方法异常。下面是我的依赖、代码和异常

我的 POM 依赖

<properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <infinispan.version>LATEST</infinispan.version>
    </properties>
    <dependencies>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-beans</artifactId>
        </dependency>

        <dependency>
            <groupId>org.infinispan</groupId>
            <artifactId>infinispan-embedded</artifactId>
            <version>${infinispan.version}</version>
        </dependency>
        <dependency>
            <groupId>org.infinispan</groupId>
            <artifactId>infinispan-cachestore-jdbc</artifactId>
            <version>7.0.0.CR2</version>
        </dependency>
        <dependency>
            <groupId>org.infinispan</groupId>
            <artifactId>infinispan-embedded-query</artifactId>
            <version>${infinispan.version}</version>
        </dependency>
        <dependency>
            <groupId>org.apache.lucene</groupId>
            <artifactId>lucene-core</artifactId>
            <version>5.1.0</version>
        </dependency>
        <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-search</artifactId>
            <version>5.1.1.Final</version>
        </dependency>

        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.9</version>
        </dependency>
        <dependency>
            <groupId>c3p0</groupId>
            <artifactId>c3p0</artifactId>
            <version>0.9.1.2</version>
        </dependency>
    </dependencies>

这里是缓存初始化和结构。我有一个 mysql 存储,其中包含我正在预加载的数据。

EmbededCache embededCache = new EmbededCache();
                ConfigurationBuilder b = new ConfigurationBuilder();
                b.eviction().maxEntries(100l);
                b.indexing().enabled(true).addProperty("default.directory_provider", "ram");
                b.persistence().addStore(JdbcStringBasedStoreConfigurationBuilder.class)
                    .preload(true)
                   .fetchPersistentState(false)
                   .ignoreModifications(false)
                   .purgeOnStartup(false)
                   .table()
                   .createOnStart(false)
                   .dropOnExit(false)
                   .createOnStart(false)
                   .tableNamePrefix("SIMULATOR.SCRIPS")
                   .idColumnName("SCRP_NAME").idColumnType("VARCHAR(255)")
                   .dataColumnName("SCRP_DETAILS").dataColumnType("BLOB")
                   .timestampColumnName("SCRP_LAST_UPDATED").timestampColumnType("BIGINT")
                   .connectionPool()
                   .connectionUrl("jdbc:mysql://ip:3306")
                   .username("user")
                   .password("password")
                   .driverClass("com.mysql.jdbc.Driver");

                final Configuration config = b.build();

                EmbeddedCacheManager cacheManager = new DefaultCacheManager(config);
                Cache<String, ScripDetails> cache = cacheManager.getCache();


                ScripDetails scripDetails = new ScripDetails();
                scripDetails.scripName = "ICICIBANK";
                scripDetails.open = 2050;
                scripDetails.high = 2030;
                scripDetails.low = 1988;
                scripDetails.close= 2010L;
                scripDetails.volume = 50550;
                scripDetails.turnover= 51515L;
                scripDetails.date = Calendar.getInstance().getTime();

                cache.put("ICICIBANK",scripDetails);

                SearchManager sm = Search.getSearchManager(cache);
                org.hibernate.search.query.dsl.QueryBuilder builder = sm.buildQueryBuilderForClass(ScripDetails.class).get();

                Query luceneQuery = builder.keyword() .onField("scripName") .matching("INFY") .createQuery();

                CacheQuery cacheQuery = sm.getQuery( luceneQuery );

                // get the results:
                List<Object> found = cacheQuery.list();

java.lang.NoSuchMethodError: org.apache.lucene.codecs.blocktree.BlockTreeTermsWriter.validateSettings(II)V
    at org.apache.lucene.codecs.lucene50.Lucene50PostingsFormat.<init>(Lucene50PostingsFormat.java:412)
    at org.apache.lucene.codecs.lucene50.Lucene50PostingsFormat.<init>(Lucene50PostingsFormat.java:403)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source)
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source)
    at java.lang.reflect.Constructor.newInstance(Unknown Source)
    at java.lang.Class.newInstance(Unknown Source)
    at org.apache.lucene.util.NamedSPILoader.reload(NamedSPILoader.java:67)
    at org.apache.lucene.util.NamedSPILoader.<init>(NamedSPILoader.java:47)
    at org.apache.lucene.util.NamedSPILoader.<init>(NamedSPILoader.java:37)
    at org.apache.lucene.codecs.PostingsFormat.<clinit>(PostingsFormat.java:44)
    at org.apache.lucene.codecs.lucene40.Lucene40Codec.<init>(Lucene40Codec.java:52)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source)
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source)
    at java.lang.reflect.Constructor.newInstance(Unknown Source)
    at java.lang.Class.newInstance(Unknown Source)
    at org.apache.lucene.util.NamedSPILoader.reload(NamedSPILoader.java:67)
    at org.apache.lucene.util.NamedSPILoader.<init>(NamedSPILoader.java:47)
    at org.apache.lucene.util.NamedSPILoader.<init>(NamedSPILoader.java:37)
    at org.apache.lucene.codecs.Codec.<clinit>(Codec.java:41)
    at org.apache.lucene.index.LiveIndexWriterConfig.<init>(LiveIndexWriterConfig.java:125)
    at org.apache.lucene.index.IndexWriterConfig.<init>(IndexWriterConfig.java:171)
    at org.hibernate.search.store.spi.DirectoryHelper.initializeIndexIfNeeded(DirectoryHelper.java:55)
    at org.hibernate.search.store.impl.RAMDirectoryProvider.start(RAMDirectoryProvider.java:52)
    at org.hibernate.search.indexes.spi.DirectoryBasedIndexManager.initialize(DirectoryBasedIndexManager.java:90)
    at org.hibernate.search.indexes.impl.IndexManagerHolder.createIndexManager(IndexManagerHolder.java:256)
    at org.hibernate.search.indexes.impl.IndexManagerHolder.createIndexManager(IndexManagerHolder.java:513)
    at org.hibernate.search.indexes.impl.IndexManagerHolder.createIndexManagers(IndexManagerHolder.java:482)
    at org.hibernate.search.indexes.impl.IndexManagerHolder.buildEntityIndexBinding(IndexManagerHolder.java:91)
    at org.hibernate.search.spi.SearchIntegratorBuilder.initDocumentBuilders(SearchIntegratorBuilder.java:358)
    at org.hibernate.search.spi.SearchIntegratorBuilder.buildIncrementalSearchFactory(SearchIntegratorBuilder.java:147)
    at org.hibernate.search.spi.SearchIntegratorBuilder.buildSearchIntegrator(SearchIntegratorBuilder.java:120)
    at org.hibernate.search.engine.impl.MutableSearchFactory.addClasses(MutableSearchFactory.java:233)
    at org.infinispan.query.backend.SearchFactoryHandler$1.execute(SearchFactoryHandler.java:85)
    at org.infinispan.query.backend.TransactionHelper.runSuspendingTx(TransactionHelper.java:23)
    at org.infinispan.query.backend.SearchFactoryHandler.updateSearchFactory(SearchFactoryHandler.java:80)
    at org.infinispan.query.backend.SearchFactoryHandler.handleOnDemandRegistration(SearchFactoryHandler.java:55)
    at org.infinispan.query.backend.SearchFactoryHandler.updateKnownTypesIfNeeded(SearchFactoryHandler.java:42)
    at org.infinispan.query.backend.QueryInterceptor.updateKnownTypesIfNeeded(QueryInterceptor.java:268)
    at org.infinispan.query.backend.QueryInterceptor.processPutKeyValueCommand(QueryInterceptor.java:455)
    at org.infinispan.query.backend.QueryInterceptor.visitPutKeyValueCommand(QueryInterceptor.java:165)
    at org.infinispan.commands.write.PutKeyValueCommand.acceptVisitor(PutKeyValueCommand.java:71)
    at org.infinispan.interceptors.base.CommandInterceptor.invokeNextInterceptor(CommandInterceptor.java:97)
    at org.infinispan.interceptors.locking.AbstractLockingInterceptor.visitNonTxDataWriteCommand(AbstractLockingInterceptor.java:86)
    at org.infinispan.interceptors.locking.NonTransactionalLockingInterceptor.visitDataWriteCommand(NonTransactionalLockingInterceptor.java:40)
    at org.infinispan.interceptors.locking.AbstractLockingInterceptor.visitPutKeyValueCommand(AbstractLockingInterceptor.java:55)
    at org.infinispan.commands.write.PutKeyValueCommand.acceptVisitor(PutKeyValueCommand.java:71)
    at org.infinispan.interceptors.base.CommandInterceptor.invokeNextInterceptor(CommandInterceptor.java:97)
    at org.infinispan.interceptors.base.CommandInterceptor.handleDefault(CommandInterceptor.java:111)
    at org.infinispan.commands.AbstractVisitor.visitPutKeyValueCommand(AbstractVisitor.java:44)
    at org.infinispan.commands.write.PutKeyValueCommand.acceptVisitor(PutKeyValueCommand.java:71)
    at org.infinispan.interceptors.base.CommandInterceptor.invokeNextInterceptor(CommandInterceptor.java:97)
    at org.infinispan.interceptors.CacheMgmtInterceptor.updateStoreStatistics(CacheMgmtInterceptor.java:191)
    at org.infinispan.interceptors.CacheMgmtInterceptor.visitPutKeyValueCommand(CacheMgmtInterceptor.java:177)
    at org.infinispan.commands.write.PutKeyValueCommand.acceptVisitor(PutKeyValueCommand.java:71)
    at org.infinispan.interceptors.base.CommandInterceptor.invokeNextInterceptor(CommandInterceptor.java:97)
    at org.infinispan.interceptors.InvocationContextInterceptor.handleAll(InvocationContextInterceptor.java:102)
    at org.infinispan.interceptors.InvocationContextInterceptor.handleDefault(InvocationContextInterceptor.java:71)
    at org.infinispan.commands.AbstractVisitor.visitPutKeyValueCommand(AbstractVisitor.java:44)
    at org.infinispan.commands.write.PutKeyValueCommand.acceptVisitor(PutKeyValueCommand.java:71)
    at org.infinispan.interceptors.InterceptorChain.invoke(InterceptorChain.java:336)
    at org.infinispan.cache.impl.CacheImpl.executeCommandAndCommitIfNeeded(CacheImpl.java:1617)
    at org.infinispan.cache.impl.CacheImpl.putInternal(CacheImpl.java:1097)
    at org.infinispan.cache.impl.CacheImpl.put(CacheImpl.java:1089)
    at org.infinispan.cache.impl.DecoratedCache.put(DecoratedCache.java:522)
    at org.infinispan.persistence.manager.PersistenceManagerImpl.preloadKey(PersistenceManagerImpl.java:658)
    at org.infinispan.persistence.manager.PersistenceManagerImpl.access$000(PersistenceManagerImpl.java:70)
    at org.infinispan.persistence.manager.PersistenceManagerImpl$1.processEntry(PersistenceManagerImpl.java:234)
    at org.infinispan.persistence.jdbc.stringbased.JdbcStringBasedStore$2.call(JdbcStringBasedStore.java:350)
    at org.infinispan.persistence.jdbc.stringbased.JdbcStringBasedStore$2.call(JdbcStringBasedStore.java:317)
    at java.util.concurrent.FutureTask.run(Unknown Source)
    at java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source)
    at java.util.concurrent.FutureTask.run(Unknown Source)
    at org.infinispan.util.concurrent.WithinThreadExecutor.execute(WithinThreadExecutor.java:22)
    at java.util.concurrent.ExecutorCompletionService.submit(Unknown Source)
    at org.infinispan.persistence.jdbc.stringbased.JdbcStringBasedStore.process(JdbcStringBasedStore.java:317)
    at org.infinispan.persistence.manager.PersistenceManagerImpl.preload(PersistenceManagerImpl.java:226)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
    at java.lang.reflect.Method.invoke(Unknown Source)
    at org.infinispan.commons.util.ReflectionUtil.invokeAccessibly(ReflectionUtil.java:168)
    at org.infinispan.factories.AbstractComponentRegistry$PrioritizedMethod.invoke(AbstractComponentRegistry.java:869)
    at org.infinispan.factories.AbstractComponentRegistry.invokeStartMethods(AbstractComponentRegistry.java:638)
    at org.infinispan.factories.AbstractComponentRegistry.internalStart(AbstractComponentRegistry.java:627)
    at org.infinispan.factories.AbstractComponentRegistry.start(AbstractComponentRegistry.java:530)
    at org.infinispan.factories.ComponentRegistry.start(ComponentRegistry.java:218)
    at org.infinispan.cache.impl.CacheImpl.start(CacheImpl.java:850)
    at org.infinispan.manager.DefaultCacheManager.wireAndStartCache(DefaultCacheManager.java:599)
    at org.infinispan.manager.DefaultCacheManager.createCache(DefaultCacheManager.java:554)
    at org.infinispan.manager.DefaultCacheManager.getCache(DefaultCacheManager.java:424)
    at org.infinispan.manager.DefaultCacheManager.getCache(DefaultCacheManager.java:397)
    at com.tlab.EmbededCache.main(EmbededCache.java:55)

May 07, 2015 8:01:49 AM org.infinispan.persistence.jdbc.stringbased.JdbcStringBasedStore process
ERROR: ISPN000252: Error executing parallel store task
java.util.concurrent.ExecutionException: org.infinispan.persistence.spi.PersistenceException: Unable to preload!
    at java.util.concurrent.FutureTask.report(Unknown Source)
    at java.util.concurrent.FutureTask.get(Unknown Source)
    at org.infinispan.persistence.jdbc.stringbased.JdbcStringBasedStore.process(JdbcStringBasedStore.java:364)
    at org.infinispan.persistence.manager.PersistenceManagerImpl.preload(PersistenceManagerImpl.java:226)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
    at java.lang.reflect.Method.invoke(Unknown Source)
    at org.infinispan.commons.util.ReflectionUtil.invokeAccessibly(ReflectionUtil.java:168)
    at org.infinispan.factories.AbstractComponentRegistry$PrioritizedMethod.invoke(AbstractComponentRegistry.java:869)
    at org.infinispan.factories.AbstractComponentRegistry.invokeStartMethods(AbstractComponentRegistry.java:638)
    at org.infinispan.factories.AbstractComponentRegistry.internalStart(AbstractComponentRegistry.java:627)
    at org.infinispan.factories.AbstractComponentRegistry.start(AbstractComponentRegistry.java:530)
    at org.infinispan.factories.ComponentRegistry.start(ComponentRegistry.java:218)
    at org.infinispan.cache.impl.CacheImpl.start(CacheImpl.java:850)
    at org.infinispan.manager.DefaultCacheManager.wireAndStartCache(DefaultCacheManager.java:599)
    at org.infinispan.manager.DefaultCacheManager.createCache(DefaultCacheManager.java:554)
    at org.infinispan.manager.DefaultCacheManager.getCache(DefaultCacheManager.java:424)
    at org.infinispan.manager.DefaultCacheManager.getCache(DefaultCacheManager.java:397)
    at com.tlab.EmbededCache.main(EmbededCache.java:55)
Caused by: org.infinispan.persistence.spi.PersistenceException: Unable to preload!

【问题讨论】:

  • 我敢打赌,你的类路径中有多个 Lucene 版本。我建议检查mvn dependency:tree 的输出并尝试定位不同的lucene 依赖项。确实,您应该使用 Infinispan Query 模块建议的版本,应排除其余版本(请参阅maven dependency exclusion

标签: java lucene hibernate-search infinispan in-memory-database


【解决方案1】:

这个异常有点奇怪,但也许你可以尝试以下方法:

  • 使用所有 Infinispan 工件的更新版本,我建议升级到 7.2.1.Final。
  • 请确保所有 Infinispan 工件都具有相同的版本(到目前为止,我可以看到您正在混合 LATEST 和 7.0.0.CR2)
  • Infinispan 7.2.1.Final 与 Lucene 4.8.1, 4.9.0, 4.10.0, 4.10.1, 4.10.2 兼容,因此我强烈建议改用这些版本。

【讨论】:

  • 嗨 altanis,很好的答案,但需要对 Lucene 版本进行一些更正。您列出的版本是与 Infinispan Lucene 目录兼容的版本,但 Hibernate Search(由 Infinispan Query 和问题中使用)严格要求 4.10.x 行中的 Lucene 版本。
猜你喜欢
  • 1970-01-01
  • 2016-09-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-05-28
  • 2014-09-18
  • 2012-01-05
  • 1970-01-01
相关资源
最近更新 更多