docs: public Object seek(String strSeekSign, int iOpenMode, String strKeyArea, String strFields, Object objKeyData) throws DBException, RemoteException
      {
          int iOldOpenMode = this.getMainRecord().getOpenMode();
          try   {
              Utility.getLogger().info("EJB Seek sign: " + strSeekSign + " key: " + strKeyArea + " data: " + objKeyData);
      // SELECT (fields to select)
              synchronized (this.getTask())
              {
                  Record recordBase = this.getMainRecord().getTable().getCurrentTable().getRecord();
                  this.getMainRecord().setOpenMode(iOpenMode);
                  int iFieldTypes = this.getFieldTypes(recordBase);
                  if (strFields != null)
                      this.getMainRecord().setSelected(strFields);    // Select these fields
                  else
                  {
                      if (iFieldTypes == BaseBuffer.PHYSICAL_FIELDS)
                          this.getMainRecord().setSelected(true);   // Select these fields (otherwise leave the selection alone)
                  }
                  iFieldTypes = this.getFieldTypes(recordBase);
  
                  boolean bResponse = false;
                  if ((iOpenMode & DBConstants.OPEN_REFRESH_TO_CURRENT) != 0)
                  {
                      int iErrorCode = this.getMainRecord().refreshToCurrent(DBConstants.AFTER_UPDATE_TYPE, false);
                      if (iErrorCode == DBConstants.NORMAL_RETURN)
                          bResponse = true;
                  }
                  else if (DBConstants.SEEK_CURRENT_RECORD.equals(strSeekSign))
                  { // Just return the current record
                      bResponse = true;
                  }
                  else
                  { // Attempt to read this record
                      this.getMainRecord().setKeyArea(strKeyArea);
                      KeyArea keyArea = this.getMainRecord().getKeyArea(-1);  // Current index
  
                      if (!(objKeyData instanceof Vector))
                      {   // If they just passed the key value, make a vector and pass it!
                          Vector<Object> vector = new Vector<Object>();
                          vector.add(objKeyData);
                          objKeyData = vector;
                      }
                      BaseBuffer buffer = new VectorBuffer((Vector)objKeyData);
                      keyArea.reverseKeyBuffer(buffer, DBConstants.FILE_KEY_AREA);
                      bResponse = this.getMainRecord().seek(strSeekSign);
                  }
                  if (bResponse)
                  {
                      recordBase = this.getMainRecord().getTable().getCurrentTable().getRecord();
                      BaseBuffer buffer2 = new VectorBuffer(null, iFieldTypes);
                      buffer2.fieldsToBuffer(recordBase, iFieldTypes);
                      return buffer2.getPhysicalData();
                  }
                  else
                      return new Boolean(false);
              }
          } catch (DBException ex)    {
              throw ex;
          } catch (Exception ex)  {
              ex.printStackTrace();
              throw new DBException(ex.getMessage());
          } finally {
              this.getMainRecord().setOpenMode((iOldOpenMode & ~DBConstants.LOCK_TYPE_MASK) | (iOpenMode & DBConstants.LOCK_TYPE_MASK));	// Keep the client lock settings
          }
      }