<!DOCTYPE html>
<html lang="en">
<head>
    

    <title>Apache Jena - Fuseki : Embedded Server</title>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">

    <link href="/css/bootstrap.min.css" rel="stylesheet" media="screen">
    <link href="/css/bootstrap-icons.css" rel="stylesheet" media="screen"><link rel="stylesheet" type="text/css" href="https://jena.apache.org/sass/jena.1b17c39a117e22b46db4c66f6395dc27c134a60377d87d2d5745b8600eb69722.css" integrity="sha256-GxfDmhF&#43;IrRttMZvY5XcJ8E0pgN32H0tV0W4YA62lyI=">
    <link rel="shortcut icon" href="/images/favicon.ico" />
    
</head>

<body>

<nav class="navbar navbar-expand-lg bg-body-tertiary" role="navigation">
    <div class="container">
        <div class="navbar-header">
            <button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarNav" aria-controls="navbarNav" aria-expanded="false" aria-label="Toggle navigation">
                <span class="navbar-toggler-icon"></span>
            </button>
            <a class="navbar-brand" href="/index.html">
                <img class="logo-menu" src="/images/jena-logo/jena-logo-notext-small.png" alt="jena logo">Apache Jena</a>
        </div>

        <div class="collapse navbar-collapse" id="navbarNav">
            <ul class="navbar-nav me-auto mb-2 mb-lg-0">
                <li id="homepage" class="nav-item"><a class="nav-link" href="/index.html"><span class="bi-house"></span> Home</a></li>
                <li id="download" class="nav-item"><a class="nav-link" href="/download/index.cgi"><span class="bi-download"></span> Download</a></li>
                <li class="nav-item dropdown">
                    <a href="#" class="nav-link dropdown-toggle" role="button" data-bs-toggle="dropdown" aria-expanded="false"><span class="bi-journal"></span> Learn <b class="caret"></b></a>
                    <ul class="dropdown-menu">
                        <li class="dropdown-header">Tutorials</li>
                        <li><a class="dropdown-item" href="/tutorials/index.html">Overview</a></li>
                        <li><a class="dropdown-item"  href="/documentation/fuseki2/index.html">Fuseki Triplestore</a></li>
                        <li><a class="dropdown-item"  href="/documentation/notes/index.html">How-To's</a></li>
                        <li><a class="dropdown-item"  href="/documentation/query/manipulating_sparql_using_arq.html">Manipulating SPARQL using ARQ</a></li>
                        <li><a class="dropdown-item"  href="/tutorials/rdf_api.html">RDF core API tutorial</a></li>
                        <li><a class="dropdown-item"  href="/tutorials/sparql.html">SPARQL tutorial</a></li>
                        <li><a class="dropdown-item"  href="/tutorials/using_jena_with_eclipse.html">Using Jena with Eclipse</a></li>
                        <li class="dropdown-divider"></li>
                        <li class="dropdown-header">References</li>
                        <li><a class="dropdown-item"  href="/documentation/index.html">Overview</a></li>
                        <li><a class="dropdown-item"  href="/documentation/query/index.html">ARQ (SPARQL)</a></li>
                        <li><a class="dropdown-item"  href="/documentation/io/">RDF I/O</a></li>
                        <li><a class="dropdown-item"  href="/documentation/assembler/index.html">Assembler</a></li>
                        <li><a class="dropdown-item"  href="/documentation/tools/index.html">Command-line tools</a></li>
                        <li><a class="dropdown-item"  href="/documentation/rdfs/">Data with RDFS Inferencing</a></li>
                        <li><a class="dropdown-item"  href="/documentation/geosparql/index.html">GeoSPARQL</a></li>
                        <li><a class="dropdown-item"  href="/documentation/inference/index.html">Inference API</a></li>
                        <li><a class="dropdown-item"  href="/documentation/ontology/">Ontology API</a></li>
                        <li><a class="dropdown-item"  href="/documentation/permissions/index.html">Permissions</a></li>
                        <li><a class="dropdown-item"  href="/documentation/extras/querybuilder/index.html">Query Builder</a></li>
                        <li><a class="dropdown-item"  href="/documentation/rdf/index.html">RDF API</a></li>
                        <li><a class="dropdown-item"  href="/documentation/rdfconnection/">RDF Connection - SPARQL API</a></li>
                        <li><a class="dropdown-item"  href="/documentation/rdfstar/index.html">RDF-star</a></li>
                        <li><a class="dropdown-item"  href="/documentation/shacl/index.html">SHACL</a></li>
                        <li><a class="dropdown-item"  href="/documentation/shex/index.html">ShEx</a></li>
                        <li><a class="dropdown-item"  href="/documentation/tdb/index.html">TDB</a></li>
                        <li><a class="dropdown-item"  href="/documentation/tdb2/index.html">TDB2</a></li>
                        <li><a class="dropdown-item"  href="/documentation/query/text-query.html">Text Search</a></li>
                    </ul>
                </li>

                <li class="nav-item dropdown">
                    <a href="#" class="nav-link dropdown-toggle" role="button" data-bs-toggle="dropdown" aria-expanded="false"><span class="bi-journal-code"></span> Javadoc <b class="caret"></b></a>
                    <ul class="dropdown-menu">
                        <li><a class="dropdown-item" href="/documentation/javadoc.html">All Javadoc</a></li>
                        <li><a class="dropdown-item" href="/documentation/javadoc/arq/">ARQ</a></li>
                        <li><a class="dropdown-item" href="/documentation/javadoc/fuseki2/">Fuseki</a></li>
                        <li><a class="dropdown-item" href="/documentation/javadoc/geosparql/">GeoSPARQL</a></li>
                        <li><a class="dropdown-item" href="/documentation/javadoc/jena/">Jena Core</a></li>
                        <li><a class="dropdown-item" href="/documentation/javadoc/permissions/">Permissions</a></li>
                        <li><a class="dropdown-item" href="/documentation/javadoc/extras/querybuilder/">Query Builder</a></li>
                        <li><a class="dropdown-item" href="/documentation/javadoc/shacl/">SHACL</a></li>
                        <li><a class="dropdown-item" href="/documentation/javadoc/tdb/">TDB</a></li>
                        <li><a class="dropdown-item" href="/documentation/javadoc/text/">Text Search</a></li>
                    </ul>
                </li>
            </ul>
            <form class="d-flex" role="search" action="/search" method="GET">
                <div class="input-group">
                    <input class="form-control border-end-0 border m-0" type="search" name="q" id="search-query" placeholder="Search...." aria-label="Search" style="width: 10rem;">
                    <button class="btn btn-outline-secondary border-start-0 border" type="submit">
                        <i class="bi-search"></i>
                    </button>
                </div>
            </form>
            <ul class="navbar-nav">
                <li id="ask" class="nav-item"><a class="nav-link" href="/help_and_support/index.html" title="Ask"><span class="bi-patch-question"></span><span class="text-body d-none d-xxl-inline"> Ask</span></a></li>

                <li class="nav-item dropdown">
                    <a href="#" title="Get involved" class="nav-link dropdown-toggle" role="button" data-bs-toggle="dropdown" aria-expanded="false"><span class="bi-megaphone"></span><span class="text-body d-none d-xxl-inline"> Get involved </span><b class="caret"></b></a>
                    <ul class="dropdown-menu">
                        <li><a class="dropdown-item" href="/getting_involved/index.html">Contribute</a></li>
                        <li><a class="dropdown-item" href="/help_and_support/bugs_and_suggestions.html">Report a bug</a></li>
                        <li class="dropdown-divider"></li>
                        <li class="dropdown-header">Project</li>
                        <li><a class="dropdown-item" href="/about_jena/about.html">About Jena</a></li>
                        <li><a class="dropdown-item" href="/about_jena/architecture.html">Architecture</a></li>
                        <li><a class="dropdown-item" href="/about_jena/citing.html">Citing</a></li>
                        <li><a class="dropdown-item" href="/about_jena/team.html">Project team</a></li>
                        <li><a class="dropdown-item" href="/about_jena/contributions.html">Related projects</a></li>
                        <li><a class="dropdown-item" href="/about_jena/roadmap.html">Roadmap</a></li>
                        <li><a class="dropdown-item" href="/about_jena/security-advisories.html">Security Advisories</a></li>
                        <li class="dropdown-divider"></li>
                        <li class="dropdown-header">ASF</li>
                        <li><a class="dropdown-item" href="https://www.apache.org/">Apache Software Foundation</a></li>
                        <li><a class="dropdown-item" href="https://www.apache.org/foundation/sponsorship.html">Become a Sponsor</a></li>
                        <li><a class="dropdown-item" href="https://www.apache.org/licenses/LICENSE-2.0">License</a></li>
                        <li><a class="dropdown-item" href="https://www.apache.org/security/">Security</a></li>
                        <li><a class="dropdown-item" href="https://www.apache.org/foundation/thanks.html">Thanks</a></li>
                    </ul>
                </li>
                
                
                
                
                <li class="nav-item" id="edit"><a class="nav-link" href="https://github.com/apache/jena-site/edit/main/source/documentation/fuseki2/fuseki-embedded.md" title="Edit this page on GitHub"><span class="bi-pencil-square"></span><span class="text-body d-none d-xxl-inline"> Edit this page</span></a></li>
            </ul>
        </div>
    </div>
