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をインストールしました。

現在、WindowsXPでローカル開発ボックスとしてApacheCF9.0.1を実行しています。CFクラスパスに追加...\neo4j-community-1.7\libしました。ライブラリCFサーバーのJavaクラスパスにリストされています。管理者インターフェースhttp:// localhost:7474 / webadmin /#を使用できるため、neo4jは正常に実行されています。CFとApacheも正常に動作しています。毎日使っています。

以下のコードは機能しますが、neo4jWeb管理者を使用して何が起こっているのかを「確認」したいと思います。そのため、CFアプリケーションでデータを使用しながら、学習するneo4jを調整できます。

コード:(作品)

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

そこで、neo4jdbgraph.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 内で (Java 経由で) Neo4J にアクセスし、管理インターフェースを機能させることはできません(警告 1 が適用されます)。

Neo4J パッケージのすべての jar ファイルを Adob​​e CF に配置した場合、Neo4J 管理インターフェイスが独自の Neo4J ファイル システムを参照している可能性があります。組み込みサーバーを作成すると、同じデータベースに接続できないため、接続できません。

組み込みの Neo4J は、標準のデータベース接続のようには機能しません。1 つの埋め込み Neo4J は、1 つのディレクトリの場所に対して読み取りと書き込みを行います (キーワード: ディレクトリ。単一のファイルではなく、多数のファイルを開きます)。2 つの Neo4J インスタンスが同じディレクトリの場所にアクセスすることはできません (警告 2 が適用されます)。

わかりました、警告:

1- 理論的には、Java 経由で作成した組み込みサーバーを使用するように、管理インターフェースをプログラムで手動で起動することができます。Java コードは十分に単純に見えます (組み込みデータベースでサーバー (Web 管理を含む) を使用するから取得):

// 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が1つの場所にアクセスし、複数の読み取り専用Neo4J(EmbeddedReadOnlyGraphDatabase)が同じ場所を読み取る可能性があります(ただし、試したことはありません)。

手動で、またはNeo4J Java RESTバインディングを介して(ただし、少し遅い)、RESTインターフェースを使用するオプションがあります。

これに深く入り込む前に、展開シナリオのドキュメントを読む価値があるかもしれません。

そこには少なくとも 1 つの 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-分析-3.2.jar
    • asm-commons-3.2.jar
    • asm-tree-3.2.jar
    • asm-util-3.2.jar
    • commons-configuration-1.6.jar
    • jackson-core-asl-1.8.3.jar
    • ジャクソン-jaxrs-1.8.3.jar
    • ジャクソン-マッパー-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 に答える