docs: protected final SIBusMessage readAndDeleteMessage(SIMessageHandle handle,
              SITransaction transaction) throws ResourceException, SIMessageNotLockedException {
  
          final String methodName = "deleteMessage";
          if (TraceComponent.isAnyTracingEnabled() && TRACE.isEntryEnabled()) {
              SibTr.entry(this, TRACE, methodName, new Object[] { handle,
                      transaction });
          }
  
          SIBusMessage message = null;
  
          if (_session instanceof BifurcatedConsumerSession) {
  
              try {
  
                  if (TraceComponent.isAnyTracingEnabled() && TRACE.isDebugEnabled ()) {
                          SibTr.debug(this, TRACE,
                                          "We have a bifucated consumer session so attempting to perform readAndDelete");
                  }
  
                  SIBusMessage [] messageList = ((BifurcatedConsumerSession) _session).readAndDeleteSet(new SIMessageHandle[] { handle }, transaction);
  
                  if (messageList.length != 1) {
  
                      throw new ResourceAdapterInternalException(NLS.getFormattedMessage(
                              ("MESSAGE_LIST_INCORRECT_CWSIV0607"), new Object[] { "" + messageList.length, messageList,
                                          handle, transaction }, null));
  
                  }
  
                  if (TraceComponent.isAnyTracingEnabled() && TRACE.isDebugEnabled ()) {
                          SibTr.debug(this, TRACE,
                                          "Getting the message from the message list");
                  }
  
                  message = messageList [0];
  
              } catch (SIMessageNotLockedException exception) {
  
                  // No FFDC code needed
  
                                  /*
                                   * Message lock has expired and message will be
                                   * reassigned. Throw this back up to the called to
                                   * catch.
                                   */
                  throw exception;
  
              }catch (final SIException exception) {
  
                  FFDCFilter.processException(exception, CLASS_NAME + "."
                          + methodName, "1:1292:1.73", this);
                  if (TraceComponent.isAnyTracingEnabled() && TRACE.isEventEnabled()) {
                      SibTr.exception(this, TRACE, exception);
                  }
                  throw new ResourceAdapterInternalException(NLS.getFormattedMessage(
                          ("DELETE_EXCEPTION_CWSIV0608"), new Object[] { exception,
                                          handle, transaction }, null), exception);
  
              } catch (final SIErrorException exception) {
  
                  FFDCFilter.processException(exception, CLASS_NAME + "."
                          + methodName, "1:1303:1.73", this);
                  if (TraceComponent.isAnyTracingEnabled() && TRACE.isEventEnabled()) {
                      SibTr.exception(this, TRACE, exception);
                  }
                  throw new ResourceAdapterInternalException(NLS.getFormattedMessage(
                          ("DELETE_EXCEPTION_CWSIV0608"), new Object[] { exception,
                                          handle, transaction }, null), exception);
  
              }
  
          } else {
  
              throw new ResourceAdapterInternalException(NLS.getFormattedMessage(
                      ("INVALID_SESSION_CWSIV0606"),
                                          new Object[] { _session, handle, transaction, BifurcatedConsumerSession.class.getName () },
                                          null));
  
          }
  
          if (TraceComponent.isAnyTracingEnabled() && TRACE.isEntryEnabled()) {
              SibTr.exit(this, TRACE, methodName, message);
          }
  
          return message;
  
      }