code: @Override
      public AttributeValue_4[] write_read_attributes_4(final AttributeValue_4[] values, final ClntIdent clIdent)
              throws MultiDevFailed, DevFailed {
          MDC.setContextMap(contextMap);
          xlogger.entry();
          checkInitialization();
  
          final String[] names = new String[values.length];
          for (int i = 0; i < names.length; i++) {
              names[i] = values[i].name;
          }
          deviceMonitoring.startRequest("write_read_attributes_4 " + Arrays.toString(names), clIdent);
          clientIdentity.set(clIdent);
          AttributeValue_4[] val = null;
          if (!name.equalsIgnoreCase(getAdminDeviceName())) {
              clientLocking.checkClientLocking(clIdent, names);
          }
          final Object lock = deviceLock.getAttributeLock();
          try {
              synchronized (lock != null ? lock : new Object()) {
                  val = writeRead(values);
              }
          } catch (final Exception e) {
              deviceMonitoring.addError();
              if (e instanceof DevFailed) {
                  throw (DevFailed) e;
              } else {
                  // with CORBA, the stack trace is not visible by the client if
                  // not inserted in DevFailed.
                  throw DevFailedUtils.newDevFailed(e);
              }
          }
          xlogger.exit();
          return val;
      }
docs: Write and read attributes in a single request
  
  @param values  the values to write
  @param clIdent the client ID
  @return the read results