class RemoteFetchEntryMessage extends RemoteOperationMessage {

  @Override
  protected boolean operateOnRegion(ClusterDistributionManager dm, LocalRegion r, long startTime)
      throws RemoteOperationException {
    r.waitOnInitialization(); // bug #43371 - accessing a region before it's initialized
    EntrySnapshot val;
    try {
      final KeyInfo keyInfo = r.getKeyInfo(key);
      Region.Entry<?, ?> re = r.getDataView().getEntry(keyInfo, r, true);
      if (re == null) {
        r.checkEntryNotFound(key);
      }
      NonLocalRegionEntry nlre = new NonLocalRegionEntry(re, r);
      LocalRegion dataReg = r.getDataRegionForRead(keyInfo);
      val = new EntrySnapshot(nlre, dataReg, r, false);
      FetchEntryReplyMessage.send(getSender(), getProcessorId(), val, dm, null);
    } catch (TransactionException tex) {
      FetchEntryReplyMessage.send(getSender(), getProcessorId(), null, dm, new ReplyException(tex));
    } catch (EntryNotFoundException enfe) {
      FetchEntryReplyMessage.send(getSender(), getProcessorId(), null, dm, new ReplyException(
          "entry not found", enfe));
    }

    // Unless there was an exception thrown, this message handles sending the
    // response
    return false;
  }

  public  RemoteFetchEntryMessage();
  private  RemoteFetchEntryMessage(InternalDistributedMember recipient, String regionPath,
      ReplyProcessor21 processor, final Object key);

}