</nav>

<div class="container">
    <div class="row">
        <div class="col-md-12">
            
            <div id="breadcrumbs">
                





<ol class="breadcrumb mt-4 p-2 bg-body-tertiary">
    
    
        
        
    
        
        
            
                <li class="breadcrumb-item"><a href='/documentation'>DOCUMENTATION</a></li>
            
            
        
    
        
        
            
                <li class="breadcrumb-item"><a href='/documentation/fuseki2'>FUSEKI2</a></li>
            
            
        
    
        
        
            
                <li class="breadcrumb-item active">FUSEKI EMBEDDED</li>
            
            
        
    
</ol>




            </div>
            <h1 class="title">Fuseki : Embedded Server</h1>
            
            
<main class="d-flex flex-xl-row flex-column">
  
  <aside class="text-muted align-self-start mb-3 p-0 d-xl-none d-block">
    <h2 class="h6 sticky-top m-0 p-2 bg-body-tertiary">On this page</h2>
    <nav id="TableOfContents">
  <ul>
    <li>
      <ul>
        <li><a href="#dependencies">Dependencies and Setup</a></li>
        <li><a href="#logging">Logging</a></li>
      </ul>
    </li>
    <li><a href="#build">Building a server</a></li>
    <li><a href="#examples">Examples of embedded use</a>
      <ul>
        <li><a href="#example-1">Example 1</a></li>
        <li><a href="#example-2">Example 2</a></li>
        <li><a href="#example-3">Example 3</a></li>
        <li><a href="#example-4">Example 4</a></li>
      </ul>
    </li>
  </ul>
