Java源码示例:org.apache.jena.fuseki.main.FusekiServer

示例1
private static void setupFuseki(int fusekiPort, String dsName, String zoneDir, DeltaLink deltaLink) {
    //deltaLink.register(Id.create());
    FileOps.ensureDir(zoneDir);
    FileOps.clearAll(zoneDir);

    DeltaClient dClient = setup_dataset(dsName, zoneDir, deltaLink);
    Zone zone = dClient.getZone();
    DataSourceDescription dsd = deltaLink.getDataSourceDescriptionByName(dsName);
    Id dsRef = dsd.getId();
    SyncPolicy syncPolicy = SyncPolicy.TXN_RW;


    LocalStorageType storage = LocalStorageType.MEM;
    dClient.register(dsRef, storage, syncPolicy);
    DeltaConnection deltaConnection = dClient.getLocal(dsRef);
    DatasetGraph dsg = deltaConnection.getDatasetGraph();

    FusekiServer server =
        FusekiServer.create()
            .loopback(true)
            .port(fusekiPort)
            .add(dsName, dsg)
            .build();
    server.start();
}
 
示例2
@Test
public void fuseki_stop_start() {
    DeltaServer deltaServer = deltaServer();
    FusekiServer server1 = fuseki1();
    try {
        server1.stop();

        RDFConnection conn1 = RDFConnectionFactory.connect("http://localhost:"+F1_PORT+ds1) ;
        QueryExecution qExec = conn1.query("ASK{}");
        try { qExec.execAsk(); fail(); } catch(QueryExceptionHTTP ex) {}
        // Restart, same port.
        server1 = fuseki1(Start.RESTART);
        QueryExecution qExec1 = conn1.query("ASK{}");
        qExec1.execAsk();
    } finally {
        server1.stop();
        deltaServer.stop();
    }
}
 
示例3
@Test
public void apply_1() {
    Pair<FusekiServer, DatasetGraph> p = create();
    FusekiServer server = p.getLeft();
    DatasetGraph dsg = p.getRight();

    server.start();
    String url = "http://localhost:"+server.getPort()+"/";
    try {
        assertFalse(dsg.contains(node(":g"), node(":s"), node(":p"), node(":o")));

        // Service name
        applyPatch(url+"/ds/patch", patch1());
        assertTrue(dsg.contains(node(":g"), node(":s"), node(":p"), node(":o")));

        // Content type.
        applyPatch(url+"/ds", patch2());
        assertFalse(dsg.contains(node(":g"), node(":s"), node(":p"), node(":o")));
        applyPatch(url+"/ds", patch1());
        assertTrue(dsg.contains(node(":g"), node(":s"), node(":p"), node(":o")));
    } finally { server.stop(); }
}
 
示例4
public static void main2(String ...args) {
        int PORT = 2020;
        DatasetGraph dsgBase = DatasetGraphFactory.createTxnMem();
        RDFChanges changeLog = RDFPatchOps.textWriter(System.out);
        DatasetGraph dsg = RDFPatchOps.changes(dsgBase, changeLog);

        // Create a server with the changes-enables dataset.
        // Plain server. No other registration necessary.
        FusekiServer server =
            FusekiServer.create()
                .port(PORT)
                .add("/ds", dsg)
                .build();
        server.start();

        RDFConnection conn = RDFConnectionFactory.connect("http://localhost:"+PORT+"/ds");
        UpdateRequest update = UpdateFactory.create("PREFIX : <http://example/> INSERT DATA { :s :p 123 }");
        // Note - no prefix in changes. The SPARQL Update prefix is not a chnage to the dataset prefixes.
        conn.update(update);

        server.stop();
//        // Server in the background so explicitly exit.
//        System.exit(0);
    }
 
示例5
@BeforeClass
public static void setUp() {
  port = Fuseki.choosePort();

  Model model = ModelFactory.createDefaultModel();
  model.read(DATA_FILE);
  Dataset ds = DatasetFactory.create(model);

  server = FusekiServer
    .create()
    .port(port)
    .add(DATASET, ds)
    .build();
  DataAccessPointRegistry registry = server.getDataAccessPointRegistry();
  assertTrue(registry.isRegistered(DATASET));
  assertEquals(1, registry.size());
  server.start();
}
 
