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 2020/03/25 18:34:14 UTC
[incubator-nlpcraft] branch master updated: Fix for NLPCRAFT-27.
This is an automated email from the ASF dual-hosted git repository.
aradzinski pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-nlpcraft.git
The following commit(s) were added to refs/heads/master by this push:
new b6138cb Fix for NLPCRAFT-27.
b6138cb is described below
commit b6138cb61e784e2d70f5e757aad280318be1e54f
Author: Aaron Radzinzski <ar...@datalingvo.com>
AuthorDate: Wed Mar 25 11:34:09 2020 -0700
Fix for NLPCRAFT-27.
---
docs/examples/alarm_clock.html | 14 ++---
.../nlpcraft/common/config/NCConfigurable.scala | 4 +-
.../common/nlp/core/NCNlpCoreManager.scala | 2 +-
.../common/nlp/dict/NCDictionaryManager.scala | 4 +-
.../apache/nlpcraft/examples/alarm/AlarmModel.java | 8 +--
.../apache/nlpcraft/examples/alarm/AlarmTest.java | 24 +++++---
.../apache/nlpcraft/examples/echo/EchoTest.java | 24 +++++---
.../examples/helloworld/HelloWorldModel.java | 6 +-
.../examples/helloworld/HelloWorldTest.java | 38 +++++++------
.../examples/lightswitch/LightSwitchModel.scala | 3 +-
.../examples/lightswitch/LightSwitchTest.java | 22 ++++++--
.../misc/geo/cities/CitiesDataProvider.java | 6 +-
.../apache/nlpcraft/examples/phone/PhoneModel.java | 5 +-
.../apache/nlpcraft/examples/phone/PhoneTest.java | 37 +++++++-----
.../nlpcraft/examples/sql/SqlModelTest.scala | 66 ++++++++++++----------
.../nlpcraft/examples/sql/db/SqlAccess.scala | 2 +-
.../nlpcraft/examples/sql/db/SqlBuilder.scala | 4 +-
.../apache/nlpcraft/examples/time/TimeModel.java | 3 -
.../nlpcraft/examples/time/TimeModelApp.java | 2 +-
.../apache/nlpcraft/examples/time/TimeTest.java | 44 ++++++++-------
.../nlpcraft/examples/weather/WeatherTest.java | 40 +++++++------
.../nlpcraft/model/tools/test/NCTestClient.java | 19 ++++---
.../nlpcraft/model/tools/test/package-info.java | 23 +++++---
.../probe/mgrs/conn/NCConnectionManager.scala | 40 +++++++------
.../mgrs/conversation/NCConversationManager.scala | 3 +-
.../probe/mgrs/deploy/NCDeployManager.scala | 26 +++++----
.../mgrs/dialogflow/NCDialogFlowManager.scala | 5 +-
.../probe/mgrs/lifecycle/NCLifecycleManager.scala | 10 ++--
.../nlpcraft/probe/mgrs/model/NCModelManager.scala | 4 +-
.../probe/mgrs/nlp/NCProbeEnrichmentManager.scala | 12 ++--
.../mgrs/nlp/validate/NCValidateManager.scala | 2 +-
.../apache/nlpcraft/server/geo/NCGeoManager.scala | 4 +-
.../lifecycle/NCServerLifecycleManager.scala | 4 +-
.../lifecycle/opencensus/NCJaegerExporter.scala | 6 +-
.../opencensus/NCPrometheusExporter.scala | 8 +--
.../opencensus/NCStackdriverStatsExporter.scala | 4 +-
.../opencensus/NCStackdriverTraceExporter.scala | 2 +-
.../lifecycle/opencensus/NCZipkinExporter.scala | 8 +--
.../server/nlp/core/NCNlpServerManager.scala | 6 +-
.../server/nlp/core/spacy/NCSpaCyNerEnricher.scala | 2 +-
.../nlp/core/stanford/NCStanfordCoreManager.scala | 2 +-
.../nlp/enrichers/NCServerEnrichmentManager.scala | 2 +-
.../server/nlp/enrichers/date/NCDateEnricher.scala | 2 +-
.../nlpcraft/server/probe/NCProbeManager.scala | 41 +++++++++-----
.../nlpcraft/server/query/NCQueryManager.scala | 4 +-
.../nlpcraft/server/rest/NCRestManager.scala | 6 +-
.../org/apache/nlpcraft/server/sql/NCSql.scala | 20 +++----
.../apache/nlpcraft/server/sql/NCSqlManager.scala | 2 +-
.../apache/nlpcraft/server/tx/NCTxManager.scala | 5 +-
.../nlpcraft/server/user/NCUserManager.scala | 10 ++--
.../nlpcraft/model/intent/dsl/NCDslTest.java | 3 +-
.../nlpcraft/models/stm/NCStmTestModelSpec.java | 22 +++++---
52 files changed, 378 insertions(+), 287 deletions(-)
diff --git a/docs/examples/alarm_clock.html b/docs/examples/alarm_clock.html
index 8736a88..ad42fc4 100644
--- a/docs/examples/alarm_clock.html
+++ b/docs/examples/alarm_clock.html
@@ -361,25 +361,25 @@ import java.io.IOException;
import static org.junit.jupiter.api.Assertions.assertTrue;
class AlarmTest {
- private NCTestClient client;
+ private NCTestClient cli;
@BeforeEach
void setUp() throws NCException, IOException {
- client = new NCTestClientBuilder().newBuilder().build();
+ cli = new NCTestClientBuilder().newBuilder().build();
- client.open("nlpcraft.alarm.ex"); // See alarm_model.json
+ cli.open("nlpcraft.alarm.ex"); // See alarm_model.json
}
@AfterEach
void tearDown() throws NCException, IOException {
- client.close();
+ cli.close();
}
@Test
void test() throws NCException, IOException {
- assertTrue(client.ask("Ping me in 3 minutes").isOk());
- assertTrue(client.ask("Buzz me in an hour and 15mins").isOk());
- assertTrue(client.ask("Set my alarm for 30s").isOk());
+ assertTrue(cli.ask("Ping me in 3 minutes").isOk());
+ assertTrue(cli.ask("Buzz me in an hour and 15mins").isOk());
+ assertTrue(cli.ask("Set my alarm for 30s").isOk());
}
} </pre>
<p>
diff --git a/src/main/scala/org/apache/nlpcraft/common/config/NCConfigurable.scala b/src/main/scala/org/apache/nlpcraft/common/config/NCConfigurable.scala
index b0cb272..457bb0b 100644
--- a/src/main/scala/org/apache/nlpcraft/common/config/NCConfigurable.scala
+++ b/src/main/scala/org/apache/nlpcraft/common/config/NCConfigurable.scala
@@ -29,8 +29,8 @@ import scala.collection.JavaConverters._
trait NCConfigurable extends LazyLogging {
import NCConfigurable._
- // Accessor to the loaded config.
- private val hocon: Config = cfg
+ // Accessor to the loaded config. It should reload config.
+ private def hocon: Config = cfg
/**
*
diff --git a/src/main/scala/org/apache/nlpcraft/common/nlp/core/NCNlpCoreManager.scala b/src/main/scala/org/apache/nlpcraft/common/nlp/core/NCNlpCoreManager.scala
index 6dedbbd..d8e431c 100644
--- a/src/main/scala/org/apache/nlpcraft/common/nlp/core/NCNlpCoreManager.scala
+++ b/src/main/scala/org/apache/nlpcraft/common/nlp/core/NCNlpCoreManager.scala
@@ -29,7 +29,7 @@ object NCNlpCoreManager extends NCService {
private final val SUPPORTED_NLP_ENGINES = Seq("opennlp", "stanford")
private object Config extends NCConfigurable {
- val engine: String = getString("nlpcraft.nlpEngine")
+ def engine: String = getString("nlpcraft.nlpEngine")
}
@volatile private var tokenizer: NCNlpTokenizer = _
diff --git a/src/main/scala/org/apache/nlpcraft/common/nlp/dict/NCDictionaryManager.scala b/src/main/scala/org/apache/nlpcraft/common/nlp/dict/NCDictionaryManager.scala
index c5bdcc7..9eafe87 100644
--- a/src/main/scala/org/apache/nlpcraft/common/nlp/dict/NCDictionaryManager.scala
+++ b/src/main/scala/org/apache/nlpcraft/common/nlp/dict/NCDictionaryManager.scala
@@ -40,8 +40,8 @@ object NCDictionaryManager extends NCService {
require(NCDictionaryType.values.forall(dictFiles.contains))
// Summary dictionary for all types.
- private var full: Set[String] = _
- private var dicts: Map[NCDictionaryType, Set[String]] = _
+ @volatile private var full: Set[String] = _
+ @volatile private var dicts: Map[NCDictionaryType, Set[String]] = _
override def start(parent: Span): NCService = startScopedSpan("start", parent, "dictionaries" → dictFiles.values.mkString(",")) { _ ⇒
dicts = dictFiles.map(p ⇒ {
diff --git a/src/main/scala/org/apache/nlpcraft/examples/alarm/AlarmModel.java b/src/main/scala/org/apache/nlpcraft/examples/alarm/AlarmModel.java
index 4c81dda..2182df7 100644
--- a/src/main/scala/org/apache/nlpcraft/examples/alarm/AlarmModel.java
+++ b/src/main/scala/org/apache/nlpcraft/examples/alarm/AlarmModel.java
@@ -17,13 +17,7 @@
package org.apache.nlpcraft.examples.alarm;
-import org.apache.nlpcraft.model.NCModelFileAdapter;
-import org.apache.nlpcraft.model.NCResult;
-import org.apache.nlpcraft.model.NCRejection;
-import org.apache.nlpcraft.model.NCToken;
-import org.apache.nlpcraft.model.NCIntentRef;
-import org.apache.nlpcraft.model.NCIntentMatch;
-import org.apache.nlpcraft.model.NCIntentTerm;
+import org.apache.nlpcraft.model.*;
import java.time.LocalDateTime;
import java.time.ZoneId;
diff --git a/src/main/scala/org/apache/nlpcraft/examples/alarm/AlarmTest.java b/src/main/scala/org/apache/nlpcraft/examples/alarm/AlarmTest.java
index fe027c9..9dbf835 100644
--- a/src/main/scala/org/apache/nlpcraft/examples/alarm/AlarmTest.java
+++ b/src/main/scala/org/apache/nlpcraft/examples/alarm/AlarmTest.java
@@ -17,10 +17,13 @@
package org.apache.nlpcraft.examples.alarm;
-import org.junit.jupiter.api.*;
import org.apache.nlpcraft.common.NCException;
import org.apache.nlpcraft.model.tools.test.NCTestClient;
import org.apache.nlpcraft.model.tools.test.NCTestClientBuilder;
+import org.apache.nlpcraft.probe.embedded.NCEmbeddedProbe;
+import org.junit.jupiter.api.AfterAll;
+import org.junit.jupiter.api.BeforeAll;
+import org.junit.jupiter.api.Test;
import java.io.IOException;
@@ -32,24 +35,29 @@ import static org.junit.jupiter.api.Assertions.assertTrue;
* @see AlarmModel
*/
class AlarmTest {
- static private NCTestClient client;
+ static private NCTestClient cli;
@BeforeAll
static void setUp() throws NCException, IOException {
- client = new NCTestClientBuilder().newBuilder().build();
+ NCEmbeddedProbe.start(AlarmModel.class);
+
+ cli = new NCTestClientBuilder().newBuilder().build();
- client.open("nlpcraft.alarm.ex"); // See alarm_model.json
+ cli.open("nlpcraft.alarm.ex"); // See alarm_model.json
}
@AfterAll
static void tearDown() throws NCException, IOException {
- client.close();
+ if (cli != null)
+ cli.close();
+
+ NCEmbeddedProbe.stop();
}
@Test
void test() throws NCException, IOException {
- assertTrue(client.ask("Ping me in 3 minutes").isOk());
- assertTrue(client.ask("Buzz me in an hour and 15mins").isOk());
- assertTrue(client.ask("Set my alarm for 30s").isOk());
+ assertTrue(cli.ask("Ping me in 3 minutes").isOk());
+ assertTrue(cli.ask("Buzz me in an hour and 15mins").isOk());
+ assertTrue(cli.ask("Set my alarm for 30s").isOk());
}
}
diff --git a/src/main/scala/org/apache/nlpcraft/examples/echo/EchoTest.java b/src/main/scala/org/apache/nlpcraft/examples/echo/EchoTest.java
index b10c38c..98a8a0f 100644
--- a/src/main/scala/org/apache/nlpcraft/examples/echo/EchoTest.java
+++ b/src/main/scala/org/apache/nlpcraft/examples/echo/EchoTest.java
@@ -17,12 +17,13 @@
package org.apache.nlpcraft.examples.echo;
-import org.junit.jupiter.api.AfterEach;
-import org.junit.jupiter.api.BeforeEach;
-import org.junit.jupiter.api.Test;
import org.apache.nlpcraft.common.NCException;
import org.apache.nlpcraft.model.tools.test.NCTestClient;
import org.apache.nlpcraft.model.tools.test.NCTestClientBuilder;
+import org.apache.nlpcraft.probe.embedded.NCEmbeddedProbe;
+import org.junit.jupiter.api.AfterEach;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
import java.io.IOException;
@@ -34,23 +35,28 @@ import static org.junit.jupiter.api.Assertions.assertTrue;
* @see EchoModel
*/
class EchoTest {
- private NCTestClient client;
+ private NCTestClient cli;
@BeforeEach
void setUp() throws NCException, IOException {
- client = new NCTestClientBuilder().newBuilder().build();
+ NCEmbeddedProbe.start(EchoModel.class);
+
+ cli = new NCTestClientBuilder().newBuilder().build();
- client.open("nlpcraft.echo.ex");
+ cli.open("nlpcraft.echo.ex");
}
@AfterEach
void tearDown() throws NCException, IOException {
- client.close();
+ if (cli != null)
+ cli.close();
+
+ NCEmbeddedProbe.stop();
}
@Test
void test() throws NCException, IOException {
- assertTrue(client.ask("LA weather last Friday").isOk());
- assertTrue(client.ask("Just about any sentence you can imagine!").isOk());
+ assertTrue(cli.ask("LA weather last Friday").isOk());
+ assertTrue(cli.ask("Just about any sentence you can imagine!").isOk());
}
}
diff --git a/src/main/scala/org/apache/nlpcraft/examples/helloworld/HelloWorldModel.java b/src/main/scala/org/apache/nlpcraft/examples/helloworld/HelloWorldModel.java
index 8b07e7d..81d8fa6 100644
--- a/src/main/scala/org/apache/nlpcraft/examples/helloworld/HelloWorldModel.java
+++ b/src/main/scala/org/apache/nlpcraft/examples/helloworld/HelloWorldModel.java
@@ -17,8 +17,10 @@
package org.apache.nlpcraft.examples.helloworld;
-import org.apache.nlpcraft.common.*;
-import org.apache.nlpcraft.model.*;
+import org.apache.nlpcraft.common.NCException;
+import org.apache.nlpcraft.model.NCContext;
+import org.apache.nlpcraft.model.NCModelAdapter;
+import org.apache.nlpcraft.model.NCResult;
/**
* Hello World example data model.
diff --git a/src/main/scala/org/apache/nlpcraft/examples/helloworld/HelloWorldTest.java b/src/main/scala/org/apache/nlpcraft/examples/helloworld/HelloWorldTest.java
index 61ba5df..a89a1df 100644
--- a/src/main/scala/org/apache/nlpcraft/examples/helloworld/HelloWorldTest.java
+++ b/src/main/scala/org/apache/nlpcraft/examples/helloworld/HelloWorldTest.java
@@ -17,12 +17,13 @@
package org.apache.nlpcraft.examples.helloworld;
-import org.junit.jupiter.api.AfterEach;
-import org.junit.jupiter.api.BeforeEach;
-import org.junit.jupiter.api.Test;
import org.apache.nlpcraft.common.NCException;
import org.apache.nlpcraft.model.tools.test.NCTestClient;
import org.apache.nlpcraft.model.tools.test.NCTestClientBuilder;
+import org.apache.nlpcraft.probe.embedded.NCEmbeddedProbe;
+import org.junit.jupiter.api.AfterEach;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
import java.io.IOException;
@@ -34,30 +35,35 @@ import static org.junit.jupiter.api.Assertions.assertTrue;
* @see HelloWorldModel
*/
class HelloWorldTest {
- private NCTestClient client;
-
+ private NCTestClient cli;
+
@BeforeEach
void setUp() throws NCException, IOException {
+ NCEmbeddedProbe.start(HelloWorldModel.class);
+
// Use all defaults.
- client = new NCTestClientBuilder().newBuilder().build();
-
- client.open("nlpcraft.helloworld.ex");
+ cli = new NCTestClientBuilder().newBuilder().build();
+
+ cli.open("nlpcraft.helloworld.ex");
}
-
+
@AfterEach
void tearDown() throws NCException, IOException {
- client.close();
+ if (cli != null)
+ cli.close();
+
+ NCEmbeddedProbe.stop();
}
-
+
@Test
void test() throws NCException, IOException {
// Empty parameter.
- assertTrue(client.ask("").isFailed());
-
+ assertTrue(cli.ask("").isFailed());
+
// Only latin charset is supported.
- assertTrue(client.ask("El tiempo en España").isFailed());
-
+ assertTrue(cli.ask("El tiempo en España").isFailed());
+
// Should be passed.
- assertTrue(client.ask("Hi!").isOk());
+ assertTrue(cli.ask("Hi!").isOk());
}
}
diff --git a/src/main/scala/org/apache/nlpcraft/examples/lightswitch/LightSwitchModel.scala b/src/main/scala/org/apache/nlpcraft/examples/lightswitch/LightSwitchModel.scala
index df39329..5f001e3 100644
--- a/src/main/scala/org/apache/nlpcraft/examples/lightswitch/LightSwitchModel.scala
+++ b/src/main/scala/org/apache/nlpcraft/examples/lightswitch/LightSwitchModel.scala
@@ -17,8 +17,7 @@
package org.apache.nlpcraft.examples.lightswitch
-import org.apache.nlpcraft.model._
-import org.apache.nlpcraft.model.NCIntentTerm
+import org.apache.nlpcraft.model.{NCIntentTerm, _}
/**
* This example provides very simple implementation for NLI-powered light switch.
diff --git a/src/main/scala/org/apache/nlpcraft/examples/lightswitch/LightSwitchTest.java b/src/main/scala/org/apache/nlpcraft/examples/lightswitch/LightSwitchTest.java
index a99de80..e411f5a 100644
--- a/src/main/scala/org/apache/nlpcraft/examples/lightswitch/LightSwitchTest.java
+++ b/src/main/scala/org/apache/nlpcraft/examples/lightswitch/LightSwitchTest.java
@@ -17,12 +17,17 @@
package org.apache.nlpcraft.examples.lightswitch;
-import org.junit.jupiter.api.*;
-import org.apache.nlpcraft.common.*;
-import org.apache.nlpcraft.model.tools.test.*;
-import java.io.*;
+import org.apache.nlpcraft.common.NCException;
+import org.apache.nlpcraft.model.tools.test.NCTestClient;
+import org.apache.nlpcraft.model.tools.test.NCTestClientBuilder;
+import org.apache.nlpcraft.probe.embedded.NCEmbeddedProbe;
+import org.junit.jupiter.api.AfterEach;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
-import static org.junit.jupiter.api.Assertions.*;
+import java.io.IOException;
+
+import static org.junit.jupiter.api.Assertions.assertTrue;
/**
* Lightswitch model test.
@@ -34,6 +39,8 @@ class LightSwitchTest {
@BeforeEach
void setUp() throws NCException, IOException {
+ NCEmbeddedProbe.start(LightSwitchModel.class);
+
cli = new NCTestClientBuilder().newBuilder().build();
cli.open("nlpcraft.lightswitch.ex");
@@ -41,7 +48,10 @@ class LightSwitchTest {
@AfterEach
void tearDown() throws NCException, IOException {
- cli.close();
+ if (cli != null)
+ cli.close();
+
+ NCEmbeddedProbe.stop();
}
@Test
diff --git a/src/main/scala/org/apache/nlpcraft/examples/misc/geo/cities/CitiesDataProvider.java b/src/main/scala/org/apache/nlpcraft/examples/misc/geo/cities/CitiesDataProvider.java
index 94ab352..15d6dfa 100644
--- a/src/main/scala/org/apache/nlpcraft/examples/misc/geo/cities/CitiesDataProvider.java
+++ b/src/main/scala/org/apache/nlpcraft/examples/misc/geo/cities/CitiesDataProvider.java
@@ -23,11 +23,7 @@ import org.apache.nlpcraft.common.NCException;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.List;
-import java.util.Map;
-import java.util.Objects;
+import java.util.*;
import java.util.stream.Collectors;
/**
diff --git a/src/main/scala/org/apache/nlpcraft/examples/phone/PhoneModel.java b/src/main/scala/org/apache/nlpcraft/examples/phone/PhoneModel.java
index 64c35e8..6ca8d26 100644
--- a/src/main/scala/org/apache/nlpcraft/examples/phone/PhoneModel.java
+++ b/src/main/scala/org/apache/nlpcraft/examples/phone/PhoneModel.java
@@ -18,8 +18,9 @@
package org.apache.nlpcraft.examples.phone;
import org.apache.nlpcraft.model.*;
-import java.util.*;
-import java.util.stream.*;
+
+import java.util.List;
+import java.util.stream.Collectors;
/**
diff --git a/src/main/scala/org/apache/nlpcraft/examples/phone/PhoneTest.java b/src/main/scala/org/apache/nlpcraft/examples/phone/PhoneTest.java
index 8170c5f..217c564 100644
--- a/src/main/scala/org/apache/nlpcraft/examples/phone/PhoneTest.java
+++ b/src/main/scala/org/apache/nlpcraft/examples/phone/PhoneTest.java
@@ -17,12 +17,14 @@
package org.apache.nlpcraft.examples.phone;
-import org.junit.jupiter.api.AfterEach;
-import org.junit.jupiter.api.BeforeEach;
-import org.junit.jupiter.api.Test;
import org.apache.nlpcraft.common.NCException;
import org.apache.nlpcraft.model.tools.test.NCTestClient;
import org.apache.nlpcraft.model.tools.test.NCTestClientBuilder;
+import org.apache.nlpcraft.probe.embedded.NCEmbeddedProbe;
+import org.junit.jupiter.api.AfterEach;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Disabled;
+import org.junit.jupiter.api.Test;
import java.io.IOException;
@@ -34,24 +36,31 @@ import static org.junit.jupiter.api.Assertions.assertTrue;
* @see PhoneModel
*/
class PhoneTest {
- private NCTestClient client;
-
+ private NCTestClient cli;
+
@BeforeEach
void setUp() throws NCException, IOException {
- client = new NCTestClientBuilder().newBuilder().build();
-
- client.open("nlpcraft.phone.ex"); // See phone_model.json
+ NCEmbeddedProbe.start(PhoneModel.class);
+
+ cli = new NCTestClientBuilder().newBuilder().build();
+
+ cli.open("nlpcraft.phone.ex"); // See phone_model.json
}
-
+
@AfterEach
void tearDown() throws NCException, IOException {
- client.close();
+ if (cli != null)
+ cli.close();
+
+ NCEmbeddedProbe.stop();
}
-
+
+ // Uncomment if this model is configured.
+ @Disabled
@Test
void test() throws NCException, IOException {
- assertTrue(client.ask("Call to Apple office").isOk());
- assertTrue(client.ask("Can you please ping John Smith?").isOk());
- assertTrue(client.ask("Could you dial +7 (931) 188 34 58 and ask Mike?").isOk());
+ assertTrue(cli.ask("Call to Apple office").isOk());
+ assertTrue(cli.ask("Can you please ping John Smith?").isOk());
+ assertTrue(cli.ask("Could you dial +7 (931) 188 34 58 and ask Mike?").isOk());
}
}
diff --git a/src/main/scala/org/apache/nlpcraft/examples/sql/SqlModelTest.scala b/src/main/scala/org/apache/nlpcraft/examples/sql/SqlModelTest.scala
index 558a344..1968895 100644
--- a/src/main/scala/org/apache/nlpcraft/examples/sql/SqlModelTest.scala
+++ b/src/main/scala/org/apache/nlpcraft/examples/sql/SqlModelTest.scala
@@ -27,14 +27,15 @@ import com.google.gson.reflect.TypeToken
import com.jakewharton.fliptables.FlipTable
import org.apache.nlpcraft.model.tools.sqlgen.NCSqlException
import org.apache.nlpcraft.model.tools.test.{NCTestClient, NCTestClientBuilder}
+import org.apache.nlpcraft.probe.embedded.NCEmbeddedProbe
import org.scalatest.{BeforeAndAfterAll, FlatSpec}
import scala.collection.JavaConverters._
import scala.compat.java8.OptionConverters._
/**
- *
- */
+ *
+ */
class SqlModelTest extends FlatSpec with BeforeAndAfterAll {
private val GSON = new Gson
private val TYPE_RESP = new TypeToken[util.Map[String, Object]]() {}.getType
@@ -50,8 +51,8 @@ class SqlModelTest extends FlatSpec with BeforeAndAfterAll {
override def apply(t: java.lang.Boolean): String = "**"
}).
build
-
- private var cli: NCTestClient = _
+
+ private var client: NCTestClient = _
case class Case(texts: Seq[String], sql: String)
@@ -64,62 +65,67 @@ class SqlModelTest extends FlatSpec with BeforeAndAfterAll {
mkString(" ")
private def toPretty(s: String): util.List[String] = SqlFormatter.format(s).split("\n").toSeq.asJava
-
+
override protected def beforeAll(): Unit = {
- cli = new NCTestClientBuilder().newBuilder.setResponseLog(false).build
-
- cli.open("sql.model.id")
-
+ NCEmbeddedProbe.start(classOf[SqlModel])
+
+ client = new NCTestClientBuilder().newBuilder.setResponseLog(false).build
+
+ client.open("sql.model.id")
+
}
-
- override protected def afterAll(): Unit =
- if (cli != null)
- cli.close()
-
+
+ override protected def afterAll(): Unit = {
+ if (client != null)
+ client.close()
+
+ NCEmbeddedProbe.stop()
+ }
+
private def check(multiLineOut: Boolean, cases: Case*): Unit = {
val errs = collection.mutable.LinkedHashMap.empty[String, String]
-
+
cases.
flatMap(c ⇒ {
val sql = normalize(c.sql)
-
+
c.texts.map(t ⇒ t → sql)
}).
foreach {
case (txt, expSqlNorm) ⇒
- val res = cli.ask(txt)
-
+ val res = client.ask(txt)
+
if (res.isOk) {
require(res.getResult.asScala.isDefined)
-
+
val m: util.Map[String, Object] = GSON.fromJson(res.getResult.get, TYPE_RESP)
-
+
val err = m.get("error")
-
+
if (err != null)
errs += txt → err.toString
else {
val resSqlNorm = normalize(m.asScala("sql").asInstanceOf[String])
-
+
if (resSqlNorm != expSqlNorm) {
if (multiLineOut) {
val rows = DIFF.generateDiffRows(toPretty(expSqlNorm), toPretty(resSqlNorm)).asScala
-
+
val table =
FlipTable.of(
Array("Expected", "Real"),
rows.map(p ⇒ Array(p.getOldLine, p.getNewLine)).toArray
)
-
+
errs += txt → s"Unexpected SQL:\n$table"
}
else {
val rows = DIFF.generateDiffRows(Seq(expSqlNorm).asJava, Seq(resSqlNorm).asJava).asScala
-
+
require(rows.size == 1)
-
+
val row = rows.head
-
+
errs += txt →
s"""Unexpected SQL (expected vs real)
|${row.getOldLine}
@@ -131,13 +137,13 @@ class SqlModelTest extends FlatSpec with BeforeAndAfterAll {
}
else {
require(res.getResultError.isPresent)
-
+
errs += txt → res.getResultError.get
}
}
if (errs.nonEmpty) {
- errs.foreach { case (txt, err) ⇒ println(s"Text: $txt\nError: $err\n")}
+ errs.foreach { case (txt, err) ⇒ println(s"Text: $txt\nError: $err\n") }
throw new NCSqlException(s"Test finished with errors [passed=${cases.size - errs.size}, failed=${errs.size}]")
}
@@ -566,7 +572,7 @@ class SqlModelTest extends FlatSpec with BeforeAndAfterAll {
|LIMIT
| 1000
""".stripMargin
- ) ,
+ ),
Case(
Seq(
"give me the orders sorted by ship date"
diff --git a/src/main/scala/org/apache/nlpcraft/examples/sql/db/SqlAccess.scala b/src/main/scala/org/apache/nlpcraft/examples/sql/db/SqlAccess.scala
index ef2d0be..cd9ab5d 100644
--- a/src/main/scala/org/apache/nlpcraft/examples/sql/db/SqlAccess.scala
+++ b/src/main/scala/org/apache/nlpcraft/examples/sql/db/SqlAccess.scala
@@ -22,8 +22,8 @@ import java.sql.{Connection, SQLException}
import com.github.vertical_blank.sqlformatter.SqlFormatter
import com.jakewharton.fliptables.FlipTable
import com.typesafe.scalalogging.LazyLogging
-import org.h2.jdbcx.JdbcDataSource
import org.apache.nlpcraft.model.tools.sqlgen.NCSqlQuery
+import org.h2.jdbcx.JdbcDataSource
import resource.managed
import scala.collection.JavaConverters._
diff --git a/src/main/scala/org/apache/nlpcraft/examples/sql/db/SqlBuilder.scala b/src/main/scala/org/apache/nlpcraft/examples/sql/db/SqlBuilder.scala
index f9435f4..699f495 100644
--- a/src/main/scala/org/apache/nlpcraft/examples/sql/db/SqlBuilder.scala
+++ b/src/main/scala/org/apache/nlpcraft/examples/sql/db/SqlBuilder.scala
@@ -21,10 +21,10 @@ import java.sql.Types
import java.util
import com.typesafe.scalalogging.LazyLogging
+import org.apache.nlpcraft.model.tools.sqlgen.impl.{NCSqlFunctionImpl, NCSqlSortImpl}
+import org.apache.nlpcraft.model.tools.sqlgen.{NCSqlAggregate, _}
import org.jgrapht.alg.DijkstraShortestPath
import org.jgrapht.graph.{DefaultEdge, SimpleGraph}
-import org.apache.nlpcraft.model.tools.sqlgen.{NCSqlAggregate, _}
-import org.apache.nlpcraft.model.tools.sqlgen.impl.{NCSqlFunctionImpl, NCSqlSortImpl}
import scala.collection.JavaConverters._
import scala.collection.{Seq, mutable}
diff --git a/src/main/scala/org/apache/nlpcraft/examples/time/TimeModel.java b/src/main/scala/org/apache/nlpcraft/examples/time/TimeModel.java
index 55d4192..e6d7e2e 100644
--- a/src/main/scala/org/apache/nlpcraft/examples/time/TimeModel.java
+++ b/src/main/scala/org/apache/nlpcraft/examples/time/TimeModel.java
@@ -28,9 +28,6 @@ import org.apache.nlpcraft.examples.misc.geo.cities.CityData;
import org.apache.nlpcraft.examples.misc.geo.keycdn.GeoManager;
import org.apache.nlpcraft.examples.misc.geo.keycdn.beans.GeoDataBean;
import org.apache.nlpcraft.model.*;
-import org.apache.nlpcraft.model.NCIntent;
-import org.apache.nlpcraft.model.NCIntentMatch;
-import org.apache.nlpcraft.model.NCIntentTerm;
import java.time.ZoneId;
import java.time.ZonedDateTime;
diff --git a/src/main/scala/org/apache/nlpcraft/examples/time/TimeModelApp.java b/src/main/scala/org/apache/nlpcraft/examples/time/TimeModelApp.java
index e7f0307..cd8e1ad 100644
--- a/src/main/scala/org/apache/nlpcraft/examples/time/TimeModelApp.java
+++ b/src/main/scala/org/apache/nlpcraft/examples/time/TimeModelApp.java
@@ -17,7 +17,7 @@
package org.apache.nlpcraft.examples.time;
-import org.apache.nlpcraft.probe.embedded.*;
+import org.apache.nlpcraft.probe.embedded.NCEmbeddedProbe;
/**
* An app that demo the usage of embedded probe. This is an alternative way to
diff --git a/src/main/scala/org/apache/nlpcraft/examples/time/TimeTest.java b/src/main/scala/org/apache/nlpcraft/examples/time/TimeTest.java
index d2e8b40..a801710 100644
--- a/src/main/scala/org/apache/nlpcraft/examples/time/TimeTest.java
+++ b/src/main/scala/org/apache/nlpcraft/examples/time/TimeTest.java
@@ -17,12 +17,13 @@
package org.apache.nlpcraft.examples.time;
-import org.junit.jupiter.api.AfterEach;
-import org.junit.jupiter.api.BeforeEach;
-import org.junit.jupiter.api.Test;
import org.apache.nlpcraft.common.NCException;
import org.apache.nlpcraft.model.tools.test.NCTestClient;
import org.apache.nlpcraft.model.tools.test.NCTestClientBuilder;
+import org.apache.nlpcraft.probe.embedded.NCEmbeddedProbe;
+import org.junit.jupiter.api.AfterEach;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
import java.io.IOException;
@@ -34,33 +35,38 @@ import static org.junit.jupiter.api.Assertions.assertTrue;
* @see TimeModel
*/
class TimeTest {
- private NCTestClient client;
-
+ private NCTestClient cli;
+
@BeforeEach
void setUp() throws NCException, IOException {
- client = new NCTestClientBuilder().newBuilder().build();
-
- client.open("nlpcraft.time.ex"); // See time_model.json
+ NCEmbeddedProbe.start(TimeModel.class);
+
+ cli = new NCTestClientBuilder().newBuilder().build();
+
+ cli.open("nlpcraft.time.ex"); // See time_model.json
}
-
+
@AfterEach
void tearDown() throws NCException, IOException {
- client.close();
+ if (cli != null)
+ cli.close();
+
+ NCEmbeddedProbe.stop();
}
-
+
@Test
void test() throws NCException, IOException {
// Empty parameter.
- assertTrue(client.ask("").isFailed());
-
+ assertTrue(cli.ask("").isFailed());
+
// Only latin charset is supported.
- assertTrue(client.ask("El tiempo en España").isFailed());
+ assertTrue(cli.ask("El tiempo en España").isFailed());
// Should be passed.
- assertTrue(client.ask("What time is it now in New York City?").isOk());
- assertTrue(client.ask("What's the current time in Moscow?").isOk());
- assertTrue(client.ask("Show me time of the day in London.").isOk());
- assertTrue(client.ask("Can you please give me the San Francisco's current date and time.").isOk());
- assertTrue(client.ask("What's the local time?").isOk());
+ assertTrue(cli.ask("What time is it now in New York City?").isOk());
+ assertTrue(cli.ask("What's the current time in Moscow?").isOk());
+ assertTrue(cli.ask("Show me time of the day in London.").isOk());
+ assertTrue(cli.ask("Can you please give me the San Francisco's current date and time.").isOk());
+ assertTrue(cli.ask("What's the local time?").isOk());
}
}
diff --git a/src/main/scala/org/apache/nlpcraft/examples/weather/WeatherTest.java b/src/main/scala/org/apache/nlpcraft/examples/weather/WeatherTest.java
index e640c88..6bd0949 100644
--- a/src/main/scala/org/apache/nlpcraft/examples/weather/WeatherTest.java
+++ b/src/main/scala/org/apache/nlpcraft/examples/weather/WeatherTest.java
@@ -19,13 +19,14 @@ package org.apache.nlpcraft.examples.weather;
import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;
-import org.junit.jupiter.api.AfterEach;
-import org.junit.jupiter.api.BeforeEach;
-import org.junit.jupiter.api.Test;
import org.apache.nlpcraft.common.NCException;
import org.apache.nlpcraft.model.tools.test.NCTestClient;
import org.apache.nlpcraft.model.tools.test.NCTestClientBuilder;
import org.apache.nlpcraft.model.tools.test.NCTestResult;
+import org.apache.nlpcraft.probe.embedded.NCEmbeddedProbe;
+import org.junit.jupiter.api.AfterEach;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
import java.io.IOException;
import java.lang.reflect.Type;
@@ -43,9 +44,9 @@ import static org.junit.jupiter.api.Assertions.*;
class WeatherTest {
private static final Gson GSON = new Gson();
private static final Type TYPE_MAP_RESP = new TypeToken<HashMap<String, Object>>() {}.getType();
-
+
private NCTestClient cli;
-
+
/**
* Checks given intent.
*
@@ -55,48 +56,53 @@ class WeatherTest {
*/
private void checkIntent(String txt, String intentId, boolean shouldBeSame) throws NCException, IOException {
NCTestResult res = cli.ask(txt);
-
+
assertTrue(res.isOk(), () -> res.getResultError().get());
assert res.getResult().isPresent();
-
+
Map<String, Object> map = GSON.fromJson(res.getResult().get(), TYPE_MAP_RESP);
-
+
if (shouldBeSame)
assertEquals(intentId, map.get("intentId"));
else
assertNotEquals(intentId, map.get("intentId"));
}
-
+
@BeforeEach
void setUp() throws NCException, IOException {
+ NCEmbeddedProbe.start(WeatherModel.class);
+
cli = new NCTestClientBuilder().newBuilder().build();
-
+
cli.open("nlpcraft.weather.ex"); // See weather_model.json
}
-
+
@AfterEach
void tearDown() throws NCException, IOException {
- cli.close();
+ if (cli != null)
+ cli.close();
+
+ NCEmbeddedProbe.stop();
}
-
+
@Test
void test() throws NCException, IOException {
// Empty parameter.
assertTrue(cli.ask("").isFailed());
-
+
// Only latin charset is supported.
assertTrue(cli.ask("El tiempo en España").isFailed());
-
+
// Should be passed.
checkIntent("What's the local weather forecast?", "fcast", true);
checkIntent("What's the weather in Moscow?", "curr", true);
// Can be answered with conversation.
checkIntent("Chance of snow?", "curr", true);
checkIntent("Moscow", "curr", true);
-
+
cli.clearConversation();
-
+
// Cannot be answered without conversation.
assertTrue(cli.ask("Moscow").isFailed());
}
diff --git a/src/main/scala/org/apache/nlpcraft/model/tools/test/NCTestClient.java b/src/main/scala/org/apache/nlpcraft/model/tools/test/NCTestClient.java
index 26890e5..2de6fc0 100644
--- a/src/main/scala/org/apache/nlpcraft/model/tools/test/NCTestClient.java
+++ b/src/main/scala/org/apache/nlpcraft/model/tools/test/NCTestClient.java
@@ -29,26 +29,31 @@ import java.io.IOException;
* the usage of test framework together with JUnit 5:
* <pre class="brush: java, highlight: [6, 8, 13, 19, 22, 25, 26, 27]">
* public class AlarmTest {
- * private NCTestClient client;
+ * private NCTestClient cli;
*
* @BeforeEach
* void setUp() throws NCException, IOException {
- * client = new NCTestClientBuilder().newBuilder().build();
+ * NCEmbeddedProbe.start(AlarmModel.class);
*
- * client.open("nlpcraft.alarm.ex");
+ * cli = new NCTestClientBuilder().newBuilder().build();
+ *
+ * cli.open("nlpcraft.alarm.ex");
* }
*
* @AfterEach
* void tearDown() throws NCException, IOException {
- * client.close();
+ * if (cli != null)
+ * cli.close();
+ *
+ * NCEmbeddedProbe.stop();
* }
*
* @Test
* public void test() throws NCException, IOException {
* // Should be passed.
- * assertTrue(client.ask("Ping me in 3 minutes").isOk());
- * assertTrue(client.ask("Buzz me in an hour and 15mins").isOk());
- * assertTrue(client.ask("Set my alarm for 30s").isOk());
+ * assertTrue(cli.ask("Ping me in 3 minutes").isOk());
+ * assertTrue(cli.ask("Buzz me in an hour and 15mins").isOk());
+ * assertTrue(cli.ask("Set my alarm for 30s").isOk());
* }
* }
* </pre>
diff --git a/src/main/scala/org/apache/nlpcraft/model/tools/test/package-info.java b/src/main/scala/org/apache/nlpcraft/model/tools/test/package-info.java
index 06e4703..aad453e 100644
--- a/src/main/scala/org/apache/nlpcraft/model/tools/test/package-info.java
+++ b/src/main/scala/org/apache/nlpcraft/model/tools/test/package-info.java
@@ -22,32 +22,37 @@
* the usage of test framework together with JUnit 5:
* <pre class="brush: java">
* public class AlarmTest {
- * private NCTestClient client;
+ * private NCTestClient cli;
*
* @BeforeEach
* void setUp() throws NCException, IOException {
- * client = new NCTestClientBuilder().newBuilder().build();
+ * NCEmbeddedProbe.start(AlarmModel.class);
*
- * client.open("nlpcraft.alarm.ex");
+ * cli = new NCTestClientBuilder().newBuilder().build();
+ *
+ * cli.open("nlpcraft.alarm.ex");
* }
*
* @AfterEach
* void tearDown() throws NCException, IOException {
- * client.close();
+ * if (cli != null)
+ * cli.close();
+ *
+ * NCEmbeddedProbe.stop();
* }
*
* @Test
* public void test() throws NCException, IOException {
* // Empty parameter.
- * assertTrue(client.ask("").isFailed());
+ * assertTrue(cli.ask("").isFailed());
*
* // Only latin charset is supported.
- * assertTrue(client.ask("El tiempo en España").isFailed());
+ * assertTrue(cli.ask("El tiempo en España").isFailed());
*
* // Should be passed.
- * assertTrue(client.ask("Ping me in 3 minutes").isOk());
- * assertTrue(client.ask("Buzz me in an hour and 15mins").isOk());
- * assertTrue(client.ask("Set my alarm for 30s").isOk());
+ * assertTrue(cli.ask("Ping me in 3 minutes").isOk());
+ * assertTrue(cli.ask("Buzz me in an hour and 15mins").isOk());
+ * assertTrue(cli.ask("Set my alarm for 30s").isOk());
* }
* }
* </pre>
diff --git a/src/main/scala/org/apache/nlpcraft/probe/mgrs/conn/NCConnectionManager.scala b/src/main/scala/org/apache/nlpcraft/probe/mgrs/conn/NCConnectionManager.scala
index b200b87..1094b16 100644
--- a/src/main/scala/org/apache/nlpcraft/probe/mgrs/conn/NCConnectionManager.scala
+++ b/src/main/scala/org/apache/nlpcraft/probe/mgrs/conn/NCConnectionManager.scala
@@ -49,30 +49,30 @@ object NCConnectionManager extends NCService {
private final val PING_TIMEOUT = 5 * 1000
// Internal probe GUID.
- final val PROBE_GUID = U.genGuid()
+ @volatile private var probeGuid: String = _
// Internal semaphores.
- private val stopSem: AtomicInteger = new AtomicInteger(1)
+ @volatile private var stopSem: AtomicInteger = _
private final val sysProps: Properties = System.getProperties
private final val localHost: InetAddress = InetAddress.getLocalHost
- private var hwAddrs: String = _
+ @volatile private var hwAddrs: String = _
// Holding downlink queue.
- private val dnLinkQueue = mutable.Queue.empty[Serializable]
+ @volatile private var dnLinkQueue: mutable.Queue[Serializable] = _
// Control thread.
- private var ctrlThread: Thread = _
-
+ @volatile private var ctrlThread: Thread = _
+
private object Config extends NCConfigurable {
private final val pre = "nlpcraft.probe"
-
- val id: String = getString(s"$pre.id")
- val token: String = getString(s"$pre.token")
- val upLink: (String, Integer) = getHostPort(s"$pre.upLink")
- val downLink: (String, Integer) = getHostPort(s"$pre.downLink")
- val upLinkString = s"${upLink._1}:${upLink._2}"
- val downLinkString = s"${downLink._1}:${downLink._2}"
+
+ def id: String = getString(s"$pre.id")
+ def token: String = getString(s"$pre.token")
+ def upLink: (String, Integer) = getHostPort(s"$pre.upLink")
+ def downLink: (String, Integer) = getHostPort(s"$pre.downLink")
+ def upLinkString = s"${upLink._1}:${upLink._2}"
+ def downLinkString = s"${downLink._1}:${downLink._2}"
}
/**
@@ -95,7 +95,7 @@ object NCConnectionManager extends NCService {
span,
"probeId" → Config.id,
"token" → Config.token,
- "probeGuid" → PROBE_GUID,
+ "probeGuid" → probeGuid,
"msgType" → msg.getType,
"msgGuid" → msg.getGuid
)
@@ -103,7 +103,7 @@ object NCConnectionManager extends NCService {
// Set probe identification for each message, if necessary.
msg.setProbeToken(Config.token)
msg.setProbeId(Config.id)
- msg.setProbeGuid(PROBE_GUID)
+ msg.setProbeGuid(probeGuid)
dnLinkQueue.synchronized {
if (!isStopping) {
@@ -141,7 +141,7 @@ object NCConnectionManager extends NCService {
// Probe identification.
"PROBE_TOKEN" → Config.token,
"PROBE_ID" → Config.id,
- "PROBE_GUID" → PROBE_GUID
+ "PROBE_GUID" → probeGuid
), cryptoKey)
val resp = sock.read[NCProbeMessage](cryptoKey) // Get handshake response.
@@ -210,7 +210,7 @@ object NCConnectionManager extends NCService {
// Probe identification.
"PROBE_TOKEN" → Config.token,
"PROBE_ID" → Config.id,
- "PROBE_GUID" → PROBE_GUID,
+ "PROBE_GUID" → probeGuid,
// Handshake data,
"PROBE_API_DATE" → ver.date,
@@ -275,6 +275,10 @@ object NCConnectionManager extends NCService {
override def start(parent: Span = null): NCService = startScopedSpan("start", parent) { _ ⇒
require(NCCommandManager.isStarted)
require(NCModelManager.isStarted)
+
+ probeGuid = U.genGuid()
+ dnLinkQueue = mutable.Queue.empty[Serializable]
+ stopSem = new AtomicInteger(1)
val ctrlLatch = new CountDownLatch(1)
@@ -364,7 +368,7 @@ object NCConnectionManager extends NCService {
pingMsg.setProbeToken(Config.token)
pingMsg.setProbeId(Config.id)
- pingMsg.setProbeGuid(PROBE_GUID)
+ pingMsg.setProbeGuid(probeGuid)
dnSock.write(pingMsg, cryptoKey)
}
diff --git a/src/main/scala/org/apache/nlpcraft/probe/mgrs/conversation/NCConversationManager.scala b/src/main/scala/org/apache/nlpcraft/probe/mgrs/conversation/NCConversationManager.scala
index 8a857bb..52c1fb8 100644
--- a/src/main/scala/org/apache/nlpcraft/probe/mgrs/conversation/NCConversationManager.scala
+++ b/src/main/scala/org/apache/nlpcraft/probe/mgrs/conversation/NCConversationManager.scala
@@ -36,12 +36,13 @@ object NCConversationManager extends NCService {
private final val CHECK_PERIOD = 5.minutes.toMillis
private final val TIMEOUT = 1.hour.toMillis
- private final val convs = mutable.HashMap.empty[Key, Value]
+ @volatile private var convs: mutable.Map[Key, Value] = _
@volatile private var gc: ScheduledExecutorService = _
override def start(parent: Span = null): NCService = startScopedSpan("start", parent) { _ ⇒
gc = Executors.newSingleThreadScheduledExecutor
+ convs = mutable.HashMap.empty[Key, Value]
gc.scheduleWithFixedDelay(() ⇒ clearForTimeout(), CHECK_PERIOD, CHECK_PERIOD, TimeUnit.MILLISECONDS)
diff --git a/src/main/scala/org/apache/nlpcraft/probe/mgrs/deploy/NCDeployManager.scala b/src/main/scala/org/apache/nlpcraft/probe/mgrs/deploy/NCDeployManager.scala
index 050879a..f6a7e1d 100644
--- a/src/main/scala/org/apache/nlpcraft/probe/mgrs/deploy/NCDeployManager.scala
+++ b/src/main/scala/org/apache/nlpcraft/probe/mgrs/deploy/NCDeployManager.scala
@@ -18,7 +18,7 @@
package org.apache.nlpcraft.probe.mgrs.deploy
import java.io._
-import java.util.jar.{JarInputStream ⇒ JIS}
+import java.util.jar.{JarInputStream => JIS}
import io.opencensus.trace.Span
import org.apache.nlpcraft.common._
@@ -39,20 +39,21 @@ import scala.util.control.Exception._
* Model deployment manager.
*/
object NCDeployManager extends NCService with DecorateAsScala {
- private val models = ArrayBuffer.empty[NCModel]
- private var modelFactory: NCModelFactory = new NCBasicModelFactory
+ @volatile private var models: ArrayBuffer[NCModel] = _
+ @volatile private var modelFactory: NCModelFactory = _
private final val ID_REGEX = "^[_a-zA-Z]+[a-zA-Z0-9:-_]*$"
-
- private object Config extends NCConfigurable {
+
+ object Config extends NCConfigurable {
private final val pre = "nlpcraft.probe"
-
- val modelFactoryType: Option[String] = getStringOpt(s"$pre.modelFactory.type")
- val modelFactoryProps: Option[Map[String, String]] = getMapOpt(s"$pre.modelFactory.properties")
- val models: Seq[String] = getStringList(s"$pre.models")
- val jarsFolder: Option[String] = getStringOpt(s"$pre.jarsFolder")
+
+ // It should reload config.
+ def modelFactoryType: Option[String] = getStringOpt(s"$pre.modelFactory.type")
+ def modelFactoryProps: Option[Map[String, String]] = getMapOpt(s"$pre.modelFactory.properties")
+ def models: Seq[String] = getStringList(s"$pre.models")
+ def jarsFolder: Option[String] = getStringOpt(s"$pre.jarsFolder")
}
-
+
/**
* Gives a list of JAR files at given path.
*
@@ -194,6 +195,9 @@ object NCDeployManager extends NCService with DecorateAsScala {
@throws[NCE]
override def start(parent: Span = null): NCService = startScopedSpan("start", parent) { _ ⇒
+ modelFactory = new NCBasicModelFactory
+ models = ArrayBuffer.empty[NCModel]
+
// Initialize model factory (if configured).
Config.modelFactoryType match {
case Some(mft) ⇒
diff --git a/src/main/scala/org/apache/nlpcraft/probe/mgrs/dialogflow/NCDialogFlowManager.scala b/src/main/scala/org/apache/nlpcraft/probe/mgrs/dialogflow/NCDialogFlowManager.scala
index 6b1850d..f04cbbe 100644
--- a/src/main/scala/org/apache/nlpcraft/probe/mgrs/dialogflow/NCDialogFlowManager.scala
+++ b/src/main/scala/org/apache/nlpcraft/probe/mgrs/dialogflow/NCDialogFlowManager.scala
@@ -33,8 +33,8 @@ import scala.concurrent.duration._
object NCDialogFlowManager extends NCService {
case class Key(usrId: Long, mdlId: String)
case class Value(intent: String, tstamp: Long)
-
- private val flow = mutable.HashMap.empty[Key, ArrayBuffer[Value]]
+
+ @volatile private var flow: mutable.Map[Key, ArrayBuffer[Value]] = _
// Check frequency and timeout.
private final val CHECK_PERIOD = 5.minutes.toMillis
@@ -43,6 +43,7 @@ object NCDialogFlowManager extends NCService {
@volatile private var gc: ScheduledExecutorService = _
override def start(parent: Span = null): NCService = startScopedSpan("start", parent) { _ ⇒
+ flow = mutable.HashMap.empty[Key, ArrayBuffer[Value]]
gc = Executors.newSingleThreadScheduledExecutor
gc.scheduleWithFixedDelay(() ⇒ clearForTimeout(), CHECK_PERIOD, CHECK_PERIOD, TimeUnit.MILLISECONDS)
diff --git a/src/main/scala/org/apache/nlpcraft/probe/mgrs/lifecycle/NCLifecycleManager.scala b/src/main/scala/org/apache/nlpcraft/probe/mgrs/lifecycle/NCLifecycleManager.scala
index 54ca1ff..4bbf8a4 100644
--- a/src/main/scala/org/apache/nlpcraft/probe/mgrs/lifecycle/NCLifecycleManager.scala
+++ b/src/main/scala/org/apache/nlpcraft/probe/mgrs/lifecycle/NCLifecycleManager.scala
@@ -26,12 +26,12 @@ import org.apache.nlpcraft.model._
* Lifecycle component manager.
*/
object NCLifecycleManager extends NCService {
- private var beans = Seq.empty[NCLifecycle]
-
- private object Config extends NCConfigurable {
- val lifecycle: Seq[String] = getStringList("nlpcraft.probe.lifecycle")
+ @volatile private var beans: Seq[NCLifecycle] = _
+
+ object Config extends NCConfigurable {
+ def lifecycle: Seq[String] = getStringList("nlpcraft.probe.lifecycle")
}
-
+
@throws[NCE]
override def start(parent: Span = null): NCService = {
beans = Config.lifecycle.map(U.mkObject(_).asInstanceOf[NCLifecycle])
diff --git a/src/main/scala/org/apache/nlpcraft/probe/mgrs/model/NCModelManager.scala b/src/main/scala/org/apache/nlpcraft/probe/mgrs/model/NCModelManager.scala
index dc2e225..a7c470a 100644
--- a/src/main/scala/org/apache/nlpcraft/probe/mgrs/model/NCModelManager.scala
+++ b/src/main/scala/org/apache/nlpcraft/probe/mgrs/model/NCModelManager.scala
@@ -43,7 +43,7 @@ object NCModelManager extends NCService with DecorateAsScala {
private final val TOKENS_PROVIDERS_PREFIXES = Set("nlpcraft:", "google:", "stanford:", "opennlp:", "spacy:")
// Deployed models keyed by their IDs.
- private val models = mutable.HashMap.empty[String, NCModelDecorator]
+ @volatile private var models: mutable.Map[String, NCModelDecorator] = _
// Access mutex.
private final val mux = new Object()
@@ -81,6 +81,8 @@ object NCModelManager extends NCService with DecorateAsScala {
@throws[NCE]
override def start(parent: Span = null): NCService = startScopedSpan("start", parent) { span ⇒
+ models = mutable.HashMap.empty[String, NCModelDecorator]
+
mux.synchronized {
NCDeployManager.getModels.foreach(addNewModel)
diff --git a/src/main/scala/org/apache/nlpcraft/probe/mgrs/nlp/NCProbeEnrichmentManager.scala b/src/main/scala/org/apache/nlpcraft/probe/mgrs/nlp/NCProbeEnrichmentManager.scala
index 69eb11a..4a7243d 100644
--- a/src/main/scala/org/apache/nlpcraft/probe/mgrs/nlp/NCProbeEnrichmentManager.scala
+++ b/src/main/scala/org/apache/nlpcraft/probe/mgrs/nlp/NCProbeEnrichmentManager.scala
@@ -68,22 +68,24 @@ object NCProbeEnrichmentManager extends NCService with NCOpenCensusModelStats {
// Embedded probe Java callback function.
private type EMBEDDED_CB = java.util.function.Consumer[NCEmbeddedResult]
- private val embeddedCbs = mutable.HashSet.empty[EMBEDDED_CB]
+ @volatile private var embeddedCbs: mutable.Set[EMBEDDED_CB] = _
private object Config extends NCConfigurable {
final private val pre = "nlpcraft.probe"
- val id: String = getString(s"$pre.id")
- val resultMaxSize: Int = getInt(s"$pre.resultMaxSizeBytes")
-
+ def id: String = getString(s"$pre.id")
+ def resultMaxSize: Int = getInt(s"$pre.resultMaxSizeBytes")
+
def check(): Unit =
if (resultMaxSize <= 0)
abortWith(s"Value of '$pre.resultMaxSizeBytes' must be positive")
}
-
+
Config.check()
override def start(parent: Span = null): NCService = startScopedSpan("start", parent) { _ ⇒
+ embeddedCbs = mutable.HashSet.empty[EMBEDDED_CB]
+
super.start()
}
diff --git a/src/main/scala/org/apache/nlpcraft/probe/mgrs/nlp/validate/NCValidateManager.scala b/src/main/scala/org/apache/nlpcraft/probe/mgrs/nlp/validate/NCValidateManager.scala
index 2d2a68d..76fc21a 100644
--- a/src/main/scala/org/apache/nlpcraft/probe/mgrs/nlp/validate/NCValidateManager.scala
+++ b/src/main/scala/org/apache/nlpcraft/probe/mgrs/nlp/validate/NCValidateManager.scala
@@ -29,7 +29,7 @@ import org.apache.nlpcraft.probe.mgrs.NCModelDecorator
*/
object NCValidateManager extends NCService with LazyLogging {
// Create new language finder singleton.
- private var langFinder: OptimaizeLangDetector = _
+ @volatile private var langFinder: OptimaizeLangDetector = _
override def start(parent: Span = null): NCService = startScopedSpan("start", parent) { _ ⇒
langFinder = new OptimaizeLangDetector()
diff --git a/src/main/scala/org/apache/nlpcraft/server/geo/NCGeoManager.scala b/src/main/scala/org/apache/nlpcraft/server/geo/NCGeoManager.scala
index ba3e75a..1116ec2 100644
--- a/src/main/scala/org/apache/nlpcraft/server/geo/NCGeoManager.scala
+++ b/src/main/scala/org/apache/nlpcraft/server/geo/NCGeoManager.scala
@@ -37,8 +37,8 @@ object NCGeoManager extends NCService {
// Special file, the data of which are not filtered by common dictionary words.
private final val SYNONYMS_MANUAL_FILES = Seq("manual.json", "states.json")
-
- private var model: NCGeoModel = _
+
+ @volatile private var model: NCGeoModel = _
// Auxiliary words for GEO names. Example: CA state, Los Angeles city.
private final val CITY_AUX = Seq("city", "town", "metropolis")
diff --git a/src/main/scala/org/apache/nlpcraft/server/lifecycle/NCServerLifecycleManager.scala b/src/main/scala/org/apache/nlpcraft/server/lifecycle/NCServerLifecycleManager.scala
index 24d95b8..3f3b3f1 100644
--- a/src/main/scala/org/apache/nlpcraft/server/lifecycle/NCServerLifecycleManager.scala
+++ b/src/main/scala/org/apache/nlpcraft/server/lifecycle/NCServerLifecycleManager.scala
@@ -28,8 +28,8 @@ import org.apache.nlpcraft.common.config.NCConfigurable
object NCServerLifecycleManager extends NCService {
private object Config extends NCConfigurable {
private final val prop = "nlpcraft.server.lifecycle"
-
- val classes: Seq[String] = getStringList(prop)
+
+ def classes: Seq[String] = getStringList(prop)
var objects = Seq.empty[NCServerLifecycle]
/**
diff --git a/src/main/scala/org/apache/nlpcraft/server/lifecycle/opencensus/NCJaegerExporter.scala b/src/main/scala/org/apache/nlpcraft/server/lifecycle/opencensus/NCJaegerExporter.scala
index 085b484..5394b0c 100644
--- a/src/main/scala/org/apache/nlpcraft/server/lifecycle/opencensus/NCJaegerExporter.scala
+++ b/src/main/scala/org/apache/nlpcraft/server/lifecycle/opencensus/NCJaegerExporter.scala
@@ -26,9 +26,9 @@ import org.apache.nlpcraft.common.config.NCConfigurable
class NCJaegerExporter extends NCBaseTraceExporter("Jaeger") {
private object Config extends NCConfigurable {
private val pre = "nlpcraft.server.opencensus.jaeger"
-
- val url = getStringOrElse(s"$pre.thriftUrl", "http://127.0.0.1:14268/api/traces")
- val svcName = getStringOrElse(s"$pre.serviceName", "nlpcraft-server")
+
+ def url = getStringOrElse(s"$pre.thriftUrl", "http://127.0.0.1:14268/api/traces")
+ def svcName = getStringOrElse(s"$pre.serviceName", "nlpcraft-server")
}
override def beforeStart(): Unit = {
diff --git a/src/main/scala/org/apache/nlpcraft/server/lifecycle/opencensus/NCPrometheusExporter.scala b/src/main/scala/org/apache/nlpcraft/server/lifecycle/opencensus/NCPrometheusExporter.scala
index fbad821..e733ee9 100644
--- a/src/main/scala/org/apache/nlpcraft/server/lifecycle/opencensus/NCPrometheusExporter.scala
+++ b/src/main/scala/org/apache/nlpcraft/server/lifecycle/opencensus/NCPrometheusExporter.scala
@@ -30,10 +30,10 @@ class NCPrometheusExporter extends NCServerLifecycle with LazyLogging {
private object Config extends NCConfigurable {
private val pre = "nlpcraft.server.opencensus.prometheus"
private val hostPort = getHostPortOrElse(s"$pre.hostPort", "localhost", 8888)
-
- val namespace = getStringOrElse(s"$pre.namespace", "nlpcraft-server")
- val host = hostPort._1
- val port = hostPort._2
+
+ def namespace = getStringOrElse(s"$pre.namespace", "nlpcraft-server")
+ def host = hostPort._1
+ def port = hostPort._2
}
override def beforeStart(): Unit = {
diff --git a/src/main/scala/org/apache/nlpcraft/server/lifecycle/opencensus/NCStackdriverStatsExporter.scala b/src/main/scala/org/apache/nlpcraft/server/lifecycle/opencensus/NCStackdriverStatsExporter.scala
index 16fe7b9..4c00a08 100644
--- a/src/main/scala/org/apache/nlpcraft/server/lifecycle/opencensus/NCStackdriverStatsExporter.scala
+++ b/src/main/scala/org/apache/nlpcraft/server/lifecycle/opencensus/NCStackdriverStatsExporter.scala
@@ -32,8 +32,8 @@ class NCStackdriverStatsExporter extends NCServerLifecycle with LazyLogging {
private val pre = "nlpcraft.server.opencensus.stackdriver"
private object Config extends NCConfigurable {
- val gpi = getString(s"$pre.googleProjectId")
- val prefix = getStringOrElse(s"$pre.metricsPrefix", "custom.googleapis.com/nlpcraft/server")
+ def gpi = getString(s"$pre.googleProjectId")
+ def prefix = getStringOrElse(s"$pre.metricsPrefix", "custom.googleapis.com/nlpcraft/server")
}
override def beforeStart(): Unit = {
diff --git a/src/main/scala/org/apache/nlpcraft/server/lifecycle/opencensus/NCStackdriverTraceExporter.scala b/src/main/scala/org/apache/nlpcraft/server/lifecycle/opencensus/NCStackdriverTraceExporter.scala
index d38473e..3e6bf6c 100644
--- a/src/main/scala/org/apache/nlpcraft/server/lifecycle/opencensus/NCStackdriverTraceExporter.scala
+++ b/src/main/scala/org/apache/nlpcraft/server/lifecycle/opencensus/NCStackdriverTraceExporter.scala
@@ -30,7 +30,7 @@ class NCStackdriverTraceExporter extends NCBaseTraceExporter("Stackdriver") {
private val pre = "nlpcraft.server.opencensus.stackdriver"
private object Config extends NCConfigurable {
- val gpi = getString(s"$pre.googleProjectId")
+ def gpi = getString(s"$pre.googleProjectId")
}
override def beforeStart(): Unit = {
diff --git a/src/main/scala/org/apache/nlpcraft/server/lifecycle/opencensus/NCZipkinExporter.scala b/src/main/scala/org/apache/nlpcraft/server/lifecycle/opencensus/NCZipkinExporter.scala
index 6104b1b..27c59aa 100644
--- a/src/main/scala/org/apache/nlpcraft/server/lifecycle/opencensus/NCZipkinExporter.scala
+++ b/src/main/scala/org/apache/nlpcraft/server/lifecycle/opencensus/NCZipkinExporter.scala
@@ -26,11 +26,11 @@ import org.apache.nlpcraft.common.config.NCConfigurable
class NCZipkinExporter extends NCBaseTraceExporter("Zipkin") {
private object Config extends NCConfigurable {
private val pre = "nlpcraft.server.opencensus.zipkin"
-
- val url = getStringOrElse(s"$pre.v2Url", "http://127.0.0.1:9411/api/v2/spans")
- val svcName = getStringOrElse(s"$pre.serviceName", "nlpcraft-server")
+
+ def url = getStringOrElse(s"$pre.v2Url", "http://127.0.0.1:9411/api/v2/spans")
+ def svcName = getStringOrElse(s"$pre.serviceName", "nlpcraft-server")
}
-
+
override def beforeStart(): Unit = {
ZipkinTraceExporter.createAndRegister(ZipkinExporterConfiguration.
builder().
diff --git a/src/main/scala/org/apache/nlpcraft/server/nlp/core/NCNlpServerManager.scala b/src/main/scala/org/apache/nlpcraft/server/nlp/core/NCNlpServerManager.scala
index b2ab86b..aad5d8e 100644
--- a/src/main/scala/org/apache/nlpcraft/server/nlp/core/NCNlpServerManager.scala
+++ b/src/main/scala/org/apache/nlpcraft/server/nlp/core/NCNlpServerManager.scala
@@ -20,7 +20,7 @@ package org.apache.nlpcraft.server.nlp.core
import io.opencensus.trace.Span
import org.apache.nlpcraft.common.config.NCConfigurable
import org.apache.nlpcraft.common.nlp.core.NCNlpCoreManager
-import org.apache.nlpcraft.common.{NCE, NCService, _}
+import org.apache.nlpcraft.common.{NCService, _}
import scala.collection.Seq
@@ -34,8 +34,8 @@ object NCNlpServerManager extends NCService {
private object Config extends NCConfigurable {
private final val TOKEN_PROVIDERS = Set("nlpcraft", "google", "stanford", "opennlp", "spacy")
private final val prop = "nlpcraft.server.tokenProviders"
-
- val tokenProviders: Seq[String] = getStringList(prop)
+
+ def tokenProviders: Seq[String] = getStringList(prop)
def support(name: String): Boolean = tokenProviders.contains(name)
diff --git a/src/main/scala/org/apache/nlpcraft/server/nlp/core/spacy/NCSpaCyNerEnricher.scala b/src/main/scala/org/apache/nlpcraft/server/nlp/core/spacy/NCSpaCyNerEnricher.scala
index b01c596..740e095 100644
--- a/src/main/scala/org/apache/nlpcraft/server/nlp/core/spacy/NCSpaCyNerEnricher.scala
+++ b/src/main/scala/org/apache/nlpcraft/server/nlp/core/spacy/NCSpaCyNerEnricher.scala
@@ -52,7 +52,7 @@ object NCSpaCyNerEnricher extends NCService with NCNlpNerEnricher with NCIgniteI
private implicit val fmt: RootJsonFormat[SpacySpan] = jsonFormat7(SpacySpan)
private object Config extends NCConfigurable {
- val proxyUrl = getStringOrElse("nlpcraft.server.spacy.proxy.url", "http://localhost:5002")
+ def proxyUrl = getStringOrElse("nlpcraft.server.spacy.proxy.url", "http://localhost:5002")
}
// NOTE: property 'vector' represented as string because Python JSON serialization requirements.
diff --git a/src/main/scala/org/apache/nlpcraft/server/nlp/core/stanford/NCStanfordCoreManager.scala b/src/main/scala/org/apache/nlpcraft/server/nlp/core/stanford/NCStanfordCoreManager.scala
index 0b8a61a..7dd2581 100644
--- a/src/main/scala/org/apache/nlpcraft/server/nlp/core/stanford/NCStanfordCoreManager.scala
+++ b/src/main/scala/org/apache/nlpcraft/server/nlp/core/stanford/NCStanfordCoreManager.scala
@@ -32,7 +32,7 @@ import scala.util.control.Exception.catching
* Stanford core manager.
*/
object NCStanfordCoreManager extends NCService with NCIgniteInstance {
- private var stanford: StanfordCoreNLP = _
+ @volatile private var stanford: StanfordCoreNLP = _
@volatile private var cache: IgniteCache[String, CoreDocument] = _
/**
diff --git a/src/main/scala/org/apache/nlpcraft/server/nlp/enrichers/NCServerEnrichmentManager.scala b/src/main/scala/org/apache/nlpcraft/server/nlp/enrichers/NCServerEnrichmentManager.scala
index 295a8f2..0fd6bb1 100644
--- a/src/main/scala/org/apache/nlpcraft/server/nlp/enrichers/NCServerEnrichmentManager.scala
+++ b/src/main/scala/org/apache/nlpcraft/server/nlp/enrichers/NCServerEnrichmentManager.scala
@@ -43,7 +43,7 @@ import scala.util.control.Exception.catching
*/
object NCServerEnrichmentManager extends NCService with NCIgniteInstance {
private object Config extends NCConfigurable {
- val supportNlpCraft: Boolean = getStringList("nlpcraft.server.tokenProviders").contains("nlpcraft")
+ def supportNlpCraft: Boolean = getStringList("nlpcraft.server.tokenProviders").contains("nlpcraft")
}
private final val CUSTOM_PREFIXES = Set("google:", "opennlp:", "stanford:", "spacy:")
diff --git a/src/main/scala/org/apache/nlpcraft/server/nlp/enrichers/date/NCDateEnricher.scala b/src/main/scala/org/apache/nlpcraft/server/nlp/enrichers/date/NCDateEnricher.scala
index 5908f1a..55b2805 100644
--- a/src/main/scala/org/apache/nlpcraft/server/nlp/enrichers/date/NCDateEnricher.scala
+++ b/src/main/scala/org/apache/nlpcraft/server/nlp/enrichers/date/NCDateEnricher.scala
@@ -38,7 +38,7 @@ import scala.collection.mutable.{LinkedHashMap ⇒ LHM}
*/
object NCDateEnricher extends NCServerEnricher {
private object Config extends NCConfigurable {
- val style: NCDateFormatType = getObject("nlpcraft.server.datesFormatStyle", NCDateFormatType.withName)
+ def style: NCDateFormatType = getObject("nlpcraft.server.datesFormatStyle", NCDateFormatType.withName)
}
private type LHM_SS = LHM[String, String]
diff --git a/src/main/scala/org/apache/nlpcraft/server/probe/NCProbeManager.scala b/src/main/scala/org/apache/nlpcraft/server/probe/NCProbeManager.scala
index f50ffb5..28b7407 100644
--- a/src/main/scala/org/apache/nlpcraft/server/probe/NCProbeManager.scala
+++ b/src/main/scala/org/apache/nlpcraft/server/probe/NCProbeManager.scala
@@ -54,19 +54,22 @@ object NCProbeManager extends NCService {
// Type safe and eager configuration container.
private[probe] object Config extends NCConfigurable {
final private val pre = "nlpcraft.server.probe"
-
- val (dnHost, dnPort) = getHostPort(s"$pre.links.downLink")
- val (upHost, upPort) = getHostPort(s"$pre.links.upLink")
-
- val poolSize: Int = getInt(s"$pre.poolSize")
- val reconnectTimeoutMs: Long = getLong(s"$pre.reconnectTimeoutMs")
- val pingTimeoutMs: Long = getLong(s"$pre.pingTimeoutMs")
- val soTimeoutMs: Int = getInt(s"$pre.soTimeoutMs")
+
+ def getDnHostPort = getHostPort(s"$pre.links.downLink")
+ def getUpHostPort = getHostPort(s"$pre.links.upLink")
+
+ def poolSize: Int = getInt(s"$pre.poolSize")
+ def reconnectTimeoutMs: Long = getLong(s"$pre.reconnectTimeoutMs")
+ def pingTimeoutMs: Long = getLong(s"$pre.pingTimeoutMs")
+ def soTimeoutMs: Int = getInt(s"$pre.soTimeoutMs")
/**
*
*/
def check(): Unit = {
+ val (_, dnPort) = getDnHostPort
+ val (_, upPort) = getUpHostPort
+
if (!(dnPort >= 0 && dnPort <= 65535))
abortWith(s"Configuration property '$pre.links.upLink' must be >= 0 and <= 65535: $dnPort")
if (!(upPort >= 0 && upPort <= 65535))
@@ -127,10 +130,10 @@ object NCProbeManager extends NCService {
private var pingSrv: Thread = _
// All known probes keyed by probe key.
- private val probes = mutable.HashMap.empty[ProbeKey, ProbeHolder]
- private val mdls = mutable.HashMap.empty[String, NCProbeModelMdo]
+ private var probes: mutable.Map[ProbeKey, ProbeHolder] = _
+ private var mdls: mutable.Map[String, NCProbeModelMdo] = _
// All probes pending complete handshake keyed by probe key.
- private val pending = mutable.HashMap.empty[ProbeKey, ProbeHolder]
+ private var pending: mutable.Map[ProbeKey, ProbeHolder] = _
private var pool: ExecutorService = _
private var isStopping: AtomicBoolean = _
@@ -140,17 +143,25 @@ object NCProbeManager extends NCService {
* @return
*/
override def start(parent: Span = null): NCService = startScopedSpan("start", parent) { span ⇒
+ probes = mutable.HashMap.empty[ProbeKey, ProbeHolder]
+ mdls = mutable.HashMap.empty[String, NCProbeModelMdo]
+ pending = mutable.HashMap.empty[ProbeKey, ProbeHolder]
+
+ val (dnHost, dnPort) = Config.getDnHostPort
+ val (upHost, upPort) = Config.getUpHostPort
+
+
addTags(span,
- "uplink" → s"${Config.upHost}:${Config.upPort}",
- "downlink" → s"${Config.dnHost}:${Config.dnPort}"
+ "uplink" → s"$upHost:$upPort",
+ "downlink" → s"$dnHost:$dnPort"
)
isStopping = new AtomicBoolean(false)
pool = Executors.newFixedThreadPool(Config.poolSize)
- dnSrv = startServer("Downlink", Config.dnHost, Config.dnPort, downLinkHandler)
- upSrv = startServer("Uplink", Config.upHost, Config.upPort, upLinkHandler)
+ dnSrv = startServer("Downlink", dnHost, dnPort, downLinkHandler)
+ upSrv = startServer("Uplink", upHost, upPort, upLinkHandler)
dnSrv.start()
upSrv.start()
diff --git a/src/main/scala/org/apache/nlpcraft/server/query/NCQueryManager.scala b/src/main/scala/org/apache/nlpcraft/server/query/NCQueryManager.scala
index fa87ec5..298ff8b 100644
--- a/src/main/scala/org/apache/nlpcraft/server/query/NCQueryManager.scala
+++ b/src/main/scala/org/apache/nlpcraft/server/query/NCQueryManager.scala
@@ -46,11 +46,13 @@ object NCQueryManager extends NCService with NCIgniteInstance with NCOpenCensusS
@volatile private var cache: IgniteCache[String/*Server request ID*/, NCQueryStateMdo] = _
// Promises cannot be used in cache.
- private val asyncAsks = new ConcurrentHashMap[String/*Server request ID*/, Promise[NCQueryStateMdo]]()
+ @volatile private var asyncAsks: ConcurrentHashMap[String, Promise[NCQueryStateMdo]] = _
private final val MAX_WORDS = 100
override def start(parent: Span = null): NCService = startScopedSpan("start", parent) { _ ⇒
+ asyncAsks = new ConcurrentHashMap[String/*Server request ID*/, Promise[NCQueryStateMdo]]()
+
catching(wrapIE) {
cache = ignite.cache[String/*Server request ID*/, NCQueryStateMdo]("qry-state-cache")
diff --git a/src/main/scala/org/apache/nlpcraft/server/rest/NCRestManager.scala b/src/main/scala/org/apache/nlpcraft/server/rest/NCRestManager.scala
index 140fae0..54c9c67 100644
--- a/src/main/scala/org/apache/nlpcraft/server/rest/NCRestManager.scala
+++ b/src/main/scala/org/apache/nlpcraft/server/rest/NCRestManager.scala
@@ -43,9 +43,9 @@ object NCRestManager extends NCService {
private final object Config extends NCConfigurable {
final private val pre = "nlpcraft.server.rest"
- val host: String = getString(s"$pre.host")
- val port: Int = getInt(s"$pre.port")
- val apiImpl: String = getString(s"$pre.apiImpl")
+ def host: String = getString(s"$pre.host")
+ def port: Int = getInt(s"$pre.port")
+ def apiImpl: String = getString(s"$pre.apiImpl")
/**
*
diff --git a/src/main/scala/org/apache/nlpcraft/server/sql/NCSql.scala b/src/main/scala/org/apache/nlpcraft/server/sql/NCSql.scala
index 4419bac..9b4444b 100644
--- a/src/main/scala/org/apache/nlpcraft/server/sql/NCSql.scala
+++ b/src/main/scala/org/apache/nlpcraft/server/sql/NCSql.scala
@@ -58,16 +58,16 @@ object NCSql extends LazyLogging {
// Type safe and eager settings container.
private object Config extends NCConfigurable {
final private val pre = "nlpcraft.server.database"
-
- val url: String = getString(s"$pre.jdbc.url")
- val driver: String = getString(s"$pre.jdbc.driver")
- val username: Option[String] = getStringOpt(s"$pre.jdbc.username")
- val passwd: Option[String] = getStringOpt(s"$pre.jdbc.password")
- val maxStmt: Int = getInt(s"$pre.c3p0.maxStatements")
- val initPoolSize: Int = getInt(s"$pre.c3p0.pool.initSize")
- val minPoolSize: Int = getInt(s"$pre.c3p0.pool.minSize")
- val maxPoolSize: Int = getInt(s"$pre.c3p0.pool.maxSize")
- val acqInc: Int = getInt(s"$pre.c3p0.pool.acquireIncrement")
+
+ def url: String = getString(s"$pre.jdbc.url")
+ def driver: String = getString(s"$pre.jdbc.driver")
+ def username: Option[String] = getStringOpt(s"$pre.jdbc.username")
+ def passwd: Option[String] = getStringOpt(s"$pre.jdbc.password")
+ def maxStmt: Int = getInt(s"$pre.c3p0.maxStatements")
+ def initPoolSize: Int = getInt(s"$pre.c3p0.pool.initSize")
+ def minPoolSize: Int = getInt(s"$pre.c3p0.pool.minSize")
+ def maxPoolSize: Int = getInt(s"$pre.c3p0.pool.maxSize")
+ def acqInc: Int = getInt(s"$pre.c3p0.pool.acquireIncrement")
/**
*
diff --git a/src/main/scala/org/apache/nlpcraft/server/sql/NCSqlManager.scala b/src/main/scala/org/apache/nlpcraft/server/sql/NCSqlManager.scala
index c36800a..029da00 100644
--- a/src/main/scala/org/apache/nlpcraft/server/sql/NCSqlManager.scala
+++ b/src/main/scala/org/apache/nlpcraft/server/sql/NCSqlManager.scala
@@ -46,7 +46,7 @@ object NCSqlManager extends NCService with NCIgniteInstance {
)
private object Config extends NCConfigurable {
- val init: Boolean = getBoolOpt("nlpcraft.server.database.igniteDbInitialize").getOrElse(false)
+ def init: Boolean = getBoolOpt("nlpcraft.server.database.igniteDbInitialize").getOrElse(false)
}
@volatile private var usersPropsSeq: IgniteAtomicSequence = _
diff --git a/src/main/scala/org/apache/nlpcraft/server/tx/NCTxManager.scala b/src/main/scala/org/apache/nlpcraft/server/tx/NCTxManager.scala
index cc72b90..c368717 100644
--- a/src/main/scala/org/apache/nlpcraft/server/tx/NCTxManager.scala
+++ b/src/main/scala/org/apache/nlpcraft/server/tx/NCTxManager.scala
@@ -37,8 +37,8 @@ import scala.util.control.Exception.catching
object NCTxManager extends NCService with NCIgniteInstance {
// Internal log switch.
private final val LOG_TX = false
-
- private val cons = mutable.HashMap.empty[IgniteUuid, Connection]
+
+ @volatile private var cons: mutable.Map[IgniteUuid, Connection] = _
/**
*
@@ -61,6 +61,7 @@ object NCTxManager extends NCService with NCIgniteInstance {
* Starts this component.
*/
override def start(parent: Span = null): NCService = startScopedSpan("start", parent) { _ ⇒
+ cons = mutable.HashMap.empty[IgniteUuid, Connection]
itx = ignite.transactions()
super.start()
diff --git a/src/main/scala/org/apache/nlpcraft/server/user/NCUserManager.scala b/src/main/scala/org/apache/nlpcraft/server/user/NCUserManager.scala
index 2af49db..1f9da3a 100644
--- a/src/main/scala/org/apache/nlpcraft/server/user/NCUserManager.scala
+++ b/src/main/scala/org/apache/nlpcraft/server/user/NCUserManager.scala
@@ -63,12 +63,12 @@ object NCUserManager extends NCService with NCIgniteInstance {
private object Config extends NCConfigurable {
final private val pre = "nlpcraft.server.user"
- val pwdPoolBlowup: Int = getInt(s"$pre.pwdPoolBlowup")
- val timeoutScannerFreqMins: Int = getInt(s"$pre.timeoutScannerFreqMins")
- val accessTokenExpireTimeoutMins: Int = getInt(s"$pre.accessTokenExpireTimeoutMins")
+ def pwdPoolBlowup: Int = getInt(s"$pre.pwdPoolBlowup")
+ def timeoutScannerFreqMins: Int = getInt(s"$pre.timeoutScannerFreqMins")
+ def accessTokenExpireTimeoutMins: Int = getInt(s"$pre.accessTokenExpireTimeoutMins")
- lazy val scannerMs: Int = timeoutScannerFreqMins * 60 * 1000
- lazy val expireMs: Int = accessTokenExpireTimeoutMins * 60 * 1000
+ def scannerMs: Int = timeoutScannerFreqMins * 60 * 1000
+ def expireMs: Int = accessTokenExpireTimeoutMins * 60 * 1000
/**
*
diff --git a/src/test/scala/org/apache/nlpcraft/model/intent/dsl/NCDslTest.java b/src/test/scala/org/apache/nlpcraft/model/intent/dsl/NCDslTest.java
index 8ea9cba..4934ca1 100644
--- a/src/test/scala/org/apache/nlpcraft/model/intent/dsl/NCDslTest.java
+++ b/src/test/scala/org/apache/nlpcraft/model/intent/dsl/NCDslTest.java
@@ -43,7 +43,8 @@ class NCDslTest {
@AfterEach
void tearDown() throws NCException, IOException {
- cli.close();
+ if (cli != null)
+ cli.close();
NCEmbeddedProbe.stop();
}
diff --git a/src/test/scala/org/apache/nlpcraft/models/stm/NCStmTestModelSpec.java b/src/test/scala/org/apache/nlpcraft/models/stm/NCStmTestModelSpec.java
index f95ae31..90ba5a2 100644
--- a/src/test/scala/org/apache/nlpcraft/models/stm/NCStmTestModelSpec.java
+++ b/src/test/scala/org/apache/nlpcraft/models/stm/NCStmTestModelSpec.java
@@ -17,13 +17,14 @@
package org.apache.nlpcraft.models.stm;
-import org.junit.jupiter.api.AfterEach;
-import org.junit.jupiter.api.BeforeEach;
-import org.junit.jupiter.api.Test;
import org.apache.nlpcraft.common.NCException;
import org.apache.nlpcraft.model.tools.test.NCTestClient;
import org.apache.nlpcraft.model.tools.test.NCTestClientBuilder;
import org.apache.nlpcraft.model.tools.test.NCTestResult;
+import org.apache.nlpcraft.probe.embedded.NCEmbeddedProbe;
+import org.junit.jupiter.api.AfterEach;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
import java.io.IOException;
@@ -34,18 +35,23 @@ import static org.junit.jupiter.api.Assertions.assertTrue;
* Server and probe with deployed org.apache.nlpcraft.models.stm.NCStmTestModel should be started before.
*/
class NCStmTestModelSpec {
- private NCTestClient client;
+ private NCTestClient cli;
@BeforeEach
void setUp() throws NCException, IOException {
- client = new NCTestClientBuilder().newBuilder().build();
+ NCEmbeddedProbe.start(NCStmTestModel.class);
+
+ cli = new NCTestClientBuilder().newBuilder().build();
- client.open("nlpcraft.stm.test"); // See phone_model.json
+ cli.open("nlpcraft.stm.test"); // See phone_model.json
}
@AfterEach
void tearDown() throws NCException, IOException {
- client.close();
+ if (cli != null)
+ cli.close();
+
+ NCEmbeddedProbe.stop();
}
/**
@@ -54,7 +60,7 @@ class NCStmTestModelSpec {
* @throws IOException
*/
private void check(String req, String expResp) throws IOException {
- NCTestResult res = client.ask(req);
+ NCTestResult res = cli.ask(req);
assertTrue(res.isOk());
assertTrue(res.getResult().isPresent());