</nav>
  </aside>
  <article class="flex-column me-lg-4">
    <p>Fuseki can be run within a larger JVM application as an embedded triplestore.</p>
<ul>
<li><a href="#dependencies">Dependencies and Setup</a></li>
<li><a href="#logging">Logging</a></li>
<li><a href="#build">Building a Server</a></li>
<li><a href="#examples">Examples</a></li>
</ul>
<p>The application can safely access and modify the data published by the server if it does
so inside a <a href="/documentation/txn/">transaction</a> using an appropriate
storage choice. <code>DatasetFactory.createTxnMem()</code> is a good choice for in-memory use;
<a href="/documentation/tdb/">TDB</a> is a good choice for a persistent database.</p>
<p>To build and start the server:</p>
<pre><code>Dataset ds = ...
FusekiServer server = FusekiServer.create()
  .add(&quot;/rdf&quot;, ds)
  .build() ;
server.start() ;
</code></pre>
<p>then the application can modify the dataset:</p>
<pre><code>// Add some data while live.
// Write transaction.
Txn.execWrite(dsg, ()-&gt;RDFDataMgr.read(dsg, &quot;D.trig&quot;)) ;
</code></pre>
<p>or read the dataset and see any updates made by remote systems:</p>
<pre><code>// Query data while live
// Read transaction.
Txn.execRead(dsg, ()-&gt;{
Dataset ds = DatasetFactory.wrap(dsg) ;
try (QueryExecution qExec = QueryExecution.create(&quot;SELECT * { ?s  ?o}&quot;, ds) ) {
    ResultSet rs = qExec.execSelect() ;
    ResultSetFormatter.out(rs) ;
  }
}) ;
</code></pre>
<p>The full Jena API can be used provided operations (read and write) are inside
a transaction.</p>
<h3 id="dependencies">Dependencies and Setup</h3>
<p>To include an embedded Fuseki server in the application:</p>
<pre><code>&lt;dependency&gt;
  &lt;groupId&gt;org.apache.jena&lt;/groupId&gt;
  &lt;artifactId&gt;jena-fuseki-main&lt;/artifactId&gt;
  &lt;version&gt;3.x.y&lt;/version&gt; &lt;!-- Set the version --&gt;