示例6
protected static FusekiServer fuseki(int port, Model assembler) {
    Builder builder =
        FusekiServer.create()
            .loopback(true)
            .port(port);
  // Process server context
  Resource server = GraphUtils.getResourceByType(assembler, FusekiVocab.tServer);
  if ( server != null )
      AssemblerUtils.mergeContext(server, Fuseki.getContext()) ;
  // Process services, whether via server ja:services or, if absent, by finding by type.
  List<DataAccessPoint> x = FusekiConfig.servicesAndDatasets(assembler);
  // Unbundle so that they accumulate.
  x.forEach(dap->builder.add(dap.getName(), dap.getDataService()));
  return builder.build();
}
 
示例7
private static FusekiServer fuseki(Start state, int port, String config, String zone) {
    switch (state) {
        case CLEAN : {
            Zone.clearZoneCache();
            FileOps.clearDirectory(zone);
            break;
        }
        case RESTART :
            break;
    }
    return FusekiServer.create().port(port).loopback(true).parseConfigFile(config).build().start();
}
 
示例8
@Test(expected=QueryExceptionHTTP.class)
public void fuseki_stop() {
    DeltaServer deltaServer = deltaServer(CLEAN);
    FusekiServer server1 = fuseki1(CLEAN);
    try {
        server1.stop();
        RDFConnection conn1 = RDFConnectionFactory.connect("http://localhost:"+F1_PORT+ds1) ;
        QueryExecution qExec = conn1.query("ASK{}");
        qExec.execAsk();
    } finally {
        deltaServer.stop();
    }
}
 
示例9
@Test(expected=AssemblerException.class)
public void fuseki_start() {
    // No DeltaServer running.
    //DeltaServer deltaServer = deltaServer();

    // AssemblerException -> HttpException -> NoHttpResponseException

    // Assembler exception only if the dataset does not exis in the Zone.
    FusekiServer server1 = fuseki1(CLEAN);
    server1.stop();
}
 
示例10
@Test
public void patchserver_stop_start() {
    DeltaServer deltaServer = deltaServer();
    FusekiServer server1 = fuseki1();
    try {
        deltaServer.stop();
        deltaServer = null;

        // Should fail
        try (RDFConnection conn0 = RDFConnectionFactory.connect("http://localhost:"+F1_PORT+ds1) ) {
            conn0.update(PREFIX+"INSERT DATA { :s :p 'update_patchserver_stop_start' }");
            Assert.fail("Should not be able to update at the moment");
        } catch (HttpException ex) {
            assertEquals(503, ex.getStatusCode());
            // Expected - ignore.
            //assertTrue(ex.getResponseCode()>= 500);
        }

        deltaServer = deltaServer(Start.RESTART);

        try (RDFConnection conn1 = RDFConnectionFactory.connect("http://localhost:"+F1_PORT+ds1)) {
            conn1.query("ASK{}").execAsk();
        }

        // Should be able to update.
        try (RDFConnection conn0 = RDFConnectionFactory.connect("http://localhost:"+F1_PORT+ds1) ) {
            conn0.update(PREFIX+"INSERT DATA { :s :p 'update_patchserver_stop_start' }");
        }
    } finally {
        server1.stop();
        if ( deltaServer != null )
            deltaServer.stop();
    }
}
 
示例11
/**
 * Build a Fuseki server whose dataset is a changes dataset wrapping the given base.
 */
public static FusekiServer deltaFuseki(int port, String name, DatasetGraph dsgBase, RDFChanges changes) {
    DatasetGraph dsg = RDFPatchOps.changes(dsgBase, changes);
    return
        FusekiServer.create().port(port)
            .add(name, dsg)
            .enablePing(true)
            .build();
}
 
