@Override
  public void cmdExecute(Message msg, ServerConnection servConn, long start)
      throws IOException, ClassNotFoundException {
    servConn.setAsTrue(REQUIRES_RESPONSE);
    if (logger.fineEnabled()) {
      logger.fine(
          servConn.getName()
              + ": Received get pdx id for enum request ("
              + msg.getNumberOfParts()
              + " parts) from "
              + servConn.getSocketString());
    }
    int noOfParts = msg.getNumberOfParts();

    EnumInfo enumInfo = (EnumInfo) msg.getPart(0).getObject();
    int enumId = msg.getPart(1).getInt();

    try {
      GemFireCacheImpl cache = (GemFireCacheImpl) servConn.getCache();
      TypeRegistry registry = cache.getPdxRegistry();
      registry.addRemoteEnum(enumId, enumInfo);
    } catch (Exception e) {
      writeException(msg, e, false, servConn);
      servConn.setAsTrue(RESPONDED);
      return;
    }

    writeReply(msg, servConn);
    servConn.setAsTrue(RESPONDED);
  }
 /** Flush any pending writes. */
 @Override
 protected synchronized PdxReaderImpl getUnmodifiableReader() {
   if (this.dirtyFields != null) {
     PdxOutputStream os = new PdxOutputStream(basicSize() + PdxWriterImpl.HEADER_SIZE);
     PdxWriterImpl writer;
     if (getPdxType().getHasDeletedField()) {
       // Need a new type that does not have the deleted field
       PdxType pt = new PdxType(getPdxType().getClassName(), !getPdxType().getNoDomainClass());
       GemFireCacheImpl gfc =
           GemFireCacheImpl.getForPdx(
               "PDX registry is unavailable because the Cache has been closed.");
       TypeRegistry tr = gfc.getPdxRegistry();
       writer = new PdxWriterImpl(pt, tr, os);
     } else {
       writer = new PdxWriterImpl(getPdxType(), os);
     }
     for (PdxField f : getPdxType().getFields()) {
       if (f.isDeleted()) {
         continue;
       }
       Object dv = this.dirtyFields[f.getFieldIndex()];
       if (dv != null) {
         if (dv == NULL_TOKEN) {
           dv = null;
         }
         writer.writeField(f, dv);
       } else {
         writer.writeRawField(f, getRaw(f));
       }
     }
     writer.completeByteStreamGeneration();
     ByteBuffer bb = os.toByteBuffer();
     bb.position(PdxWriterImpl.HEADER_SIZE);
     basicSetBuffer(bb.slice());
     this.dirtyFields = null;
   }
   return new PdxReaderImpl(this);
 }