5

这里有没有人使用 ColdFusion 成功连接到 neo4j?

我能够使用本指南作为起点连接到 neo4j 1.6.1:http: //ghostednotes.com/2010/04/29/using-neo4j-graph-databases-with-coldfusion 。然而,这是一个短暂的成功。我已经卸载了 neo4j 1.6.1 并安装了 1.7。

我现在在 Windows XP 上运行 Apache、CF 9.0.1 作为本地开发盒。我添加...\neo4j-community-1.7\lib到我的 CF 类路径中,并且库在 CF Server Java 类路径列出。neo4j 运行良好,因为我可以使用他们的管理员界面:http://localhost:7474/webadmin/#。CF 和 Apache 也运行良好。我每天都使用它们。

虽然下面的代码有效,但我真的很想“看看”使用 neo4j 网络管理员发生了什么。因此,我可以在 CF 应用程序中使用数据的同时协调我的 neo4j 学习。

代码:(作品)

    dbroot = "/tmp/neo4jtest1/";
    graphDb = createObject('java', 'org.neo4j.kernel.EmbeddedGraphDatabase');
    graphDb.init( dbroot & 'var/myFirstGraphDB');

所以我尝试连接到 neo4j db graph.db 。但是代码失败了。

代码:(失败)

    graphDb = createObject('java', 'org.neo4j.kernel.EmbeddedGraphDatabase');
    graphDb.init( dbroot & 'graph.db');

错误:

    Object instantiation exception.
    An exception occurred while instantiating a Java object. The class must not be an interface or an abstract class. Error: ''. 

如果我删除它"."graph.db在 neo4j 数据文件夹中创建一个“graphdb”,并成功连接到它。但是,他们的管理员无法查看该数据库:(

我是新手,所以请你的答案哑口无言。

4

2 回答 2

4

好的,我认为您要实现的目标是不可能的。无法在 CF 中访问 Neo4J(通过 Java)让管理界面正常工作(适用警告 1)。

如果您已将 Neo4J 包的所有 jar 放入 Adob​​e CF,那么 Neo4J 管理界面很可能正在查看它自己的 Neo4J 文件系统。当您创建嵌入式服务器时,它没有连接到同一个数据库,因为它根本无法连接。

嵌入式 Neo4J 不像标准数据库连接那样工作。一个嵌入式 Neo4J 读取和写入一个目录位置(关键字:目录,它不会打开单个文件,而是打开一大堆文件)。没有两个 Neo4J 实例可以访问相同的目录位置(适用警告 2)。

好的,注意事项:

1-理论上,可以通过编程手动启动管理界面,以便它使用您通过 Java 创建的嵌入式服务器。Java 代码看起来很简单(取自Using the server (including web management) with an embedded database):

// Create your embedded graph db somewhere
src = CreateObject("java", "org.neo4j.server.WrappingNeoServerBootstrapper")
      .init(graphDb);
srv.start();
// The server is now running
// until we stop it:
srv.stop();

我没有得到这个工作,主要是因为管理服务器有一堆与我的其余设置不兼容的依赖项,所以我无法建议上述工作的效果如何。

2- 可以让 1 个读/写 Neo4J 访问一个位置,然后让多个只读 Neo4J (EmbeddedReadOnlyGraphDatabase) 读取同一位置(但我从未尝试过)。

您确实可以选择使用 REST 接口 - 手动或通过Neo4J Java REST 绑定(虽然有点慢)。

在深入研究之前,可能值得阅读部署场景文档。

那里至少有一个 CF/Neo4J 桥接器,但还很不完整。我有一个我正在研究的,但我需要弄清楚我是否可以开源它!

于 2012-04-20T20:56:08.633 回答
2

只是对 otupman 评论的一个小补充。我可以确认他从 CF 连接到管理界面的理论。将以下 jar 添加到 CF 类路径似乎足以让基础知识启动并运行。如果您使用更高级的功能,您可能需要额外的 jar。 请注意,我使用的是 Tomcat,因此确切的 jar 可能会因您的环境而略有不同

  • neo4j-community-1.7/lib/*.*(整个目录)
  • neo4j-community-1.7/system/lib: (只有下面的罐子)

    • asm-3.1.jar
    • asm-analysis-3.2.jar
    • asm-commons-3.2.jar
    • asm-tree-3.2.jar
    • asm-util-3.2.jar
    • commons-configuration-1.6.jar
    • 杰克逊核心asl-1.8.3.jar
    • 杰克逊-jaxrs-1.8.3.jar
    • jackson-mapper-asl-1.8.3.jar
    • jersey-core-1.9.jar
    • jersey-multipart-1.9.jar
    • jersey-server-1.9.jar
    • jetty-6.1.25.jar
    • jetty-util-6.1.25.jar
    • neo4j-server-1.7-static-web.jar
    • neo4j-server-1.7.jar
    • rrd4j-2.0.7.jar

然后在 onApplicationStart 中启动服务器和数据库

    factory = createObject("java", "org.neo4j.graphdb.factory.GraphDatabaseFactory");
    dbroot = ExpandPath("/neo4jtest/");
    graphDb = factory.newEmbeddedDatabase(dbroot & 'myFirstGraphDB');

    Bootstrapper = createObject("java", "org.neo4j.server.WrappingNeoServerBootstrapper");
    graphServer = Bootstrapper.init( graphDb );
    graphServer.start();

    application.graphServer = graphServer;
    application.graphDb = graphDB;

并在 onApplicationEnd 中关闭

    application.graphDb.shutDown();
    application.graphServer.stop();

编辑:经过进一步测试,我认为最好在 OnServerStart 中加载一次。然后使用关闭挂钩关闭它们。但由于这只是针对本地开发框,所以它不那么重要。

于 2012-04-20T22:04:34.580 回答