From 9333dcc739a7bf89a2e78886c7dd43fef1c09b8b Mon Sep 17 00:00:00 2001 From: Robert Varga Date: Tue, 2 Dec 2014 15:55:20 +0100 Subject: [PATCH] BUG-2459: cache GrammarCache The GrammarCache without a schema is used as a template, so it is expliticly okay to reuse it across multiple instances. Make sure we reuse it as much as possible. Change-Id: I0e642b1b580051e997de9602020ab0dace7dbcac Signed-off-by: Robert Varga --- .../netconf/nettyutil/handler/NetconfEXICodec.java | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/opendaylight/netconf/netconf-netty-util/src/main/java/org/opendaylight/controller/netconf/nettyutil/handler/NetconfEXICodec.java b/opendaylight/netconf/netconf-netty-util/src/main/java/org/opendaylight/controller/netconf/nettyutil/handler/NetconfEXICodec.java index 30867bcd18..8f67da670a 100644 --- a/opendaylight/netconf/netconf-netty-util/src/main/java/org/opendaylight/controller/netconf/nettyutil/handler/NetconfEXICodec.java +++ b/opendaylight/netconf/netconf-netty-util/src/main/java/org/opendaylight/controller/netconf/nettyutil/handler/NetconfEXICodec.java @@ -30,13 +30,19 @@ public final class NetconfEXICodec { } }; + /** + * Grammar cache acts as a template and is duplicated by the Transmogrifier and the Reader + * before use. It is safe to reuse a single instance. + */ + private final GrammarCache exiGrammarCache; private final EXIOptions exiOptions; public NetconfEXICodec(final EXIOptions exiOptions) { this.exiOptions = Preconditions.checkNotNull(exiOptions); + this.exiGrammarCache = createGrammarCache(exiOptions); } - private GrammarCache getGrammarCache() { + private static GrammarCache createGrammarCache(final EXIOptions exiOptions) { short go = GrammarOptions.DEFAULT_OPTIONS; if (exiOptions.getPreserveComments()) { go = GrammarOptions.addCM(go); @@ -51,13 +57,13 @@ public final class NetconfEXICodec { go = GrammarOptions.addPI(go); } - return new GrammarCache(null, go); + return new GrammarCache(go); } EXIReader getReader() throws EXIOptionsException { final EXIReader r = new EXIReader(); r.setPreserveLexicalValues(exiOptions.getPreserveLexicalValues()); - r.setGrammarCache(getGrammarCache()); + r.setGrammarCache(exiGrammarCache); r.setEntityResolver(ENTITY_RESOLVER); return r; } @@ -66,7 +72,7 @@ public final class NetconfEXICodec { final Transmogrifier transmogrifier = new Transmogrifier(); transmogrifier.setAlignmentType(exiOptions.getAlignmentType()); transmogrifier.setBlockSize(exiOptions.getBlockSize()); - transmogrifier.setGrammarCache(getGrammarCache()); + transmogrifier.setGrammarCache(exiGrammarCache); transmogrifier.setOutputCookie(OUTPUT_EXI_COOKIE); transmogrifier.setOutputOptions(HeaderOptionsOutputType.all); transmogrifier.setResolveExternalGeneralEntities(false); -- 2.36.6