0

macbook でローカルに neo4j-community-2.2.5 を実行しています。neo4j-ogm バージョンを使用してコードに接続しようとしています: 1.1.2

セッションファクトリは次のとおりです。

public class Neo4jSessionFactory {

    private final static SessionFactory sessionFactory = new SessionFactory("com.readypulse.rpinfluencernetwork.ogm.model");
    private static Neo4jSessionFactory factory = new Neo4jSessionFactory();

    public static Neo4jSessionFactory getInstance() {
        return factory;
    }

    private Neo4jSessionFactory() {
    }

    public Session getNeo4jSession() {
        return sessionFactory.openSession("http://localhost:7474", "neo4j",  "mypassword");
    }
}

私はエンティティクラスを持っています:

@NodeEntity(label="Hashtag")
public class Hashtag extends Entity {

    @Property(name = "name")
    String name;
...

サービス :

public interface HashtagService extends Service<Hashtag>{

}

一般的なサービス:

public abstract class GenericService<T> implements Service<T> {

    private static final int DEPTH_LIST = 0;
    private static final int DEPTH_ENTITY = 1;
    private Session session = Neo4jSessionFactory.getInstance().getNeo4jSession();

    public Iterable<T> findAll() {
        return session.loadAll(getEntityType(), DEPTH_LIST);
    }

    public T find(Long id) {
        return session.load(getEntityType(), id, DEPTH_ENTITY);
    }

    public void delete(Long id) {
        session.delete(session.load(getEntityType(), id));
    }

    public void createOrUpdate(T entity) {
        session.save(entity, DEPTH_ENTITY);
    }

    public abstract Class<T> getEntityType();
}

呼び出しコード:

public static void main(String args[]) {
    Hashtag hashtag = new Hashtag("fun");
    HashtagService service = new HashtagServiceImpl();

    service.createOrUpdate(hashtag);
}

アプリケーションサーバーではなく、単純なJavaプロセスとしてEclipseでコードを実行しています。

トレース付きの完全なログは次のとおりです。

SLF4J: Class path contains multiple SLF4J bindings.
SLF4J: Found binding in [jar:file:/Users/lazywiz/.m2/repository/org/slf4j/slf4j-log4j12/1.5.8/slf4j-log4j12-1.5.8.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: Found binding in [jar:file:/Users/lazywiz/.m2/repository/org/slf4j/slf4j-jdk14/1.5.11/slf4j-jdk14-1.5.11.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: Found binding in [jar:file:/Users/lazywiz/.m2/repository/ch/qos/logback/logback-classic/1.1.2/logback-classic-1.1.2.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation.
15/10/09 14:55:16 INFO info.ClassFileProcessor: Starting Post-processing phase
15/10/09 14:55:16 INFO info.ClassFileProcessor: Building annotation class map
15/10/09 14:55:16 INFO info.ClassFileProcessor: Building interface class map for 9 classes
15/10/09 14:55:16 INFO info.ClassFileProcessor: Registering default type converters...
15/10/09 14:55:16 INFO info.ClassFileProcessor: Post-processing complete
15/10/09 14:55:16 INFO info.ClassFileProcessor: 9 classes loaded in 16 milliseconds
15/10/09 14:55:17 WARN request.DefaultRequest: Caught response exception: No Host
Exception in thread "main" org.neo4j.ogm.session.result.ResultProcessingException: Failed to execute request: {"statements":[{"statement":"CREATE (_0:`Hashtag`{_0_props}) RETURN id(_0) AS _0","parameters":{"_0_props":{"name":"varun"}},"resultDataContents":["row"],"includeStats":false}]}
    at org.neo4j.ogm.session.request.DefaultRequest.execute(DefaultRequest.java:105)
    at org.neo4j.ogm.session.request.SessionRequestHandler.execute(SessionRequestHandler.java:99)
    at org.neo4j.ogm.session.delegates.SaveDelegate.save(SaveDelegate.java:68)
    at org.neo4j.ogm.session.Neo4jSession.save(Neo4jSession.java:391)
    at com.readypulse.rpinfluencernetwork.ogm.service.GenericService.createOrUpdate(GenericService.java:26)
    at com.readypulse.rpinfluencernetwork.GraphManager.main(GraphManager.java:16)
Caused by: org.apache.http.client.HttpResponseException: No Host
    at org.neo4j.ogm.session.request.DefaultRequest.execute(DefaultRequest.java:86)
    ... 5 more

誰かが私が間違っているところを提案してもらえますか? これより前は、使用していたコード ベースがまったく異なっていました。

graphDb = new GraphDatabaseFactory().newEmbeddedDatabase(dbPath); and 

しかし、後で、prod 環境で実行されている neo4j サーバーに接続したい場合、これは正しい方法ではないことに気付きました。サーバーを起動したいので、接続はJavaとRubyクライアントを同時に介して行われます。

ありがとう!

4

1 に答える 1

0

いくつかのポイント:

a) neo4j をパスワードとして使用することはできません。これは、新しいデータベースをインストールするときのデフォルトのパスワードですが、最初の起動時にパスワードを変更する必要があります。

パスワードを変更する場合:

  1. Neo4j ブラウザを開くと、最初のプロンプトでパスワードの変更を求められます

  2. または、パスワードを変更するための curl リクエストを発行します。

    curl -H "Content-Type: application/json"\
    -H "Authorization: Basic echo -n 'neo4j:neo4j' | base64"\
    -X POST -d '{"password":"yourNewPassword"}'\
    -I http://localhost:7474/user/ neo4j/パスワード

b) SDN4 を使用していない場合はsessionFactory、ユーザーとパスワードを引数としてメソッドに渡す必要がありますopenSession

Session session = sessionFactory.openSession("http://localhost:7474", username, password);

ドキュメント:

Neo4j 認証: http://neo4j.com/docs/stable/rest-api-security.html#rest-api-user-status-on-first-access

Neo4j OGM セッション認証: http://neo4j.com/docs/ogm/java/stable/#reference_programming-model_session

于 2015-10-09T22:21:50.813 に答える