/** * 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()); } }