2014-02-18 3 views
1

Я пытаюсь создать реферат для создания федерального поиска на Allegro Graph. Я могу подключиться к репозиториям, хранящимся на разных серверах. Однако, когда я попытался объединить их с помощью федератора, он выдает сообщение об ошибке, что он не может найти репо на втором сервере. Есть ли способ объединить два хранилища, хранящиеся на разных серверах, в абстрактный репозиторий, где возможен федеральный поиск?allegro graph - федеративные хранилища, расположенные на разных серверах

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 

ТИА

ответ

0

Я смог создать федеративный репозиторий, используя AGServer Allegro Graph. Вот как я сделал это для тех, кому может быть полезно:

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

Каркас Сезам поддерживает 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 для федерации через предложение SERVICE. Это потребует, чтобы каждый репозиторий, который вы хотите запросить, доступен через HTTP в качестве конечной точки SPARQL.