class JmsPropertyReader {

    public <T> T get(final String propertyName, final Class<T> targetType) {
        LOGGER.debug("Trying to find property {}.{}", this.propertyPrefix, propertyName);
        final String fullPropertyName = this.propertyPrefix + "." + propertyName;
        T property = this.environment.getProperty(fullPropertyName, targetType);

        if (property == null) {
            LOGGER.debug("Property {} not found, trying default property.", fullPropertyName);
            property = this.getDefault(propertyName, targetType);
            LOGGER.debug("Found default value {} for property {}", property, propertyName);
        } else {
            LOGGER.debug("Found value {} for property {}.{}", property, this.propertyPrefix, propertyName);
        }

        return property;
    }

    public  JmsPropertyReader(final Environment environment, final String propertyPrefix,
            final JmsConfiguration defaultJmsConfiguration);

}