-->

快板图 - 联合位于不同的服务器上的版本库(allegro graph - federate rep

2019-10-19 08:40发布

我试图做的快板图表联邦搜索创建抽象库。 我能够连接到不同的存储服务器上的存储库。 然而,当我试图使用盟员将它们结合在一起,它抛出一个错误,它无法找到第二个服务器上的回购。 有没有一种方法来存储不同的服务器上为一个抽象库结合了两种资源库,其中一个联邦搜索可以做什么?

    AGServer server = new AGServer(SERVER_URL1, USERNAME1, PASSWORD1);
    AGRepository repo1 = server.getRootCatalog().openRepository(REPO1);


    AGServer server2 = new AGServer(SERVER_URL2, USERNAME2, PASSWORD2);
    AGRepository repo2 = server2.getRootCatalog().openRepository(REPO2);

    System.out.println(repo1.getConnection().size());
    System.out.println(repo2.getConnection().size());

    AGAbstractRepository combinedRepo = server.federate(repo1, repo2);
    combinedRepo.initialize();

    combinedRepo.getConnection(); //this return an exception


    Exception in thread "main" org.openrdf.repository.RepositoryException: org.openrdf.repository.RepositoryException: Repository not found with ID: REPO2
        at com.franz.agraph.repository.AGCatalog.openRepository(AGCatalog.java:264)
...
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:606)
        at com.intellij.rt.execution.application.AppMain.main(AppMain.java:120)
    Caused by: org.openrdf.repository.RepositoryException: Repository not found with ID: REPO2
        at com.franz.agraph.repository.AGCatalog.openRepository(AGCatalog.java:260)
        ... 6 more

TIA

Answer 1:

芝麻框架支持Federation Sail你可以用它来包装一些芝麻库(生活在不同的服务器/位置)到一个虚拟商店。 你可以尝试和使用,而不是使用Allegrograph的定制联合会代码(这似乎面向多个资源库仅在单个服务器上)的:

 // create your AG repositories the same way
 AGServer server = new AGServer(SERVER_URL1, USERNAME1, PASSWORD1);
 AGRepository repo1 = server.getRootCatalog().openRepository(REPO1);

 AGServer server2 = new AGServer(SERVER_URL2, USERNAME2, PASSWORD2);
 AGRepository repo2 = server2.getRootCatalog().openRepository(REPO2);

 // Use a Sesame Federation to combine them
 org.openrdf.sail.federation.Federation federation = new Federation();
 federation.addMember(repo1);
 federation.addMember(repo2);
 federation.setReadOnly(true); // assuming you only use it for query

 Repository combinedRepo = new SailRepository(federation);
 combinedRepo.initialize();

(ObDisclaimer:以上从我的头顶编写的代码,我可能忽略了一个必要的配置细节得到这个工作 - 但你的要点希望)

另一种方法是,你与SPARQL对联盟的支持工作,经由本服务条款。 这就要求你要查询每个存储库通过HTTP进行访问的SPARQL终端虽然。



Answer 2:

我是能够使采用快板图的AGServer联合存储库。 以下是我做的那些谁可能会发现:

AGVirtualRepository s = server2.virtualRepository("<http://<ip address>:10035/repositories/repo1> + <http://<ip address>:10035/repositories/repo2>");
AGRepositoryConnection combinedConn = s.getConnection();


文章来源: allegro graph - federate repositories located on different server