You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@nlpcraft.apache.org by se...@apache.org on 2021/01/21 18:54:53 UTC

[incubator-nlpcraft] branch NLPCRAFT-111 updated: WIP.

This is an automated email from the ASF dual-hosted git repository.

sergeykamov pushed a commit to branch NLPCRAFT-111
in repository https://gitbox.apache.org/repos/asf/incubator-nlpcraft.git


The following commit(s) were added to refs/heads/NLPCRAFT-111 by this push:
     new 3ad718a  WIP.
3ad718a is described below

commit 3ad718a9ca9e52eb29637f64b4604189629fea9b
Author: Sergey Kamov <sk...@gmail.com>
AuthorDate: Thu Jan 21 21:54:36 2021 +0300

    WIP.
---
 .../module/NCModule.scala}                         | 17 ++++++++++----
 .../scala/org/apache/nlpcraft/common/package.scala |  3 +--
 .../pool/NCPoolContext.scala}                      | 11 +++++----
 .../{NcPoolFactory.java => NCPoolFactory.java}     |  2 +-
 .../nlpcraft/common/pool/NCPoolManager.scala       | 16 +++++++++----
 .../nlpcraft/model/tools/cmdline/NCCli.scala       |  3 +++
 .../org/apache/nlpcraft/probe/NCProbeBoot.scala    | 16 +++++++------
 .../org/apache/nlpcraft/server/NCServer.scala      |  6 +++--
 .../server/nlp/core/NCNlpServerManager.scala       |  4 ++--
 .../nlp/core/opennlp/NCOpenNlpNerEnricher.scala    |  4 ++--
 .../server/nlp/core/opennlp/NCOpenNlpParser.scala  |  8 +++----
 .../nlp/enrichers/NCServerEnrichmentManager.scala  |  4 ++--
 .../server/nlp/enrichers/date/NCDateEnricher.scala | 14 +++++------
 .../nlpcraft/server/pool/NCServerPoolContext.scala | 27 ----------------------
 .../nlpcraft/server/pool/NCServerPoolManager.scala | 25 --------------------
 .../nlpcraft/server/probe/NCProbeManager.scala     |  4 ++--
 .../nlpcraft/server/query/NCQueryManager.scala     | 10 ++++----
 .../nlpcraft/server/rest/NCBasicRestApi.scala      |  8 +++----
 .../server/sugsyn/NCSuggestSynonymManager.scala    |  4 ++--
 19 files changed, 78 insertions(+), 108 deletions(-)

diff --git a/nlpcraft/src/main/scala/org/apache/nlpcraft/probe/mgrs/pool/NCProbePoolManager.scala b/nlpcraft/src/main/scala/org/apache/nlpcraft/common/module/NCModule.scala
similarity index 63%
rename from nlpcraft/src/main/scala/org/apache/nlpcraft/probe/mgrs/pool/NCProbePoolManager.scala
rename to nlpcraft/src/main/scala/org/apache/nlpcraft/common/module/NCModule.scala
index 68fe2e5..3f4a83e 100644
--- a/nlpcraft/src/main/scala/org/apache/nlpcraft/probe/mgrs/pool/NCProbePoolManager.scala
+++ b/nlpcraft/src/main/scala/org/apache/nlpcraft/common/module/NCModule.scala
@@ -15,12 +15,21 @@
  * limitations under the License.
  */
 
-package org.apache.nlpcraft.probe.mgrs.pool
+package org.apache.nlpcraft.common.module
 
-import org.apache.nlpcraft.common.pool.NCPoolManager
+import org.apache.nlpcraft.common.{NCE, U}
 
 /**
- * Probe pool manager.
+ *
  */
-object NCProbePoolManager extends NCPoolManager("nlpcraft.probe.pools")
+object NCModule extends Enumeration {
+    final val PROPERTY = "NLPCRAFT_MODULE"
+
+    type NCModule = Value
+
+    val SERVER, PROBE, CLI: Value = Value
+
+    def getCurrent: NCModule = NCModule.withName(U.sysEnv(PROPERTY).getOrElse(throw new NCE(s"Module is not set: $PROPERTY")))
+    def setCurrent(m: NCModule): Unit = System.setProperty(NCModule.PROPERTY, m.toString)
+}
 
diff --git a/nlpcraft/src/main/scala/org/apache/nlpcraft/common/package.scala b/nlpcraft/src/main/scala/org/apache/nlpcraft/common/package.scala
index ad8f191..58512d7 100644
--- a/nlpcraft/src/main/scala/org/apache/nlpcraft/common/package.scala
+++ b/nlpcraft/src/main/scala/org/apache/nlpcraft/common/package.scala
@@ -206,6 +206,5 @@ package object common {
       * @param f Lambda to convert.
       * @return Callable object.
       */
-    implicit def toCallable[R](f: () ⇒ R): Callable[R] =
-        () => f()
+    implicit def toCallable[R](f: () ⇒ R): Callable[R] = () ⇒ f()
 }
