blob: 3d23b2e1a1248dfa2c0fd6ea7810def0129834a8 [file] [log] [blame]
<!DOCTYPE HTML>
<!-- NewPage -->
<html lang="en">
<head>
<!-- Generated by javadoc -->
<title>Engine (Qpid ProtonJ2 Parent 1.0.0-M9 API)</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<link rel="stylesheet" type="text/css" href="../../../../../stylesheet.css" title="Style">
<script type="text/javascript" src="../../../../../script.js"></script>
</head>
<body>
<script type="text/javascript"><!--
try {
if (location.href.indexOf('is-external=true') == -1) {
parent.document.title="Engine (Qpid ProtonJ2 Parent 1.0.0-M9 API)";
}
}
catch(err) {
}
//-->
var data = {"i0":18,"i1":6,"i2":6,"i3":6,"i4":6,"i5":6,"i6":6,"i7":6,"i8":6,"i9":6,"i10":6,"i11":18,"i12":6,"i13":18,"i14":6,"i15":6,"i16":6,"i17":6,"i18":6,"i19":6,"i20":6,"i21":6};
var tabs = {65535:["t0","All Methods"],2:["t2","Instance Methods"],4:["t3","Abstract Methods"],16:["t5","Default Methods"]};
var altColor = "altColor";
var rowColor = "rowColor";
var tableTab = "tableTab";
var activeTableTab = "activeTableTab";
</script>
<noscript>
<div>JavaScript is disabled on your browser.</div>
</noscript>
<header role="banner">
<nav role="navigation">
<div class="fixedNav">
<!-- ========= START OF TOP NAVBAR ======= -->
<div class="topNav"><a id="navbar.top">
<!-- -->
</a>
<div class="skipNav"><a href="#skip.navbar.top" title="Skip navigation links">Skip navigation links</a></div>
<a id="navbar.top.firstrow">
<!-- -->
</a>
<ul class="navList" title="Navigation">
<li><a href="../../../../../index.html">Overview</a></li>
<li><a href="package-summary.html">Package</a></li>
<li class="navBarCell1Rev">Class</li>
<li><a href="class-use/Engine.html">Use</a></li>
<li><a href="package-tree.html">Tree</a></li>
<li><a href="../../../../../deprecated-list.html">Deprecated</a></li>
<li><a href="../../../../../help-doc.html">Help</a></li>
</ul>
</div>
<div class="subNav">
<ul class="navList" id="allclasses_navbar_top">
<li><a href="../../../../../allclasses.html">All&nbsp;Classes</a></li>
</ul>
<div>
<script type="text/javascript"><!--
allClassesLink = document.getElementById("allclasses_navbar_top");
if(window==top) {
allClassesLink.style.display = "block";
}
else {
allClassesLink.style.display = "none";
}
//-->
</script>
<noscript>
<div>JavaScript is disabled on your browser.</div>
</noscript>
</div>
<div>
<ul class="subNavList">
<li>Summary:&nbsp;</li>
<li>Nested&nbsp;|&nbsp;</li>
<li>Field&nbsp;|&nbsp;</li>
<li>Constr&nbsp;|&nbsp;</li>
<li><a href="#method.summary">Method</a></li>
</ul>
<ul class="subNavList">
<li>Detail:&nbsp;</li>
<li>Field&nbsp;|&nbsp;</li>
<li>Constr&nbsp;|&nbsp;</li>
<li><a href="#method.detail">Method</a></li>
</ul>
</div>
<a id="skip.navbar.top">
<!-- -->
</a></div>
<!-- ========= END OF TOP NAVBAR ========= -->
</div>
<div class="navPadding">&nbsp;</div>
<script type="text/javascript"><!--
$('.navPadding').css('padding-top', $('.fixedNav').css("height"));
//-->
</script>
</nav>
</header>
<!-- ======== START OF CLASS DATA ======== -->
<main role="main">
<div class="header">
<div class="subTitle"><span class="packageLabelInType">Package</span>&nbsp;<a href="package-summary.html">org.apache.qpid.protonj2.engine</a></div>
<h2 title="Interface Engine" class="title">Interface Engine</h2>
</div>
<div class="contentContainer">
<div class="description">
<ul class="blockList">
<li class="blockList">
<dl>
<dt>All Superinterfaces:</dt>
<dd><code><a href="https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/util/function/Consumer.html?is-external=true" title="class or interface in java.util.function" class="externalLink">Consumer</a>&lt;<a href="../buffer/ProtonBuffer.html" title="interface in org.apache.qpid.protonj2.buffer">ProtonBuffer</a>&gt;</code></dd>
</dl>
<dl>
<dt>All Known Implementing Classes:</dt>
<dd><code><a href="impl/ProtonEngine.html" title="class in org.apache.qpid.protonj2.engine.impl">ProtonEngine</a></code></dd>
</dl>
<hr>
<pre>public interface <span class="typeNameLabel">Engine</span>
extends <a href="https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/util/function/Consumer.html?is-external=true" title="class or interface in java.util.function" class="externalLink">Consumer</a>&lt;<a href="../buffer/ProtonBuffer.html" title="interface in org.apache.qpid.protonj2.buffer">ProtonBuffer</a>&gt;</pre>
<div class="block">AMQP Engine interface.</div>
</li>
</ul>
</div>
<div class="summary">
<ul class="blockList">
<li class="blockList">
<!-- ========== METHOD SUMMARY =========== -->
<section role="region">
<ul class="blockList">
<li class="blockList"><a id="method.summary">
<!-- -->
</a>
<h3>Method Summary</h3>
<table class="memberSummary">
<caption><span id="t0" class="activeTableTab"><span>All Methods</span><span class="tabEnd">&nbsp;</span></span><span id="t2" class="tableTab"><span><a href="javascript:show(2);">Instance Methods</a></span><span class="tabEnd">&nbsp;</span></span><span id="t3" class="tableTab"><span><a href="javascript:show(4);">Abstract Methods</a></span><span class="tabEnd">&nbsp;</span></span><span id="t5" class="tableTab"><span><a href="javascript:show(16);">Default Methods</a></span><span class="tabEnd">&nbsp;</span></span></caption>
<tr>
<th class="colFirst" scope="col">Modifier and Type</th>
<th class="colSecond" scope="col">Method</th>
<th class="colLast" scope="col">Description</th>
</tr>
<tr id="i0" class="altColor">
<td class="colFirst"><code>default void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#accept(org.apache.qpid.protonj2.buffer.ProtonBuffer)">accept</a></span>&#8203;(<a href="../buffer/ProtonBuffer.html" title="interface in org.apache.qpid.protonj2.buffer">ProtonBuffer</a>&nbsp;input)</code></th>
<td class="colLast">
<div class="block">Provide data input for this Engine from some external source.</div>
</td>
</tr>
<tr id="i1" class="rowColor">
<td class="colFirst"><code><a href="EngineConfiguration.html" title="interface in org.apache.qpid.protonj2.engine">EngineConfiguration</a></code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#configuration()">configuration</a></span>()</code></th>
<td class="colLast">
<div class="block">Gets the Configuration for this engine.</div>
</td>
</tr>
<tr id="i2" class="altColor">
<td class="colFirst"><code><a href="Connection.html" title="interface in org.apache.qpid.protonj2.engine">Connection</a></code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#connection()">connection</a></span>()</code></th>
<td class="colLast">
<div class="block">Gets the <a href="Connection.html" title="interface in org.apache.qpid.protonj2.engine"><code>Connection</code></a> instance that is associated with this <a href="Engine.html" title="interface in org.apache.qpid.protonj2.engine"><code>Engine</code></a> instance.</div>
</td>
</tr>
<tr id="i3" class="rowColor">
<td class="colFirst"><code><a href="exceptions/EngineStateException.html" title="class in org.apache.qpid.protonj2.engine.exceptions">EngineStateException</a></code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#engineFailed(java.lang.Throwable)">engineFailed</a></span>&#8203;(<a href="https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/lang/Throwable.html?is-external=true" title="class or interface in java.lang" class="externalLink">Throwable</a>&nbsp;cause)</code></th>
<td class="colLast">
<div class="block">Transition the <a href="Engine.html" title="interface in org.apache.qpid.protonj2.engine"><code>Engine</code></a> to a failed state if not already closed or closing.</div>
</td>
</tr>
<tr id="i4" class="altColor">
<td class="colFirst"><code><a href="Engine.html" title="interface in org.apache.qpid.protonj2.engine">Engine</a></code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#errorHandler(org.apache.qpid.protonj2.engine.EventHandler)">errorHandler</a></span>&#8203;(<a href="EventHandler.html" title="interface in org.apache.qpid.protonj2.engine">EventHandler</a>&lt;<a href="Engine.html" title="interface in org.apache.qpid.protonj2.engine">Engine</a>&gt;&nbsp;engineFailure)</code></th>
<td class="colLast">
<div class="block">Sets a handler instance that will be notified when the engine encounters a fatal error.</div>
</td>
</tr>
<tr id="i5" class="rowColor">
<td class="colFirst"><code><a href="https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/lang/Throwable.html?is-external=true" title="class or interface in java.lang" class="externalLink">Throwable</a></code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#failureCause()">failureCause</a></span>()</code></th>
<td class="colLast">&nbsp;</td>
</tr>
<tr id="i6" class="altColor">
<td class="colFirst"><code><a href="Engine.html" title="interface in org.apache.qpid.protonj2.engine">Engine</a></code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#ingest(org.apache.qpid.protonj2.buffer.ProtonBuffer)">ingest</a></span>&#8203;(<a href="../buffer/ProtonBuffer.html" title="interface in org.apache.qpid.protonj2.buffer">ProtonBuffer</a>&nbsp;input)</code></th>
<td class="colLast">
<div class="block">Provide data input for this Engine from some external source.</div>
</td>
</tr>
<tr id="i7" class="rowColor">
<td class="colFirst"><code>boolean</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#isFailed()">isFailed</a></span>()</code></th>
<td class="colLast">&nbsp;</td>
</tr>
<tr id="i8" class="altColor">
<td class="colFirst"><code>boolean</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#isRunning()">isRunning</a></span>()</code></th>
<td class="colLast">&nbsp;</td>
</tr>
<tr id="i9" class="rowColor">
<td class="colFirst"><code>boolean</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#isShutdown()">isShutdown</a></span>()</code></th>
<td class="colLast">&nbsp;</td>
</tr>
<tr id="i10" class="altColor">
<td class="colFirst"><code>boolean</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#isWritable()">isWritable</a></span>()</code></th>
<td class="colLast">
<div class="block">Returns true if the engine is accepting input from the ingestion entry points.</div>
</td>
</tr>
<tr id="i11" class="rowColor">
<td class="colFirst"><code>default <a href="Engine.html" title="interface in org.apache.qpid.protonj2.engine">Engine</a></code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#outputConsumer(java.util.function.Consumer)">outputConsumer</a></span>&#8203;(<a href="https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/util/function/Consumer.html?is-external=true" title="class or interface in java.util.function" class="externalLink">Consumer</a>&lt;<a href="../buffer/ProtonBuffer.html" title="interface in org.apache.qpid.protonj2.buffer">ProtonBuffer</a>&gt;&nbsp;consumer)</code></th>
<td class="colLast">
<div class="block">Sets a <a href="https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/util/function/Consumer.html?is-external=true" title="class or interface in java.util.function" class="externalLink"><code>Consumer</code></a> instance that will be notified when data from the engine is ready to
be written to some output sink (socket etc).</div>
</td>
</tr>
<tr id="i12" class="altColor">
<td class="colFirst"><code><a href="Engine.html" title="interface in org.apache.qpid.protonj2.engine">Engine</a></code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#outputHandler(java.util.function.BiConsumer)">outputHandler</a></span>&#8203;(<a href="https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/util/function/BiConsumer.html?is-external=true" title="class or interface in java.util.function" class="externalLink">BiConsumer</a>&lt;<a href="../buffer/ProtonBuffer.html" title="interface in org.apache.qpid.protonj2.buffer">ProtonBuffer</a>,&#8203;<a href="https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/lang/Runnable.html?is-external=true" title="class or interface in java.lang" class="externalLink">Runnable</a>&gt;&nbsp;output)</code></th>
<td class="colLast">
<div class="block">Sets a <a href="https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/util/function/BiConsumer.html?is-external=true" title="class or interface in java.util.function" class="externalLink"><code>BiConsumer</code></a> instance that will be notified when data from the engine is ready to
be written to some output sink (socket etc).</div>
</td>
</tr>
<tr id="i13" class="rowColor">
<td class="colFirst"><code>default <a href="Engine.html" title="interface in org.apache.qpid.protonj2.engine">Engine</a></code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#outputHandler(org.apache.qpid.protonj2.engine.EventHandler)">outputHandler</a></span>&#8203;(<a href="EventHandler.html" title="interface in org.apache.qpid.protonj2.engine">EventHandler</a>&lt;<a href="../buffer/ProtonBuffer.html" title="interface in org.apache.qpid.protonj2.buffer">ProtonBuffer</a>&gt;&nbsp;output)</code></th>
<td class="colLast">
<div class="block">Sets a handler instance that will be notified when data from the engine is ready to
be written to some output sink (socket etc).</div>
</td>
</tr>
<tr id="i14" class="altColor">
<td class="colFirst"><code><a href="EnginePipeline.html" title="interface in org.apache.qpid.protonj2.engine">EnginePipeline</a></code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#pipeline()">pipeline</a></span>()</code></th>
<td class="colLast">
<div class="block">Gets the EnginePipeline for this Engine.</div>
</td>
</tr>
<tr id="i15" class="rowColor">
<td class="colFirst"><code><a href="EngineSaslDriver.html" title="interface in org.apache.qpid.protonj2.engine">EngineSaslDriver</a></code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#saslDriver()">saslDriver</a></span>()</code></th>
<td class="colLast">
<div class="block">Gets the SASL driver for this engine, if no SASL layer is configured then a
default no-op driver must be returned that indicates this.</div>
</td>
</tr>
<tr id="i16" class="altColor">
<td class="colFirst"><code><a href="Engine.html" title="interface in org.apache.qpid.protonj2.engine">Engine</a></code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#shutdown()">shutdown</a></span>()</code></th>
<td class="colLast">
<div class="block">Shutdown the engine preventing any future outbound or inbound processing.</div>
</td>
</tr>
<tr id="i17" class="rowColor">
<td class="colFirst"><code><a href="Engine.html" title="interface in org.apache.qpid.protonj2.engine">Engine</a></code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#shutdownHandler(org.apache.qpid.protonj2.engine.EventHandler)">shutdownHandler</a></span>&#8203;(<a href="EventHandler.html" title="interface in org.apache.qpid.protonj2.engine">EventHandler</a>&lt;<a href="Engine.html" title="interface in org.apache.qpid.protonj2.engine">Engine</a>&gt;&nbsp;engineShutdownEventHandler)</code></th>
<td class="colLast">
<div class="block">Sets a handler instance that will be notified when the engine is shut down via a call to the
<a href="#shutdown()"><code>shutdown()</code></a> method is called.</div>
</td>
</tr>
<tr id="i18" class="altColor">
<td class="colFirst"><code><a href="Connection.html" title="interface in org.apache.qpid.protonj2.engine">Connection</a></code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#start()">start</a></span>()</code></th>
<td class="colLast">
<div class="block">Starts the engine and returns the <a href="Connection.html" title="interface in org.apache.qpid.protonj2.engine"><code>Connection</code></a> instance that is bound to this Engine.</div>
</td>
</tr>
<tr id="i19" class="rowColor">
<td class="colFirst"><code><a href="EngineState.html" title="enum in org.apache.qpid.protonj2.engine">EngineState</a></code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#state()">state</a></span>()</code></th>
<td class="colLast">&nbsp;</td>
</tr>
<tr id="i20" class="altColor">
<td class="colFirst"><code>long</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#tick(long)">tick</a></span>&#8203;(long&nbsp;currentTime)</code></th>
<td class="colLast">
<div class="block">Prompt the engine to perform idle-timeout/heartbeat handling, and return an absolute
deadline in milliseconds that tick must again be called by/at, based on the provided
current time in milliseconds, to ensure the periodic work is carried out as necessary.</div>
</td>
</tr>
<tr id="i21" class="rowColor">
<td class="colFirst"><code><a href="Engine.html" title="interface in org.apache.qpid.protonj2.engine">Engine</a></code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#tickAuto(java.util.concurrent.ScheduledExecutorService)">tickAuto</a></span>&#8203;(<a href="https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/util/concurrent/ScheduledExecutorService.html?is-external=true" title="class or interface in java.util.concurrent" class="externalLink">ScheduledExecutorService</a>&nbsp;executor)</code></th>
<td class="colLast">
<div class="block">Allows the engine to manage idle timeout processing by providing it the single threaded executor
context where all transport work is done which ensures singled threaded access while removing the
need for the client library or server application to manage calls to the <a href="#tick(long)"><code>tick(long)</code></a> methods.</div>
</td>
</tr>
</table>
<ul class="blockList">
<li class="blockList"><a id="methods.inherited.from.class.java.util.function.Consumer">
<!-- -->
</a>
<h3>Methods inherited from interface&nbsp;java.util.function.<a href="https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/util/function/Consumer.html?is-external=true" title="class or interface in java.util.function" class="externalLink">Consumer</a></h3>
<code><a href="https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/util/function/Consumer.html?is-external=true#andThen(java.util.function.Consumer)" title="class or interface in java.util.function" class="externalLink">andThen</a></code></li>
</ul>
</li>
</ul>
</section>
</li>
</ul>
</div>
<div class="details">
<ul class="blockList">
<li class="blockList">
<!-- ============ METHOD DETAIL ========== -->
<section role="region">
<ul class="blockList">
<li class="blockList"><a id="method.detail">
<!-- -->
</a>
<h3>Method Detail</h3>
<a id="isWritable()">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>isWritable</h4>
<pre class="methodSignature">boolean&nbsp;isWritable()</pre>
<div class="block">Returns true if the engine is accepting input from the ingestion entry points.
<p>
When false any attempts to write more data into the engine will result in an
error being returned from the write operation. An engine that has not been
started or that has been failed or shutdown will report as not writable.</div>
<dl>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>true if the engine is current accepting more input.</dd>
</dl>
</li>
</ul>
<a id="isRunning()">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>isRunning</h4>
<pre class="methodSignature">boolean&nbsp;isRunning()</pre>
<dl>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>true if the Engine has entered the running state and is not failed or shutdown.</dd>
</dl>
</li>
</ul>
<a id="isShutdown()">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>isShutdown</h4>
<pre class="methodSignature">boolean&nbsp;isShutdown()</pre>
<dl>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>true if the Engine has been shutdown and is no longer usable.</dd>
</dl>
</li>
</ul>
<a id="isFailed()">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>isFailed</h4>
<pre class="methodSignature">boolean&nbsp;isFailed()</pre>
<dl>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>true if the Engine has encountered a critical error and cannot produce new data.</dd>
</dl>
</li>
</ul>
<a id="failureCause()">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>failureCause</h4>
<pre class="methodSignature"><a href="https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/lang/Throwable.html?is-external=true" title="class or interface in java.lang" class="externalLink">Throwable</a>&nbsp;failureCause()</pre>
<dl>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>the error that caused the <a href="Engine.html" title="interface in org.apache.qpid.protonj2.engine"><code>Engine</code></a> fail and shutdown (or null if not failed).</dd>
</dl>
</li>
</ul>
<a id="state()">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>state</h4>
<pre class="methodSignature"><a href="EngineState.html" title="enum in org.apache.qpid.protonj2.engine">EngineState</a>&nbsp;state()</pre>
<dl>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>the current state of the engine.</dd>
</dl>
</li>
</ul>
<a id="connection()">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>connection</h4>
<pre class="methodSignature"><a href="Connection.html" title="interface in org.apache.qpid.protonj2.engine">Connection</a>&nbsp;connection()</pre>
<div class="block">Gets the <a href="Connection.html" title="interface in org.apache.qpid.protonj2.engine"><code>Connection</code></a> instance that is associated with this <a href="Engine.html" title="interface in org.apache.qpid.protonj2.engine"><code>Engine</code></a> instance.
It is valid for an engine implementation to not return a <a href="Connection.html" title="interface in org.apache.qpid.protonj2.engine"><code>Connection</code></a> instance prior
to the engine having been started.</div>
<dl>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>the <a href="Connection.html" title="interface in org.apache.qpid.protonj2.engine"><code>Connection</code></a> that is linked to this engine instance.</dd>
</dl>
</li>
</ul>
<a id="start()">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>start</h4>
<pre class="methodSignature"><a href="Connection.html" title="interface in org.apache.qpid.protonj2.engine">Connection</a>&nbsp;start()
throws <a href="exceptions/EngineStateException.html" title="class in org.apache.qpid.protonj2.engine.exceptions">EngineStateException</a></pre>
<div class="block">Starts the engine and returns the <a href="Connection.html" title="interface in org.apache.qpid.protonj2.engine"><code>Connection</code></a> instance that is bound to this Engine.
A non-started Engine will not allow ingestion of any inbound data and a Connection linked to
the engine that was obtained from the <a href="#connection()"><code>connection()</code></a> method cannot produce any
outbound data.</div>
<dl>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>the Connection instance that is linked to this <a href="Engine.html" title="interface in org.apache.qpid.protonj2.engine"><code>Engine</code></a></dd>
<dt><span class="throwsLabel">Throws:</span></dt>
<dd><code><a href="exceptions/EngineStateException.html" title="class in org.apache.qpid.protonj2.engine.exceptions">EngineStateException</a></code> - if the Engine state has already transition to shutdown or failed.</dd>
</dl>
</li>
</ul>
<a id="shutdown()">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>shutdown</h4>
<pre class="methodSignature"><a href="Engine.html" title="interface in org.apache.qpid.protonj2.engine">Engine</a>&nbsp;shutdown()</pre>
<div class="block">Shutdown the engine preventing any future outbound or inbound processing.
When the engine is shut down any resources, <a href="Connection.html" title="interface in org.apache.qpid.protonj2.engine"><code>Connection</code></a>, <a href="Session.html" title="interface in org.apache.qpid.protonj2.engine"><code>Session</code></a> or <a href="Link.html" title="interface in org.apache.qpid.protonj2.engine"><code>Link</code></a>
instances that have an engine shutdown event handler registered will be notified and should react
by locally closing that resource if they wish to ensure that the resource's local close event
handler gets signaled if that resource is not already locally closed.</div>
<dl>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>this <a href="Engine.html" title="interface in org.apache.qpid.protonj2.engine"><code>Engine</code></a></dd>
</dl>
</li>
</ul>
<a id="engineFailed(java.lang.Throwable)">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>engineFailed</h4>
<pre class="methodSignature"><a href="exceptions/EngineStateException.html" title="class in org.apache.qpid.protonj2.engine.exceptions">EngineStateException</a>&nbsp;engineFailed&#8203;(<a href="https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/lang/Throwable.html?is-external=true" title="class or interface in java.lang" class="externalLink">Throwable</a>&nbsp;cause)</pre>
<div class="block">Transition the <a href="Engine.html" title="interface in org.apache.qpid.protonj2.engine"><code>Engine</code></a> to a failed state if not already closed or closing.
If called when the engine has not failed the engine will be transitioned to the failed state
and the method will return an appropriate <a href="exceptions/EngineFailedException.html" title="class in org.apache.qpid.protonj2.engine.exceptions"><code>EngineFailedException</code></a> that wraps the given
cause. If called after the engine was shutdown the method returns an <a href="exceptions/EngineShutdownException.html" title="class in org.apache.qpid.protonj2.engine.exceptions"><code>EngineShutdownException</code></a>
indicating that the engine was already shutdown. Repeated calls to this method while the engine
is in the failed state must not alter the original failure error or elicit new engine failed
event notifications.</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>cause</code> - The exception that caused the engine to be forcibly transitioned to the failed state.</dd>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>an <a href="exceptions/EngineStateException.html" title="class in org.apache.qpid.protonj2.engine.exceptions"><code>EngineStateException</code></a> that can be thrown indicating the failure and engine state.</dd>
</dl>
</li>
</ul>
<a id="ingest(org.apache.qpid.protonj2.buffer.ProtonBuffer)">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>ingest</h4>
<pre class="methodSignature"><a href="Engine.html" title="interface in org.apache.qpid.protonj2.engine">Engine</a>&nbsp;ingest&#8203;(<a href="../buffer/ProtonBuffer.html" title="interface in org.apache.qpid.protonj2.buffer">ProtonBuffer</a>&nbsp;input)
throws <a href="exceptions/EngineStateException.html" title="class in org.apache.qpid.protonj2.engine.exceptions">EngineStateException</a></pre>
<div class="block">Provide data input for this Engine from some external source. If the engine is not writable
when this method is called an <a href="exceptions/EngineNotWritableException.html" title="class in org.apache.qpid.protonj2.engine.exceptions"><code>EngineNotWritableException</code></a> will be thrown if unless the
reason for the not writable state is due to engine failure or the engine already having been
shut down in which case the appropriate <a href="exceptions/EngineStateException.html" title="class in org.apache.qpid.protonj2.engine.exceptions"><code>EngineStateException</code></a> will be thrown to indicate
the reason.</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>input</code> - The data to feed into to Engine.</dd>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>this <a href="Engine.html" title="interface in org.apache.qpid.protonj2.engine"><code>Engine</code></a></dd>
<dt><span class="throwsLabel">Throws:</span></dt>
<dd><code><a href="exceptions/EngineStateException.html" title="class in org.apache.qpid.protonj2.engine.exceptions">EngineStateException</a></code> - if the Engine state precludes accepting new input.</dd>
</dl>
</li>
</ul>
<a id="accept(org.apache.qpid.protonj2.buffer.ProtonBuffer)">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>accept</h4>
<pre class="methodSignature">default&nbsp;void&nbsp;accept&#8203;(<a href="../buffer/ProtonBuffer.html" title="interface in org.apache.qpid.protonj2.buffer">ProtonBuffer</a>&nbsp;input)
throws <a href="exceptions/EngineStateException.html" title="class in org.apache.qpid.protonj2.engine.exceptions">EngineStateException</a></pre>
<div class="block">Provide data input for this Engine from some external source. If the engine is not writable
when this method is called an <a href="exceptions/EngineNotWritableException.html" title="class in org.apache.qpid.protonj2.engine.exceptions"><code>EngineNotWritableException</code></a> will be thrown if unless the
reason for the not writable state is due to engine failure or the engine already having been
shut down in which case the appropriate <a href="exceptions/EngineStateException.html" title="class in org.apache.qpid.protonj2.engine.exceptions"><code>EngineStateException</code></a> will be thrown to indicate
the reason.</div>
<dl>
<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
<dd><code><a href="https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/util/function/Consumer.html?is-external=true#accept(T)" title="class or interface in java.util.function" class="externalLink">accept</a></code>&nbsp;in interface&nbsp;<code><a href="https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/util/function/Consumer.html?is-external=true" title="class or interface in java.util.function" class="externalLink">Consumer</a>&lt;<a href="../buffer/ProtonBuffer.html" title="interface in org.apache.qpid.protonj2.buffer">ProtonBuffer</a>&gt;</code></dd>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>input</code> - The data to feed into to Engine.</dd>
<dt><span class="throwsLabel">Throws:</span></dt>
<dd><code><a href="exceptions/EngineStateException.html" title="class in org.apache.qpid.protonj2.engine.exceptions">EngineStateException</a></code> - if the Engine state precludes accepting new input.</dd>
</dl>
</li>
</ul>
<a id="tick(long)">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>tick</h4>
<pre class="methodSignature">long&nbsp;tick&#8203;(long&nbsp;currentTime)
throws <a href="https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/lang/IllegalStateException.html?is-external=true" title="class or interface in java.lang" class="externalLink">IllegalStateException</a>,
<a href="exceptions/EngineStateException.html" title="class in org.apache.qpid.protonj2.engine.exceptions">EngineStateException</a></pre>
<div class="block">Prompt the engine to perform idle-timeout/heartbeat handling, and return an absolute
deadline in milliseconds that tick must again be called by/at, based on the provided
current time in milliseconds, to ensure the periodic work is carried out as necessary.
It is an error to call this method if the connection has not been opened.
A returned deadline of 0 indicates there is no periodic work necessitating tick be called, e.g.
because neither peer has defined an idle-timeout value.
The provided milliseconds time values should be derived from a monotonic source such as
<a href="https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/lang/System.html?is-external=true#nanoTime()" title="class or interface in java.lang" class="externalLink"><code>System.nanoTime()</code></a> to prevent wall clock changes leading to erroneous behaviour. Note
that for <a href="https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/lang/System.html?is-external=true#nanoTime()" title="class or interface in java.lang" class="externalLink"><code>System.nanoTime()</code></a> derived values in particular that the returned deadline
could be a different sign than the originally given value, and so (if non-zero) the returned
deadline should have the current time originally provided subtracted from it in order to
establish a relative time delay to the next deadline.
Supplying <a href="https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/lang/System.html?is-external=true#currentTimeMillis()" title="class or interface in java.lang" class="externalLink"><code>System.currentTimeMillis()</code></a> derived values can lead to erroneous behaviour
during wall clock changes and so is not recommended.
It is an error to call this method if <a href="#tickAuto(java.util.concurrent.ScheduledExecutorService)"><code>tickAuto(ScheduledExecutorService)</code></a> was called.</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>currentTime</code> - the current time of this tick call.</dd>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>the absolute deadline in milliseconds to next call tick by/at, or 0 if there is none.</dd>
<dt><span class="throwsLabel">Throws:</span></dt>
<dd><code><a href="https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/lang/IllegalStateException.html?is-external=true" title="class or interface in java.lang" class="externalLink">IllegalStateException</a></code> - if the <a href="Engine.html" title="interface in org.apache.qpid.protonj2.engine"><code>Engine</code></a> is already performing auto tick handling.</dd>
<dd><code><a href="exceptions/EngineStateException.html" title="class in org.apache.qpid.protonj2.engine.exceptions">EngineStateException</a></code> - if the Engine state precludes accepting new input.</dd>
</dl>
</li>
</ul>
<a id="tickAuto(java.util.concurrent.ScheduledExecutorService)">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>tickAuto</h4>
<pre class="methodSignature"><a href="Engine.html" title="interface in org.apache.qpid.protonj2.engine">Engine</a>&nbsp;tickAuto&#8203;(<a href="https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/util/concurrent/ScheduledExecutorService.html?is-external=true" title="class or interface in java.util.concurrent" class="externalLink">ScheduledExecutorService</a>&nbsp;executor)
throws <a href="https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/lang/IllegalStateException.html?is-external=true" title="class or interface in java.lang" class="externalLink">IllegalStateException</a>,
<a href="exceptions/EngineStateException.html" title="class in org.apache.qpid.protonj2.engine.exceptions">EngineStateException</a></pre>
<div class="block">Allows the engine to manage idle timeout processing by providing it the single threaded executor
context where all transport work is done which ensures singled threaded access while removing the
need for the client library or server application to manage calls to the <a href="#tick(long)"><code>tick(long)</code></a> methods.</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>executor</code> - The single threaded execution context where all engine work takes place.</dd>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>this <a href="Engine.html" title="interface in org.apache.qpid.protonj2.engine"><code>Engine</code></a></dd>
<dt><span class="throwsLabel">Throws:</span></dt>
<dd><code><a href="https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/lang/IllegalStateException.html?is-external=true" title="class or interface in java.lang" class="externalLink">IllegalStateException</a></code> - if the <a href="Engine.html" title="interface in org.apache.qpid.protonj2.engine"><code>Engine</code></a> is already performing auto tick handling.</dd>
<dd><code><a href="exceptions/EngineStateException.html" title="class in org.apache.qpid.protonj2.engine.exceptions">EngineStateException</a></code> - if the Engine state precludes accepting new input.</dd>
</dl>
</li>
</ul>
<a id="pipeline()">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>pipeline</h4>
<pre class="methodSignature"><a href="EnginePipeline.html" title="interface in org.apache.qpid.protonj2.engine">EnginePipeline</a>&nbsp;pipeline()</pre>
<div class="block">Gets the EnginePipeline for this Engine.</div>
<dl>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>the <a href="EnginePipeline.html" title="interface in org.apache.qpid.protonj2.engine"><code>EnginePipeline</code></a> for this <a href="Engine.html" title="interface in org.apache.qpid.protonj2.engine"><code>Engine</code></a>.</dd>
</dl>
</li>
</ul>
<a id="configuration()">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>configuration</h4>
<pre class="methodSignature"><a href="EngineConfiguration.html" title="interface in org.apache.qpid.protonj2.engine">EngineConfiguration</a>&nbsp;configuration()</pre>
<div class="block">Gets the Configuration for this engine.</div>
<dl>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>the configuration object for this engine.</dd>
</dl>
</li>
</ul>
<a id="saslDriver()">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>saslDriver</h4>
<pre class="methodSignature"><a href="EngineSaslDriver.html" title="interface in org.apache.qpid.protonj2.engine">EngineSaslDriver</a>&nbsp;saslDriver()</pre>
<div class="block">Gets the SASL driver for this engine, if no SASL layer is configured then a
default no-op driver must be returned that indicates this. The SASL driver provides
the engine with client and server side SASL handshaking support. An <a href="Engine.html" title="interface in org.apache.qpid.protonj2.engine"><code>Engine</code></a>
implementation can support pluggable SASL drivers or exert tight control over the
driver as it sees fit.</div>
<dl>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>the SASL driver for the engine.</dd>
</dl>
</li>
</ul>
<a id="outputHandler(org.apache.qpid.protonj2.engine.EventHandler)">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>outputHandler</h4>
<pre class="methodSignature">default&nbsp;<a href="Engine.html" title="interface in org.apache.qpid.protonj2.engine">Engine</a>&nbsp;outputHandler&#8203;(<a href="EventHandler.html" title="interface in org.apache.qpid.protonj2.engine">EventHandler</a>&lt;<a href="../buffer/ProtonBuffer.html" title="interface in org.apache.qpid.protonj2.buffer">ProtonBuffer</a>&gt;&nbsp;output)</pre>
<div class="block">Sets a handler instance that will be notified when data from the engine is ready to
be written to some output sink (socket etc).</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>output</code> - The <a href="../buffer/ProtonBuffer.html" title="interface in org.apache.qpid.protonj2.buffer"><code>ProtonBuffer</code></a> handler instance that performs IO for the engine output.</dd>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>this <a href="Engine.html" title="interface in org.apache.qpid.protonj2.engine"><code>Engine</code></a></dd>
</dl>
</li>
</ul>
<a id="outputConsumer(java.util.function.Consumer)">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>outputConsumer</h4>
<pre class="methodSignature">default&nbsp;<a href="Engine.html" title="interface in org.apache.qpid.protonj2.engine">Engine</a>&nbsp;outputConsumer&#8203;(<a href="https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/util/function/Consumer.html?is-external=true" title="class or interface in java.util.function" class="externalLink">Consumer</a>&lt;<a href="../buffer/ProtonBuffer.html" title="interface in org.apache.qpid.protonj2.buffer">ProtonBuffer</a>&gt;&nbsp;consumer)</pre>
<div class="block">Sets a <a href="https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/util/function/Consumer.html?is-external=true" title="class or interface in java.util.function" class="externalLink"><code>Consumer</code></a> instance that will be notified when data from the engine is ready to
be written to some output sink (socket etc).</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>consumer</code> - The <a href="../buffer/ProtonBuffer.html" title="interface in org.apache.qpid.protonj2.buffer"><code>ProtonBuffer</code></a> consumer instance that performs IO for the engine output.</dd>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>this <a href="Engine.html" title="interface in org.apache.qpid.protonj2.engine"><code>Engine</code></a></dd>
</dl>
</li>
</ul>
<a id="outputHandler(java.util.function.BiConsumer)">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>outputHandler</h4>
<pre class="methodSignature"><a href="Engine.html" title="interface in org.apache.qpid.protonj2.engine">Engine</a>&nbsp;outputHandler&#8203;(<a href="https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/util/function/BiConsumer.html?is-external=true" title="class or interface in java.util.function" class="externalLink">BiConsumer</a>&lt;<a href="../buffer/ProtonBuffer.html" title="interface in org.apache.qpid.protonj2.buffer">ProtonBuffer</a>,&#8203;<a href="https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/lang/Runnable.html?is-external=true" title="class or interface in java.lang" class="externalLink">Runnable</a>&gt;&nbsp;output)</pre>
<div class="block">Sets a <a href="https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/util/function/BiConsumer.html?is-external=true" title="class or interface in java.util.function" class="externalLink"><code>BiConsumer</code></a> instance that will be notified when data from the engine is ready to
be written to some output sink (socket etc). The <a href="https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/lang/Runnable.html?is-external=true" title="class or interface in java.lang" class="externalLink"><code>Runnable</code></a> value provided (if non-null)
should be invoked once the I/O operation has completely successfully. If the event of an error
writing the data the handler should throw an error or if performed asynchronously the <a href="Engine.html" title="interface in org.apache.qpid.protonj2.engine"><code>Engine</code></a>
should be marked failed via a call to <a href="#engineFailed(java.lang.Throwable)"><code>engineFailed(Throwable)</code></a>.</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>output</code> - The <a href="../buffer/ProtonBuffer.html" title="interface in org.apache.qpid.protonj2.buffer"><code>ProtonBuffer</code></a> handler instance that performs IO for the engine output.</dd>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>this <a href="Engine.html" title="interface in org.apache.qpid.protonj2.engine"><code>Engine</code></a></dd>
</dl>
</li>
</ul>
<a id="errorHandler(org.apache.qpid.protonj2.engine.EventHandler)">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>errorHandler</h4>
<pre class="methodSignature"><a href="Engine.html" title="interface in org.apache.qpid.protonj2.engine">Engine</a>&nbsp;errorHandler&#8203;(<a href="EventHandler.html" title="interface in org.apache.qpid.protonj2.engine">EventHandler</a>&lt;<a href="Engine.html" title="interface in org.apache.qpid.protonj2.engine">Engine</a>&gt;&nbsp;engineFailure)</pre>
<div class="block">Sets a handler instance that will be notified when the engine encounters a fatal error.</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>engineFailure</code> - The <a href="exceptions/ProtonException.html" title="class in org.apache.qpid.protonj2.engine.exceptions"><code>ProtonException</code></a> handler instance that will be notified if the engine fails.</dd>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>this <a href="Engine.html" title="interface in org.apache.qpid.protonj2.engine"><code>Engine</code></a></dd>
</dl>
</li>
</ul>
<a id="shutdownHandler(org.apache.qpid.protonj2.engine.EventHandler)">
<!-- -->
</a>
<ul class="blockListLast">
<li class="blockList">
<h4>shutdownHandler</h4>
<pre class="methodSignature"><a href="Engine.html" title="interface in org.apache.qpid.protonj2.engine">Engine</a>&nbsp;shutdownHandler&#8203;(<a href="EventHandler.html" title="interface in org.apache.qpid.protonj2.engine">EventHandler</a>&lt;<a href="Engine.html" title="interface in org.apache.qpid.protonj2.engine">Engine</a>&gt;&nbsp;engineShutdownEventHandler)</pre>
<div class="block">Sets a handler instance that will be notified when the engine is shut down via a call to the
<a href="#shutdown()"><code>shutdown()</code></a> method is called.</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>engineShutdownEventHandler</code> - The <a href="Engine.html" title="interface in org.apache.qpid.protonj2.engine"><code>Engine</code></a> instance that was was explicitly shut down.</dd>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>this <a href="Engine.html" title="interface in org.apache.qpid.protonj2.engine"><code>Engine</code></a></dd>
</dl>
</li>
</ul>
</li>
</ul>
</section>
</li>
</ul>
</div>
</div>
</main>
<!-- ========= END OF CLASS DATA ========= -->
<footer role="contentinfo">
<nav role="navigation">
<!-- ======= START OF BOTTOM NAVBAR ====== -->
<div class="bottomNav"><a id="navbar.bottom">
<!-- -->
</a>
<div class="skipNav"><a href="#skip.navbar.bottom" title="Skip navigation links">Skip navigation links</a></div>
<a id="navbar.bottom.firstrow">
<!-- -->
</a>
<ul class="navList" title="Navigation">
<li><a href="../../../../../index.html">Overview</a></li>
<li><a href="package-summary.html">Package</a></li>
<li class="navBarCell1Rev">Class</li>
<li><a href="class-use/Engine.html">Use</a></li>
<li><a href="package-tree.html">Tree</a></li>
<li><a href="../../../../../deprecated-list.html">Deprecated</a></li>
<li><a href="../../../../../help-doc.html">Help</a></li>
</ul>
</div>
<div class="subNav">
<ul class="navList" id="allclasses_navbar_bottom">
<li><a href="../../../../../allclasses.html">All&nbsp;Classes</a></li>
</ul>
<div>
<script type="text/javascript"><!--
allClassesLink = document.getElementById("allclasses_navbar_bottom");
if(window==top) {
allClassesLink.style.display = "block";
}
else {
allClassesLink.style.display = "none";
}
//-->
</script>
<noscript>
<div>JavaScript is disabled on your browser.</div>
</noscript>
</div>
<div>
<ul class="subNavList">
<li>Summary:&nbsp;</li>
<li>Nested&nbsp;|&nbsp;</li>
<li>Field&nbsp;|&nbsp;</li>
<li>Constr&nbsp;|&nbsp;</li>
<li><a href="#method.summary">Method</a></li>
</ul>
<ul class="subNavList">
<li>Detail:&nbsp;</li>
<li>Field&nbsp;|&nbsp;</li>
<li>Constr&nbsp;|&nbsp;</li>
<li><a href="#method.detail">Method</a></li>
</ul>
</div>
<a id="skip.navbar.bottom">
<!-- -->
</a></div>
<!-- ======== END OF BOTTOM NAVBAR ======= -->
</nav>
<p class="legalCopy"><small>Copyright &#169; 2022 <a href="https://www.apache.org/">The Apache Software Foundation</a>. All rights reserved.</small></p>
</footer>
</body>
</html>