有没有人使用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”,并成功连接到该文件夹。但是,该管理员无法查看该数据库:(
我是新手,所以请愚蠢地回答你。
答案 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
:(只有下面的罐子)
然后在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中加载一次。然后使用关闭钩子关闭它们。但由于这仅适用于本地开发盒,因此不太重要。