示例12
private Pair<FusekiServer, DatasetGraph> create() {
    int port = WebLib.choosePort();
    DatasetGraph dsg = DatasetGraphFactory.createTxnMem();
    String dsName = "/ds";
    FusekiServer server =
        DeltaFuseki.fusekiWithPatch()
            .add(dsName, dsg)
            .addOperation(dsName, DeltaFuseki.patchOp)
            .build();
    return Pair.create(server, dsg);
}
 
示例13
public static void main2(String ...args) {
    // ---- Fuseki server with patch operation.
    int PORT = 2020 ;
    // In-memory dataset
    DatasetGraph dsgFuseki = DatasetGraphFactory.createTxnMem();

    String serviceName = "patch";
    FusekiServer server = fusekiServerWithPatch("/ds", PORT, dsgFuseki, serviceName);
    server.start();

    // ---- Destination for changes is the Fuseki patch opration.
    String url = "http://localhost:"+PORT+"/ds/"+serviceName;

    RDFChanges changeSender = DeltaClientLib.destination(url);
    // In the case of http/https URLs, this is done with
    //    RDFChanges changeSender = new RDFChangesHTTP(url);

    // ---- Local dataset.
    DatasetGraph dsgLocal = DatasetGraphFactory.createTxnMem();
    // Combined datasetgraph and changes.
    // Changes will be POSTed to the URL.
    DatasetGraph dsg = RDFPatchOps.changes(dsgLocal, changeSender);

    // ---- Do something. Read in data.ttl inside a transaction.
    // (data.ttl is in src/main/resources/)
    Txn.executeWrite(dsg,
        ()->RDFDataMgr.read(dsg, "data.ttl")
        );

    // ---- Query Fuseki
    RDFConnection conn = RDFConnectionFactory.connect("http://localhost:"+PORT+"/ds");
    try( QueryExecution qExec = conn.query("PREFIX ex: <http://example.org/> SELECT * { ?s ?p ?o }") ) {
        ResultSet rs = qExec.execSelect();
        ResultSetFormatter.out(rs, qExec.getQuery());
    }
}
 
示例14
private static FusekiServer fusekiServerWithPatch(String dsName, int port, DatasetGraph dsgFuseki, String serviceName) {
    Operation patchOp = DeltaFuseki.patchOp;
    String patchContentType = "application/rdf-patch";
    ActionService handler = new PatchApplyService();
    FusekiServer server =  FusekiServer.create()
        .registerOperation(patchOp, patchContentType, handler)
        .port(port)
        .add(dsName, dsgFuseki)
        .addOperation(dsName, DeltaFuseki.patchOp)
        .build();
    return server ;
}
 
示例15
/**
 *
 * @throws Exception
 */
@BeforeClass
public static void setUpClass() throws Exception {
    final String typeName = "SparqlSourceType";
    if ( ! DataSourceTypesRegistry.isRegistered(typeName) ) {
        DataSourceTypesRegistry.register( typeName,
                                          new SparqlDataSourceType() );
    }

    String tmpdir = System.getProperty("java.io.tmpdir");
    jena = new File(tmpdir, "ldf-sparql-test");
    jena.mkdir();
    
    dataset = TDBFactory.createDataset(jena.getAbsolutePath());

    Model model = dataset.getDefaultModel();
    InputStream in = ClassLoader.getSystemResourceAsStream("demo.nt");
    RDFDataMgr.read(model, in, Lang.NTRIPLES);

    // Dynamically-generated port comes from pom.xml configuration: build-helper-maven-plugin
    int fusekiPort = Integer.parseInt(System.getProperty("fuseki.port"));

    // Create Fuseki, loaded with the test dataset
    fuseki = FusekiServer.create().setPort(fusekiPort).add("/ds", dataset).build();
    fuseki.start();

    // Everything is in place, now create the LDF datasource                
    JsonObject config = createConfig("sparql test", "sparql test",
                                     typeName);
    
    JsonObject settings = new JsonObject();
    settings.addProperty("endpoint", "http://localhost:" + fusekiPort + "/ds");
    config.add("settings", settings);

    setDatasource(DataSourceFactory.create(config));
}
 
