使用ColdFusion连接到neo4j

时间:2012-04-20 17:42:34

标签: coldfusion neo4j

有没有人使用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作为本地开发盒。我在我的CF类路径中添加了...\neo4j-community-1.7\lib,在CF服务器Java类路径中列出了 库。 neo4j运行正常,因为我可以使用他们的管理员界面:http://localhost:7474/webadmin/#。 CF和Apache也运行良好。我每天都用它们。

虽然下面的代码有效,但我真的很想'看'使用neo4j web管理员发生了什么。因此,我可以在使用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”,并成功连接到该文件夹​​。但是,该管理员无法查看该数据库:(

我是新手,所以请愚蠢地回答你。

2 个答案:

答案 0 :(得分:4)

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

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

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

好的,警告:

1-理论上,可以以编程方式手动启动管理界面,以便它使用您通过Java创建的嵌入式服务器。 Java代码看起来很简单(取自Using the server (including web administration) 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访问一个位置,然后有多个只读Neo4Js(EmbeddedReadOnlyGraphDatabase)读取相同的位置(但我从未尝试过)。

您可以选择使用REST界面 - 手动或通过Neo4J Java REST Binding(有点慢)。

在深入了解之前,可能需要阅读部署方案文档。

那里至少有一个CF / Neo4J桥,但它还不完整。我有一个我工作的,但我需要弄清楚我是否可以开源它!

答案 1 :(得分:2)

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

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

    • asm-3.1.jar
    • ASM-分析-3.2.jar
    • ASM-公地3.2.jar
    • ASM-树-3.2.jar
    • ASM-util的-3.2.jar
    • 公地配置-1.6.jar
    • 杰克逊核-ASL-1.8.3.jar
    • 杰克逊 - JAXRS-1.8.3.jar
    • 杰克逊映射器-ASL-1.8.3.jar
    • 球衣核-1.9.jar
    • Jersey的多-1.9.jar
    • 球衣 - 服务器 - 1.9.jar
    • 码头-6.1.25.jar
    • 码头-util的-6.1.25.jar
    • 的Neo4j - 服务器 - 1.7静电web.jar
    • 的Neo4j - 服务器 - 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中加载一次。然后使用关闭钩子关闭它们。但由于这仅适用于本地开发盒,因此不太重要。