docs: final AbstractJcrProperty getProperty( Name propertyName ) throws RepositoryException {
          AbstractJcrProperty prop = jcrProperties.get(propertyName);
          if (prop == null) {
              // See if there's a property on the node ...
              CachedNode node = node();
              SessionCache cache = sessionCache();
              org.modeshape.jcr.value.Property p = node.getProperty(propertyName, cache);
              if (p != null) {
                  Name primaryType = node.getPrimaryType(cache);
                  Set<Name> mixinTypes = node.getMixinTypes(cache);
                  prop = createJcrProperty(p, primaryType, mixinTypes);
                  if (prop != null) {
                      AbstractJcrProperty newJcrProperty = jcrProperties.putIfAbsent(propertyName, prop);
                      if (newJcrProperty != null) {
                          // Some other thread snuck in and created it, so use that one ...
                          prop = newJcrProperty;
                      }
                  }
              }
          } else {
              // Make sure the property hasn't been removed by another session ...
              CachedNode node = node();
              SessionCache cache = sessionCache();
              if (!node.hasProperty(propertyName, cache)) {
                  jcrProperties.remove(propertyName);
                  prop = null;
              }
          }
          return prop;
      }