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

[incubator-nlpcraft] branch scala-2.13 updated: WIP.

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

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


The following commit(s) were added to refs/heads/scala-2.13 by this push:
     new 22eec41  WIP.
22eec41 is described below

commit 22eec414fd3aaa1615ee5b057353d7132b92760b
Author: unknown <ar...@datalingvo.com>
AuthorDate: Tue May 18 14:26:45 2021 -0700

    WIP.
---
 .../nlpcraft/examples/sql/db/SqlAccess.scala       |  8 +--
 nlpcraft/pom.xml                                   | 10 +--
 .../nlpcraft/common/ascii/NCAsciiTable.scala       |  4 +-
 .../common/extcfg/NCExternalConfigManager.scala    | 10 +--
 .../nlp/core/opennlp/NCOpenNlpTokenizer.scala      |  4 +-
 .../org/apache/nlpcraft/common/util/NCUtils.scala  | 74 +++++++++++-----------
 .../nlpcraft/model/tools/cmdline/NCCli.scala       |  5 +-
 .../model/tools/cmdline/NCCliAnsiBleach.scala      |  6 +-
 .../sqlgen/impl/NCSqlModelGeneratorImpl.scala      | 22 +++----
 .../org/apache/nlpcraft/probe/NCProbeBoot.scala    |  6 +-
 .../probe/mgrs/deploy/NCDeployManager.scala        |  1 -
 .../org/apache/nlpcraft/server/NCServer.scala      |  6 +-
 .../nlp/core/opennlp/NCOpenNlpNerEnricher.scala    |  4 +-
 .../server/nlp/core/opennlp/NCOpenNlpParser.scala  |  6 +-
 .../mgrs/nlp/enrichers/NCEnrichersTestBeans.scala  | 10 +--
 pom.xml                                            | 37 ++++++-----
 16 files changed, 102 insertions(+), 111 deletions(-)

diff --git a/nlpcraft-examples/sql/src/main/java/org/apache/nlpcraft/examples/sql/db/SqlAccess.scala b/nlpcraft-examples/sql/src/main/java/org/apache/nlpcraft/examples/sql/db/SqlAccess.scala
index 8ee31d1..d95d84b 100644
--- a/nlpcraft-examples/sql/src/main/java/org/apache/nlpcraft/examples/sql/db/SqlAccess.scala
+++ b/nlpcraft-examples/sql/src/main/java/org/apache/nlpcraft/examples/sql/db/SqlAccess.scala
@@ -18,13 +18,13 @@
 package org.apache.nlpcraft.examples.sql.db
 
 import java.sql.{Connection, PreparedStatement, SQLException}
-
 import com.github.vertical_blank.sqlformatter.SqlFormatter
 import com.typesafe.scalalogging.LazyLogging
 import org.apache.nlpcraft.common.ascii.NCAsciiTable
 import org.h2.jdbc.JdbcSQLException
 import org.h2.jdbcx.JdbcDataSource
