Author: buildbot
Date: Wed Jan 14 23:22:18 2015
New Revision: 936231
Log:
Production update by buildbot for activemq
Modified:
websites/production/activemq/content/cache/main.pageCache
websites/production/activemq/content/configurable-ioexception-handling.html
websites/production/activemq/content/pluggable-storage-lockers.html
Modified: websites/production/activemq/content/cache/main.pageCache
==============================================================================
Binary files - no diff available.
Modified:
websites/production/activemq/content/configurable-ioexception-handling.html
==============================================================================
--- websites/production/activemq/content/configurable-ioexception-handling.html
(original)
+++ websites/production/activemq/content/configurable-ioexception-handling.html
Wed Jan 14 23:22:18 2015
@@ -35,7 +35,7 @@
<link
href='http://activemq.apache.org/styles/highlighter/styles/shCore.css'
rel='stylesheet' type='text/css' />
<link
href='http://activemq.apache.org/styles/highlighter/styles/shThemeEclipse.css'
rel='stylesheet' type='text/css' />
<script
src='http://activemq.apache.org/styles/highlighter/scripts/shCore.js'
type='text/javascript'></script>
- <script
src='http://activemq.apache.org/styles/highlighter/scripts/shBrushJava.js'
type='text/javascript'></script>
+ <script
src='http://activemq.apache.org/styles/highlighter/scripts/shBrushXml.js'
type='text/javascript'></script>
<script type="text/javascript">
SyntaxHighlighter.defaults['toolbar'] = false;
@@ -81,23 +81,8 @@
<tbody>
<tr>
<td valign="top" width="100%">
-<div class="wiki-content maincontent"><p>Starting with 5.3.1, ActiveMQ
provides configurable IOException handling for its file-based message stores.
From version 5.5 the handler is also invoked when the JDBC persistence adapter
gets a failure on getConnection().</p>
-
-<h2 id="ConfigurableIOExceptionHandling-DefaultIOExceptionhandler">Default
IOException handler</h2>
-
-<p>ActiveMQ comes with a default IOException handler, which does the
following. When some of the file-based message stores encounter IOException it
can be one of the two things: either the disk is unavailable of there's no more
space on the disk.</p>
-
-<p>The first case is usually encountered when disk fails or network disk is
disconnected. These errors are not "recoverable" and we usually want to
shutdown the broker until problems with the disk are solved.</p>
-
-<p>When there's no more space on the disk, we usually want to wait that some
space is reclaimed and continue what we have been doing before (exchanging
messages). All file-based persistent stores are capable of surviving these kind
of errors.</p>
-
-<h3
id="ConfigurableIOExceptionHandling-ConfiguringDefaultIOExceptionhandler">Configuring
Default IOException handler</h3>
-
-<p>There are a couple of properties you can use to tune the behavior of
default IOException handler. But first you need to configure the broker to use
customized handler. You can do that by instantiating a handler and setting it
using <code>ioExceptionHandler</code> property.</p>
-
-<div class="code panel pdl" style="border-width: 1px;"><div class="codeContent
panelContent pdl">
-<script class="theme: Default; brush: java; gutter: false"
type="syntaxhighlighter"><![CDATA[
- <bean id="ioExceptionHandler"
class="org.apache.activemq.util.DefaultIOExceptionHandler">
+<div class="wiki-content maincontent"><p>Starting with 5.3.1, ActiveMQ
provides configurable IOException handling for its file-based message stores.
From version 5.5 the handler is also invoked when the JDBC persistence adapter
gets a failure on <code>getConnection()</code>.</p><h2
id="ConfigurableIOExceptionHandling-DefaultIOExceptionhandler">Default
IOException handler</h2><p>ActiveMQ comes with a default IOException handler,
which does the following. When some of the file-based message stores encounter
IOException it can be one of the two things: either the disk is unavailable of
there's no more space on the disk.</p><p>The first case is usually encountered
when disk fails or network disk is disconnected. These errors are not
"recoverable" and we usually want to shutdown the broker until problems with
the disk are solved.</p><p>When there's no more space on the disk, we usually
want to wait that some space is reclaimed and continue what we have been doing
before (exchanging messa
ges). All file-based persistent stores are capable of surviving these kind of
errors.</p><h3
id="ConfigurableIOExceptionHandling-ConfiguringDefaultIOExceptionhandler">Configuring
Default IOException handler</h3><p>There are a couple of properties you can
use to tune the behavior of the <code>DefaultIOExceptionHandler</code>. First,
instantiate the exception handler as a bean. Then configure the broker to use
the exception handler by setting the broker's <code>ioExceptionHandler</code>
property.</p><p>Example:</p><div class="code panel pdl" style="border-width:
1px;"><div class="codeContent panelContent pdl">
+<script class="theme: Default; brush: xml; gutter: false"
type="syntaxhighlighter"><![CDATA[ <bean
id="ioExceptionHandler"
class="org.apache.activemq.util.DefaultIOExceptionHandler">
<property
name="ignoreAllErrors"><value>true</value></property>
</bean>
@@ -105,26 +90,8 @@
...
</broker>
]]></script>
-</div></div>
-
-<p>Here are the properties</p>
-
-<div class="table-wrap"><table class="confluenceTable"><tbody><tr><th
colspan="1" rowspan="1" class="confluenceTh"><p> Property </p></th><th
colspan="1" rowspan="1" class="confluenceTh"><p> Default Value </p></th><th
colspan="1" rowspan="1" class="confluenceTh"><p> Description
</p></th></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p>
ignoreAllErrors </p></td><td colspan="1" rowspan="1" class="confluenceTd"><p>
false </p></td><td colspan="1" rowspan="1" class="confluenceTd"><p> ignore all
errors and don't stop the broker </p></td></tr><tr><td colspan="1" rowspan="1"
class="confluenceTd"><p> ignoreNoSpaceErrors </p></td><td colspan="1"
rowspan="1" class="confluenceTd"><p> true </p></td><td colspan="1" rowspan="1"
class="confluenceTd"><p> if set to false, 'no disk space' errors will not be
treated separately and broker will be stopped </p></td></tr><tr><td colspan="1"
rowspan="1" class="confluenceTd"><p> noSpaceMessage </p></td><td colspan="1"
rowspan="1" class="confluence
Td"><p> space </p></td><td colspan="1" rowspan="1" class="confluenceTd"><p>
try to find this phrase in exception message to determine if it is 'no disk
space' case </p></td></tr><tr><td colspan="1" rowspan="1"
class="confluenceTd"><p> <span style="color: red;">ignoreSQLExceptions</span>
</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p> true </p></td><td
colspan="1" rowspan="1" class="confluenceTd"><p> SLQExceptions that match
(default all) will be ignored. This allows the existing database locker to take
control of DB failures. When false the handler will process the exception
</p></td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p> <span
style="color: red;">sqlExceptionMessage</span> </p></td><td colspan="1"
rowspan="1" class="confluenceTd"><p> "" </p></td><td colspan="1" rowspan="1"
class="confluenceTd"><p> The SQLException phrase to match when ignoring
SQLExceptions. Only exceptions that match are ignored. Everything matches the
default empty string </p>
</td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p> <span
style="color: red;">stopStartConnectors</span> </p></td><td colspan="1"
rowspan="1" class="confluenceTd"><p> false </p></td><td colspan="1" rowspan="1"
class="confluenceTd"><p> Don't stop the broker, just stop and restart the
transport connectors when a persistence adapter checkpoint succeeds again.
While the handler is waiting to restart the connectors exceptions are ignored.
Using this option ensures that the broker does not need to be manually
restarted in the event of a DB restart </p></td></tr><tr><td colspan="1"
rowspan="1" class="confluenceTd"><p> <span style="color:
red;">resumeCheckSleepPeriod</span> </p></td><td colspan="1" rowspan="1"
class="confluenceTd"><p> 5sec </p></td><td colspan="1" rowspan="1"
class="confluenceTd"><p> the sleep period between checks for a successful
persistence adapter checkpoint that allows transport connectors to resume. used
in conjunction with stopStartConnectors </p></td>
</tr></tbody></table></div>
-
-
-<p><em>Options in <span style="color: red;">red</span> are available in
version 5.5</em><br clear="none">
-The default configuration will try to find a specified string in the exception
message to determine whether it is a 'no disk space' kind of error. On most
platforms (at least those we have tested), you'll find the 'space' word in it.
Of course, you can customize this to your platform using
<code>noSpaceMessage</code> property.</p>
-
-
-<h2 id="ConfigurableIOExceptionHandling-Writingyourownhandler">Writing your
own handler</h2>
-
-<p>In case this handler doesn't work for you, you can write your own. For
example you might want to change the way how you detect full disk and execute
some external command, like <code>df</code> on Linux to be sure.</p>
-
-<p>All you have to do is, implement the
<code>org.apache.activemq.util.IOExceptionHandler</code> interface and
configure the broker to use it</p>
-
-<div class="code panel pdl" style="border-width: 1px;"><div class="codeContent
panelContent pdl">
-<script class="theme: Default; brush: java; gutter: false"
type="syntaxhighlighter"><![CDATA[
- <bean id="ioExceptionHandler"
class="com.mycompany.MyIOExceptionHandler">
+</div></div><p>Handler configuration properties:</p><div
class="table-wrap"><table class="confluenceTable"><tbody><tr><th colspan="1"
rowspan="1" class="confluenceTh"><p>Property</p></th><th colspan="1"
rowspan="1" class="confluenceTh"><p>Default Value</p></th><th colspan="1"
rowspan="1" class="confluenceTh"><p>Description</p></th></tr><tr><td
colspan="1" rowspan="1"
class="confluenceTd"><p><code>ignoreAllErrors</code></p></td><td colspan="1"
rowspan="1" class="confluenceTd"><p><code>false</code></p></td><td colspan="1"
rowspan="1" class="confluenceTd"><p>When <code>true</code> all errors are
ignored and the broker remains running.</p></td></tr><tr><td colspan="1"
rowspan="1"
class="confluenceTd"><p><code>ignoreNoSpaceErrors</code></p></td><td
colspan="1" rowspan="1" class="confluenceTd"><p><code>true</code></p></td><td
colspan="1" rowspan="1" class="confluenceTd"><p>When <code>false</code> 'no
disk space' errors are treated the same as other errors causing the broker to
be stopped.
</p></td></tr><tr><td colspan="1" rowspan="1"
class="confluenceTd"><p><code>noSpaceMessage</code></p></td><td colspan="1"
rowspan="1" class="confluenceTd"><p><code>space</code></p></td><td colspan="1"
rowspan="1" class="confluenceTd"><p>The string used to match against the
exception's message. When matched a 'no disk space' error
results.</p></td></tr><tr><td colspan="1" rowspan="1"
class="confluenceTd"><p><code><span style="color:
red;">ignoreSQLExceptions</span></code></p></td><td colspan="1" rowspan="1"
class="confluenceTd"><p><code>true</code></p></td><td colspan="1" rowspan="1"
class="confluenceTd"><p>If <code>true</code> all SQLExceptions are ignored by
the handler allowing them to be handled by the persistence adapter's locker.
When <code>false</code> the exception handler processes the
exception.</p></td></tr><tr><td colspan="1" rowspan="1"
class="confluenceTd"><p><code><span style="color:
red;">sqlExceptionMessage</span></code></p></td><td colspan="1" rowspan="1"
class="con
fluenceTd"><p><code>""</code></p></td><td colspan="1" rowspan="1"
class="confluenceTd"><p>The SQLException phrase to match when ignoring
SQLExceptions. Only matched exceptions are ignored. All SQLExceptions match the
default empty string.</p></td></tr><tr><td colspan="1" rowspan="1"
class="confluenceTd"><p><code><span style="color:
red;">stopStartConnectors</span></code></p></td><td colspan="1" rowspan="1"
class="confluenceTd"><p><code>false</code></p></td><td colspan="1" rowspan="1"
class="confluenceTd"><p>When <code>true</code> transport connectors are stopped
(client connections are refused), however, the broker will remain running. The
transport connectors will be restarted following a successful persistence
adapter checkpoint. All exceptions are ignored whilst the transport connectors
are stopped. This option ensures that the broker does not need to be manually
restarted in the event of a DB restart, for example.</p></td></tr><tr><td
colspan="1" rowspan="1" class="confluenceTd"
><p><code><span style="color:
>red;">resumeCheckSleepPeriod</span></code></p></td><td colspan="1"
>rowspan="1" class="confluenceTd"><p><code>5sec</code></p></td><td colspan="1"
>rowspan="1" class="confluenceTd"><p>The interval between persistence adapter
>checkpoints. Typically used in conjunction with
><code>stopStartConnectors</code>.</p></td></tr></tbody></table></div><p><em>Options
> in <span style="color: red;">red</span> are available in version
>5.5</em></p><p>The default configuration will try to find a specified string
>in the exception message to determine whether it is a 'no disk space' error.
>On most platforms (at least those we have tested), you'll find the word
>'space' in it. Of course, you can customize this to your platform by using
><code>noSpaceMessage</code> property.</p><p>Note: as of ActiveMQ 5.11 the
><code>JDBCIOExceptionHandler</code> has been deprecated. It has been replaced
>by the <code>org.apache.activemq.util.LeaseLockerIOExceptionHandler</code>
>that will work with
any persistence adapter that supports pluggable storage lockers whether or not
a locker is in use.</p><h2
id="ConfigurableIOExceptionHandling-Writingyourownhandler">Writing your own
handler</h2><p>In case this handler doesn't work for you, you can write your
own. For example you might want to change the way how you detect full disk and
execute some external command, like <code>df</code> on Linux to be
sure.</p><p>All you have to do is implement the
<code>org.apache.activemq.util.IOExceptionHandler</code> interface then
configure the broker to use it:</p><div class="code panel pdl"
style="border-width: 1px;"><div class="codeContent panelContent pdl">
+<script class="theme: Default; brush: xml; gutter: false"
type="syntaxhighlighter"><![CDATA[ <bean
id="ioExceptionHandler"
class="com.mycompany.MyIOExceptionHandler">
<property
name="ignoreAllErrors"><value>true</value></property>
</bean>
Modified: websites/production/activemq/content/pluggable-storage-lockers.html
==============================================================================
--- websites/production/activemq/content/pluggable-storage-lockers.html
(original)
+++ websites/production/activemq/content/pluggable-storage-lockers.html Wed Jan
14 23:22:18 2015
@@ -82,7 +82,7 @@
<tbody>
<tr>
<td valign="top" width="100%">
-<div class="wiki-content maincontent"><p>With the 5.7.0 release of ActiveMQ
the storage locking mechanism used by a persistence adapter is pluggable. This
feature only applies to brokers configured in a shared storage master/slave
topology. Prior to release 5.7.0 the storage locking mechanism (and thus master
election) was dictated by the choice of persistence adapter. With the KahaDB
persistence adapter, for example, the storage locking mechanism was based on a
shared file lock. Similarly, the JDBC persistence adapter used a database
backed storage lock.</p><p>Now that the choice of storage lock is divorced from
that of the persistence adapter one can mix and match. Storage locker
pluggability is made possible because all lockers must implement the <a
shape="rect" class="external-link"
href="https://fisheye6.atlassian.com/browse/activemq/trunk/activemq-broker/src/main/java/org/apache/activemq/broker/Locker.java?hb=true"
rel="nofollow">Locker</a> interface. This interface makes it e
asy to implement your own storage locker when you have special requirements.
Of course, every persistence adapter still has its own default locker which
works as before.</p><h2
id="Pluggablestoragelockers-Lockers">Lockers</h2><p>Every locker must implement
the <a shape="rect" class="external-link"
href="https://fisheye6.atlassian.com/browse/activemq/trunk/activemq-broker/src/main/java/org/apache/activemq/broker/Locker.java?hb=true"
rel="nofollow">Locker</a> interface. The locker has the following configurable
parameters:</p><div class="table-wrap"><table
class="confluenceTable"><tbody><tr><th colspan="1" rowspan="1"
class="confluenceTh"><p>Property Name</p></th><th colspan="1" rowspan="1"
class="confluenceTh"><p>Default Value</p></th><th colspan="1" rowspan="1"
class="confluenceTh"><p>Description</p></th></tr><tr><td colspan="1"
rowspan="1"
class="confluenceTd"><p><code>lockAcquireSleepInterval</code></p></td><td
colspan="1" rowspan="1" class="confluenceTd"><p>10000</p></td><td cols
pan="1" rowspan="1" class="confluenceTd"><p>Delay interval in milliseconds
between lock acquire attempts</p></td></tr><tr><td colspan="1" rowspan="1"
class="confluenceTd"><p><code>failIfLocked</code></p></td><td colspan="1"
rowspan="1" class="confluenceTd"><p>false</p></td><td colspan="1" rowspan="1"
class="confluenceTd"><p>Should the start fail immediately if lock cannot be
obtained</p></td></tr></tbody></table></div><h2
id="Pluggablestoragelockers-PersistenceAdapters">Persistence
Adapters</h2><p>Every persistence adapter (or other broker service that wants
to use locks) needs to implement the <a shape="rect" class="external-link"
href="https://fisheye6.atlassian.com/browse/activemq/trunk/activemq-broker/src/main/java/org/apache/activemq/broker/Lockable.java?r=1383400"
rel="nofollow">Lockable</a> interface. This adds the following configurable
parameters:</p><div class="table-wrap"><table
class="confluenceTable"><tbody><tr><th colspan="1" rowspan="1"
class="confluenceTh"><p>Propert
y Name</p></th><th colspan="1" rowspan="1" class="confluenceTh"><p>Default
Value</p></th><th colspan="1" rowspan="1"
class="confluenceTh"><p>Description</p></th></tr><tr><td colspan="1"
rowspan="1" class="confluenceTd"><p><code>useLock</code></p></td><td
colspan="1" rowspan="1" class="confluenceTd"><p>true</p></td><td colspan="1"
rowspan="1" class="confluenceTd"><p>can be used to turn off locking if
necessary</p></td></tr><tr><td colspan="1" rowspan="1"
class="confluenceTd"><p><code>lockKeepAlivePeriod</code></p></td><td
colspan="1" rowspan="1" class="confluenceTd"><p>0</p></td><td colspan="1"
rowspan="1" class="confluenceTd"><p>If bigger than 0, time period (in
milliseconds) to keep lock alive</p></td></tr></tbody></table></div><h2
id="Pluggablestoragelockers-ExistingLockers">Existing Lockers</h2><h3
id="Pluggablestoragelockers-SharedFileLocker">Shared File Locker</h3><p>The
Shared File Locker is the default locker for the KahaDB persistence adapter. It
locks a file to ensure that
only the broker holding the lock (the master) is granted access to the message
store.</p><p>Example:</p><div class="code panel pdl" style="border-width:
1px;"><div class="codeContent panelContent pdl">
+<div class="wiki-content maincontent"><p>With the 5.7.0 release of ActiveMQ
the storage locking mechanism used by a persistence adapter is pluggable. This
feature only applies to brokers configured in a shared storage master/slave
topology. Prior to release 5.7.0 the storage locking mechanism (and thus master
election) was dictated by the choice of persistence adapter. With the KahaDB
persistence adapter, for example, the storage locking mechanism was based on a
shared file lock. Similarly, the JDBC persistence adapter used a database
backed storage lock.</p><p>Now that the choice of storage lock is divorced from
that of the persistence adapter one can mix and match. Storage locker
pluggability is made possible because all lockers must implement the <a
shape="rect" class="external-link"
href="https://fisheye6.atlassian.com/browse/activemq/trunk/activemq-broker/src/main/java/org/apache/activemq/broker/Locker.java?hb=true"
rel="nofollow">Locker</a> interface. This interface makes it e
asy to implement your own storage locker when you have special requirements.
Of course, every persistence adapter still has its own default locker which
works as before.</p><h2
id="Pluggablestoragelockers-Lockers">Lockers</h2><p>Every locker must implement
the <a shape="rect" class="external-link"
href="https://fisheye6.atlassian.com/browse/activemq/trunk/activemq-broker/src/main/java/org/apache/activemq/broker/Locker.java?hb=true"
rel="nofollow">Locker</a> interface. The locker has the following
properties:</p><div class="table-wrap"><table
class="confluenceTable"><tbody><tr><th colspan="1" rowspan="1"
class="confluenceTh"><p>Property Name</p></th><th colspan="1" rowspan="1"
class="confluenceTh"><p>Default Value</p></th><th colspan="1" rowspan="1"
class="confluenceTh"><p>Description</p></th></tr><tr><td colspan="1"
rowspan="1"
class="confluenceTd"><p><code>lockAcquireSleepInterval</code></p></td><td
colspan="1" rowspan="1" class="confluenceTd"><p>10000</p></td><td colspan="1"
rowsp
an="1" class="confluenceTd"><p>Delay interval in milliseconds between lock
acquire attempts</p></td></tr><tr><td colspan="1" rowspan="1"
class="confluenceTd"><p><code>failIfLocked</code></p></td><td colspan="1"
rowspan="1" class="confluenceTd"><p>false</p></td><td colspan="1" rowspan="1"
class="confluenceTd"><p>Should the start fail immediately if lock cannot be
obtained</p></td></tr></tbody></table></div><h2
id="Pluggablestoragelockers-PersistenceAdapters">Persistence
Adapters</h2><p>Every persistence adapter (or other broker service that wants
to use locks) needs to implement the <a shape="rect" class="external-link"
href="https://fisheye6.atlassian.com/browse/activemq/trunk/activemq-broker/src/main/java/org/apache/activemq/broker/Lockable.java?r=1383400"
rel="nofollow">Lockable</a> interface. This adds the following
properties:</p><div class="table-wrap"><table
class="confluenceTable"><tbody><tr><th colspan="1" rowspan="1"
class="confluenceTh"><p>Property Name</p></th><th colspan
="1" rowspan="1" class="confluenceTh"><p>Default Value</p></th><th colspan="1"
rowspan="1" class="confluenceTh"><p>Description</p></th></tr><tr><td
colspan="1" rowspan="1"
class="confluenceTd"><p><code>useLock</code></p></td><td colspan="1"
rowspan="1" class="confluenceTd"><p>true</p></td><td colspan="1" rowspan="1"
class="confluenceTd"><p>can be used to turn off locking if
necessary</p></td></tr><tr><td colspan="1" rowspan="1"
class="confluenceTd"><p><code>lockKeepAlivePeriod</code></p></td><td
colspan="1" rowspan="1" class="confluenceTd"><p>0</p></td><td colspan="1"
rowspan="1" class="confluenceTd"><p>If bigger than 0, time period (in
milliseconds) to keep lock alive</p></td></tr></tbody></table></div><h2
id="Pluggablestoragelockers-ExistingLockers">Existing Lockers</h2><h3
id="Pluggablestoragelockers-SharedFileLocker">Shared File Locker</h3><p>The
Shared File Locker is the default locker for the KahaDB persistence adapter. It
locks a file to ensure that only the broker holding th
e lock (the master) is granted access to the message
store.</p><p>Example:</p><div class="code panel pdl" style="border-width:
1px;"><div class="codeContent panelContent pdl">
<script class="theme: Default; brush: xml; gutter: false"
type="syntaxhighlighter"><![CDATA[<persistenceAdapter>
<kahaDB directory = "target/activemq-data">
<locker>
@@ -127,7 +127,7 @@
</locker>
</kahaDB>
</persistenceAdapter>]]></script>
-</div></div><p>To see the complete list of attributes and SQL statements that
can be overridden see the <a shape="rect" class="external-link"
href="https://fisheye6.atlassian.com/browse/activemq/trunk/activemq-jdbc-store/src/main/java/org/apache/activemq/store/jdbc/Statements.java?hb=true"
rel="nofollow">Statements</a> class. When the KahaDB persistence adapter is
configured to use the <code>lease-database-locker</code> you must configure the
broker to use your own IO exception handler as neither the
<code>DefaultIOExceptionHandler</code> nor the
<code>JDBCIOExceptionHandler</code> will work correctly with this combination.
See <a shape="rect" href="configurable-ioexception-handling.html">Configurable
IOException Handlers</a> for details on how to write a handler.</p><p>As of
ActiveMQ 5.11, however, the <code>JDBCIOExceptionHandler</code> has been
deprecated. It has been replaced by the
<code>org.apache.activemq.util.LeaseLockerIOExceptionHandler</code> which will
work with any pers
istence adapter that supports pluggable storage
lockers.</p><p> </p><p> </p></div>
+</div></div><p>To see the complete list of attributes and SQL statements that
can be overridden see the <a shape="rect" class="external-link"
href="https://fisheye6.atlassian.com/browse/activemq/trunk/activemq-jdbc-store/src/main/java/org/apache/activemq/store/jdbc/Statements.java?hb=true"
rel="nofollow">Statements</a> class. When the KahaDB persistence adapter is
configured to use the <code>lease-database-locker</code> you must configure the
broker to use your own IO exception handler as neither the
<code>DefaultIOExceptionHandler</code> nor the
<code>JDBCIOExceptionHandler</code> will work correctly with this combination.
See <a shape="rect" href="configurable-ioexception-handling.html">Configurable
IOException Handlers</a> for details on how to write a handler.</p><p>As of
ActiveMQ 5.11, however, the <code>JDBCIOExceptionHandler</code> has been
deprecated. It has been replaced by the
<code>org.apache.activemq.util.LeaseLockerIOExceptionHandler</code> that will
work with any persi
stence adapter that supports pluggable storage lockers (whether or not one is
configured).</p><p> </p><p> </p></div>
</td>
<td valign="top">
<div class="navigation">