【问题标题】:Can not explore database created by an embedded neo4j无法探索由嵌入式 neo4j 创建的数据库
【发布时间】:2015-07-02 06:31:25
【问题描述】:

我遇到了一个奇怪的问题。

我使用嵌入式 neo4j 创建了一个数据库,其路径为“/Users/bondwong/Documents/workspace/pamela/target/data/pamela.db”。

这里是 Spring 配置:

<bean id="graphDbBuilder" factory-bean="graphDbFactory"
    factory-method="newEmbeddedDatabaseBuilder">
    <constructor-arg value="target/data/pamela.db" />
</bean>

然后我更改了neo4j-server.properties这一行:

org.neo4j.server.database.location=/Users/bondwong/Documents/workspace/pamela/target/data/pamela.db

之后,我使用 curl 测试了我的系统,结果显示一切正常。下面是得到一个 id 为 9 的节点的结果:

但是,当我启动服务器并使用浏览器查看数据时,什么都没有显示:

这里是位置,和Spring XML配置文件中的一样:

这是 :sysinfo 结果:

这是 jUnit 测试及其结果,显示它实际上插入了数据:

package repositoryTest;

import static org.junit.Assert.*;

import java.util.HashMap;

import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import org.springframework.transaction.annotation.Transactional;

import com.bond.pamela.domain.Diary;
import com.bond.pamela.domain.factory.DiaryFactory;
import com.bond.pamela.persistence.DirayRepository;

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration({ "/applicationContext.xml" })
public class DiaryRepositoryTest {
    @Autowired
    DirayRepository repository;

    @Test
    @Transactional
    public void testSaveDiary() {
        Diary diary = (Diary) DiaryFactory.getInstance().create(
                new HashMap<String, Object>());
        repository.save(diary);

        Diary retrivedDiary = repository.findOne(diary.getGraphId());
        assertEquals(diary, retrivedDiary);
    }

}

我认为它应该可以工作,有人知道出了什么问题吗?以及如何解决它。谢谢!

【问题讨论】:

  • 一次只有一个进程可以访问数据库。 Neo4j 服务器甚至不应该启动。
  • :sysinfo 对数据库有什么看法?
  • @MichaelHunger 你的意思是我应该关闭 neo4j 服务器?但我想查看数据,你有其他想法吗?我停止了运行我的应用程序的tomcat,并尝试让neo4j服务器单独打开,但仍然什么都没有。
  • @MichaelHunger 编辑我的帖子添加 :sysinfo 的结果
  • 那么该目录对于服务器来说不正确,或者它实际上没有插入数据,因为您的 java 程序无法访问它。你是否在某个地方吞下了异常?

标签: neo4j spring-data-neo4j


【解决方案1】:

你可以把你的java代码写成server extension

或暂时使用WrappingBootstrapper。 或者更确切地说使用ServerControls from Neo4j-Harness 进行测试

创建数据时,您确定正确提交了事务吗?

Transaction tx = db.beginTx();
// create data
tx.success(); 
tx.close();

或更好

try (Transaction tx = db.beginTx()) {
  // create data
  tx.success(); 
}

【讨论】:

  • 我们主要使用 WrappingBootstrapper 进行调试,但我看到它已被弃用,甚至在下一个版本中被删除 - 是否有计划向嵌入式服务器添加“查询浏览器”或类似的东西官方建议停止使用嵌入式模式?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-07-25
  • 1970-01-01
  • 2013-07-03
  • 2014-05-27
  • 2015-10-14
  • 2019-09-04
  • 2014-07-18
相关资源
最近更新 更多