Repository: servicemix-bundles
Updated Branches:
  refs/heads/master 2638e2e9b -> 4194f2195


[SM-2480]add cache per each endpoint


Project: http://git-wip-us.apache.org/repos/asf/servicemix-bundles/repo
Commit: 
http://git-wip-us.apache.org/repos/asf/servicemix-bundles/commit/4194f219
Tree: http://git-wip-us.apache.org/repos/asf/servicemix-bundles/tree/4194f219
Diff: http://git-wip-us.apache.org/repos/asf/servicemix-bundles/diff/4194f219

Branch: refs/heads/master
Commit: 4194f21952b65989125a0014a04e47a91d3e07c0
Parents: 2638e2e
Author: Freeman Fang <[email protected]>
Authored: Tue Mar 17 13:00:39 2015 +0800
Committer: Freeman Fang <[email protected]>
Committed: Tue Mar 17 13:00:39 2015 +0800

----------------------------------------------------------------------
 .../swagger/jaxrs/listing/ApiListing.scala      | 30 +++++++++++++++-----
 1 file changed, 23 insertions(+), 7 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/servicemix-bundles/blob/4194f219/swagger-jaxrs-1.3.2/src/main/scala/com/wordnik/swagger/jaxrs/listing/ApiListing.scala
----------------------------------------------------------------------
diff --git 
a/swagger-jaxrs-1.3.2/src/main/scala/com/wordnik/swagger/jaxrs/listing/ApiListing.scala
 
b/swagger-jaxrs-1.3.2/src/main/scala/com/wordnik/swagger/jaxrs/listing/ApiListing.scala
index 1ea4d77..dd7c6d0 100644
--- 
a/swagger-jaxrs-1.3.2/src/main/scala/com/wordnik/swagger/jaxrs/listing/ApiListing.scala
+++ 
b/swagger-jaxrs-1.3.2/src/main/scala/com/wordnik/swagger/jaxrs/listing/ApiListing.scala
@@ -20,6 +20,7 @@ import javax.ws.rs._
 import javax.ws.rs.ext.Provider
 
 import javax.servlet.ServletConfig
+import java.util.HashMap
 
 import scala.collection.mutable.LinkedHashMap
 
@@ -28,18 +29,31 @@ import scala.collection.mutable.ListBuffer
 
 object ApiListingCache {
   private val LOGGER = LoggerFactory.getLogger(ApiListingCache.getClass)
-
+  
   var _cache: Option[Map[String, ApiListing]] = None
+  
+  var caches: java.util.Map[Object, Option[Map[String, ApiListing]]] = new 
HashMap[Object, Option[Map[String, ApiListing]]]
 
   def listing(docRoot: String, app: Application, sc: ServletConfig): 
Option[Map[String, ApiListing]] = {
+    val scanner = sc.getServletContext().getAttribute("SCANNER")
+    if (scanner != null) {
+        _cache = caches.get(scanner)
+    }
+    if (_cache == null) {
+        _cache = None
+    }
+    _cache.orElse{
       LOGGER.debug("loading cache")
       ClassReaders.reader.map{reader => 
-        val scanner = sc.getServletContext().getAttribute("SCANNER");
-          val classes = 
scanner.asInstanceOf[JaxrsScanner].classesFromContext(app, null)
+        
+          val classes = scanner match {
+            case scanner: JaxrsScanner => 
scanner.asInstanceOf[JaxrsScanner].classesFromContext(app, null)
+            case _ => List()
+          }
           // For each top level resource, parse it and look for swagger 
annotations.
           val listings = (for(cls <- classes) yield reader.read(docRoot, cls, 
ConfigFactory.config)).flatten.toList
           _cache = Some((listings.map(m => {
-            //always start with "/"
+            // always start with "/"
             val resourcePath = m.resourcePath.startsWith ("/") match {
               case true => m.resourcePath
               case false => "/" + m.resourcePath
@@ -47,10 +61,12 @@ object ApiListingCache {
             LOGGER.debug("adding resource path " + resourcePath)
             (resourcePath, m)
           })).toMap)
-        //})
+        
+        ;
       }
       _cache
-    
+    }
+    caches.put(scanner, _cache)
     if(_cache != None)
       LOGGER.debug("cache has " + _cache.get.keys + " keys")
     else
@@ -157,4 +173,4 @@ class ApiListingResource {
   def headersToMap(headers: HttpHeaders): Map[String, List[String]] = {
     (for((key, values) <- headers.getRequestHeaders.asScala) yield (key, 
values.asScala.toList)).toMap
   }
-}
+}
\ No newline at end of file

Reply via email to