0

我在 grails 上运行 neo4j 企业 1.8 并想升级到 1.8.1。由于我也广泛使用密码引擎,升级后我尝试执行一些查询。不幸的是,我在尝试启动 Cypher ExecutionEngine 时遇到了异常。

我写了一个为我工作的小服务:

import org.neo4j.cypher.javacompat.ExecutionEngine
import org.neo4j.kernel.impl.util.StringLogger

class CypherService {

    def graphDatabaseService

    static transactional = true

    def executeString(String cypherString) {
        log.debug "start method executeString"

        ExecutionEngine executionEngine = new ExecutionEngine(graphDatabaseService, StringLogger.DEV_NULL)
        if(executionEngine) {
            def result = executionEngine.execute(cypherString)
            return result
        } else {
            log.error "Could not initialize the execution engine for Cypher"
            return null
        }
    }
}

启动执行引擎时,出现以下异常:

java.lang.NoSuchMethodError: com.googlecode.concurrentlinkedhashmap.ConcurrentLinkedHashMap$Builder.maximumWeightedCapacity(J)Lcom/googlecode/concurrentlinkedhashmap/ConcurrentLinkedHashMap$Builder;
at org.neo4j.cypher.internal.LRUCache.<init>(LRUCache.scala:31)
at org.neo4j.cypher.ExecutionEngine$$anon$1.<init>(ExecutionEngine.scala:91)
at org.neo4j.cypher.ExecutionEngine.<init>(ExecutionEngine.scala:91)
at org.neo4j.cypher.javacompat.ExecutionEngine.<init>(ExecutionEngine.java:54)
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
at java.lang.reflect.Constructor.newInstance(Constructor.java:513)
at org.codehaus.groovy.reflection.CachedConstructor.invoke(CachedConstructor.java:77)
at org.codehaus.groovy.runtime.callsite.ConstructorSite$ConstructorSiteNoUnwrapNoCoerce.callConstructor(ConstructorSite.java:102)
at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCallConstructor(CallSiteArray.java:52)
at org.codehaus.groovy.runtime.callsite.AbstractCallSite.callConstructor(AbstractCallSite.java:190)
at org.codehaus.groovy.runtime.callsite.AbstractCallSite.callConstructor(AbstractCallSite.java:202)
at com.netjay.fanorakel.CypherService.executeString(CypherService.groovy:16)

知道这里出了什么问题,是否有避免这种情况的解决方案?

最好的迈克尔

4

3 回答 3

1

您可能还可以针对旧版本的 lib 重建 Neo4j 的 cypher 模块,或者实际上从 neo4j 中排除依赖项。

于 2013-02-21T10:02:43.947 回答
0

我有同样的问题 - 1.8.1 我需要单独包含 concurrentlinkedhashmap-lru.1.3.1.jar

http://code.google.com/p/concurrentlinkedhashmap/downloads/detail?name=concurrentlinkedhashmap-lru-1.3.1.jar&can=2&q=

于 2013-02-20T16:13:11.587 回答
0

这里的问题是:

  • Neo4j 1.8.1 为 concurrentlinkedhashmap_lru 版本 1.3.1 引入了新的依赖项,并且
  • Grails 依赖于 concurrentlinkedhashmap_lru 版本 1.2_jdk5,并且
  • concurrentlinkedhashmap_lru 的 API 不向后兼容这两个版本。

因此,grails 代码库最近已升级以将依赖项移至 1.3.1,请参阅https://github.com/SpringSource/grails-data-mapping/commit/b15e207a2a08ac16e77de399733cb9cc14eff48ehttps://github.com/grails/grails-核心/提交/6dfab1a5db4da8c176351f23d65c7fc0d4aa6364

因此,要将 Neo4j 1.8.1(和更新版本)与 Grails 一起使用,您可以等待新的 Grails 版本或自己构建 Grails 快照。

于 2013-02-21T07:01:08.087 回答