-import resource.managed
+
+import scala.util.Using
 
 /**
   * Ad-hoc querying for H2 Database. This is a simple, single thread implementation.
@@ -71,10 +71,10 @@ object SqlAccess extends LazyLogging {
         }
 
         try {
-            managed { getPs } acquireAndGet { ps ⇒
+            Using.resource { getPs } { ps ⇒
                 qry.parameters.zipWithIndex.foreach { case (p, idx) ⇒ ps.setObject(idx + 1, p) }
 
-                managed { ps.executeQuery() } acquireAndGet { rs ⇒
+                Using.resource { ps.executeQuery() } { rs ⇒
                     val md = rs.getMetaData
                     val cnt = md.getColumnCount
 
diff --git a/nlpcraft/pom.xml b/nlpcraft/pom.xml
index 9a198c1..2ea8dfc 100644
--- a/nlpcraft/pom.xml
+++ b/nlpcraft/pom.xml
@@ -130,10 +130,6 @@
             <artifactId>commons-io</artifactId>
         </dependency>
         <dependency>
-            <groupId>com.jsuereth</groupId>
-            <artifactId>scala-arm_${scala.base}</artifactId>
-        </dependency>
-        <dependency>
             <groupId>org.apache.tika</groupId>
             <artifactId>tika-langdetect</artifactId>
             <!-- Ignite contains 13 version but it contains 12. -->
@@ -190,15 +186,15 @@
         </dependency>
         <dependency>
             <groupId>com.typesafe.akka</groupId>
-            <artifactId>akka-http_2.12</artifactId>
+            <artifactId>akka-http_2.13</artifactId>
         </dependency>
         <dependency>
             <groupId>com.typesafe.akka</groupId>
-            <artifactId>akka-stream_2.12</artifactId>
+            <artifactId>akka-stream_2.13</artifactId>
         </dependency>
         <dependency>
             <groupId>com.typesafe.akka</groupId>
-            <artifactId>akka-http-spray-json_2.12</artifactId>
+            <artifactId>akka-http-spray-json_2.13</artifactId>
         </dependency>
         <dependency>
             <groupId>com.fasterxml.jackson.dataformat</groupId>
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 3b828ca..ed031d1 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,13 @@
 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
 
 /**
  * `ASCII`-based table with minimal styling support.
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 9a964cc..c12bca4 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,7 +26,6 @@ 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
@@ -35,6 +34,7 @@ import java.util.concurrent.ConcurrentHashMap
 import scala.collection.JavaConverters._
 import scala.concurrent.ExecutionContext
 import scala.io.Source
+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)
                 }
@@ -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 7efbf1e..62933bd 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,7 +22,7 @@ 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 scala.util.Using
 import org.apache.nlpcraft.common.extcfg.NCExternalConfigType.OPENNLP
 import scala.language.{implicitConversions, postfixOps}
 
@@ -42,7 +42,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/util/NCUtils.scala b/nlpcraft/src/main/scala/org/apache/nlpcraft/common/util/NCUtils.scala
index 4e2e7bd..065b4f4 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
@@ -50,17 +50,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._
 import scala.language.{implicitConversions, postfixOps}
 import scala.reflect.{ClassTag, classTag}
 import scala.reflect.runtime.universe._
@@ -393,7 +392,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 {
@@ -422,7 +421,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())
             }
         }
@@ -441,7 +440,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,
@@ -463,7 +462,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,
@@ -485,7 +484,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 {
@@ -503,7 +502,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 {
@@ -646,7 +645,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 {
@@ -663,7 +662,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 {
@@ -690,7 +689,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)
             }
 
@@ -727,7 +726,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()
@@ -760,10 +759,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._
 
@@ -841,8 +840,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(objOutput(baos)) { out ⇒
                     out.writeObject(obj)
                 }
 
@@ -862,7 +861,7 @@ object NCUtils extends LazyLogging {
     @throws[NCE]
     def serializePath(path: String, obj: Any): Unit =
         try {
-            manageOutput(new FileOutputStream(path)) acquireAndGet { out ⇒
+            Using.resource(objOutput(new FileOutputStream(path))) { out ⇒
                 out.writeObject(obj)
             }
 
@@ -888,7 +887,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(objInput(new FileInputStream(path))) { in ⇒
                 in.readObject().asInstanceOf[T]
             }
 
@@ -908,7 +907,7 @@ object NCUtils extends LazyLogging {
     @throws[NCE]
     def deserialize[T](arr: Array[Byte]): T =
         try
-            manageInput(new ByteArrayInputStream(arr)) acquireAndGet { in ⇒
+            Using.resource(objInput(new ByteArrayInputStream(arr))) { in ⇒
                 in.readObject().asInstanceOf[T]
             }
         catch {
@@ -928,15 +927,15 @@ object NCUtils extends LazyLogging {
      *
      * @param in
      */