示例16
@Before
public void setUp()
{
    ValueFactory vf = SimpleValueFactory.getInstance();
    
    kb = new KnowledgeBase();
    kb.setDefaultLanguage("en");
    kb.setType(RepositoryType.LOCAL);
    kb.setFullTextSearchIri(null);
    kb.setMaxResults(1000);
    
    initRdfsMapping();
    
    // Local RDF4J in-memory store - this should be used for most tests because we can
    // a) rely on its availability
    // b) import custom test data
    LuceneSail lucenesail = new LuceneSail();
    lucenesail.setParameter(LuceneSail.LUCENE_RAMDIR_KEY, "true");
    lucenesail.setBaseSail(new MemoryStore());
    rdf4jLocalRepo = new SailRepository(lucenesail);
    rdf4jLocalRepo.init();
    
    // Local Fuseki in-memory story
    fusekiServer = FusekiServer.create()
            .add("/fuseki", createFusekiFTSDataset())
            .build();
    fusekiServer.start() ;
    fusekiLocalRepo = new SPARQLRepository(
            "http://localhost:" + fusekiServer.getPort() + "/fuseki");
    fusekiLocalRepo.init();
    
    ukpVirtuosoRepo = new SPARQLRepository(
            "http://knowledgebase.ukp.informatik.tu-darmstadt.de:8890/sparql");
    ukpVirtuosoRepo.init();

    // http://zbw.eu/beta/sparql-lab/?endpoint=http://zbw.eu/beta/sparql/stw/query
    zbwStw = new SPARQLRepository("http://zbw.eu/beta/sparql/stw/query");
    zbwStw.init();

    // http://zbw.eu/beta/sparql-lab/?endpoint=http://zbw.eu/beta/sparql/gnd/query
    zbwGnd = new SPARQLRepository("http://zbw.eu/beta/sparql/gnd/query");
    zbwGnd.init();

    // https://query.wikidata.org/sparql
    wikidata = new SPARQLRepository("https://query.wikidata.org/sparql");
    wikidata.init();
    
    // https://dbpedia.org/sparql
    dbpedia = new SPARQLRepository("https://dbpedia.org/sparql");
    dbpedia.init();

    // https://linkeddata1.calcul.u-psud.fr/sparql
    yago = new SPARQLRepository("https://linkeddata1.calcul.u-psud.fr/sparql");
    yago.init();

    // http://nlp.dainst.org:8888/sparql
    hucit = new SPARQLRepository("http://nlp.dainst.org:8888/sparql");
    hucit.init();
    
    // http://collection.britishmuseum.org/sparql
    britishMuseum = new SPARQLRepository("http://collection.britishmuseum.org/sparql");
    britishMuseum.init();
}
 
示例17
public static void main(String[] args) throws InterruptedException {
        // Fix up fuseki config files.
        // DELTA_PORT => value.

        // This is a template that needs updating,
        // Server 1.

        Model model = RDFDataMgr.loadModel("fuseki-config.ttl");
        //  fuseki:name    "%DS_NAME%"
        //  delta:changes  "%LOG_URL%"
        //  delta:patchlog "%LOG_NAME%"
        //  delta:zone     "%ZONE_NAME%"
        update(model, "%DS_NAME%", DS_NAME);
        String LOG_URL = "http://localhost:"+DELTA_PORT+"/";
        update(model, "%LOG_URL%", LOG_URL);
        update(model, "%LOG_NAME%", PATCH_LOG_NAME);

        String zone1 = ZONE1.toString();
        String zone2 = ZONE2.toString();

        update(model, "%ZONE_NAME%", zone1);

        // --- Reset state.
        if ( true ) {
            FileOps.ensureDir(DELTA_DIR);
            FileOps.clearAll(DELTA_DIR);
            FileOps.ensureDir(zone1);
            FileOps.clearAll(zone1);
            FileOps.ensureDir(zone2);
            FileOps.clearAll(zone2);
        }

        DeltaServer logServer = deltaServer(DELTA_PORT, DELTA_DIR);

        try {
            logServer.start();
        }
        catch (BindException e) {
            e.printStackTrace();
            System.exit(0);
        }


//        RDFDataMgr.write(System.out,  model, Lang.TTL);
//        System.out.flush();
        FusekiServer server1 = fuseki(F1_PORT, model);
        server1.start();
        //FusekiServer server2 = fuseki2();

        int numClients = 10;
        int clientLoops = 10;

        CountDownLatch cdl1 = new CountDownLatch(numClients);
        CountDownLatch cdl2 = new CountDownLatch(numClients);
        for (int i = 0 ; i < numClients ; i++ ) {
            client(clientLoops, cdl1, cdl2);
        }
        cdl2.await();
        logServer.stop();
        System.out.println("DONE");
        System.exit(0);
    }
 
