diff --git a/jaxrs/providers/jaxb/src/main/java/org/jboss/resteasy/plugins/providers/jaxb/XmlJAXBContextFinder.java b/jaxrs/providers/jaxb/src/main/java/org/jboss/resteasy/plugins/providers/jaxb/XmlJAXBContextFinder.java index 67699a4..3a62c34 100644 --- a/jaxrs/providers/jaxb/src/main/java/org/jboss/resteasy/plugins/providers/jaxb/XmlJAXBContextFinder.java +++ b/jaxrs/providers/jaxb/src/main/java/org/jboss/resteasy/plugins/providers/jaxb/XmlJAXBContextFinder.java @@ -66,7 +66,9 @@ public class XmlJAXBContextFinder extends AbstractJAXBContextFinder implements C if (ctx != null) return ctx; ctx = createContext(paraAnnotations, classes); - collectionCache.put(key, ctx); + JAXBContext tmpCtx = collectionCache.putIfAbsent(key, ctx); + if(tmpCtx != null) + ctx = tmpCtx; return ctx; } @@ -79,7 +81,9 @@ public class XmlJAXBContextFinder extends AbstractJAXBContextFinder implements C if (ctx != null) return ctx; ctx = createXmlTypeContext(paraAnnotations, classes); - xmlTypeCollectionCache.put(key, ctx); + JAXBContext tmpCtx = xmlTypeCollectionCache.putIfAbsent(key, ctx); + if(tmpCtx != null) + ctx = tmpCtx; return ctx; } diff --git a/jaxrs/providers/jaxb/src/test/java/org/jboss/resteasy/test/providers/jaxb/JAXBCache.java b/jaxrs/providers/jaxb/src/test/java/org/jboss/resteasy/test/providers/jaxb/JAXBCache.java index c96f05b..5b80144 100644 --- a/jaxrs/providers/jaxb/src/test/java/org/jboss/resteasy/test/providers/jaxb/JAXBCache.java +++ b/jaxrs/providers/jaxb/src/test/java/org/jboss/resteasy/test/providers/jaxb/JAXBCache.java @@ -68,7 +68,9 @@ public final class JAXBCache { throw new ExceptionAdapter(e); } - contextCache.putIfAbsent(classes, context); + JAXBContext tmpContext = contextCache.putIfAbsent(classes, context); + if(tmpContext != null) + context = tmpContext; } logger.debug("Locating JAXBContext for package: {0}", classes); return context; diff --git a/jaxrs/providers/jettison/src/main/java/org/jboss/resteasy/plugins/providers/jaxb/json/JsonJAXBContextFinder.java b/jaxrs/providers/jettison/src/main/java/org/jboss/resteasy/plugins/providers/jaxb/json/JsonJAXBContextFinder.java index 23bc01e..b52fdc1 100644 --- a/jaxrs/providers/jettison/src/main/java/org/jboss/resteasy/plugins/providers/jaxb/json/JsonJAXBContextFinder.java +++ b/jaxrs/providers/jettison/src/main/java/org/jboss/resteasy/plugins/providers/jaxb/json/JsonJAXBContextFinder.java @@ -108,7 +108,9 @@ public class JsonJAXBContextFinder extends AbstractJAXBContextFinder implements JAXBContext ctx = badgerCollectionCache.get(key); if (ctx != null) return ctx; ctx = new BadgerContext(classes); - badgerCollectionCache.put(key, ctx); + JAXBContext tmpCtx = badgerCollectionCache.putIfAbsent(key, ctx); + if(tmpCtx != null) + ctx = tmpCtx; return ctx; } else @@ -116,7 +118,9 @@ public class JsonJAXBContextFinder extends AbstractJAXBContextFinder implements JAXBContext ctx = mappedCollectionCache.get(key); if (ctx != null) return ctx; ctx = new JettisonMappedContext(mapped, classes); - mappedCollectionCache.put(key, ctx); + JAXBContext tmpCtx = mappedCollectionCache.putIfAbsent(key, ctx); + if(tmpCtx != null) + ctx = tmpCtx; return ctx; } } @@ -146,7 +150,9 @@ public class JsonJAXBContextFinder extends AbstractJAXBContextFinder implements jaxb = new JettisonMappedContext(type); } } - cache.putIfAbsent(type, jaxb); + JAXBContext tmpJaxb = cache.putIfAbsent(type, jaxb); + if(tmpJaxb != null) + jaxb = tmpJaxb; return jaxb; } diff --git a/jaxrs/providers/test-all-jaxb/src/test/java/org/jboss/resteasy/test/providers/jaxb/JAXBCache.java b/jaxrs/providers/test-all-jaxb/src/test/java/org/jboss/resteasy/test/providers/jaxb/JAXBCache.java index 7eccee3..a9139dc 100644 --- a/jaxrs/providers/test-all-jaxb/src/test/java/org/jboss/resteasy/test/providers/jaxb/JAXBCache.java +++ b/jaxrs/providers/test-all-jaxb/src/test/java/org/jboss/resteasy/test/providers/jaxb/JAXBCache.java @@ -68,7 +68,9 @@ public final class JAXBCache { throw new ExceptionAdapter(e); } - contextCache.putIfAbsent(classes, context); + JAXBContext tmpContext = contextCache.putIfAbsent(classes, context); + if(tmpContext != null) + context = tmpContext; } logger.debug("Locating JAXBContext for package: {0}", classes); return context; diff --git a/jaxrs/resteasy-cache/resteasy-cache-core/src/main/java/org/jboss/resteasy/plugins/cache/server/SimpleServerCache.java b/jaxrs/resteasy-cache/resteasy-cache-core/src/main/java/org/jboss/resteasy/plugins/cache/server/SimpleServerCache.java index cc0a04c..208ac9d 100644 --- a/jaxrs/resteasy-cache/resteasy-cache-core/src/main/java/org/jboss/resteasy/plugins/cache/server/SimpleServerCache.java +++ b/jaxrs/resteasy-cache/resteasy-cache-core/src/main/java/org/jboss/resteasy/plugins/cache/server/SimpleServerCache.java @@ -60,7 +60,7 @@ public class SimpleServerCache implements ServerCache } - private Map> cache = new ConcurrentHashMap>(); + private ConcurrentHashMap> cache = new ConcurrentHashMap>(); public Entry get(String uri, MediaType accept) { @@ -80,7 +80,9 @@ public class SimpleServerCache implements ServerCache if (entry == null) { entry = new ConcurrentHashMap(); - cache.put(uri, entry); + Map tmpEntry = cache.putIfAbsent(uri, entry); + if(tmpEntry != null) + entry = tmpEntry; } entry.put(mediaType, cacheEntry); return cacheEntry; diff --git a/jaxrs/resteasy-jaxrs/src/main/java/org/jboss/resteasy/core/ResourceLocator.java b/jaxrs/resteasy-jaxrs/src/main/java/org/jboss/resteasy/core/ResourceLocator.java index 19d13ca..0546cb8 100644 --- a/jaxrs/resteasy-jaxrs/src/main/java/org/jboss/resteasy/core/ResourceLocator.java +++ b/jaxrs/resteasy-jaxrs/src/main/java/org/jboss/resteasy/core/ResourceLocator.java @@ -132,7 +132,9 @@ public class ResourceLocator implements ResourceInvoker } registry.addResourceFactory(null, null, target.getClass());//subResourceClass); - cachedSubresources.putIfAbsent(target.getClass(), registry); + Registry tmpRegistry = cachedSubresources.putIfAbsent(target.getClass(), registry); + if(tmpRegistry != null) + registry = tmpRegistry; } ResourceInvoker invoker = registry.getResourceInvoker(request); if (invoker == null) diff --git a/jaxrs/resteasy-jaxrs/src/main/java/org/jboss/resteasy/plugins/server/embedded/SimpleSecurityDomain.java b/jaxrs/resteasy-jaxrs/src/main/java/org/jboss/resteasy/plugins/server/embedded/SimpleSecurityDomain.java index 1d6109f..83cb227 100644 --- a/jaxrs/resteasy-jaxrs/src/main/java/org/jboss/resteasy/plugins/server/embedded/SimpleSecurityDomain.java +++ b/jaxrs/resteasy-jaxrs/src/main/java/org/jboss/resteasy/plugins/server/embedded/SimpleSecurityDomain.java @@ -23,8 +23,9 @@ public class SimpleSecurityDomain implements SecurityDomain if (users == null) { users = new CopyOnWriteArraySet(); - roles.putIfAbsent(role, users); - users = roles.get(role); + Set tmpUsers = roles.putIfAbsent(role, users); + if(tmpUsers != null) + users = tmpUsers; } users.add(user); } diff --git a/jaxrs/security/resteasy-oauth/src/main/java/org/jboss/resteasy/auth/oauth/OAuthMemoryProvider.java b/jaxrs/security/resteasy-oauth/src/main/java/org/jboss/resteasy/auth/oauth/OAuthMemoryProvider.java index 0c65666..3cc7dd9 100644 --- a/jaxrs/security/resteasy-oauth/src/main/java/org/jboss/resteasy/auth/oauth/OAuthMemoryProvider.java +++ b/jaxrs/security/resteasy-oauth/src/main/java/org/jboss/resteasy/auth/oauth/OAuthMemoryProvider.java @@ -142,7 +142,10 @@ public class OAuthMemoryProvider implements OAuthProvider { return consumer; } consumer = new OAuthConsumer(consumerKey, "therealfrog", displayName, connectURI); - consumers.putIfAbsent(consumerKey, consumer); + OAuthConsumer tmpConsumer = consumers.putIfAbsent(consumerKey, consumer); + if(tmpConsumer != null) + consumer = tmpConsumer; + return consumer; }