code: public CmsProperty readPropertyObject(
          CmsRequestContext context,
          CmsResource resource,
          String key,
          boolean search,
          Locale locale)
      throws CmsException {
  
          CmsProperty result = null;
          CmsDbContext dbc = m_dbContextFactory.getDbContext(context);
          try {
              if (null == locale) {
                  result = m_driverManager.readPropertyObject(dbc, resource, key, search);
              } else {
                  result = m_driverManager.readPropertyObject(dbc, resource, key, search, locale);
              }
          } catch (Exception e) {
              dbc.report(
                  null,
                  Messages.get().container(Messages.ERR_READ_PROP_FOR_RESOURCE_2, key, context.getSitePath(resource)),
                  e);
          } finally {
              dbc.clear();
          }
          return result;
      }
docs: Reads a property object from a resource specified by a property name.<p>
  
  Returns <code>{@link CmsProperty#getNullProperty()}</code> if the property is not found.<p>
  
  @param context the context of the current request
  @param resource the resource where the property is mapped to
  @param key the property key name
  @param search if <code>true</code>, the property is searched on all parent folders of the resource.
  if it's not found attached directly to the resource.
  @param locale the locale for which the property should be read.
  
  @return the required property, or <code>{@link CmsProperty#getNullProperty()}</code> if the property was not found
  
  @throws CmsException if something goes wrong