diff --git a/nlpcraft/src/main/scala/org/apache/nlpcraft/probe/mgrs/pool/NCProbePoolContext.scala b/nlpcraft/src/main/scala/org/apache/nlpcraft/common/pool/NCPoolContext.scala
similarity index 80%
rename from nlpcraft/src/main/scala/org/apache/nlpcraft/probe/mgrs/pool/NCProbePoolContext.scala
rename to nlpcraft/src/main/scala/org/apache/nlpcraft/common/pool/NCPoolContext.scala
index 0cc2691..3237f8d 100644
--- a/nlpcraft/src/main/scala/org/apache/nlpcraft/probe/mgrs/pool/NCProbePoolContext.scala
+++ b/nlpcraft/src/main/scala/org/apache/nlpcraft/common/pool/NCPoolContext.scala
@@ -15,13 +15,14 @@
  * limitations under the License.
  */
 
-package org.apache.nlpcraft.probe.mgrs.pool
+package org.apache.nlpcraft.common.pool
+
+import scala.concurrent.ExecutionContext
 
 /**
- * Probe pool context trait.
+ * Pool context trait.
  */
-trait NCProbePoolContext {
+trait NCPoolContext {
     def getName: String = getClass.getName
-
-    implicit def getContext = NCProbePoolManager.getContext(getName)
+    implicit def getContext: ExecutionContext = NCPoolManager.getContext(getName)
 }
\ No newline at end of file
diff --git a/nlpcraft/src/main/scala/org/apache/nlpcraft/common/pool/NcPoolFactory.java b/nlpcraft/src/main/scala/org/apache/nlpcraft/common/pool/NCPoolFactory.java
similarity index 79%
rename from nlpcraft/src/main/scala/org/apache/nlpcraft/common/pool/NcPoolFactory.java
rename to nlpcraft/src/main/scala/org/apache/nlpcraft/common/pool/NCPoolFactory.java
index e5b99a0..1879080 100644
--- a/nlpcraft/src/main/scala/org/apache/nlpcraft/common/pool/NcPoolFactory.java
+++ b/nlpcraft/src/main/scala/org/apache/nlpcraft/common/pool/NCPoolFactory.java
@@ -2,6 +2,6 @@ package org.apache.nlpcraft.common.pool;
 
 import java.util.concurrent.ExecutorService;
 
-public interface NcPoolFactory {
+public interface NCPoolFactory {
     ExecutorService mkExecutorService();
 }
diff --git a/nlpcraft/src/main/scala/org/apache/nlpcraft/common/pool/NCPoolManager.scala b/nlpcraft/src/main/scala/org/apache/nlpcraft/common/pool/NCPoolManager.scala
index 19a9d09..867d3e6 100644
--- a/nlpcraft/src/main/scala/org/apache/nlpcraft/common/pool/NCPoolManager.scala
+++ b/nlpcraft/src/main/scala/org/apache/nlpcraft/common/pool/NCPoolManager.scala
@@ -19,6 +19,8 @@ package org.apache.nlpcraft.common.pool
 
 import io.opencensus.trace.Span
 import org.apache.nlpcraft.common.config.NCConfigurable
+import org.apache.nlpcraft.common.module.NCModule
+import org.apache.nlpcraft.common.module.NCModule._
 import org.apache.nlpcraft.common.{NCService, U}
 
 import java.util.concurrent.{ConcurrentHashMap, ExecutorService}
@@ -27,16 +29,22 @@ import scala.concurrent.ExecutionContext
 
 /**
  *
- * @param cfg
  */
-abstract class NCPoolManager(cfg: String) extends NCService {
+object NCPoolManager extends NCService {
     @volatile private var data: ConcurrentHashMap[String, Holder] = new ConcurrentHashMap
 
     private case class Holder(context: ExecutionContext, pool: Option[ExecutorService])
 
     private object Config extends NCConfigurable {
-        val factories: Map[String, NcPoolFactory] = {
-            val m: Option[Map[String, String]] = getMapOpt(cfg)
+        val factories: Map[String, NCPoolFactory] = {
+            val cfgPath =
+                NCModule.get match {
+                    case SERVER ⇒ "nlpcraft.server.pools"
+                    case PROBE ⇒ "nlpcraft.server.pools"
+                    case m ⇒ throw new AssertionError(s"Unexpected module: $m")
+                }
+
+            val m: Option[Map[String, String]] = getMapOpt(cfgPath)
 
             m.getOrElse(Map.empty).map(p ⇒ p._1 → U.mkObject(p._2))
         }
diff --git a/nlpcraft/src/main/scala/org/apache/nlpcraft/model/tools/cmdline/NCCli.scala b/nlpcraft/src/main/scala/org/apache/nlpcraft/model/tools/cmdline/NCCli.scala
index 52f7f86..388db14 100644
--- a/nlpcraft/src/main/scala/org/apache/nlpcraft/model/tools/cmdline/NCCli.scala
+++ b/nlpcraft/src/main/scala/org/apache/nlpcraft/model/tools/cmdline/NCCli.scala
@@ -46,6 +46,7 @@ import org.apache.nlpcraft.common._
 import org.apache.nlpcraft.common.ansi.NCAnsi._
 import org.apache.nlpcraft.common.ansi.{NCAnsi, NCAnsiProgressBar, NCAnsiSpinner}
 import org.apache.nlpcraft.common.ascii.NCAsciiTable
+import org.apache.nlpcraft.common.module.NCModule
 import org.apache.nlpcraft.common.version.NCVersion
 import org.apache.nlpcraft.model.tools.sqlgen.impl.NCSqlModelGeneratorImpl
 import org.jline.reader._
@@ -114,6 +115,8 @@ object NCCli extends App {
 
     private var term: Terminal = _
 
+    NCModule.setCurrent(NCModule.CLI)
+
     // See NCProbeMdo.
     case class Probe(
         probeToken: String,
diff --git a/nlpcraft/src/main/scala/org/apache/nlpcraft/probe/NCProbeBoot.scala b/nlpcraft/src/main/scala/org/apache/nlpcraft/probe/NCProbeBoot.scala
index 6ffbd36..dd3df43 100644
--- a/nlpcraft/src/main/scala/org/apache/nlpcraft/probe/NCProbeBoot.scala
+++ b/nlpcraft/src/main/scala/org/apache/nlpcraft/probe/NCProbeBoot.scala
@@ -24,12 +24,14 @@ import org.apache.commons.lang3.SystemUtils
 import org.apache.nlpcraft.common.ascii.NCAsciiTable
 import org.apache.nlpcraft.common.config.NCConfigurable
 import org.apache.nlpcraft.common.extcfg.NCExternalConfigManager
+import org.apache.nlpcraft.common.module.NCModule
 import org.apache.nlpcraft.common.nlp.core.NCNlpCoreManager
 import org.apache.nlpcraft.common.nlp.dict.NCDictionaryManager
 import org.apache.nlpcraft.common.nlp.numeric.NCNumericManager
 import org.apache.nlpcraft.common.opencensus.NCOpenCensusTrace
+import org.apache.nlpcraft.common.pool.NCPoolManager
 import org.apache.nlpcraft.common.version.NCVersion
-import org.apache.nlpcraft.common.{NCE, NCException, NCService, U, _}
+import org.apache.nlpcraft.common.{NCE, NCService, U, _}
 import org.apache.nlpcraft.model.tools.cmdline.NCCliProbeBeacon
 import org.apache.nlpcraft.probe.mgrs.cmd.NCCommandManager
 import org.apache.nlpcraft.probe.mgrs.conn.NCConnectionManager
@@ -47,7 +49,6 @@ import org.apache.nlpcraft.probe.mgrs.nlp.enrichers.sort.NCSortEnricher
 import org.apache.nlpcraft.probe.mgrs.nlp.enrichers.stopword.NCStopWordEnricher
 import org.apache.nlpcraft.probe.mgrs.nlp.enrichers.suspicious.NCSuspiciousNounsEnricher
 import org.apache.nlpcraft.probe.mgrs.nlp.validate.NCValidateManager
-import org.apache.nlpcraft.probe.mgrs.pool.NCProbePoolManager
 import resource.managed
 
 import java.io._
@@ -187,11 +188,12 @@ private [probe] object NCProbeBoot extends LazyLogging with NCOpenCensusTrace {
       * @param fut
       */
     private def start0(cfg: ProbeConfig, fut: CompletableFuture[Integer]): Unit = {
+        NCModule.setCurrent(NCModule.PROBE)
+
         // Record an anonymous screenview.
         new Thread() {
             override def run(): Unit = U.gaScreenView("probe")
-        }
-        .start()
+        }.start()
 
         probeThread = Thread.currentThread()
         
@@ -248,7 +250,7 @@ private [probe] object NCProbeBoot extends LazyLogging with NCOpenCensusTrace {
         /**
          *
          */
-        def save() = {
+        def save(): Unit = {
             try {
                 managed(new ObjectOutputStream(new FileOutputStream(path))) acquireAndGet { stream ⇒
                     stream.writeObject(NCCliProbeBeacon(
@@ -323,7 +325,7 @@ private [probe] object NCProbeBoot extends LazyLogging with NCOpenCensusTrace {
       */
     private def checkStarted(): Unit = 
         if (started)
-            throw new NCException(s"Probe has already been started (only one probe per JVM is allowed).")
+            throw new NCE(s"Probe has already been started (only one probe per JVM is allowed).")
 
     /**
       * Starts the embedded probe with optional configuration file and provided overrides.
@@ -493,7 +495,7 @@ private [probe] object NCProbeBoot extends LazyLogging with NCOpenCensusTrace {
                 "jarFolder" → cfg.jarsFolder
             )
 
-            startedMgrs += NCProbePoolManager.start(span)
+            startedMgrs += NCPoolManager.start(span)
             startedMgrs += NCExternalConfigManager.start(span)
             startedMgrs += NCNlpCoreManager.start(span)
             startedMgrs += NCNumericManager.start(span)
diff --git a/nlpcraft/src/main/scala/org/apache/nlpcraft/server/NCServer.scala b/nlpcraft/src/main/scala/org/apache/nlpcraft/server/NCServer.scala
index dc0ec78..0305708 100644
--- a/nlpcraft/src/main/scala/org/apache/nlpcraft/server/NCServer.scala
+++ b/nlpcraft/src/main/scala/org/apache/nlpcraft/server/NCServer.scala
@@ -25,10 +25,12 @@ import org.apache.nlpcraft.common.ansi.NCAnsi
 import org.apache.nlpcraft.common.ascii.NCAsciiTable
 import org.apache.nlpcraft.common.config.NCConfigurable
 import org.apache.nlpcraft.common.extcfg.NCExternalConfigManager
+import org.apache.nlpcraft.common.module.NCModule
 import org.apache.nlpcraft.common.nlp.core.NCNlpCoreManager
 import org.apache.nlpcraft.common.nlp.dict.NCDictionaryManager
 import org.apache.nlpcraft.common.nlp.numeric.NCNumericManager
 import org.apache.nlpcraft.common.opencensus.NCOpenCensusTrace
+import org.apache.nlpcraft.common.pool.NCPoolManager
 import org.apache.nlpcraft.common.version._
 import org.apache.nlpcraft.model.tools.cmdline.NCCliServerBeacon
 import org.apache.nlpcraft.server.company.NCCompanyManager
@@ -41,7 +43,6 @@ import org.apache.nlpcraft.server.nlp.enrichers.NCServerEnrichmentManager
 import org.apache.nlpcraft.server.nlp.preproc.NCPreProcessManager
 import org.apache.nlpcraft.server.nlp.spell.NCSpellCheckManager
 import org.apache.nlpcraft.server.nlp.wordnet.NCWordNetManager
-import org.apache.nlpcraft.server.pool.NCServerPoolManager
 import org.apache.nlpcraft.server.probe.NCProbeManager
 import org.apache.nlpcraft.server.proclog.NCProcessLogManager
 import org.apache.nlpcraft.server.query.NCQueryManager
@@ -93,7 +94,7 @@ object NCServer extends App with NCIgniteInstance with LazyLogging with NCOpenCe
         NCServerLifecycleManager.beforeStart()
 
         startScopedSpan("startManagers", "relVer" → ver.version, "relDate" → ver.date) { span ⇒
-            startedMgrs += NCServerPoolManager.start(span)
+            startedMgrs += NCPoolManager.start(span)
             startedMgrs += NCExternalConfigManager.start(span)
             startedMgrs += NCWordNetManager.start(span)
             startedMgrs += NCDictionaryManager.start(span)
@@ -163,6 +164,7 @@ object NCServer extends App with NCIgniteInstance with LazyLogging with NCOpenCe
      */
     private def setSysProps(): Unit = {
         System.setProperty("java.net.preferIPv4Stack", "true")
+        NCModule.setCurrent(NCModule.SERVER)
     }
 
     /**
diff --git a/nlpcraft/src/main/scala/org/apache/nlpcraft/server/nlp/core/NCNlpServerManager.scala b/nlpcraft/src/main/scala/org/apache/nlpcraft/server/nlp/core/NCNlpServerManager.scala
index 0e496c8..2cca087 100644
--- a/nlpcraft/src/main/scala/org/apache/nlpcraft/server/nlp/core/NCNlpServerManager.scala
+++ b/nlpcraft/src/main/scala/org/apache/nlpcraft/server/nlp/core/NCNlpServerManager.scala
@@ -20,15 +20,15 @@ package org.apache.nlpcraft.server.nlp.core
 import io.opencensus.trace.Span
 import org.apache.nlpcraft.common.config.NCConfigurable
 import org.apache.nlpcraft.common.nlp.core.NCNlpCoreManager
+import org.apache.nlpcraft.common.pool.NCPoolContext
 import org.apache.nlpcraft.common.{NCService, _}
-import org.apache.nlpcraft.server.pool.NCServerPoolContext
 
 import scala.collection.Seq
 
 /**
   * Server NLP manager.
   */
-object NCNlpServerManager extends NCService with NCServerPoolContext {
+object NCNlpServerManager extends NCService with NCPoolContext {
     @volatile private var parser: NCNlpParser = _
     @volatile private var ners: Map[String, NCNlpNerEnricher] = _
 
diff --git a/nlpcraft/src/main/scala/org/apache/nlpcraft/server/nlp/core/opennlp/NCOpenNlpNerEnricher.scala b/nlpcraft/src/main/scala/org/apache/nlpcraft/server/nlp/core/opennlp/NCOpenNlpNerEnricher.scala
index d2e923f..858cd1e 100644
--- a/nlpcraft/src/main/scala/org/apache/nlpcraft/server/nlp/core/opennlp/NCOpenNlpNerEnricher.scala
+++ b/nlpcraft/src/main/scala/org/apache/nlpcraft/server/nlp/core/opennlp/NCOpenNlpNerEnricher.scala
@@ -24,11 +24,11 @@ import org.apache.nlpcraft.common.nlp.core.opennlp.NCOpenNlpTokenizer
 import org.apache.nlpcraft.common.nlp.{NCNlpSentence, NCNlpSentenceNote}
 import org.apache.nlpcraft.common.extcfg.NCExternalConfigManager
 import org.apache.nlpcraft.common.extcfg.NCExternalConfigType.OPENNLP
+import org.apache.nlpcraft.common.pool.NCPoolContext
 import org.apache.nlpcraft.common.{NCService, U}
 import org.apache.nlpcraft.server.ignite.NCIgniteHelpers._
 import org.apache.nlpcraft.server.ignite.NCIgniteInstance
 import org.apache.nlpcraft.server.nlp.core.NCNlpNerEnricher
-import org.apache.nlpcraft.server.pool.NCServerPoolContext
 import resource.managed
 
 import scala.util.control.Exception.catching
@@ -36,7 +36,7 @@ import scala.util.control.Exception.catching
 /**
   * OpenNLP NER enricher.
   */
-object NCOpenNlpNerEnricher extends NCService with NCNlpNerEnricher with NCIgniteInstance with NCServerPoolContext {
+object NCOpenNlpNerEnricher extends NCService with NCNlpNerEnricher with NCIgniteInstance with NCPoolContext {
     @volatile private var nerFinders: Map[NameFinderME, String] = _
     @volatile private var cache: IgniteCache[String, Array[String]] = _
 
diff --git a/nlpcraft/src/main/scala/org/apache/nlpcraft/server/nlp/core/opennlp/NCOpenNlpParser.scala b/nlpcraft/src/main/scala/org/apache/nlpcraft/server/nlp/core/opennlp/NCOpenNlpParser.scala
index a219115..f4a425e 100644
--- a/nlpcraft/src/main/scala/org/apache/nlpcraft/server/nlp/core/opennlp/NCOpenNlpParser.scala
+++ b/nlpcraft/src/main/scala/org/apache/nlpcraft/server/nlp/core/opennlp/NCOpenNlpParser.scala
@@ -21,15 +21,15 @@ import io.opencensus.trace.Span
 import opennlp.tools.lemmatizer.DictionaryLemmatizer
 import opennlp.tools.postag.{POSModel, POSTagger, POSTaggerME}
 import org.apache.ignite.IgniteCache
-import org.apache.nlpcraft.common.nlp.core.NCNlpCoreManager
-import org.apache.nlpcraft.common.nlp.core.opennlp.NCOpenNlpTokenizer
 import org.apache.nlpcraft.common.extcfg.NCExternalConfigManager
 import org.apache.nlpcraft.common.extcfg.NCExternalConfigType.OPENNLP
+import org.apache.nlpcraft.common.nlp.core.NCNlpCoreManager
+import org.apache.nlpcraft.common.nlp.core.opennlp.NCOpenNlpTokenizer
+import org.apache.nlpcraft.common.pool.NCPoolContext
 import org.apache.nlpcraft.common.{NCService, U}
 import org.apache.nlpcraft.server.ignite.NCIgniteHelpers._
 import org.apache.nlpcraft.server.ignite.NCIgniteInstance
 import org.apache.nlpcraft.server.nlp.core.{NCNlpParser, NCNlpWord}
-import org.apache.nlpcraft.server.pool.NCServerPoolContext
 import resource.managed
 
 import scala.util.control.Exception.catching
@@ -37,7 +37,7 @@ import scala.util.control.Exception.catching
 /**
   * OpenNLP parser implementation.
   */
-object NCOpenNlpParser extends NCService with NCNlpParser with NCIgniteInstance with NCServerPoolContext{
+object NCOpenNlpParser extends NCService with NCNlpParser with NCIgniteInstance with NCPoolContext{
     @volatile private var tagger: POSTagger = _
     @volatile private var lemmatizer: DictionaryLemmatizer = _
     @volatile private var cache: IgniteCache[String, Array[String]] = _
diff --git a/nlpcraft/src/main/scala/org/apache/nlpcraft/server/nlp/enrichers/NCServerEnrichmentManager.scala b/nlpcraft/src/main/scala/org/apache/nlpcraft/server/nlp/enrichers/NCServerEnrichmentManager.scala
index f7b6cd8..0a6e76a 100644
--- a/nlpcraft/src/main/scala/org/apache/nlpcraft/server/nlp/enrichers/NCServerEnrichmentManager.scala
+++ b/nlpcraft/src/main/scala/org/apache/nlpcraft/server/nlp/enrichers/NCServerEnrichmentManager.scala
@@ -22,6 +22,7 @@ import org.apache.ignite.IgniteCache
 import org.apache.nlpcraft.common.ascii.NCAsciiTable
 import org.apache.nlpcraft.common.config.NCConfigurable
 import org.apache.nlpcraft.common.nlp.{NCNlpSentence, NCNlpSentenceNote, NCNlpSentenceToken}
+import org.apache.nlpcraft.common.pool.NCPoolContext
 import org.apache.nlpcraft.common.{NCService, _}
 import org.apache.nlpcraft.server.ignite.NCIgniteHelpers._
 import org.apache.nlpcraft.server.ignite.NCIgniteInstance
@@ -34,7 +35,6 @@ import org.apache.nlpcraft.server.nlp.enrichers.numeric.NCNumericEnricher
 import org.apache.nlpcraft.server.nlp.enrichers.quote.NCQuoteEnricher
 import org.apache.nlpcraft.server.nlp.enrichers.stopword.NCStopWordEnricher
 import org.apache.nlpcraft.server.nlp.preproc.NCPreProcessManager
-import org.apache.nlpcraft.server.pool.NCServerPoolContext
 
 import scala.collection.Seq
 import scala.util.control.Exception.catching
@@ -42,7 +42,7 @@ import scala.util.control.Exception.catching
 /**
   * Server enrichment pipeline manager.
   */
-object NCServerEnrichmentManager extends NCService with NCIgniteInstance with NCServerPoolContext {
+object NCServerEnrichmentManager extends NCService with NCIgniteInstance with NCPoolContext {
     private object Config extends NCConfigurable {
         def isBuiltInEnrichers: Boolean = getStringList("nlpcraft.server.tokenProviders").contains("nlpcraft")
     }
diff --git a/nlpcraft/src/main/scala/org/apache/nlpcraft/server/nlp/enrichers/date/NCDateEnricher.scala b/nlpcraft/src/main/scala/org/apache/nlpcraft/server/nlp/enrichers/date/NCDateEnricher.scala
index 7c9f32a..4800e49 100644
--- a/nlpcraft/src/main/scala/org/apache/nlpcraft/server/nlp/enrichers/date/NCDateEnricher.scala
+++ b/nlpcraft/src/main/scala/org/apache/nlpcraft/server/nlp/enrichers/date/NCDateEnricher.scala
@@ -17,28 +17,26 @@
 
 package org.apache.nlpcraft.server.nlp.enrichers.date
 
-import java.util
-import java.util.{Calendar ⇒ C}
 import io.opencensus.trace.Span
 import org.apache.nlpcraft.common.config.NCConfigurable
-import org.apache.nlpcraft.common.nlp.{NCNlpSentence ⇒ Sentence}
-import org.apache.nlpcraft.common.nlp.{NCNlpSentenceNote ⇒ Note}
-import org.apache.nlpcraft.common.nlp.{NCNlpSentenceToken ⇒ Token}
+import org.apache.nlpcraft.common.nlp.{NCNlpSentence ⇒ Sentence, NCNlpSentenceNote ⇒ Note, NCNlpSentenceToken ⇒ Token}
+import org.apache.nlpcraft.common.pool.NCPoolContext
 import org.apache.nlpcraft.common.{NCService, _}
 import org.apache.nlpcraft.server.nlp.enrichers.NCServerEnricher
 import org.apache.nlpcraft.server.nlp.enrichers.date.NCDateConstants._
 import org.apache.nlpcraft.server.nlp.enrichers.date.NCDateFormatType._
-import org.apache.nlpcraft.server.pool.NCServerPoolContext
 
+import java.util
+import java.util.{Calendar ⇒ C}
 import scala.collection.JavaConverters._
 import scala.collection.immutable.Iterable
 import scala.collection.mutable
-import scala.collection.mutable.{LinkedHashMap ⇒ LHM}
+import scala.collection.mutable.{LinkedHashMap => LHM}
 
 /**
   * Date enricher.
   */
-object NCDateEnricher extends NCServerEnricher with NCServerPoolContext {
+object NCDateEnricher extends NCServerEnricher with NCPoolContext {
     private object Config extends NCConfigurable {
         def style: NCDateFormatType = getObject("nlpcraft.server.datesFormatStyle", NCDateFormatType.withName)
     }
diff --git a/nlpcraft/src/main/scala/org/apache/nlpcraft/server/pool/NCServerPoolContext.scala b/nlpcraft/src/main/scala/org/apache/nlpcraft/server/pool/NCServerPoolContext.scala
deleted file mode 100644
index b0800c8..0000000
--- a/nlpcraft/src/main/scala/org/apache/nlpcraft/server/pool/NCServerPoolContext.scala
+++ /dev/null
@@ -1,27 +0,0 @@
-/*
- * 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.nlpcraft.server.pool
-
-/**
- * Server pool context trait.
- */
-trait NCServerPoolContext {
-    def getName: String = getClass.getName
-
-    implicit def getContext = NCServerPoolManager.getContext(getName)
-}
\ No newline at end of file
diff --git a/nlpcraft/src/main/scala/org/apache/nlpcraft/server/pool/NCServerPoolManager.scala b/nlpcraft/src/main/scala/org/apache/nlpcraft/server/pool/NCServerPoolManager.scala
deleted file mode 100644
index 2e0f0e9..0000000
--- a/nlpcraft/src/main/scala/org/apache/nlpcraft/server/pool/NCServerPoolManager.scala
+++ /dev/null
@@ -1,25 +0,0 @@
-/*
- * 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.nlpcraft.server.pool
-
-import org.apache.nlpcraft.common.pool.NCPoolManager
-
-/**
- * Server pool manager.
- */
-object NCServerPoolManager extends NCPoolManager("nlpcraft.server.pools")
\ No newline at end of file
diff --git a/nlpcraft/src/main/scala/org/apache/nlpcraft/server/probe/NCProbeManager.scala b/nlpcraft/src/main/scala/org/apache/nlpcraft/server/probe/NCProbeManager.scala
index c439148..e1902da 100644
--- a/nlpcraft/src/main/scala/org/apache/nlpcraft/server/probe/NCProbeManager.scala
+++ b/nlpcraft/src/main/scala/org/apache/nlpcraft/server/probe/NCProbeManager.scala
@@ -25,11 +25,11 @@ import org.apache.nlpcraft.common.config.NCConfigurable
 import org.apache.nlpcraft.common.crypto.NCCipher
 import org.apache.nlpcraft.common.nlp.NCNlpSentence
 import org.apache.nlpcraft.common.nlp.core.NCNlpCoreManager
+import org.apache.nlpcraft.common.pool.NCPoolContext
 import org.apache.nlpcraft.common.socket.NCSocket
 import org.apache.nlpcraft.common.version.NCVersion
 import org.apache.nlpcraft.common.{NCService, _}
 import org.apache.nlpcraft.probe.mgrs.NCProbeMessage
-import org.apache.nlpcraft.probe.mgrs.pool.NCProbePoolContext
 import org.apache.nlpcraft.server.company.NCCompanyManager
 import org.apache.nlpcraft.server.mdo.{NCCompanyMdo, NCProbeMdo, NCProbeModelMdo, NCUserMdo}
 import org.apache.nlpcraft.server.nlp.enrichers.NCServerEnrichmentManager
@@ -51,7 +51,7 @@ import scala.util.{Failure, Success}
 /**
   * Probe manager.
   */
-object NCProbeManager extends NCService with NCProbePoolContext {
+object NCProbeManager extends NCService with NCPoolContext {
     private final val GSON = new Gson()
     private final val TYPE_MODEL_INFO_RESP = new TypeToken[util.HashMap[String, AnyRef]]() {}.getType
 
diff --git a/nlpcraft/src/main/scala/org/apache/nlpcraft/server/query/NCQueryManager.scala b/nlpcraft/src/main/scala/org/apache/nlpcraft/server/query/NCQueryManager.scala
index 5faa00a..104f2bb 100644
--- a/nlpcraft/src/main/scala/org/apache/nlpcraft/server/query/NCQueryManager.scala
+++ b/nlpcraft/src/main/scala/org/apache/nlpcraft/server/query/NCQueryManager.scala
@@ -17,33 +17,33 @@
 
 package org.apache.nlpcraft.server.query
 
-import java.util.concurrent.ConcurrentHashMap
 import io.opencensus.trace.Span
 import org.apache.ignite.IgniteCache
 import org.apache.ignite.events.{CacheEvent, EventType}
 import org.apache.nlpcraft.common.ascii.NCAsciiTable
+import org.apache.nlpcraft.common.pool.NCPoolContext
 import org.apache.nlpcraft.common.{NCService, _}
-import org.apache.nlpcraft.server.opencensus._
 import org.apache.nlpcraft.server.apicodes.NCApiStatusCode._
 import org.apache.nlpcraft.server.company.NCCompanyManager
 import org.apache.nlpcraft.server.ignite.NCIgniteHelpers._
 import org.apache.nlpcraft.server.ignite.NCIgniteInstance
 import org.apache.nlpcraft.server.mdo.NCQueryStateMdo
 import org.apache.nlpcraft.server.nlp.enrichers.NCServerEnrichmentManager
-import org.apache.nlpcraft.server.pool.NCServerPoolContext
+import org.apache.nlpcraft.server.opencensus._
 import org.apache.nlpcraft.server.probe.NCProbeManager
 import org.apache.nlpcraft.server.proclog.NCProcessLogManager
 import org.apache.nlpcraft.server.tx.NCTxManager
 import org.apache.nlpcraft.server.user.NCUserManager
 
+import java.util.concurrent.ConcurrentHashMap
 import scala.concurrent.{Future, Promise}
-import scala.util.{Failure, Success}
 import scala.util.control.Exception._
+import scala.util.{Failure, Success}
 
 /**
   * Query state machine.
   */
-object NCQueryManager extends NCService with NCIgniteInstance with NCOpenCensusServerStats with NCServerPoolContext {
+object NCQueryManager extends NCService with NCIgniteInstance with NCOpenCensusServerStats with NCPoolContext {
     @volatile private var cache: IgniteCache[String/*Server request ID*/, NCQueryStateMdo] = _
     
     // Promises cannot be used in cache.
diff --git a/nlpcraft/src/main/scala/org/apache/nlpcraft/server/rest/NCBasicRestApi.scala b/nlpcraft/src/main/scala/org/apache/nlpcraft/server/rest/NCBasicRestApi.scala
index 1c78df6..d1aa08c 100644
--- a/nlpcraft/src/main/scala/org/apache/nlpcraft/server/rest/NCBasicRestApi.scala
+++ b/nlpcraft/src/main/scala/org/apache/nlpcraft/server/rest/NCBasicRestApi.scala
@@ -30,13 +30,13 @@ import io.opencensus.stats.Measure
 import io.opencensus.trace.{Span, Status}
 import org.apache.commons.validator.routines.UrlValidator
 import org.apache.nlpcraft.common.opencensus.NCOpenCensusTrace
-import org.apache.nlpcraft.common.{NCE, NCException, U}
+import org.apache.nlpcraft.common.pool.NCPoolContext
+import org.apache.nlpcraft.common.{NCE, U}
 import org.apache.nlpcraft.server.apicodes.NCApiStatusCode.{API_OK, _}
 import org.apache.nlpcraft.server.company.NCCompanyManager
 import org.apache.nlpcraft.server.feedback.NCFeedbackManager
 import org.apache.nlpcraft.server.mdo.{NCQueryStateMdo, NCUserMdo}
 import org.apache.nlpcraft.server.opencensus.NCOpenCensusServerStats
-import org.apache.nlpcraft.server.pool.NCServerPoolContext
 import org.apache.nlpcraft.server.probe.NCProbeManager
 import org.apache.nlpcraft.server.query.NCQueryManager
 import org.apache.nlpcraft.server.sugsyn.NCSuggestSynonymManager
@@ -50,7 +50,7 @@ import scala.concurrent.Future
 /**
   * REST API default implementation.
   */
-class NCBasicRestApi extends NCRestApi with LazyLogging with NCOpenCensusTrace with NCOpenCensusServerStats with NCServerPoolContext {
+class NCBasicRestApi extends NCRestApi with LazyLogging with NCOpenCensusTrace with NCOpenCensusServerStats with NCPoolContext {
     protected final val GSON = new Gson()
     protected final val URL_VALIDATOR = new UrlValidator(Array("http", "https"), UrlValidator.ALLOW_LOCAL_URLS)
 
@@ -1807,7 +1807,7 @@ class NCBasicRestApi extends NCRestApi with LazyLogging with NCOpenCensusTrace w
             completeError(StatusCodes.Forbidden, code, errMsg)
 
         // General exception.
-        case e: NCException ⇒
+        case e: NCE ⇒
             val errMsg = "Unexpected system error."
             val code = "NC_ERROR"
 
diff --git a/nlpcraft/src/main/scala/org/apache/nlpcraft/server/sugsyn/NCSuggestSynonymManager.scala b/nlpcraft/src/main/scala/org/apache/nlpcraft/server/sugsyn/NCSuggestSynonymManager.scala
index 3a1c22e..d4de258 100644
--- a/nlpcraft/src/main/scala/org/apache/nlpcraft/server/sugsyn/NCSuggestSynonymManager.scala
+++ b/nlpcraft/src/main/scala/org/apache/nlpcraft/server/sugsyn/NCSuggestSynonymManager.scala
@@ -39,12 +39,12 @@ import org.apache.http.client.methods.HttpPost
 import org.apache.http.entity.StringEntity
 import org.apache.http.impl.client.HttpClients
 import org.apache.nlpcraft.common.makro.NCMacroParser
-import org.apache.nlpcraft.server.pool.NCServerPoolContext
+import org.apache.nlpcraft.common.pool.NCPoolContext
 
 /**
  * Synonym suggestion manager.
  */
-object NCSuggestSynonymManager extends NCService with NCServerPoolContext {
+object NCSuggestSynonymManager extends NCService with NCPoolContext {
     // For context word server requests.
     private final val MAX_LIMIT: Int = 10000
     private final val BATCH_SIZE = 20