如何在嵌入式Neo4j 2.0实例中使用webadmin接口?

5
我有一个项目,其中嵌入了Neo4j 1.8.2和Web管理界面。现在我将项目升级到最新的Neo4j 2.0.1。虽然在这个过程中遇到了一些障碍(因为我使用了Spring Data Neo4j),但最终一切都很顺利。但是目前我卡在了如何让Web管理界面运行。如果您有任何建议,将不胜感激。这是我在1.8版本中使用的配置。 (配置片段引用的类)
package com.example;

import org.apache.commons.configuration.Configuration;
import org.apache.commons.configuration.MapConfiguration;
import org.neo4j.server.configuration.Configurator;
import org.neo4j.server.configuration.ThirdPartyJaxRsPackage;

import java.util.HashSet;
import java.util.Map;
import java.util.Set;

public class Neo4jServerConfig implements Configurator {

    private Configuration config;

    public Neo4jServerConfig(Map<String, String> config) {
        this.config = new MapConfiguration(config);
    }

    @Override
    public Configuration configuration() {
        return config;
    }

    @Override
    public Map<String, String> getDatabaseTuningProperties() {
        return null;
    }

    @Override
    public Set<ThirdPartyJaxRsPackage> getThirdpartyJaxRsClasses() {
        return new HashSet<>();
    }

    @Override
    public Set<ThirdPartyJaxRsPackage> getThirdpartyJaxRsPackages() {
        return new HashSet<>();
    }

}

以下是bean定义:

......

......

......

如上所述,对于1.8嵌入式Neo4j,这个方法可以正常工作。

但是,在Neo4j 2.0下初始化发生了很大变化。因此,我被迫使用以下bean定义来再次运行事物:

        <!-- neo4j server configuration -->
    <util:map id="neo4jConfig">
        <entry key="allow_store_upgrade" value="true"/>
        <entry key="enable_remote_shell" value="true"/>
        <entry key="online_backup_enabled" value="true"/>
        <entry key="node_auto_indexing" value="true"/>
        <entry key="node_keys_indexable" value="id,name,type,__type__"/>
        <entry key="relationship_auto_indexing" value="true"/>
    </util:map>

    <bean id="graphDbFactory" class="org.neo4j.graphdb.factory.GraphDatabaseFactory"/>

    <bean id="graphDbBuilder" factory-bean="graphDbFactory" factory-method="newEmbeddedDatabaseBuilder">
        <constructor-arg index="0" value="${neo4j.db.path}"/>
    </bean>

    <bean id="graphDbBuilderFinal" factory-bean="graphDbBuilder" factory-method="setConfig">
        <constructor-arg ref="neo4jConfig"/>
    </bean>

    <bean id="graphDatabaseService" factory-bean="graphDbBuilderFinal" factory-method="newGraphDatabase" destroy-method="shutdown" />

之后,我在这个bean定义中出现了错误标记。

    <bean id="serverWrapper" class="org.neo4j.server.WrappingNeoServerBootstrapper" init-method="start" destroy-method="stop">
        <constructor-arg index="0" ref="graphDatabaseService" /> 
        <constructor-arg index="1" ref="config"/>
    </bean>

首先,“org.neo4j.server.WrappingNeoServerBootstrapper”已被弃用 - 有没有其他的替代方案可以使用?
其次,它抱怨构造函数参数“graphDatabaseService”错误...它说“bean必须是org.neo4j.kernel.GraphDatabaseAPI”(也已被弃用)。
服务器启动时(至少从我的jetty日志中可以看到),没有出现错误,但尝试浏览localhost:28473最终无响应。
有什么线索吗?
提前致谢。

你是否将 org.neo4j.server.webserver.port 设置为 28473 并覆盖默认端口 7474? - s_t_e_v_e
3个回答

3

WrappingNeoServerBootstrapper和GraphDatabaseAPI已经过时,但目前还没有替代方案...因此您必须使用它们。

以下是我应用程序的示例代码,其中Webadmin与嵌入式Neo4j 2.0.1服务器一起启动:

val graphdb = new GraphDatabaseFactory()
          .newEmbeddedDatabaseBuilder(DBPath)
          .loadPropertiesFromFile(neo4jPropertiesPath)
          .newGraphDatabase()
          .asInstanceOf[GraphDatabaseAPI}

val srv = new WrappingNeoServerBootstrapper(graphdb, config);
srv.start()

因此,您必须将您的“graphDatabaseService”转换为“GraphDatabaseAPI”。 抱歉,我不知道如何在spring中实现这个...但是您可以使用正确的类型包装WrappingNeoServerBootstrapper。

干杯


我的问题实际上并不是与弃用的类有关 - 这更多地是一个旁问。相反,我正在寻找一种使Web界面运行的方法。如先前所述,服务器已启动并且Web界面已在我的Jetty中注册。但是,一旦我尝试调用它,就什么也不会发生。关于这一点,我可以想象,现在有一种替代的方法可以正确地实例化它。但是感谢您的回答 :) - Markus Velten

3
我用了比我想象中更长的时间才使它运行起来。请查看此pom以获取依赖项:here,基本上包括neo4j-server的2个包和Jersey的2个包。您还需要配置WrappingNeoServerBootstrapper(已弃用)。

我的POM文件排除了Neo4J中CH.QOS日志记录的东西,而是采用了自己的日志配置。

我也使用了Spring,并将大部分配置外部化。您可以在此处查看该文件here

完成这一切后,只需访问端口7474上的localhost即可。

<util:map id="config">
    <entry key="remote_shell_enabled" value="true"/>
</util:map>

<bean id="graphDbFactory" class="org.neo4j.graphdb.factory.GraphDatabaseFactory"/>

<bean id="graphDbBuilder" factory-bean="graphDbFactory" factory-method="newEmbeddedDatabaseBuilder">
    <constructor-arg value="${neo4j.datastore}"/>
</bean>

<bean id="graphDbBuilderFinal" factory-bean="graphDbBuilder" factory-method="setConfig">
    <constructor-arg ref="config"/>
</bean>

<bean id="graphDatabaseService" factory-bean="graphDbBuilderFinal" factory-method="newGraphDatabase"
      destroy-method="shutdown"/>

<bean id="serverWrapper" class="org.neo4j.server.WrappingNeoServerBootstrapper" init-method="start"
      destroy-method="stop">
    <constructor-arg ref="graphDatabaseService"/>
</bean>

感谢你的回答和努力让这个运行起来。但不幸的是,对我没有帮助... :( - Markus Velten
嗯,我刚在Windows上进行了一个全新构建的尝试(我通常使用OSX)。当我直接访问localhost:7474时,浏览器确实弹出。你也可以访问localhost:7474/browser。你试图访问的URL是什么?你看到了什么错误(如果有的话)?顺便说一下,两个neo4j-server包含的原因是一个用于浏览器界面,另一个用于Neo4j嵌入式。 - Mike Holdsworth
1
我们必须匹配neo4j-server所需的确切版本的Jersey,并包含每个Jersey组件,然后进行干净的重建才能使其正常工作。我们使用SBT: "org.neo4j.app"%"neo4j-server"%neo4jVersion, "org.neo4j.app"%"neo4j-server"%neo4jVersion分类器"static-web", "com.sun.jersey"%"jersey-core"%"1.18.1", "com.sun.jersey"%"jersey-server"%"1.18.1", "com.sun.jersey"%"jersey-servlet"%"1.18.1" - Jonathan Crosmer

0

在OSX上验证过了;只要添加POM更新和Spring配置,这就是你需要做的全部。然后只需浏览到localhost:7474,即可获得您的对象图。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接