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