&lt;/dependency&gt;
</code></pre>
<p>This brings in enough dependencies to run Fuseki. Application writers are strongly
encouraged to use a dependency manager because the number of Jetty and other dependencies
is quite large and difficult to set manually.</p>
<p>This dependency does not include a logging setting. Fuseki uses <a href="http://slf4j.org/">slf4j</a>.</p>
<p>If the application wishes to use a dataset with a <a href="/documentation/query/text-query.html">text-index</a>
then the application will also need to include jena-text in its dependencies.</p>
<h3 id="logging">Logging</h3>
<p>The application must set the logging provided for <a href="http://slf4j.org/">slf4j</a>.
Apache Jena provides helpers Apache Log4j v2.</p>
<p>For Apache Log4j2, call:</p>
<pre><code>FusekiLogging.setLogging();
</code></pre>
<p>and dependency:</p>
<pre><code>&lt;dependency&gt;
  &lt;groupId&gt;org.apache.logging.log4j&lt;/groupId&gt;
  &lt;artifactId&gt;log4j-slf4j-impl&lt;/artifactId&gt;
  &lt;version&gt;2.13.1&lt;/version&gt; &lt;!-- Many versions work --&gt;  
&lt;/dependency&gt;
</code></pre>
<p>See <a href="/documentation/fuseki2/fuseki-logging.html">Fuseki Logging</a>.</p>
<p>To silence logging from Java, try:</p>
<pre><code>LogCtl.setLevel(Fuseki.serverLogName,  &quot;WARN&quot;);
LogCtl.setLevel(Fuseki.actionLogName,  &quot;WARN&quot;);
LogCtl.setLevel(Fuseki.requestLogName, &quot;WARN&quot;);
LogCtl.setLevel(Fuseki.adminLogName,   &quot;WARN&quot;);
LogCtl.setLevel(&quot;org.eclipse.jetty&quot;,   &quot;WARN&quot;);
</code></pre>
<h2 id="build">Building a server</h2>
<p>A <code>FusekiServer</code> is built by creating a configuration,
building the server, then running it.  The application needs to start
the server.</p>
<p>The default port for a Fuseki embedded server is 3330. This is different for the default
port for Fuseki running as a standalone server or as a webapp application.</p>
<h2 id="examples">Examples of embedded use</h2>
<h3 id="example-1">Example 1</h3>
<p>Create a server on port 3330, that provides the default set of endpoints for an RDF
dataset that can be updated via HTTP.</p>
<pre><code>Dataset ds = DatasetFactory.createTxnMem() ;
FusekiServer server = FusekiServer.create()
    .add(&quot;/ds&quot;, ds)
    .build() ;
server.start() ;
...
server.stop() ;
</code></pre>
<p>The services are avilable on a named endpoint and also on the dataset URL itself.</p>
<p>URLs:</p>
<table>
<thead>
<tr>
<th>Service</th>
<th>Endpoint1</th>
<th>Endpoint2</th>
</tr>
</thead>
<tbody>
<tr>
<td>SPARQL Query</td>
<td><code>http://host:3330/ds/query</code></td>
<td><code>http://host:3330/ds</code></td>
</tr>
<tr>
<td>SPARQL Query</td>
<td><code>http://host:3330/ds/sparql</code></td>
<td><code>http://host:3330/ds</code></td>
</tr>
<tr>
<td>SPARQL Update</td>
<td><code>http://host:3330/ds/update</code></td>
<td><code>http://host:3330/ds</code></td>
</tr>
<tr>
<td>GSP read-write</td>
<td><code>http://host:3330/ds/data</code></td>
<td><code>http://host:3330/ds</code></td>
</tr>
</tbody>
</table>
<p>&ldquo;GSP&rdquo; = SPARQL Graph Store Protocol</p>
<h3 id="example-2">Example 2</h3>
<p>Create a server on port 3332, that provides the default set of endpoints for a data
set that is read-only over HTTP. The application can still update the dataset.</p>
<pre><code>Dataset ds = ... ;
FusekiServer server = FusekiServer.create()
    .port(3332)
    .add(&quot;/ds&quot;, ds, false)
    .build() ;