-    private def manageInput(in: InputStream): ManagedResource[ObjectInputStream] =
-        managed(new ObjectInputStream(new BufferedInputStream(in)))
+    private def objInput(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 objOutput(out: OutputStream): ObjectOutputStream =
+        new ObjectOutputStream(new BufferedOutputStream(out))
 
     /**
       * Wrap string value.
@@ -1128,7 +1127,7 @@ object NCUtils extends LazyLogging {
 
         (0 until n).foreach(_ ⇒ dest += src.remove(RND.nextInt(src.size)))
 
-        dest
+        dest.toSeq
     }
 
     /**
@@ -1154,7 +1153,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)
             }
 
@@ -1685,7 +1684,7 @@ object NCUtils extends LazyLogging {
      */
     @throws[Exception]
     def jsonToScalaMap(json: String): Map[String, Object] =
-        GSON.fromJson(json, classOf[java.util.HashMap[String, Object]]).asScala.toMap
+        GSON.fromJson(json, classOf[java.util.HashMap[String, Object]]).toMap
 
     /**
      * Shortcut to convert given JSON to Java map with default mapping.
@@ -1758,7 +1757,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) {
@@ -1771,7 +1770,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)
                         }
                     }
@@ -1831,8 +1830,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")
@@ -1879,11 +1878,13 @@ object NCUtils extends LazyLogging {
 
         url.getProtocol match {
             case "file" ⇒
-                managed(new InputStreamReader(getStream(resDir))) acquireAndGet { reader ⇒
-                    managed(new BufferedReader(reader)) acquireAndGet { bReader ⇒
+                Using.resource(new InputStreamReader(getStream(resDir))) { reader ⇒
+                    Using.resource(new BufferedReader(reader)) { bReader ⇒
                         bReader.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
@@ -1897,7 +1898,8 @@ object NCUtils extends LazyLogging {
                         res += name
                 }
 
-                res
+                res.toSeq
+
             case _ ⇒ throw new NCE(s"Cannot list files for: $resDir")
         }
     }
@@ -1907,9 +1909,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/tools/cmdline/NCCli.scala b/nlpcraft/src/main/scala/org/apache/nlpcraft/model/tools/cmdline/NCCli.scala
index 5328005..b6d0fe5 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,13 +54,12 @@ 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.collection.mutable
 import scala.compat.Platform.currentTime
 import scala.compat.java8.OptionConverters._
-import scala.util.Try
+import scala.util.{Try, Using}
 import scala.util.control.Breaks.{break, breakable}
 import scala.util.control.Exception.ignoring
 
@@ -79,7 +78,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) {
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 ab44c05..4e69232 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 e82d564..fa08fde 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,12 +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.collection.immutable.HashMap
 import scala.collection.{Seq, mutable}
-import scala.util.Try
+import scala.util.{Try, Using}
 
 /**
  * Scala-based SQL model engine.
@@ -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")
@@ -511,8 +509,8 @@ object NCSqlModelGeneratorImpl {
                             case Some(t) ⇒ t
                             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/probe/NCProbeBoot.scala b/nlpcraft/src/main/scala/org/apache/nlpcraft/probe/NCProbeBoot.scala
index a0f7820..236b5aa 100644
--- a/nlpcraft/src/main/scala/org/apache/nlpcraft/probe/NCProbeBoot.scala
+++ b/nlpcraft/src/main/scala/org/apache/nlpcraft/probe/NCProbeBoot.scala
@@ -50,13 +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.util.Using
 import scala.util.control.Exception.{catching, ignoring}
 
 /**
@@ -261,7 +261,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(
@@ -291,7 +291,7 @@ private [probe] object NCProbeBoot extends LazyLogging with NCOpenCensusTrace {
 
         if (path.exists())
             catching(classOf[IOException]) either {
-                managed(new ObjectInputStream(new FileInputStream(path))) acquireAndGet { _.readObject() }
+                Using.resource(new ObjectInputStream(new FileInputStream(path))) { _.readObject() }
             } match {
                 case Left(e) ⇒
                     logger.trace(s"Failed to read existing probe beacon: ${path.getAbsolutePath}", e)
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 d56bbdc..c1f64e9 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,6 @@ 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.collection.JavaConverters._
 import scala.compat.java8.OptionConverters._
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 1015372..0223b72 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,12 @@ 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 java.io._
 import java.util.concurrent.CountDownLatch
 import scala.collection.mutable
 import scala.compat.Platform.currentTime
+import scala.util.Using
 import scala.util.control.Exception.{catching, ignoring}
 
 /**
@@ -267,7 +267,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(
@@ -339,7 +339,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 {
+                Using.resource(new ObjectInputStream(new FileInputStream(path))) {
                     _.readObject()
                 }
             } match {
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 a78baa3..a479c4b 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,9 +29,9 @@ 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.concurrent.ExecutionContext
+import scala.util.Using
 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 c080ca3..0306bad 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,9 +30,9 @@ 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.concurrent.ExecutionContext
+import scala.util.Using
 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/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 0a88cfb..b668289 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,6 @@
 package org.apache.nlpcraft.probe.mgrs.nlp.enrichers
 
 import org.apache.nlpcraft.model.NCToken
-import resource.managed
 
 import java.io.{ByteArrayInputStream, ByteArrayOutputStream, ObjectInputStream, ObjectOutputStream}
 import java.nio.charset.StandardCharsets.UTF_8
@@ -26,6 +25,7 @@ import java.util
 import java.util.{Base64, Optional}
 import scala.collection.JavaConverters._
 import scala.compat.java8.OptionConverters._
+import scala.util.Using
 
 /**
   * Tests infrastructure beans.
@@ -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
diff --git a/pom.xml b/pom.xml
index b85025e..7e7e1ed 100644
--- a/pom.xml
+++ b/pom.xml
@@ -72,7 +72,7 @@
 
     <properties>
         <!-- Major Scala version. -->
-        <scala.base>2.12</scala.base>
+        <scala.base>2.13</scala.base>
         <java.ver>11</java.ver>
 
         <maven.build.timestamp.format>yyyy-MM-dd-HH-mm</maven.build.timestamp.format>
@@ -83,7 +83,7 @@
         <gridgain.agent.ver>2.8.1.2</gridgain.agent.ver>
         <scala.plugin.ver>4.3.1</scala.plugin.ver>
         <log4j.ver>2.12.0</log4j.ver>
-        <scala.ver>${scala.base}.11</scala.ver>
+        <scala.ver>${scala.base}.6</scala.ver>
         <scala.config.ver>1.3.4</scala.config.ver>
         <commons.codec.ver>1.14</commons.codec.ver>
         <commons.io.ver>2.7</commons.io.ver>
@@ -93,11 +93,10 @@
         <jsoup.ver>1.13.1</jsoup.ver>
         <slf4j.ver>1.7.26</slf4j.ver>
         <scala.logging.ver>3.9.2</scala.logging.ver>
-        <scala.arm.ver>2.0</scala.arm.ver>
         <scala.xml.ver>1.1.1</scala.xml.ver>
         <c3p0.ver>0.9.5.4</c3p0.ver> <!-- Upgraded to due security vulnerability. -->
         <scalatest.ver>3.0.8</scalatest.ver>
-        <lift.json.ver>3.3.0</lift.json.ver>
+        <lift.json.ver>3.4.3</lift.json.ver>
         <scalaj.ver>2.4.1</scalaj.ver>
         <spray.ver>1.3.5</spray.ver>
         <tika.ver>1.21</tika.ver>
@@ -127,9 +126,15 @@
         <maven.clean.plugin.ver>3.1.0</maven.clean.plugin.ver>
         <apache.rat.plugin.ver>0.13</apache.rat.plugin.ver>
         <org.antlr4.ver>4.9</org.antlr4.ver>
-        <akka.http.2.12.ver>10.2.0</akka.http.2.12.ver>
-        <akka.stream.2.12.ver>2.6.8</akka.stream.2.12.ver>
-        <akka.http.spray.json.2.12.ver>10.2.0</akka.http.spray.json.2.12.ver>
+
+<!--        <akka.http.2.12.ver>10.2.0</akka.http.2.12.ver>-->
+<!--        <akka.stream.2.12.ver>2.6.8</akka.stream.2.12.ver>-->
+<!--        <akka.http.spray.json.2.12.ver>10.2.0</akka.http.spray.json.2.12.ver>-->
+
+        <akka.http.2.13.ver>10.2.4</akka.http.2.13.ver>
+        <akka.stream.2.13.ver>2.6.14</akka.stream.2.13.ver>
+        <akka.http.spray.json.2.13.ver>10.2.4</akka.http.spray.json.2.13.ver>
+
         <google.guava.ver>29.0-jre</google.guava.ver>
         <diff.utils.ver>4.7</diff.utils.ver>
         <vertical.blank.ver>1.0.1</vertical.blank.ver>
@@ -322,12 +327,6 @@
             </dependency>
 
             <dependency>
-                <groupId>com.jsuereth</groupId>
-                <artifactId>scala-arm_${scala.base}</artifactId>
-                <version>${scala.arm.ver}</version>
-            </dependency>
-
-            <dependency>
                 <groupId>org.apache.tika</groupId>
                 <artifactId>tika-langdetect</artifactId>
                 <version>${tika.ver}</version>
@@ -408,20 +407,20 @@
 
             <dependency>
                 <groupId>com.typesafe.akka</groupId>
-                <artifactId>akka-http_2.12</artifactId>
-                <version>${akka.http.2.12.ver}</version>
+                <artifactId>akka-http_${scala.base}</artifactId>
+                <version>${akka.http.2.13.ver}</version>
             </dependency>
 
             <dependency>
                 <groupId>com.typesafe.akka</groupId>
-                <artifactId>akka-stream_2.12</artifactId>
-                <version>${akka.stream.2.12.ver}</version>
+                <artifactId>akka-stream_${scala.base}</artifactId>
+                <version>${akka.stream.2.13.ver}</version>
             </dependency>
 
             <dependency>
                 <groupId>com.typesafe.akka</groupId>
-                <artifactId>akka-http-spray-json_2.12</artifactId>
-                <version>${akka.http.spray.json.2.12.ver}</version>
+                <artifactId>akka-http-spray-json_${scala.base}</artifactId>
+                <version>${akka.http.spray.json.2.13.ver}</version>
             </dependency>
 
             <dependency>