示例18
protected static FusekiServer fuseki1() {
    return fuseki1(Start.CLEAN);
}
 
示例19
protected static FusekiServer fuseki2() {
    return fuseki2(Start.CLEAN);
}
 
示例20
protected static FusekiServer fuseki1(Start state) {
    return fuseki(state, F1_PORT, fuseki_conf1, "target/Zone1");
}
 
示例21
protected static FusekiServer fuseki2(Start state) {
    return fuseki(state, F2_PORT, fuseki_conf2, "target/Zone2");
}
 
示例22
public static FusekiServer fuseki(int port, String config) {
    return FusekiServer.create().port(port).parseConfigFile(config).build().start();
}
 
示例23
/** Create a {@code FusekiServer.Builder} with registered patch operation.
 *  To enable it, on a dataset "name", use {@code addOperation(name, "patch", DeltaFuseki.patchOp)}.
 *  This makes it available by POST to {@code /name/patch} or {@code /name} with content-type "application/rdf-patch".
 */
public static FusekiServer.Builder fusekiWithPatch() {
    ActionService handler = new PatchApplyService();
    return FusekiServer.create().registerOperation(patchOp, patchContentType, handler);
}
 
示例24
public static void main2(String ...args) {
    setup();
    // Patch Log Server
    FileOps.exists(PLOG_DIR);
    FileOps.clearAll(PLOG_DIR);

    DeltaServer patchLogServer = DeltaServer.server(PLOG_PORT, PLOG_DIR);
    try { patchLogServer.start(); }
    catch (BindException ex) {
        System.err.println("Can't start the patch log server: "+ex.getMessage());
        System.exit(1);
    }

    // For high availability, need a load balancer that switches between the two Fuskei servers.

    // Fuseki server 1
    FusekiServer fuseki1 = fuseki1();
    RDFConnection conn1 = RDFConnectionFactory.connect("http://localhost:"+F1_PORT+"/ds1") ;

    // Fuseki server 2
    FusekiServer fuseki2 = fuseki2();
    RDFConnection conn2 = RDFConnectionFactory.connect("http://localhost:"+F2_PORT+"/ds2") ;

    // Some data (data.ttl is in src/main/resources).
    Model model = RDFDataMgr.loadModel("data.ttl");
    conn1.put(model);

    // Kill fuseki1.
    fuseki1.stop();

    // And fetch data.
    Model model2 = conn2.fetch();
    System.out.println();
    RDFDataMgr.write(System.out, model2, Lang.NT);
    System.out.println();

    // Remove a triple via conn2.
    conn2.update("PREFIX ex: <http://example.org/> DELETE DATA { ex:s ex:p ex:o }");

    // Restart Fuseki1.
    fuseki1 = fuseki1();
    // Not necesary.
    // conn1 = RDFConnectionFactory.connect("http://localhost:"+F1_PORT+"/ds1") ;
    Model model1 = conn1.fetch();
    System.out.println();
    // Data in Fuseki1. One less triple.
    RDFDataMgr.write(System.out, model1, Lang.NT);
    System.out.println();
}
 
示例25
protected static FusekiServer fuseki1() {
    return fuseki(F1_PORT, FUSEKI_CONF_1);
}
 
示例26
protected static FusekiServer fuseki2() {
    return fuseki(F2_PORT, FUSEKI_CONF_2);
}
 
示例27
protected static FusekiServer fuseki(int port, String config) {
    return FusekiServer.create().port(port).parseConfigFile(config).build().start();
}