code: public final void remove(final Transaction transaction, final long lockID) throws MessageStoreException
      {
          if (TraceComponent.isAnyTracingEnabled() && tc.isEntryEnabled())
              SibTr.entry(this, tc, "remove");
  
          Membership membership = _getMembership();
          if (null == membership)
          {
              throw new NotInMessageStore();
          }
          else
          {
              membership.cmdRemove(lockID, transaction);
          }
  
          if (TraceComponent.isAnyTracingEnabled() && tc.isEntryEnabled())
              SibTr.exit(this, tc, "remove");
      }
docs: If the receiver is currently 'in' an {@link ItemStream} then remove
  it from the {@link ItemStream}. The removal is performed under the
  aegis of a transaction, and is subject to the item being removable.
  An item is removable if either:
  <ul>
  <li>The item is unlocked, and not part of a transaction.</li>
  <li>The item is locked by the lock ID is
  supplied as an argument to the remove. </li>
  </ul>
  If the item is not 'in' an {@link ItemStream} then no action is
  taken.
  <p>An Item is not removable if there are still {@link ItemReference}s
  to it. An exception will be thrown.
  </p>
  
  If the item is locked then the lockID must be provided in order to
  unlock the item.
  If the item is locked, and the lockID is provided, then the
  item will be removed without becoming visible to any other getter.
  
  @param transaction under which the remove is to be performed.
  @param lockID lockID (if any) under which the item was locked.
  
  @throws MessageStoreException if the item could not be removed. For
  example, if the item is part of another transaction.