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

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


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

commit 63a3a23dcf6ee48981f767fff94c566efd7c51d1
Author: unknown <[email protected]>
AuthorDate: Wed May 26 16:02:02 2021 -0700

    WIP.
---
 .../org/apache/nlpcraft/common/NCService.scala     |   8 +-
 .../nlpcraft/common/ascii/NCAsciiTable.scala       |  25 ++++-
 .../common/extcfg/NCExternalConfigManager.scala    |  18 ++--
 .../nlp/core/opennlp/NCOpenNlpTokenizer.scala      |   5 +-
 .../common/opencensus/NCOpenCensusTrace.scala      |   2 +-
 .../org/apache/nlpcraft/common/util/NCUtils.scala  | 101 ++++++++++++---------
 .../model/intent/compiler/NCIdlCompilerBase.scala  |   2 +-
 .../nlpcraft/model/tools/cmdline/NCCli.scala       |  79 ++++++++--------
 .../model/tools/cmdline/NCCliAnsiBleach.scala      |   6 +-
 .../sqlgen/impl/NCSqlModelGeneratorImpl.scala      |  30 +++---
 .../test/impl/NCTestAutoModelValidatorImpl.scala   |   4 +-
 .../org/apache/nlpcraft/probe/NCProbeBoot.scala    |  15 ++-
 .../mgrs/conversation/NCConversationManager.scala  |   4 +-
 .../probe/mgrs/deploy/NCDeployManager.scala        |   4 +-
 .../mgrs/dialogflow/NCDialogFlowManager.scala      |   4 +-
 .../probe/mgrs/nlp/NCProbeEnrichmentManager.scala  |  12 +--
 .../org/apache/nlpcraft/server/NCServer.scala      |  13 +--
 .../nlp/core/opennlp/NCOpenNlpNerEnricher.scala    |   4 +-
 .../server/nlp/core/opennlp/NCOpenNlpParser.scala  |   6 +-
 .../nlpcraft/server/rest/NCBasicRestApi.scala      |   4 +-
 .../org/apache/nlpcraft/server/sql/NCSql.scala     |  11 +--
 .../server/sugsyn/NCSuggestSynonymManager.scala    |   6 +-
 .../nlpcraft/common/ascii/NCAsciiTableSpec.scala   |   4 +-
 .../nlpcraft/common/crypto/NCCipherSpec.scala      |   4 +-
 .../nlpcraft/common/makro/NCMacroParserSpec.scala  |   4 +-
 .../compiler/functions/NCIdlFunctionsDate.scala    |   2 +-
 .../mgrs/nlp/enrichers/NCEnrichersTestBeans.scala  |  10 +-
 27 files changed, 204 insertions(+), 183 deletions(-)

