Hi,

On Thu, 2015-04-02 at 12:41 +0000, [email protected] wrote:
> Added:
> sling/trunk/bundles/jcr/resource/src/main/java/org/apache/sling/jcr/resource/internal/HelperData.java
> URL:
> http://svn.apache.org/viewvc/sling/trunk/bundles/jcr/resource/src/main/java/org/apache/sling/jcr/resource/internal/HelperData.java?rev=1670894&view=auto
> ==============================================================================
> ---
> sling/trunk/bundles/jcr/resource/src/main/java/org/apache/sling/jcr/resource/internal/HelperData.java
>  (added)
> +++
> sling/trunk/bundles/jcr/resource/src/main/java/org/apache/sling/jcr/resource/internal/HelperData.java
>  Thu Apr  2 12:41:42 2015
> @@ -0,0 +1,51 @@
> +/*
> + * Licensed to the Apache Software Foundation (ASF) under one
> + * or more contributor license agreements.  See the NOTICE file
> + * distributed with this work for additional information
> + * regarding copyright ownership.  The ASF licenses this file
> + * to you under the Apache License, Version 2.0 (the
> + * "License"); you may not use this file except in compliance
> + * with the License.  You may obtain a copy of the License at
> + *
> + *   http://www.apache.org/licenses/LICENSE-2.0
> + *
> + * Unless required by applicable law or agreed to in writing,
> + * software distributed under the License is distributed on an
> + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
> + * KIND, either express or implied.  See the License for the
> + * specific language governing permissions and limitations
> + * under the License.
> + */
> +package org.apache.sling.jcr.resource.internal;
> +
> +import javax.jcr.RepositoryException;
> +import javax.jcr.Session;
> +
> +import org.apache.sling.jcr.resource.internal.helper.jcr.PathMapper;
> +
> +/**
> + * This is a helper class used to pass several services/data to the
> resource
> + * and value map implementations.
> + */
> +public class HelperData {
> +
> +    public final ClassLoader dynamicClassLoader;
> +
> +    public final PathMapper pathMapper;
> +
> +    private volatile String[] namespacePrefixes;
> +
> +    public HelperData(final ClassLoader dynamicClassLoader,
> +            final PathMapper pathMapper) {
> +        this.dynamicClassLoader = dynamicClassLoader;
> +        this.pathMapper = pathMapper;
> +    }
> +
> +    public String[] getNamespacePrefixes(final Session session)
> +    throws RepositoryException {
> +        if ( this.namespacePrefixes == null ) {
> +            this.namespacePrefixes = session.getNamespacePrefixes();
> +        }
> +        return this.namespacePrefixes;
> +    }
> +}


Check-then-set operations with volatile fields isn't atomic. Do we care
about that? If we do, an AtomicReference or a synchronized block might
be a better idea.

Robert

Reply via email to