Пример #1
0
  /**
   * Get an attribute value for the given environment. Check JEMBeanHelper.getNeedReset() after this
   * call because the helper may detect that the environment has changed and that the MBean metadata
   * should be reset.
   *
   * @param targetEnv The target JE environment. May be null if the environment is not open.
   * @param attributeName attribute name.
   * @return attribute value.
   */
  public Object getAttribute(Environment targetEnv, String attributeName)
      throws AttributeNotFoundException, MBeanException {

    /* Sanity check. */
    if (attributeName == null) {
      throw new AttributeNotFoundException("Attribute name cannot be null");
    }

    /* These attributes are available regardless of environment state. */
    try {
      if (attributeName.equals(ATT_ENV_HOME)) {
        return environmentHome.getCanonicalPath();
      } else if (attributeName.equals(ATT_OPEN)) {
        boolean envIsOpen = (targetEnv != null);
        resetIfOpenStateChanged(envIsOpen);
        return new Boolean(envIsOpen);
      } else if (attributeName.equals(ATT_SET_READ_ONLY)) {
        return new Boolean(openConfig.getReadOnly());
      } else if (attributeName.equals(ATT_SET_TRANSACTIONAL)) {
        return new Boolean(openConfig.getTransactional());
      } else if (attributeName.equals(ATT_SET_SERIALIZABLE)) {
        return new Boolean(openConfig.getTxnSerializableIsolation());
      } else {
        /* The rest are JE environment attributes. */
        if (targetEnv != null) {

          EnvironmentConfig config = targetEnv.getConfig();

          if (attributeName.equals(ATT_IS_READ_ONLY)) {
            return new Boolean(config.getReadOnly());
          } else if (attributeName.equals(ATT_IS_TRANSACTIONAL)) {
            return new Boolean(config.getTransactional());
          } else if (attributeName.equals(ATT_CACHE_SIZE)) {
            return new Long(config.getCacheSize());
          } else if (attributeName.equals(ATT_CACHE_PERCENT)) {
            return new Integer(config.getCachePercent());
          } else if (attributeName.equals(ATT_LOCK_TIMEOUT)) {
            return new Long(config.getLockTimeout());
          } else if (attributeName.equals(ATT_IS_SERIALIZABLE)) {
            return new Boolean(config.getTxnSerializableIsolation());
          } else if (attributeName.equals(ATT_TXN_TIMEOUT)) {
            return new Long(config.getTxnTimeout());
          } else {
            throw new AttributeNotFoundException("attribute " + attributeName + " is not valid.");
          }
        }
        return null;
      }
    } catch (Exception e) {
      /*
       * Add both the message and the exception for easiest deciphering
       * of the problem. Sometimes the original exception stacktrace gets
       * hidden in server logs.
       */
      throw new MBeanException(e, e.getMessage());
    }
  }
Пример #2
0
 private CurrentTransaction(Environment env) {
   this.env = env;
   try {
     EnvironmentConfig config = env.getConfig();
     txnMode = config.getTransactional();
     lockingMode = DbCompat.getInitializeLocking(config);
     if (txnMode || lockingMode) {
       writeLockMode = LockMode.RMW;
     } else {
       writeLockMode = LockMode.DEFAULT;
     }
     cdbMode = DbCompat.getInitializeCDB(config);
     if (cdbMode) {
       localCdbCursors = new ThreadLocal();
     }
   } catch (DatabaseException e) {
     throw new RuntimeExceptionWrapper(e);
   }
 }
Пример #3
0
  /**
   * Get MBean attribute metadata for this environment.
   *
   * @param targetEnv The target JE environment. May be null if the environment is not open.
   * @return list of MBeanAttributeInfo objects describing the available attributes.
   */
  public List getAttributeList(Environment targetEnv) {

    /* Turn off reset because the mbean metadata is being refreshed. */
    setNeedReset(false);

    ArrayList attrList = new ArrayList();

    /* Add attributes for all JE environments. */
    for (int i = 0; i < COMMON_ATTR.length; i++) {
      attrList.add(COMMON_ATTR[i]);
    }

    if (targetEnv == null) {
      if (canConfigure) {
        /* Add attributes for configuring an environment. */
        for (int i = 0; i < CREATE_ATTR.length; i++) {
          attrList.add(CREATE_ATTR[i]);
        }
      }
    } else {
      /* Add attributes for an open environment. */
      for (int i = 0; i < OPEN_ATTR.length; i++) {
        attrList.add(OPEN_ATTR[i]);
      }

      /* Add attributes for an open, transactional environment. */
      try {
        EnvironmentConfig config = targetEnv.getConfig();
        if (config.getTransactional()) {
          for (int i = 0; i < TRANSACTIONAL_ATTR.length; i++) {
            attrList.add(TRANSACTIONAL_ATTR[i]);
          }
        }
      } catch (DatabaseException ignore) {
        /* ignore */
      }
    }

    return attrList;
  }
Пример #4
0
  /**
   * Get mbean operation metadata for this environment.
   *
   * @param targetEnv The target JE environment. May be null if the environment is not open.
   * @return List of MBeanOperationInfo describing available operations.
   */
  public List getOperationList(Environment targetEnv) {
    setNeedReset(false);

    List operationList = new ArrayList();

    if (targetEnv != null) {
      /*
       * These operations are only available if the environment is
       * open.
       */
      operationList.add(OP_CLEAN_INFO);
      operationList.add(OP_EVICT_INFO);
      operationList.add(OP_ENV_STAT_INFO);
      operationList.add(OP_LOCK_STAT_INFO);
      operationList.add(OP_DB_NAMES_INFO);
      operationList.add(OP_DB_STAT_INFO);

      /* Add checkpoint only for transactional environments. */
      boolean isTransactional = false;
      try {
        EnvironmentConfig config = targetEnv.getConfig();
        isTransactional = config.getTransactional();
      } catch (DatabaseException e) {
        /* Don't make any operations available. */
        return new ArrayList();
      }

      if (isTransactional) {
        operationList.add(OP_CHECKPOINT_INFO);
        operationList.add(OP_TXN_STAT_INFO);
      } else {
        operationList.add(OP_SYNC_INFO);
      }
    }

    return operationList;
  }