diff --git a/nlpcraft/src/main/scala/org/apache/nlpcraft/common/NCService.scala 
b/nlpcraft/src/main/scala/org/apache/nlpcraft/common/NCService.scala
index 15d98a4..6582256 100644
--- a/nlpcraft/src/main/scala/org/apache/nlpcraft/common/NCService.scala
+++ b/nlpcraft/src/main/scala/org/apache/nlpcraft/common/NCService.scala
@@ -76,7 +76,7 @@ abstract class NCService extends LazyLogging with 
NCOpenCensusTrace {
      */
     protected def ackStarting(): NCService = {
         starting = true
-        timeStampMs = currentTime
+        timeStampMs = U.now()
 
         logger.trace(s"$name staring...")
 
@@ -94,7 +94,7 @@ abstract class NCService extends LazyLogging with 
NCOpenCensusTrace {
      */
     protected def ackStopping(): NCService = {
         stopping = true
-        timeStampMs = currentTime
+        timeStampMs = U.now()
 
         logger.trace(s"$name stopping...")
 
@@ -117,7 +117,7 @@ abstract class NCService extends LazyLogging with 
NCOpenCensusTrace {
 
         addTags(
             currentSpan(),
-            "startDurationMs" -> (currentTime - timeStampMs),
+            "startDurationMs" -> (U.now() - timeStampMs),
             "state" -> "started"
         )
 
@@ -140,7 +140,7 @@ abstract class NCService extends LazyLogging with 
NCOpenCensusTrace {
         started = false
 
         addTags(currentSpan(),
-            "stopDurationMs" -> (currentTime - timeStampMs),
+            "stopDurationMs" -> (U.now() - timeStampMs),
             "state" -> "stopped"
         )
 
diff --git 
a/nlpcraft/src/main/scala/org/apache/nlpcraft/common/ascii/NCAsciiTable.scala 
b/nlpcraft/src/main/scala/org/apache/nlpcraft/common/ascii/NCAsciiTable.scala
index 4ee4430..0748f64 100644
--- 
a/nlpcraft/src/main/scala/org/apache/nlpcraft/common/ascii/NCAsciiTable.scala
+++ 
b/nlpcraft/src/main/scala/org/apache/nlpcraft/common/ascii/NCAsciiTable.scala
@@ -18,15 +18,14 @@
 package org.apache.nlpcraft.common.ascii
 
 import java.io.{IOException, PrintStream}
-
 import com.typesafe.scalalogging.Logger
 import org.apache.nlpcraft.common._
 import org.apache.nlpcraft.common.ascii.NCAsciiTable._
-import resource._
 import org.apache.nlpcraft.common.ansi.NCAnsi._
 
-import scala.collection.JavaConverters._
 import scala.collection.mutable
+import scala.jdk.CollectionConverters.CollectionHasAsScala
+import scala.util.Using
 
 /**
  * `ASCII`-based table with minimal styling support.
@@ -204,6 +203,14 @@ class NCAsciiTable {
     }
 
     /**
+     * Adds row (one or more row cells).
+     *
+     * @param cells Row cells. For multi-line cells - use `Seq(...)`.
+     */
+    def +=(cells: mutable.Seq[Any]): NCAsciiTable =
+        +=(cells.toSeq: _*)
+
+    /**
      * Adds row (one or more row cells) with a given style.
      *
      * @param cells Row cells tuples (style, text). For multi-line cells - use 
`Seq(...)`.
@@ -253,6 +260,14 @@ class NCAsciiTable {
     }
 
     /**
+     * Adds header (one or more header cells).
+     *
+     * @param cells Header cells. For multi-line cells - use `Seq(...)`.
+     */
+    def #=(cells: mutable.Seq[Any]): NCAsciiTable =
+        #=(cells.toSeq: _*)
+
+    /**
      * Adds styled header (one or more header cells).
      *
      * @param cells Header cells tuples (style, text). For multi-line cells - 
use `Seq(...)`.
@@ -672,11 +687,11 @@ class NCAsciiTable {
 
     private def renderPrintStream(f: => PrintStream, file: String): Unit =
         try
-            managed(f) acquireAndGet { ps =>
+            Using.resource(f) { ps =>
                 ps.print(mkString)
             }
         catch {
-            case e: IOException => throw new NCE(s"Error writing file: $file", 
e)
+            case e: IOException => throw new NCE(s"Error outputting table into 
file: $file", e)
         }
 }
 
diff --git 
a/nlpcraft/src/main/scala/org/apache/nlpcraft/common/extcfg/NCExternalConfigManager.scala
 
b/nlpcraft/src/main/scala/org/apache/nlpcraft/common/extcfg/NCExternalConfigManager.scala
index 47aad30..30d1eac 100644
--- 
a/nlpcraft/src/main/scala/org/apache/nlpcraft/common/extcfg/NCExternalConfigManager.scala
+++ 
b/nlpcraft/src/main/scala/org/apache/nlpcraft/common/extcfg/NCExternalConfigManager.scala
@@ -26,15 +26,15 @@ import org.apache.nlpcraft.common.module.NCModule
 import org.apache.nlpcraft.common.module.NCModule.{NCModule, PROBE, SERVER}
 import org.apache.nlpcraft.common.pool.NCThreadPoolManager
 import org.apache.nlpcraft.common.{NCE, NCService, U}
-import resource.managed
 
 import java.io._
 import java.net.URL
 import java.nio.file.Files
 import java.util.concurrent.ConcurrentHashMap
-import scala.collection.JavaConverters._
 import scala.concurrent.ExecutionContext
 import scala.io.Source
+import scala.jdk.CollectionConverters.ConcurrentMapHasAsScala
+import scala.util.Using
 
 /**
   * External configuration manager.
@@ -117,7 +117,7 @@ object NCExternalConfigManager extends NCService {
             val url = s"${Config.url}/$MD5_FILE"
 
             try
-                managed(Source.fromURL(url)) acquireAndGet { src =>
+                Using.resource(Source.fromURL(url)) { src =>
                     src.getLines().map(_.trim()).filter(s => s.nonEmpty && 
!s.startsWith("#")).map(f = p => {
                         def splitPair(s: String, sep: String): (String, 
String) = {
                             val seq = s.split(sep).map(_.strip)
@@ -150,7 +150,7 @@ object NCExternalConfigManager extends NCService {
 
             val v2 =
                 try
-                    managed(Files.newInputStream(f.toPath)) acquireAndGet { in 
=> DigestUtils.md5Hex(in) }
+                    Using.resource(Files.newInputStream(f.toPath)) { in => 
DigestUtils.md5Hex(in) }
                 catch {
                     case e: IOException => throw new NCE(s"Failed to get MD5 
for: '${f.getAbsolutePath}'", e)
                 }
@@ -256,7 +256,7 @@ object NCExternalConfigManager extends NCService {
     @throws[NCE]
     def getDirContent(
         typ: NCExternalConfigType, resDir: String, resFilter: String => 
Boolean, parent: Span = null
-    ): Stream[NCExternalConfigHolder] =
+    ): LazyList[NCExternalConfigHolder] =
         startScopedSpan("getDirContent", parent, "resDir" -> resDir) { _ =>
             val resDirPath = getResourcePath(typ, resDir)
 
@@ -269,9 +269,9 @@ object NCExternalConfigManager extends NCService {
                 d.listFiles(new FileFilter { override def accept(f: File): 
Boolean = f.isFile && resFilter(f.getName) })
 
             if (files != null)
-                files.toStream.map(f => NCExternalConfigHolder(typ, f.getName, 
mkString(U.readFile(f))))
+                files.to(LazyList).map(f => NCExternalConfigHolder(typ, 
f.getName, mkString(U.readFile(f))))
             else
-                Stream.empty
+                LazyList.empty
         }
 
     /**
@@ -307,8 +307,8 @@ object NCExternalConfigManager extends NCService {
         val url = s"${Config.url}/${type2String(d.typ)}/${d.file.getName}"
 
         try
-            managed(new BufferedInputStream(new URL(url).openStream())) 
acquireAndGet { src =>
-                managed(new FileOutputStream(d.file)) acquireAndGet { dest =>
+            Using.resource(new BufferedInputStream(new URL(url).openStream())) 
{ src =>
+                Using.resource(new FileOutputStream(d.file)) { dest =>
                     IOUtils.copy(src, dest)
                 }
 
diff --git 
a/nlpcraft/src/main/scala/org/apache/nlpcraft/common/nlp/core/opennlp/NCOpenNlpTokenizer.scala
 
b/nlpcraft/src/main/scala/org/apache/nlpcraft/common/nlp/core/opennlp/NCOpenNlpTokenizer.scala
index e072ef5..e124bd2 100644
--- 
a/nlpcraft/src/main/scala/org/apache/nlpcraft/common/nlp/core/opennlp/NCOpenNlpTokenizer.scala
+++ 
b/nlpcraft/src/main/scala/org/apache/nlpcraft/common/nlp/core/opennlp/NCOpenNlpTokenizer.scala
@@ -22,9 +22,10 @@ import opennlp.tools.tokenize.{Tokenizer, TokenizerME, 
TokenizerModel}
 import org.apache.nlpcraft.common.NCService
 import org.apache.nlpcraft.common.nlp.core.{NCNlpCoreToken, NCNlpTokenizer}
 import org.apache.nlpcraft.common.extcfg.NCExternalConfigManager
-import resource.managed
 import org.apache.nlpcraft.common.extcfg.NCExternalConfigType.OPENNLP
+
 import scala.language.{implicitConversions, postfixOps}
+import scala.util.Using
 
 /**
   * OpenNLP tokenizer implementation.
@@ -42,7 +43,7 @@ object NCOpenNlpTokenizer extends NCNlpTokenizer {
     override def start(parent: Span): NCService = startScopedSpan("start", 
parent) { _ =>
         ackStarting()
 
-        tokenizer = managed(NCExternalConfigManager.getStream(OPENNLP, 
RESOURCE)) acquireAndGet { in =>
+        tokenizer = Using.resource(NCExternalConfigManager.getStream(OPENNLP, 
RESOURCE)) { in =>
             new TokenizerME(new TokenizerModel(in))
         }
 
diff --git 
a/nlpcraft/src/main/scala/org/apache/nlpcraft/common/opencensus/NCOpenCensusTrace.scala
 
b/nlpcraft/src/main/scala/org/apache/nlpcraft/common/opencensus/NCOpenCensusTrace.scala
index a757dce..13d768a 100644
--- 
a/nlpcraft/src/main/scala/org/apache/nlpcraft/common/opencensus/NCOpenCensusTrace.scala
+++ 
b/nlpcraft/src/main/scala/org/apache/nlpcraft/common/opencensus/NCOpenCensusTrace.scala
@@ -52,7 +52,7 @@ trait NCOpenCensusTrace {
 
         // Mandatory tags.
         attrs.put("thread", 
AttributeValue.stringAttributeValue(Thread.currentThread().getName))
-        attrs.put("timestamp", 
AttributeValue.longAttributeValue(System.currentTimeMillis()))
+        attrs.put("timestamp", AttributeValue.longAttributeValue(U.now()))
     
         for ((k, v) <- tags if v != null) v match {
             case s: String => attrs.put(k, 
AttributeValue.stringAttributeValue(s))
diff --git 
a/nlpcraft/src/main/scala/org/apache/nlpcraft/common/util/NCUtils.scala 
b/nlpcraft/src/main/scala/org/apache/nlpcraft/common/util/NCUtils.scala
index 956cbff..13bf11b 100644
--- a/nlpcraft/src/main/scala/org/apache/nlpcraft/common/util/NCUtils.scala
+++ b/nlpcraft/src/main/scala/org/apache/nlpcraft/common/util/NCUtils.scala
@@ -32,8 +32,8 @@ import java.util.concurrent.{ExecutorService, 
LinkedBlockingQueue, RejectedExecu
 import java.util.jar.JarFile
 import java.util.regex.Pattern
 import java.util.stream.Collectors
-import java.util.zip.{ZipInputStream, GZIPInputStream => GIS, GZIPOutputStream 
=> GOS}
-import java.util.{Locale, Properties, Random, Timer, TimerTask, Calendar => C}
+import java.util.zip.{ZipInputStream, GZIPInputStream ⇒ GIS, GZIPOutputStream 
⇒ GOS}
+import java.util.{Locale, Properties, Random, Timer, TimerTask, Calendar ⇒ C}
 import com.fasterxml.jackson.annotation.JsonInclude.Include
 import com.fasterxml.jackson.core.`type`.TypeReference
 import com.fasterxml.jackson.databind.{DeserializationFeature, ObjectMapper}
@@ -51,17 +51,16 @@ import org.apache.nlpcraft.common.blowfish.NCBlowfishHasher
 import org.apache.nlpcraft.common.version.NCVersion
 import org.jsoup.Jsoup
 import org.jsoup.nodes.Document
-import resource._
 
 import java.net.http.HttpClient
 import java.net.http.HttpRequest
 import java.net.http.HttpResponse
 import scala.annotation.tailrec
-import scala.collection.JavaConverters._
 import scala.collection.mutable
 import scala.concurrent.duration._
 import scala.concurrent.{Await, ExecutionContext, Future}
 import scala.io.{BufferedSource, Source}
+import scala.jdk.CollectionConverters.{CollectionHasAsScala, MapHasAsScala}
 import scala.language.{implicitConversions, postfixOps}
 import scala.reflect.{ClassTag, classTag}
 import scala.reflect.runtime.universe._
@@ -150,6 +149,11 @@ object NCUtils extends LazyLogging {
     def nowUtcTs(): Timestamp = new Timestamp(Instant.now().toEpochMilli)
 
     /**
+     * Shortcut.
+     */
+    def now(): Long = System.currentTimeMillis()
+
+    /**
      * Strips ANSI escape sequences from the given string.
      *
      * @param s
@@ -405,7 +409,7 @@ object NCUtils extends LazyLogging {
     @throws[NCE]
     def readFile(f: File, enc: String = "UTF-8", log: Logger = logger): 
List[String] =
         try
-            managed(Source.fromFile(f, enc)) acquireAndGet { src =>
+            Using.resource(Source.fromFile(f, enc)) { src =>
                 getAndLog(src.getLines().map(p => p).toList, f, log)
             }
         catch {
@@ -434,7 +438,7 @@ object NCUtils extends LazyLogging {
     @throws[NCE]
     def mapStream[T](in: InputStream, enc: String, log: Logger = logger, 
mapper: Iterator[String] => T): T =
         try {
-            managed(Source.fromInputStream(in, enc)) acquireAndGet { src =>
+            Using.resource(Source.fromInputStream(in, enc)) { src =>
                 mapper(src.getLines())
             }
         }
@@ -453,7 +457,7 @@ object NCUtils extends LazyLogging {
     @throws[NCE]
     def readTextFile(f: File, enc: String, log: Logger = logger): List[String] 
=
         try
-            managed(Source.fromFile(f, enc)) acquireAndGet { src =>
+            Using.resource(Source.fromFile(f, enc)) { src =>
                 getAndLog(
                     readLcTrimFilter(src),
                     f,
@@ -465,6 +469,16 @@ object NCUtils extends LazyLogging {
         }
 
     /**
+     *
+     * @param path
+     * @return
+     */
+    def readObject(path: File): AnyRef =
+        Using.resource(new ObjectInputStream(new FileInputStream(path))) {
+            _.readObject()
+        }
+
+    /**
       * Reads lines from given file converting to lower case, trimming, and 
filtering
       * out empty lines and comments (starting with '#').
       *
@@ -475,7 +489,7 @@ object NCUtils extends LazyLogging {
     @throws[NCE]
     def readTextGzipFile(f: File, enc: String, log: Logger = logger): 
List[String] =
         try
-            managed(Source.fromInputStream(new GIS(new FileInputStream(f)), 
enc)) acquireAndGet { src =>
+            Using.resource(Source.fromInputStream(new GIS(new 
FileInputStream(f)), enc)) { src =>
                 getAndLog(
                     readLcTrimFilter(src),
                     f,
@@ -497,7 +511,7 @@ object NCUtils extends LazyLogging {
     @throws[NCE]
     def readTextStream(in: InputStream, enc: String, log: Logger = logger): 
List[String] =
         try
-            managed(Source.fromInputStream(in, enc)) acquireAndGet { src =>
+            Using.resource(Source.fromInputStream(in, enc)) { src =>
                 readLcTrimFilter(src)
             }
         catch {
@@ -515,7 +529,7 @@ object NCUtils extends LazyLogging {
     @throws[NCE]
     def readTextGzipResource(res: String, enc: String, log: Logger = logger): 
List[String] =
         try
-            managed(Source.fromInputStream(new GIS(getStream(res)), enc)) 
acquireAndGet { src =>
+            Using.resource(Source.fromInputStream(new GIS(getStream(res)), 
enc)) { src =>
                 readLcTrimFilter(src)
             }
         catch {
@@ -627,12 +641,12 @@ object NCUtils extends LazyLogging {
         timer.schedule(
             new TimerTask {
                 override def run(): Unit = {
-                    val now = System.currentTimeMillis()
+                    val now = U.now()
 
                     try {
                         body(())
 
-                        logger.debug(s"Timer task executed [name=$name, 
execution-time=${System.currentTimeMillis() - now}]")
+                        logger.debug(s"Timer task executed [name=$name, 
execution-time=${U.now() - now}]")
                     }
                     catch {
                         case e: Throwable => prettyError(logger, s"Error 
executing daily '$name' timer:", e)
@@ -658,7 +672,7 @@ object NCUtils extends LazyLogging {
     @throws[NCE]
     def readGzipFile(f: File, enc: String, log: Logger = logger): List[String] 
=
         try
-            managed(Source.fromInputStream(new GIS(new FileInputStream(f)), 
enc)) acquireAndGet { src =>
+            Using.resource(Source.fromInputStream(new GIS(new 
FileInputStream(f)), enc)) { src =>
                 getAndLog(src.getLines().map(p => p).toList, f, log)
             }
         catch {
@@ -675,7 +689,7 @@ object NCUtils extends LazyLogging {
     @throws[NCE]
     def readGzipResource(in: InputStream, enc: String, log: Logger = logger): 
List[String] =
         try
-            managed(Source.fromInputStream(new GIS(in), enc)) acquireAndGet { 
src =>
+            Using.resource(Source.fromInputStream(new GIS(in), enc)) { src =>
                 src.getLines().map(p => p).toList
             }
         catch {
@@ -702,7 +716,7 @@ object NCUtils extends LazyLogging {
         try {
             val arr = new Array[Byte](f.length().toInt)
 
-            managed(new FileInputStream(f)) acquireAndGet { in =>
+            Using.resource(new FileInputStream(f)) { in =>
                 in.read(arr)
             }
 
@@ -739,7 +753,7 @@ object NCUtils extends LazyLogging {
 
         // Do not user BOS here - it makes files corrupted.
         try
-            managed(new GOS(new FileOutputStream(gz))) acquireAndGet { stream 
=>
+            Using.resource(new GOS(new FileOutputStream(gz))) { stream =>
                 stream.write(readFileBytes(f))
 
                 stream.flush()
@@ -772,10 +786,10 @@ object NCUtils extends LazyLogging {
       * @param sort Whether to sort output or not.
       */
     @throws[IOException]
-    def mkTextFile(path: String, lines: Traversable[Any], sort: Boolean = 
true) {
+    def mkTextFile(path: String, lines: Iterable[Any], sort: Boolean = true) {
         val file = new File(path)
 
-        managed(new PrintStream(file)) acquireAndGet {
+        Using.resource(new PrintStream(file)) {
             ps =>
                 import java.util._
 
@@ -853,8 +867,8 @@ object NCUtils extends LazyLogging {
     @throws[NCE]
     def serialize(obj: Any): Array[Byte] = {
         try {
-            managed(new ByteArrayOutputStream()) acquireAndGet { baos =>
-                manageOutput(baos) acquireAndGet { out =>
+            Using.resource(new ByteArrayOutputStream()) { baos =>
+                Using.resource(mkOutStream(baos)) { out =>
                     out.writeObject(obj)
                 }
 
@@ -874,7 +888,7 @@ object NCUtils extends LazyLogging {
     @throws[NCE]
     def serializePath(path: String, obj: Any): Unit =
         try {
-            manageOutput(new FileOutputStream(path)) acquireAndGet { out =>
+            Using.resource(mkOutStream(new FileOutputStream(path))) { out =>
                 out.writeObject(obj)
             }
 
@@ -900,7 +914,7 @@ object NCUtils extends LazyLogging {
     @throws[NCE]
     def deserializePath[T](path: String, log: Logger = logger): T =
         try {
-            val res = manageInput(new FileInputStream(path)) acquireAndGet { 
in =>
+            val res = Using.resource(mkInStream(new FileInputStream(path))) { 
in =>
                 in.readObject().asInstanceOf[T]
             }
 
@@ -920,7 +934,7 @@ object NCUtils extends LazyLogging {
     @throws[NCE]
     def deserialize[T](arr: Array[Byte]): T =
         try
-            manageInput(new ByteArrayInputStream(arr)) acquireAndGet { in =>
+            Using.resource(mkInStream(new ByteArrayInputStream(arr))) { in =>
                 in.readObject().asInstanceOf[T]
             }
         catch {
@@ -940,15 +954,15 @@ object NCUtils extends LazyLogging {
      *
      * @param in
      */
-    private def manageInput(in: InputStream): 
ManagedResource[ObjectInputStream] =
-        managed(new ObjectInputStream(new BufferedInputStream(in)))
+    private def mkInStream(in: InputStream): ObjectInputStream =
+        new ObjectInputStream(new BufferedInputStream(in))
 
     /**
      *
      * @param out
      */
-    private def manageOutput(out: OutputStream): 
ManagedResource[ObjectOutputStream] =
-        managed(new ObjectOutputStream(new BufferedOutputStream(out)))
+    private def mkOutStream(out: OutputStream): ObjectOutputStream =
+        new ObjectOutputStream(new BufferedOutputStream(out))
 
     /**
       * Wrap string value.
@@ -1140,7 +1154,7 @@ object NCUtils extends LazyLogging {
 
         (0 until n).foreach(_ => dest += src.remove(RND.nextInt(src.size)))
 
-        dest
+        dest.toSeq
     }
 
     /**
@@ -1166,7 +1180,7 @@ object NCUtils extends LazyLogging {
         val arr = new ByteArrayOutputStream(1024)
 
         try {
-            managed(new GOS(arr)) acquireAndGet { zip =>
+            Using.resource(new GOS(arr)) { zip =>
                 zip.write(rawStr.getBytes)
             }
 
@@ -1262,7 +1276,7 @@ object NCUtils extends LazyLogging {
     /**
       * Generates (a relatively) globally unique ID good for a short-term 
usage.
       */
-    def genGuid(): String = idGen.encrypt(System.currentTimeMillis(), 
System.nanoTime()).
+    def genGuid(): String = idGen.encrypt(U.now(), System.nanoTime()).
         toUpperCase.grouped(4).filter(_.length() == 4).mkString("-")
 
     /**
@@ -1403,7 +1417,7 @@ object NCUtils extends LazyLogging {
                 HttpClient.newHttpClient.send(
                     HttpRequest.newBuilder()
                         .uri(
-                            
URI.create("http://www.google-analytics.com/collect";)
+                            
URI.create("http://www.google-analytics.com/collect";) // HTTPs?
                         )
                         .POST(
                             HttpRequest.BodyPublishers.ofString(
@@ -1770,7 +1784,7 @@ object NCUtils extends LazyLogging {
 
         mkDir(new File(outDir))
 
-        managed(new ZipInputStream(new BufferedInputStream(new 
FileInputStream(zipFile)))) acquireAndGet { in =>
+        Using.resource(new ZipInputStream(new BufferedInputStream(new 
FileInputStream(zipFile)))) { in =>
             var entry = in.getNextEntry
 
             while (entry != null) {
@@ -1783,7 +1797,7 @@ object NCUtils extends LazyLogging {
                         if (!f.createNewFile())
                             throw new NCE(s"File cannot be created: 
${f.getAbsolutePath}")
 
-                        managed(new BufferedOutputStream(new 
FileOutputStream(f))) acquireAndGet { out =>
+                        Using.resource(new BufferedOutputStream(new 
FileOutputStream(f))) { out =>
                             IOUtils.copy(in, out)
                         }
                     }
@@ -1843,8 +1857,8 @@ object NCUtils extends LazyLogging {
       * @param t Error.
       */
     def toString(t: Throwable): String =
-        managed(new ByteArrayOutputStream()) acquireAndGet { out =>
-            managed(new PrintStream(out)) acquireAndGet { ps =>
+        Using.resource(new ByteArrayOutputStream()) { out =>
+            Using.resource(new PrintStream(out)) { ps =>
                 t.printStackTrace(ps)
 
                 new String(out.toByteArray, "UTF-8")
@@ -1891,11 +1905,13 @@ object NCUtils extends LazyLogging {
 
         url.getProtocol match {
             case "file" =>
-                managed(new InputStreamReader(getStream(resDir))) 
acquireAndGet { reader =>
-                    managed(new BufferedReader(reader)) acquireAndGet { 
bReader =>
-                        
bReader.lines().collect(Collectors.toList[String]).asScala.map(p => 
s"$resDir/$p")
+                Using.resource(new InputStreamReader(getStream(resDir))) { 
reader =>
+                    Using.resource(new BufferedReader(reader)) { bufReader =>
+                        
bufReader.lines().collect(Collectors.toList[String]).asScala.map(p => 
s"$resDir/$p")
                     }
+                    .toSeq
                 }
+
             case "jar" =>
                 val jar = new 
JarFile(URLDecoder.decode(url.getPath.substring(5, url.getPath.indexOf("!")), 
"UTF-8"))
                 val entries = jar.entries
@@ -1909,7 +1925,8 @@ object NCUtils extends LazyLogging {
                         res += name
                 }
 
-                res
+                res.toSeq
+
             case _ => throw new NCE(s"Cannot list files for: $resDir")
         }
     }
@@ -1919,9 +1936,9 @@ object NCUtils extends LazyLogging {
       */
     @throws[IOException]
     def getExternalIp: String =
-        managed(new URL("http://checkip.amazonaws.com";).openStream()) 
acquireAndGet { is =>
-            managed(new InputStreamReader(is)) acquireAndGet { reader =>
-                managed(new BufferedReader(reader)) acquireAndGet { bufReader 
=>
+        Using.resource(new URL("http://checkip.amazonaws.com";).openStream()) { 
is =>
+            Using.resource(new InputStreamReader(is)) { reader =>
+                Using.resource(new BufferedReader(reader)) { bufReader =>
                     bufReader.readLine()
                 }
             }
diff --git 
a/nlpcraft/src/main/scala/org/apache/nlpcraft/model/intent/compiler/NCIdlCompilerBase.scala
 
b/nlpcraft/src/main/scala/org/apache/nlpcraft/model/intent/compiler/NCIdlCompilerBase.scala
index c71ee62..9821815 100644
--- 
a/nlpcraft/src/main/scala/org/apache/nlpcraft/model/intent/compiler/NCIdlCompilerBase.scala
+++ 
b/nlpcraft/src/main/scala/org/apache/nlpcraft/model/intent/compiler/NCIdlCompilerBase.scala
@@ -1265,7 +1265,7 @@ trait NCIdlCompilerBase {
             case "week_of_month" => z0(() => 
Z(Calendar.getInstance().get(Calendar.WEEK_OF_MONTH), 0))
             case "week_of_year" => z0(() => 
Z(Calendar.getInstance().get(Calendar.WEEK_OF_YEAR), 0))
             case "quarter" => z0(() => 
Z(LocalDate.now().get(IsoFields.QUARTER_OF_YEAR), 0))
-            case "now" => z0(() => Z(System.currentTimeMillis(), 0)) // Epoc 
time.
+            case "now" => z0(() => Z(U.now(), 0)) // Epoc time.
 
             case _ => throw rtUnknownFunError(fun) // Assertion.
         }
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 019308d..22c926d 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
@@ -54,12 +54,11 @@ import org.jline.utils.AttributedString
 import org.jline.utils.InfoCmp.Capability
 import org.apache.nlpcraft.model.tools.cmdline.NCCliRestSpec._
 import org.apache.nlpcraft.model.tools.cmdline.NCCliCommands._
-import resource.managed
 
-import scala.collection.JavaConverters._
+import scala.util.Using
 import scala.collection.mutable
-import scala.compat.Platform.currentTime
 import scala.compat.java8.OptionConverters._
+import scala.jdk.CollectionConverters.{BufferHasAsJava, CollectionHasAsScala, 
SeqHasAsJava}
 import scala.util.Try
 import scala.util.control.Breaks.{break, breakable}
 import scala.util.control.Exception.ignoring
@@ -81,7 +80,7 @@ object NCCli extends NCCliBase {
         val m = mutable.HashMap.empty[String, Seq[String]]
 
         try
-            managed(new ZipInputStream(U.getStream("cli/templates.zip"))) 
acquireAndGet { zis =>
+            Using.resource(new 
ZipInputStream(U.getStream("cli/templates.zip"))) { zis =>
                 var entry = zis.getNextEntry
 
                 while (entry != null) {
@@ -338,7 +337,7 @@ object NCCli extends NCCliBase {
      *
      */
     private def cleanUpTempFiles(): Unit = {
-        val tstamp = currentTime - 1000 * 60 * 60 * 24 * 2 // 2 days ago.
+        val tstamp = U.now() - 1000 * 60 * 60 * 24 * 2 // 2 days ago.
 
         val files = new File(SystemUtils.getUserHome, 
NLPCRAFT_LOC_DIR).listFiles()
         
@@ -397,7 +396,7 @@ object NCCli extends NCCliBase {
             case None => ()
         }
 
-        val logTstamp = currentTime
+        val logTstamp = U.now()
 
         // Server log redirect.
         val output = new File(SystemUtils.getUserHome, 
s".nlpcraft/server_log_$logTstamp.txt")
@@ -510,9 +509,9 @@ object NCCli extends NCCliBase {
 
                 var beacon: NCCliServerBeacon = null
                 var online = false
-                val endOfWait = currentTime + timeoutMins.mins
+                val endOfWait = U.now() + timeoutMins.mins
 
-                while (currentTime < endOfWait && !online && 
ProcessHandle.of(srvPid).isPresent) {
+                while (U.now() < endOfWait && !online && 
ProcessHandle.of(srvPid).isPresent) {
                     if (progressBar.completed) {
                         // First, load the beacon, if any.
                         if (beacon == null)
@@ -530,7 +529,7 @@ object NCCli extends NCCliBase {
                 tailer.stop()
                 progressBar.stop()
 
-                if (!online && currentTime >= endOfWait) // Timed out - 
attempt to kill the timed out process...
+                if (!online && U.now() >= endOfWait) // Timed out - attempt to 
kill the timed out process...
                     ProcessHandle.of(srvPid).asScala match {
                         case Some(ph) =>
                             if (ph.destroy())
@@ -654,7 +653,7 @@ object NCCli extends NCCliBase {
             case None => Seq("-ea", "-Xms1024m")
         }
 
-        val logTstamp = currentTime
+        val logTstamp = U.now()
 
         // Server log redirect.
         val output = new File(SystemUtils.getUserHome, 
s".nlpcraft/probe_log_$logTstamp.txt")
@@ -769,9 +768,9 @@ object NCCli extends NCCliBase {
                 )
 
                 var beacon: NCCliProbeBeacon = null
-                val endOfWait = currentTime + timeoutMins.mins
+                val endOfWait = U.now() + timeoutMins.mins
 
-                while (currentTime < endOfWait && beacon == null && 
ProcessHandle.of(prbPid).isPresent) {
+                while (U.now() < endOfWait && beacon == null && 
ProcessHandle.of(prbPid).isPresent) {
                     if (progressBar.completed) {
                         // Load the beacon, if any.
                         if (beacon == null)
@@ -785,7 +784,7 @@ object NCCli extends NCCliBase {
                 tailer.stop()
                 progressBar.stop()
 
-                if (currentTime >= endOfWait)
+                if (U.now() >= endOfWait)
                     ProcessHandle.of(prbPid).asScala match {
                         case Some(ph) =>
                             if (ph.destroy())
@@ -841,7 +840,7 @@ object NCCli extends NCCliBase {
      */
     private def tailFile(path: String, lines: Int): Unit =
         try
-            managed(new ReversedLinesFileReader(new File(path), 
StandardCharsets.UTF_8)) acquireAndGet { in =>
+            Using.resource(new ReversedLinesFileReader(new File(path), 
StandardCharsets.UTF_8)) { in =>
                 var tail = List.empty[String]
 
                 breakable {
@@ -919,14 +918,14 @@ object NCCli extends NCCliBase {
 
             spinner.start()
 
-            val startMs = currentTime
+            val startMs = U.now()
 
             try
                 restHealth(endpoint) match {
                     case 200 =>
                         spinner.stop()
 
-                        logln(g("OK") + " " + c(s"[${currentTime - 
startMs}ms]"))
+                        logln(g("OK") + " " + c(s"[${U.now() - startMs}ms]"))
 
                     case code: Int =>
                         spinner.stop()
@@ -961,17 +960,15 @@ object NCCli extends NCCliBase {
      */
     private def loadServerBeacon(autoSignIn: Boolean = false): 
Option[NCCliServerBeacon] = {
         val beaconOpt = try {
-            val beacon = (
-                managed(
-                    new ObjectInputStream(
-                        new FileInputStream(
-                            new File(SystemUtils.getUserHome, SRV_BEACON_PATH)
-                        )
+            val beacon = Using.resource(
+                new ObjectInputStream(
+                    new FileInputStream(
+                        new File(SystemUtils.getUserHome, SRV_BEACON_PATH)
                     )
-                ) acquireAndGet {
-                    _.readObject()
-                }
-            )
+                )
+            ) {
+                _.readObject()
+            }
             .asInstanceOf[NCCliServerBeacon]
 
             ProcessHandle.of(beacon.pid).asScala match {
@@ -1065,17 +1062,15 @@ object NCCli extends NCCliBase {
      */
     private def loadProbeBeacon(): Option[NCCliProbeBeacon] = {
         val beaconOpt = try {
-            val beacon = (
-                managed(
-                    new ObjectInputStream(
-                        new FileInputStream(
-                            new File(SystemUtils.getUserHome, PRB_BEACON_PATH)
-                        )
+            val beacon =  Using.resource(
+                new ObjectInputStream(
+                    new FileInputStream(
+                        new File(SystemUtils.getUserHome, PRB_BEACON_PATH)
                     )
-                ) acquireAndGet {
-                    _.readObject()
-                }
-            )
+                )
+            ) {
+                _.readObject()
+            }
             .asInstanceOf[NCCliProbeBeacon]
 
             ProcessHandle.of(beacon.pid).asScala match {
@@ -1267,7 +1262,7 @@ object NCCli extends NCCliBase {
                 for (param <- cmd.params) {
                     val line =
                         if (param.value.isDefined)
-                            T___ + 
param.names.zip(Stream.continually(param.value.get)).map(t => 
s"${t._1}=${t._2}").mkString(", ")
+                            T___ + 
param.names.zip(LazyList.continually(param.value.get)).map(t => 
s"${t._1}=${t._2}").mkString(", ")
                         else
                             s"$T___${param.names.mkString(", ")}"
 
@@ -1293,7 +1288,7 @@ object NCCli extends NCCliBase {
                 }
             }
 
-            lines
+            lines.toSeq
         }
 
         def helpHelp(): Unit =
@@ -1483,7 +1478,7 @@ object NCCli extends NCCliBase {
                     s"  ${c("guid")}: ${probe.probeGuid}",
                     s"  ${c("tok")}: ${probe.probeToken}"
                 ),
-                DurationFormatUtils.formatDurationHMS(currentTime - 
probe.startTstamp),
+                DurationFormatUtils.formatDurationHMS(U.now() - 
probe.startTstamp),
                 Seq(
                     s"${probe.hostName} (${probe.hostAddr})",
                     s"${probe.osName} ver. ${probe.osVersion}"
@@ -1929,8 +1924,8 @@ object NCCli extends NCCliBase {
         cont = repls.foldLeft(cont)((s, repl) => s.replaceAll(repl._1, 
repl._2))
 
         try
-            managed(new FileWriter(outFile)) acquireAndGet { w =>
-                managed(new BufferedWriter(w)) acquireAndGet { bw =>
+            Using.resource(new FileWriter(outFile)) { w =>
+                Using.resource(new BufferedWriter(w)) { bw =>
                     bw.write(cont)
                 }
             }
@@ -2795,7 +2790,7 @@ object NCCli extends NCCliBase {
         if (buf.nonEmpty)
             lines += buf.toString()
 
-        lines.map(_.strip)
+        lines.map(_.strip).toSeq
     }
 
     /**
diff --git 
a/nlpcraft/src/main/scala/org/apache/nlpcraft/model/tools/cmdline/NCCliAnsiBleach.scala
 
b/nlpcraft/src/main/scala/org/apache/nlpcraft/model/tools/cmdline/NCCliAnsiBleach.scala
index a1a8bff..3a5a825 100644
--- 
a/nlpcraft/src/main/scala/org/apache/nlpcraft/model/tools/cmdline/NCCliAnsiBleach.scala
+++ 
b/nlpcraft/src/main/scala/org/apache/nlpcraft/model/tools/cmdline/NCCliAnsiBleach.scala
@@ -21,20 +21,20 @@ import java.io.{BufferedInputStream, BufferedReader}
 
 import org.apache.nlpcraft.common._
 import org.jline.utils.InputStreamReader
-import resource.managed
+import scala.util.Using
 
 /**
  * Pipe filter to remove ANSI escape sequences.
  * Used by 'start-server' command of NLPCraft CLI.
  */
 object NCCliAnsiBleach extends App {
-    managed(
+    Using.resource(
         new BufferedReader(
             new InputStreamReader(
                 new BufferedInputStream(System.in)
             )
         )
-    ) acquireAndGet { in =>
+    ) { in =>
         var line = in.readLine()
 
         while (line != null) {
diff --git 
a/nlpcraft/src/main/scala/org/apache/nlpcraft/model/tools/sqlgen/impl/NCSqlModelGeneratorImpl.scala
 
b/nlpcraft/src/main/scala/org/apache/nlpcraft/model/tools/sqlgen/impl/NCSqlModelGeneratorImpl.scala
index 0c1b5a3..af12a95 100644
--- 
a/nlpcraft/src/main/scala/org/apache/nlpcraft/model/tools/sqlgen/impl/NCSqlModelGeneratorImpl.scala
+++ 
b/nlpcraft/src/main/scala/org/apache/nlpcraft/model/tools/sqlgen/impl/NCSqlModelGeneratorImpl.scala
@@ -23,7 +23,6 @@ import java.time.format.DateTimeFormatter
 import java.time.{Instant, LocalDateTime}
 import java.util
 import java.util.regex.{Pattern, PatternSyntaxException}
-
 import com.fasterxml.jackson.annotation.JsonInclude.Include
 import com.fasterxml.jackson.databind.ObjectMapper
 import com.fasterxml.jackson.dataformat.yaml.YAMLFactory
@@ -34,11 +33,11 @@ import org.apache.nlpcraft.common.version.NCVersion
 import org.apache.nlpcraft.model.impl.json.{NCElementJson, NCMacroJson, 
NCModelJson}
 import org.apache.nlpcraft.model.tools.sqlgen.NCSqlJoinType
 import org.apache.nlpcraft.common._
-import resource.managed
 
-import scala.collection.JavaConverters._
+import scala.util.Using
 import scala.collection.immutable.HashMap
 import scala.collection.{Seq, mutable}
+import scala.jdk.CollectionConverters.{IterableHasAsJava, SeqHasAsJava}
 import scala.util.Try
 
 /**
@@ -57,7 +56,7 @@ object NCSqlModelGeneratorImpl {
 
         private lazy val nameWs = U.normalize(elmNameLc.replaceAll("_"," ")," 
")
 
-        lazy val synonym =
+        lazy val synonym: String =
             if (elmNameLc == nameWs)
                 substituteMacros(elmNameLc)
             else
@@ -72,10 +71,9 @@ object NCSqlModelGeneratorImpl {
         isNullable: String,
         isPk: Boolean
     ) extends NamedEntity {
-        val nameLc = name.toLowerCase()
-        val elmNameLc = elmName.toLowerCase()
-
-        lazy val isNull = isNullable == "YES"
+        val nameLc: String = name.toLowerCase()
+        val elmNameLc: String = elmName.toLowerCase()
+        lazy val isNull: Boolean = isNullable == "YES"
     }
 
     case class Table(
@@ -84,8 +82,8 @@ object NCSqlModelGeneratorImpl {
         joins: Seq[Join],
         columns: mutable.ArrayBuffer[Column] = 
mutable.ArrayBuffer.empty[Column]
     ) extends NamedEntity {
-        val nameLc = name.toLowerCase()
-        val elmNameLc = elmName.toLowerCase()
+        val nameLc: String = name.toLowerCase()
+        val elmNameLc: String = elmName.toLowerCase()
     }
     
     case class ParametersHolder(
@@ -405,7 +403,7 @@ object NCSqlModelGeneratorImpl {
         }
 
         try {
-            managed(new FileOutputStream(file)) acquireAndGet { stream =>
+            Using.resource(new FileOutputStream(file)) { stream =>
                 mapper.writerWithDefaultPrettyPrinter().writeValue(stream, mdl)
 
                 stream.flush()
@@ -481,12 +479,12 @@ object NCSqlModelGeneratorImpl {
 
             val pks = mutable.HashSet.empty[String]
 
-            managed { getConnection } acquireAndGet { conn =>
+            Using.resource { getConnection } { conn =>
                 val md = conn.getMetaData
 
-                managed {
+                Using.resource {
                     md.getColumns(null, params.schema, null, null)
-                } acquireAndGet { rs =>
+                } { rs =>
                     while (rs.next()) {
                         val schNameOrigin = rs.getString("TABLE_SCHEM")
                         val tblNameOrigin = rs.getString("TABLE_NAME")
@@ -512,7 +510,7 @@ object NCSqlModelGeneratorImpl {
                             case None if isAllowed(tblName) =>
                                 pks.clear()
                               
-                                managed { md.getPrimaryKeys(null, 
schNameOrigin, tblNameOrigin) } acquireAndGet { rs =>
+                                Using.resource { md.getPrimaryKeys(null, 
schNameOrigin, tblNameOrigin) } { rs =>
                                     while (rs.next())
                                         pks += 
rs.getString("COLUMN_NAME").toLowerCase
                                 }
@@ -529,7 +527,7 @@ object NCSqlModelGeneratorImpl {
 
                                 val fks = mutable.ArrayBuffer.empty[Fk]
 
-                                managed { md.getImportedKeys(null, 
schNameOrigin, tblNameOrigin) } acquireAndGet { rs =>
+                                Using.resource { md.getImportedKeys(null, 
schNameOrigin, tblNameOrigin) } { rs =>
                                     while (rs.next())
                                         fks += Fk(
                                             name = rs.getString("FK_NAME"),
diff --git 
a/nlpcraft/src/main/scala/org/apache/nlpcraft/model/tools/test/impl/NCTestAutoModelValidatorImpl.scala
 
b/nlpcraft/src/main/scala/org/apache/nlpcraft/model/tools/test/impl/NCTestAutoModelValidatorImpl.scala
index a4ee3dc..6f3175e 100644
--- 
a/nlpcraft/src/main/scala/org/apache/nlpcraft/model/tools/test/impl/NCTestAutoModelValidatorImpl.scala
+++ 
b/nlpcraft/src/main/scala/org/apache/nlpcraft/model/tools/test/impl/NCTestAutoModelValidatorImpl.scala
@@ -82,11 +82,11 @@ private [test] object NCTestAutoModelValidatorImpl extends 
LazyLogging {
                     cli.open(mdlId)
 
                     txts.map (txt => {
-                        var t = System.currentTimeMillis()
+                        var t = U.now()
 
                         val res = cli.ask(txt)
 
-                        t = System.currentTimeMillis() - t
+                        t = U.now() - t
 
                         if (res.isFailed)
                             Result(mdlId, intentId, txt, pass = false, 
Some(res.getResultError.get()), t)
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 aa2f2cc..bc19a96 100644
--- a/nlpcraft/src/main/scala/org/apache/nlpcraft/probe/NCProbeBoot.scala
+++ b/nlpcraft/src/main/scala/org/apache/nlpcraft/probe/NCProbeBoot.scala
@@ -50,14 +50,13 @@ 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.sentence.NCSentenceManager
-import resource.managed
 
 import java.io._
 import java.util.concurrent.CompletableFuture
-import scala.collection.JavaConverters._
 import scala.collection.mutable
-import scala.compat.Platform.currentTime
+import scala.jdk.CollectionConverters.CollectionHasAsScala
 import scala.util.control.Exception.{catching, ignoring}
+import scala.util.Using
 
 /**
   * Probe loader.
@@ -65,7 +64,7 @@ import scala.util.control.Exception.{catching, ignoring}
 private [probe] object NCProbeBoot extends LazyLogging with NCOpenCensusTrace {
     private final val BEACON_PATH = ".nlpcraft/probe_beacon"
 
-    private final val execStart = System.currentTimeMillis()
+    private final val execStart = U.now()
 
     private val startedMgrs = mutable.Buffer.empty[NCService]
 
@@ -263,7 +262,7 @@ private [probe] object NCProbeBoot extends LazyLogging with 
NCOpenCensusTrace {
          */
         def save(): Unit = {
             try {
-                managed(new ObjectOutputStream(new FileOutputStream(path))) 
acquireAndGet { stream =>
+                Using.resource(new ObjectOutputStream(new 
FileOutputStream(path))) { stream =>
                     val ver = NCVersion.getCurrent
 
                     stream.writeObject(NCCliProbeBeacon(
@@ -277,7 +276,7 @@ private [probe] object NCProbeBoot extends LazyLogging with 
NCOpenCensusTrace {
                         jarsFolder = cfg.jarsFolder.orNull,
                         models = cfg.models,
                         beaconPath = path.getAbsolutePath,
-                        startMs = currentTime
+                        startMs = U.now()
                     ))
 
                     stream.flush()
@@ -293,7 +292,7 @@ private [probe] object NCProbeBoot extends LazyLogging with 
NCOpenCensusTrace {
 
         if (path.exists())
             catching(classOf[IOException]) either {
-                managed(new ObjectInputStream(new FileInputStream(path))) 
acquireAndGet { _.readObject() }
+                U.readObject(path)
             } match {
                 case Left(e) =>
                     logger.trace(s"Failed to read existing probe beacon: 
${path.getAbsolutePath}", e)
@@ -471,7 +470,7 @@ private [probe] object NCProbeBoot extends LazyLogging with 
NCOpenCensusTrace {
       * Asks server start.
       */
     private def ackStart() {
-        val dur = s"[${U.format((currentTime - execStart) / 1000.0, 2)} sec]"
+        val dur = s"[${U.format((U.now() - execStart) / 1000.0, 2)} sec]"
         
         val tbl = NCAsciiTable()
         
diff --git 
a/nlpcraft/src/main/scala/org/apache/nlpcraft/probe/mgrs/conversation/NCConversationManager.scala
 
b/nlpcraft/src/main/scala/org/apache/nlpcraft/probe/mgrs/conversation/NCConversationManager.scala
index f24b7b3..b23e797 100644
--- 
a/nlpcraft/src/main/scala/org/apache/nlpcraft/probe/mgrs/conversation/NCConversationManager.scala
+++ 
b/nlpcraft/src/main/scala/org/apache/nlpcraft/probe/mgrs/conversation/NCConversationManager.scala
@@ -46,7 +46,7 @@ object NCConversationManager extends NCService {
             while (!t.isInterrupted)
                 try
                     convs.synchronized {
-                        val sleepTime = clearForTimeout() - 
System.currentTimeMillis()
+                        val sleepTime = clearForTimeout() - U.now()
 
                         if (sleepTime > 0)
                             convs.wait(sleepTime)
@@ -85,7 +85,7 @@ object NCConversationManager extends NCService {
         startScopedSpan("clearForTimeout") { _ =>
             require(Thread.holdsLock(convs))
 
-            val now = System.currentTimeMillis()
+            val now = U.now()
             val delKeys = mutable.HashSet.empty[Key]
 
             for ((key, value) <- convs) {
diff --git 
a/nlpcraft/src/main/scala/org/apache/nlpcraft/probe/mgrs/deploy/NCDeployManager.scala
 
b/nlpcraft/src/main/scala/org/apache/nlpcraft/probe/mgrs/deploy/NCDeployManager.scala
index 3b4781c..558c947 100644
--- 
a/nlpcraft/src/main/scala/org/apache/nlpcraft/probe/mgrs/deploy/NCDeployManager.scala
+++ 
b/nlpcraft/src/main/scala/org/apache/nlpcraft/probe/mgrs/deploy/NCDeployManager.scala
@@ -38,7 +38,7 @@ import org.apache.nlpcraft.model.intent.solver.NCIntentSolver
 import org.apache.nlpcraft.model.intent._
 import org.apache.nlpcraft.probe.mgrs.NCProbeSynonymChunkKind.{IDL, REGEX, 
TEXT}
 import org.apache.nlpcraft.probe.mgrs.{NCProbeModel, NCProbeSynonym, 
NCProbeSynonymChunk, NCProbeSynonymsWrapper}
-import resource.managed
+import scala.util.Using
 
 import scala.collection.JavaConverters._
 import scala.compat.java8.OptionConverters._
@@ -612,7 +612,7 @@ object NCDeployManager extends NCService with 
DecorateAsScala {
 
         val classes = mutable.ArrayBuffer.empty[Class[_ <: NCModel]]
 
-        managed(new JarInputStream(new BufferedInputStream(new 
FileInputStream(jarFile)))) acquireAndGet { in =>
+        Using.resource(new JarInputStream(new BufferedInputStream(new 
FileInputStream(jarFile)))) { in =>
             var entry = in.getNextJarEntry
 
             while (entry != null) {
diff --git 
a/nlpcraft/src/main/scala/org/apache/nlpcraft/probe/mgrs/dialogflow/NCDialogFlowManager.scala
 
b/nlpcraft/src/main/scala/org/apache/nlpcraft/probe/mgrs/dialogflow/NCDialogFlowManager.scala
index e6df4a0..46b061f 100644
--- 
a/nlpcraft/src/main/scala/org/apache/nlpcraft/probe/mgrs/dialogflow/NCDialogFlowManager.scala
+++ 
b/nlpcraft/src/main/scala/org/apache/nlpcraft/probe/mgrs/dialogflow/NCDialogFlowManager.scala
@@ -57,7 +57,7 @@ object NCDialogFlowManager extends NCService {
             while (!t.isInterrupted)
                 try
                     flow.synchronized {
-                        val sleepTime = clearForTimeout() - 
System.currentTimeMillis()
+                        val sleepTime = clearForTimeout() - U.now()
 
                         if (sleepTime > 0)
                             flow.wait(sleepTime)
@@ -160,7 +160,7 @@ object NCDialogFlowManager extends NCService {
         startScopedSpan("clearForTimeout") { _ =>
             require(Thread.holdsLock(flow))
 
-            val now = System.currentTimeMillis()
+            val now = U.now()
             val delKeys = mutable.HashSet.empty[Key]
             val timeouts = mutable.HashMap.empty[String, Long]
 
diff --git 
a/nlpcraft/src/main/scala/org/apache/nlpcraft/probe/mgrs/nlp/NCProbeEnrichmentManager.scala
 
b/nlpcraft/src/main/scala/org/apache/nlpcraft/probe/mgrs/nlp/NCProbeEnrichmentManager.scala
index 1cb3cc2..e3530b3 100644
--- 
a/nlpcraft/src/main/scala/org/apache/nlpcraft/probe/mgrs/nlp/NCProbeEnrichmentManager.scala
+++ 
b/nlpcraft/src/main/scala/org/apache/nlpcraft/probe/mgrs/nlp/NCProbeEnrichmentManager.scala
@@ -165,7 +165,7 @@ object NCProbeEnrichmentManager extends NCService with 
NCOpenCensusModelStats {
             "mdlId" -> mdlId
         )
 
-        startMs.set(System.currentTimeMillis())
+        startMs.set(U.now())
 
         try
             ask0(
@@ -228,7 +228,7 @@ object NCProbeEnrichmentManager extends NCService with 
NCOpenCensusModelStats {
     ): Unit = {
         require(nlpSens.nonEmpty)
 
-        var start = System.currentTimeMillis()
+        var start = U.now()
 
         val tbl = NCAsciiTable()
 
@@ -344,7 +344,7 @@ object NCProbeEnrichmentManager extends NCService with 
NCOpenCensusModelStats {
 
             NCConnectionManager.send(msg, span)
 
-            val durMs = System.currentTimeMillis() - startMs.get
+            val durMs = U.now() - startMs.get
 
             if (errMsg.isEmpty)
                 logger.info(s"" +
@@ -621,7 +621,7 @@ object NCProbeEnrichmentManager extends NCService with 
NCOpenCensusModelStats {
             }
         }
         
-        recordStats(M_SYS_LATENCY_MS -> (System.currentTimeMillis() - start))
+        recordStats(M_SYS_LATENCY_MS -> (U.now() - start))
     
         /**
          *
@@ -658,7 +658,7 @@ object NCProbeEnrichmentManager extends NCService with 
NCOpenCensusModelStats {
 
                 var res = mdl.model.onContext(ctx)
     
-                start = System.currentTimeMillis()
+                start = U.now()
     
                 if (res == null && mdl.solver != null)
                     startScopedSpan("intentMatching", span) { _ =>
@@ -668,7 +668,7 @@ object NCProbeEnrichmentManager extends NCService with 
NCOpenCensusModelStats {
                 if (res == null && mdl.solver == null)
                     throw new IllegalStateException("No intents and no results 
from model callbacks.")
     
-                recordStats(M_USER_LATENCY_MS -> (System.currentTimeMillis() - 
start))
+                recordStats(M_USER_LATENCY_MS -> (U.now() - start))
 
                 if (res == null)
                     throw new IllegalStateException("Result cannot be null.")
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 b9dfafd..d235b5d 100644
--- a/nlpcraft/src/main/scala/org/apache/nlpcraft/server/NCServer.scala
+++ b/nlpcraft/src/main/scala/org/apache/nlpcraft/server/NCServer.scala
@@ -51,12 +51,11 @@ import org.apache.nlpcraft.server.sql.NCSqlManager
 import org.apache.nlpcraft.server.sugsyn.NCSuggestSynonymManager
 import org.apache.nlpcraft.server.tx.NCTxManager
 import org.apache.nlpcraft.server.user.NCUserManager
-import resource.managed
+import scala.util.Using
 
 import java.io._
 import java.util.concurrent.CountDownLatch
 import scala.collection.mutable
-import scala.compat.Platform.currentTime
 import scala.util.control.Exception.{catching, ignoring}
 
 /**
@@ -147,7 +146,7 @@ object NCServer extends App with NCIgniteInstance with 
LazyLogging with NCOpenCe
      * Acks server start.
      */
     protected def ackStart() {
-        val dur = s"[${U.format((currentTime - executionStart) / 1000.0, 2)}s]"
+        val dur = s"[${U.format((U.now() - executionStart) / 1000.0, 2)}s]"
 
         val tbl = NCAsciiTable()
 
@@ -269,7 +268,7 @@ object NCServer extends App with NCIgniteInstance with 
LazyLogging with NCOpenCe
             }
 
             try {
-                managed(new ObjectOutputStream(new FileOutputStream(path))) 
acquireAndGet { stream =>
+                Using.resource(new ObjectOutputStream(new 
FileOutputStream(path))) { stream =>
                     val ver = NCVersion.getCurrent
 
                     stream.writeObject(NCCliServerBeacon(
@@ -294,7 +293,7 @@ object NCServer extends App with NCIgniteInstance with 
LazyLogging with NCOpenCe
                         acsToksScanMins = Config.acsToksScanMins,
                         acsToksExpireMins = Config.acsToksExpireMins,
                         beaconPath = path.getAbsolutePath,
-                        startMs = currentTime
+                        startMs = U.now()
                     ))
 
                     stream.flush()
@@ -341,9 +340,7 @@ object NCServer extends App with NCIgniteInstance with 
LazyLogging with NCOpenCe
 
         if (path.exists())
             catching(classOf[IOException]) either {
-                managed(new ObjectInputStream(new FileInputStream(path))) 
acquireAndGet {
-                    _.readObject()
-                }
+                U.readObject(path)
             } match {
                 case Left(e) =>
                     logger.trace(s"Failed to read existing server beacon: 
${path.getAbsolutePath}", e)
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 ea47d65..5e2743d 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
@@ -29,7 +29,7 @@ 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 resource.managed
+import scala.util.Using
 
 import scala.concurrent.ExecutionContext
 import scala.util.control.Exception.catching
@@ -57,7 +57,7 @@ object NCOpenNlpNerEnricher extends NCService with 
NCNlpNerEnricher with NCIgnit
 
         def add(typ: String, res: String): Unit = {
             val f =
-                managed(NCExternalConfigManager.getStream(OPENNLP, res, span)) 
acquireAndGet { in =>
+                Using.resource(NCExternalConfigManager.getStream(OPENNLP, res, 
span)) { in =>
                     new NameFinderME(new TokenNameFinderModel(in))
                 }
 
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 30d7f28..3162321 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
@@ -30,7 +30,7 @@ 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 resource.managed
+import scala.util.Using
 
 import scala.concurrent.ExecutionContext
 import scala.util.control.Exception.catching
@@ -58,13 +58,13 @@ object NCOpenNlpParser extends NCService with NCNlpParser 
with NCIgniteInstance
         U.executeParallel(
             () => {
                 tagger =
-                    managed(NCExternalConfigManager.getStream(OPENNLP, 
"en-pos-maxent.bin", span)) acquireAndGet { in =>
+                    Using.resource(NCExternalConfigManager.getStream(OPENNLP, 
"en-pos-maxent.bin", span)) { in =>
                         new POSTaggerME(new POSModel(in))
                     }
             },
             () => {
                 lemmatizer =
-                    managed(NCExternalConfigManager.getStream(OPENNLP, 
"en-lemmatizer.dict", span)) acquireAndGet { in =>
+                    Using.resource(NCExternalConfigManager.getStream(OPENNLP, 
"en-lemmatizer.dict", span)) { in =>
                         new DictionaryLemmatizer(in)
                     }
             }
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 7075049..abb34f9 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
@@ -1910,12 +1910,12 @@ class NCBasicRestApi extends NCRestApi with LazyLogging 
with NCOpenCensusTrace w
       * @return
       */
     private def withMetric(m: Measure, f: () => Route): Route = {
-        val start = System.currentTimeMillis()
+        val start = U.now()
 
         try
             f()
         finally {
-            recordStats(m -> (System.currentTimeMillis() - start))
+            recordStats(m -> (U.now() - start))
         }
     }
 
diff --git a/nlpcraft/src/main/scala/org/apache/nlpcraft/server/sql/NCSql.scala 
b/nlpcraft/src/main/scala/org/apache/nlpcraft/server/sql/NCSql.scala
index 9076472..43f31aa 100644
--- a/nlpcraft/src/main/scala/org/apache/nlpcraft/server/sql/NCSql.scala
+++ b/nlpcraft/src/main/scala/org/apache/nlpcraft/server/sql/NCSql.scala
@@ -27,7 +27,6 @@ import org.apache.ignite.transactions.Transaction
 import org.apache.nlpcraft.common._
 import org.apache.nlpcraft.common.config.NCConfigurable
 import org.apache.nlpcraft.server.tx.NCTxManager
-import resource._
 
 import scala.collection._
 import scala.util.control.Exception._
@@ -467,7 +466,7 @@ object NCSql extends LazyLogging {
         var r = List.empty[R]
 
         catching(psqlErrorCodes) {
-            for (ps <- managed { prepare(sql, params) } ; rs <- managed { 
ps.executeQuery() } )
+            for (ps <- Using.resource { prepare(sql, params) } ; rs <- 
Using.resource { ps.executeQuery() } )
                 while (rs.next)
                     r :+= p(rs)
 
@@ -520,7 +519,7 @@ object NCSql extends LazyLogging {
     @throws[NCE]
     def insert(sql: String, params: Any*): Unit =
         catching(psqlErrorCodes) {
-            managed { prepare(sql, params) } acquireAndGet { _.executeUpdate }
+            Using.resource { prepare(sql, params) } { _.executeUpdate }
         }
 
     /**
@@ -531,7 +530,7 @@ object NCSql extends LazyLogging {
      */
     private def exec(sql: String, params: Any*): Int =
         catching[Int](psqlErrorCodes) {
-            managed { prepare(sql, params) } acquireAndGet { _.executeUpdate }
+            Using.resource { prepare(sql, params) } { _.executeUpdate }
         }
 
     /**
@@ -579,7 +578,7 @@ object NCSql extends LazyLogging {
     @throws[NCE]
     def select[R](sql: String, callback: R => Unit, params: Any*) (implicit p: 
RsParser[R]): Unit =
         catching(psqlErrorCodes) {
-            for (ps <- managed { prepare(sql, params) } ; rs <- managed { 
ps.executeQuery() } )
+            for (ps <- Using.resource { prepare(sql, params) } ; rs <- 
Using.resource { ps.executeQuery() } )
                 while (rs.next)
                     callback(p(rs))
         }
@@ -614,7 +613,7 @@ object NCSql extends LazyLogging {
         val tbls = mutable.ArrayBuffer.empty[String]
 
         catching(psqlErrorCodes) {
-            for (rs <- managed { connection().getMetaData.getTables(null, 
null, null, null)})
+            for (rs <- Using.resource { 
connection().getMetaData.getTables(null, null, null, null)})
                 while (rs.next) {
                     val tblSchema = rs.getString(2)
              
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 84ab37f..ea88988 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
@@ -139,7 +139,7 @@ object NCSuggestSynonymManager extends NCService {
      */
     def suggest(mdlId: String, minScoreOpt: Option[Double], parent: Span = 
null): Future[NCSuggestSynonymResult] =
         startScopedSpan("inspect", parent, "mdlId" -> mdlId) { _ =>
-            val now = System.currentTimeMillis()
+            val now = U.now()
 
             val promise = Promise[NCSuggestSynonymResult]()
 
@@ -167,7 +167,7 @@ object NCSuggestSynonymManager extends NCService {
                                 NCSuggestSynonymResult(
                                     modelId = mdlId,
                                     minScore = minScore,
-                                    durationMs = System.currentTimeMillis() - 
now,
+                                    durationMs = U.now() - now,
                                     timestamp = now,
                                     error = err,
                                     suggestions = Seq.empty.asJava,
@@ -416,7 +416,7 @@ object NCSuggestSynonymManager extends NCService {
                                     NCSuggestSynonymResult(
                                         modelId = mdlId,
                                         minScore = minScore,
-                                        durationMs = 
System.currentTimeMillis() - now,
+                                        durationMs = U.now() - now,
                                         timestamp = now,
                                         error = null,
                                         suggestions = 
Seq(resJ.asInstanceOf[AnyRef]).asJava,
diff --git 
a/nlpcraft/src/test/scala/org/apache/nlpcraft/common/ascii/NCAsciiTableSpec.scala
 
b/nlpcraft/src/test/scala/org/apache/nlpcraft/common/ascii/NCAsciiTableSpec.scala
index 8f848c2..05beb1b 100644
--- 
a/nlpcraft/src/test/scala/org/apache/nlpcraft/common/ascii/NCAsciiTableSpec.scala
+++ 
b/nlpcraft/src/test/scala/org/apache/nlpcraft/common/ascii/NCAsciiTableSpec.scala
@@ -75,7 +75,7 @@ class NCAsciiTableSpec {
     def testWithVeryBigTable() {
         val NUM = 100
 
-        val start = System.currentTimeMillis()
+        val start = U.now()
 
         val t = NCAsciiTable()
         
@@ -88,7 +88,7 @@ class NCAsciiTableSpec {
 
         t.render()
 
-        val dur = System.currentTimeMillis() - start
+        val dur = U.now() - start
 
         println(s"Rendered in ${dur}ms.")
     }
diff --git 
a/nlpcraft/src/test/scala/org/apache/nlpcraft/common/crypto/NCCipherSpec.scala 
b/nlpcraft/src/test/scala/org/apache/nlpcraft/common/crypto/NCCipherSpec.scala
index ba61888..19bdf9c 100644
--- 
a/nlpcraft/src/test/scala/org/apache/nlpcraft/common/crypto/NCCipherSpec.scala
+++ 
b/nlpcraft/src/test/scala/org/apache/nlpcraft/common/crypto/NCCipherSpec.scala
@@ -67,11 +67,11 @@ class NCCipherSpec  {
         
         val key = NCCipher.makeTokenKey(U.genGuid())
         
-        val now = System.currentTimeMillis()
+        val now = U.now()
         
         val sec = NCCipher.encrypt(Base64.getEncoder.encodeToString(bytes), 
key)
         
-        val dur = System.currentTimeMillis() - now
+        val dur = U.now() - now
         
         println(s"Input length: ${str.length}")
         println(s"Output length: ${sec.length}")
diff --git 
a/nlpcraft/src/test/scala/org/apache/nlpcraft/common/makro/NCMacroParserSpec.scala
 
b/nlpcraft/src/test/scala/org/apache/nlpcraft/common/makro/NCMacroParserSpec.scala
index 8a24721..b0773f2 100644
--- 
a/nlpcraft/src/test/scala/org/apache/nlpcraft/common/makro/NCMacroParserSpec.scala
+++ 
b/nlpcraft/src/test/scala/org/apache/nlpcraft/common/makro/NCMacroParserSpec.scala
@@ -72,14 +72,14 @@ class NCMacroParserSpec  {
 
     // @Test
     def testPerformance() {
-        val start = currentTime
+        val start = U.now()
 
         val N = 50000
 
         for (_ <- 0 to N)
             parser.expand("a {{{<C>}}} {c|d|e|f|g|h|j|k|l|n|m|p|r}")
 
-        val duration = currentTime - start
+        val duration = U.now() - start
 
         println(s"${N * 1000 / duration} expansions/sec.")
     }
diff --git 
a/nlpcraft/src/test/scala/org/apache/nlpcraft/model/intent/idl/compiler/functions/NCIdlFunctionsDate.scala
 
b/nlpcraft/src/test/scala/org/apache/nlpcraft/model/intent/idl/compiler/functions/NCIdlFunctionsDate.scala
index d619c51..a18dbec 100644
--- 
a/nlpcraft/src/test/scala/org/apache/nlpcraft/model/intent/idl/compiler/functions/NCIdlFunctionsDate.scala
+++ 
b/nlpcraft/src/test/scala/org/apache/nlpcraft/model/intent/idl/compiler/functions/NCIdlFunctionsDate.scala
@@ -46,7 +46,7 @@ class NCIdlFunctionsDate extends NCIdlFunctions {
                 s"week_of_month() - ${c.get(C.WEEK_OF_MONTH)} == 0",
                 s"week_of_year() - ${c.get(C.WEEK_OF_YEAR)} == 0",
                 s"quarter() - ${d.get(IsoFields.QUARTER_OF_YEAR)} == 0",
-                s"now() - ${System.currentTimeMillis()} < 5000"
+                s"now() - ${U.now()} < 5000"
             )
         }
 
diff --git 
a/nlpcraft/src/test/scala/org/apache/nlpcraft/probe/mgrs/nlp/enrichers/NCEnrichersTestBeans.scala
 
b/nlpcraft/src/test/scala/org/apache/nlpcraft/probe/mgrs/nlp/enrichers/NCEnrichersTestBeans.scala
index b284ec0..4d352b3 100644
--- 
a/nlpcraft/src/test/scala/org/apache/nlpcraft/probe/mgrs/nlp/enrichers/NCEnrichersTestBeans.scala
+++ 
b/nlpcraft/src/test/scala/org/apache/nlpcraft/probe/mgrs/nlp/enrichers/NCEnrichersTestBeans.scala
@@ -18,7 +18,7 @@
 package org.apache.nlpcraft.probe.mgrs.nlp.enrichers
 
 import org.apache.nlpcraft.model.NCToken
-import resource.managed
+import scala.util.Using
 
 import java.io.{ByteArrayInputStream, ByteArrayOutputStream, 
ObjectInputStream, ObjectOutputStream}
 import java.nio.charset.StandardCharsets.UTF_8
@@ -368,8 +368,8 @@ case class NCTestSentence(tokens: Seq[NCTestToken]) {
 
 object NCTestSentence {
     def serialize(sens: Iterable[NCTestSentence]): String =
-        managed(new ByteArrayOutputStream()) acquireAndGet { bos =>
-            managed(new ObjectOutputStream(bos)) acquireAndGet { os =>
+        Using.resource(new ByteArrayOutputStream()) { bos =>
+            Using.resource(new ObjectOutputStream(bos)) { os =>
                 os.writeObject(sens)
 
                 os.flush()
@@ -379,9 +379,9 @@ object NCTestSentence {
         }
 
     def deserialize(s: String): Iterable[NCTestSentence] =
-        managed(new ObjectInputStream(
+        Using.resource(new ObjectInputStream(
             new 
ByteArrayInputStream(Base64.getDecoder.decode(s.getBytes(UTF_8))))
-        ) acquireAndGet { is =>
+        ) { is =>
             is.readObject.asInstanceOf[Iterable[NCTestSentence]]
         }
 }
\ No newline at end of file

Reply via email to