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