server.start() ;
</code></pre>
<table>
<thead>
<tr>
<th>Service</th>
<th>Endpoint</th>
<th>Endpoint2</th>
</tr>
</thead>
<tbody>
<tr>
<td>SPARQL Query</td>
<td><code>http://host:3332/ds/query</code></td>
<td><code>http://host:3332/ds</code></td>
</tr>
<tr>
<td>SPARQL Query</td>
<td><code>http://host:3332/ds/sparql</code></td>
<td><code>http://host:3332/ds</code></td>
</tr>
<tr>
<td>GSP read-only</td>
<td><code>http://host:3332/ds/data</code></td>
<td><code>http://host:3332/ds</code></td>
</tr>
</tbody>
</table>
<h3 id="example-3">Example 3</h3>
<p>Different combinations of services and endpoint names can be given using a <code>DataService</code>.</p>
<pre><code>DatasetGraph dsg = ... ;
DataService dataService = new DataService(dsg) ;
dataService.addEndpoint(OperationName.GSP_RW, &quot;&quot;);
dataService.addEndpoint(OperationName.Query, &quot;&quot;);
dataService.addEndpoint(OperationName.Update, &quot;&quot;);

FusekiServer server = FusekiServer.create()
   .port(3332)
   .add(&quot;/data&quot;, dataService)
   .build() ;
server.start() ;
</code></pre>
<p>This setup puts all the operation on the dataset URL. The <code>Content-type</code> and any query
string is used to determine the operation.</p>
<table>
<thead>
<tr>
<th>Service</th>
<th>Endpoint</th>
</tr>
</thead>
<tbody>
<tr>
<td>SPARQL Query</td>
<td><code>http://host:3332/ds</code></td>
</tr>
<tr>
<td>SPARQL Update</td>
<td><code>http://host:3332/ds</code></td>
</tr>
<tr>
<td>GSP read-write</td>
<td><code>http://host:3332/ds</code></td>
</tr>
</tbody>
</table>
<h3 id="example-4">Example 4</h3>
<p>Multiple datasets can be served by one server.</p>
<pre><code>Dataset ds1 = ...
Dataset ds2 = ...
FusekiServer server = FusekiServer.create()
    .add(&quot;/data1&quot;, ds1)
    .add(&quot;/data1-readonly&quot;, ds1, true)
    .add(&quot;/data2&quot;, ds2)
    .build() ;
server.start() ;
</code></pre>

  </article>
  
  <aside class="text-muted align-self-start mb-3 mb-xl-5 p-0 d-none d-xl-flex flex-column sticky-top">
    <h2 class="h6 sticky-top m-0 p-2 bg-body-tertiary">On this page</h2>
    <nav id="TableOfContents">
  <ul>
    <li>
      <ul>
        <li><a href="#dependencies">Dependencies and Setup</a></li>
        <li><a href="#logging">Logging</a></li>
      </ul>
    </li>
    <li><a href="#build">Building a server</a></li>
    <li><a href="#examples">Examples of embedded use</a>
      <ul>
        <li><a href="#example-1">Example 1</a></li>
        <li><a href="#example-2">Example 2</a></li>
        <li><a href="#example-3">Example 3</a></li>
        <li><a href="#example-4">Example 4</a></li>
      </ul>
    </li>
  </ul>
</nav>
  </aside>
</main>

        </div>
    </div>
</div>

<footer class="bd-footer py-4 py-md-5 mt-4 mt-lg-5 bg-body-tertiary">
    <div class="container" style="font-size:80%" >
        <p>
            Copyright &copy; 2011&ndash;2024 The Apache Software Foundation, Licensed under the
            <a href="https://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.
        </p>
        <p>
            Apache Jena, Jena, the Apache Jena project logo, Apache and the Apache feather logos are trademarks of
            The Apache Software Foundation.
            <br/>
          <a href="https://privacy.apache.org/policies/privacy-policy-public.html"
             >Apache Software Foundation Privacy Policy</a>.
        </p>
    </div>
</footer>

<script src="/js/popper.min.js.js" type="text/javascript"></script>
<script src="/js/bootstrap.min.js" type="text/javascript"></script>
<script src="/js/improve.js" type="text/javascript"></script>

<script type="text/javascript">
(function() {
    'use strict'
    
    

    const links = document.querySelectorAll(`a[href="${window.location.pathname}"]`)
    if (links !== undefined && links !== null) {
        for (const link of links) {
            
            link.classList.add('active')
            let parentElement = link.parentElement
            let count = 0
            const levelsLimit = 4
            
            
            
            
            
            while (['UL', 'LI'].includes(parentElement.tagName) && count <= levelsLimit) {
                if (parentElement.tagName === 'LI') {
                    
                    
                    
                    parentElement.querySelector('a:first-child').classList.add('active')
                }
                parentElement = parentElement.parentElement
                count++
            }
        }
    }
})()
</script>

</body>
</html>
