Skip to content

Commit 850f46d

Browse files
committed
Use random port in JS views for the internal service
1 parent b8994c5 commit 850f46d

File tree

6 files changed

+324
-301
lines changed

6 files changed

+324
-301
lines changed

de.bund.bfr.knime.fsklab.nodes/js-lib/bfr/fskutil_1.0.0.js

Lines changed: 267 additions & 266 deletions
Large diffs are not rendered by default.

de.bund.bfr.knime.fsklab.nodes/js-src/de/bund/bfr/knime/fsklab/nodes/neweditor/editor.js

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -48,19 +48,19 @@ fskeditorjs = function () {
4848
}
4949

5050
switch (_metadata.modelType) {
51-
case "genericModel": handler = new fskutil.GenericModel(_metadata); break;
52-
case "dataModel": handler = new fskutil.DataModel(_metadata); break;
53-
case "predictiveModel": handler = new fskutil.PredictiveModel(_metadata); break;
54-
case "otherModel": handler = new fskutil.OtherModel(_metadata); break;
55-
case "toxicologicalModel": handler = new fskutil.ToxicologicalModel(_metadata); break;
56-
case "doseResponseModel": handler = new fskutil.DoseResponseModel(_metadata); break;
57-
case "exposureModel": handler = new fskutil.ExposureModel(_metadata); break;
58-
case "processModel": handler = new fskutil.ProcessModel(_metadata); break;
59-
case "consumptionModel": handler = new fskutil.ConsumptionModel(_metadata); break;
60-
case "healthModel": handler = new fskutil.HealthModel(_metadata); break;
61-
case "riskModel": handler = new fskutil.RiskModel(_metadata); break;
62-
case "qraModel": handler = new fskutil.QraModel(_metadata); break;
63-
default: handler = new fskutil.GenericModel(_metadata); break;
51+
case "genericModel": handler = new fskutil.GenericModel(_metadata, _rep.servicePort); break;
52+
case "dataModel": handler = new fskutil.DataModel(_metadata, _rep.servicePort); break;
53+
case "predictiveModel": handler = new fskutil.PredictiveModel(_metadata, _rep.servicePort); break;
54+
case "otherModel": handler = new fskutil.OtherModel(_metadata, _rep.servicePort); break;
55+
case "toxicologicalModel": handler = new fskutil.ToxicologicalModel(_metadata, _rep.servicePort); break;
56+
case "doseResponseModel": handler = new fskutil.DoseResponseModel(_metadata, _rep.servicePort); break;
57+
case "exposureModel": handler = new fskutil.ExposureModel(_metadata, _rep.servicePort); break;
58+
case "processModel": handler = new fskutil.ProcessModel(_metadata, _rep.servicePort); break;
59+
case "consumptionModel": handler = new fskutil.ConsumptionModel(_metadata, _rep.servicePort); break;
60+
case "healthModel": handler = new fskutil.HealthModel(_metadata, _rep.servicePort); break;
61+
case "riskModel": handler = new fskutil.RiskModel(_metadata, _rep.servicePort); break;
62+
case "qraModel": handler = new fskutil.QraModel(_metadata, _rep.servicePort); break;
63+
default: handler = new fskutil.GenericModel(_metadata, _rep.servicePort); break;
6464
}
6565

6666
createUI();

de.bund.bfr.knime.fsklab.nodes/src/de/bund/bfr/knime/fsklab/FskPlugin.java

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@
3535
public class FskPlugin extends AbstractUIPlugin {
3636

3737
private static FskPlugin plugin;
38-
38+
3939
/**
4040
* Object mapper for 1.0.4 classes generated with Swagger at de.bund.bfr.metadata.swagger
4141
*/
@@ -49,6 +49,8 @@ public class FskPlugin extends AbstractUIPlugin {
4949
public ObjectMapper OLD_OBJECT_MAPPER;
5050

5151
private Thread service;
52+
53+
public FskService fskService;
5254

5355
public FskPlugin() {
5456
plugin = this;
@@ -75,7 +77,9 @@ public void start(BundleContext context) throws Exception {
7577

7678
OLD_OBJECT_MAPPER = new ObjectMapper().registerModule(new RakipModule());
7779

78-
service = new Thread(new FskService());
80+
fskService = new FskService();
81+
82+
service = new Thread(fskService);
7983
service.setName("FSK-Service");
8084
service.start();
8185
}

de.bund.bfr.knime.fsklab.nodes/src/de/bund/bfr/knime/fsklab/nodes/FSKEditorJSNodeModel.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -77,7 +77,9 @@ public FSKEditorJSNodeModel() {
7777

7878
@Override
7979
public FSKEditorJSViewRepresentation createEmptyViewRepresentation() {
80-
return new FSKEditorJSViewRepresentation();
80+
FSKEditorJSViewRepresentation representation = new FSKEditorJSViewRepresentation();
81+
representation.setServicePort(FskPlugin.getDefault().fskService.getPort());
82+
return representation;
8183
}
8284

8385
@Override

de.bund.bfr.knime.fsklab.nodes/src/de/bund/bfr/knime/fsklab/nodes/FSKEditorJSViewRepresentation.java

Lines changed: 26 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -32,17 +32,37 @@ final class FSKEditorJSViewRepresentation extends JSONViewContent {
3232

3333
public final int pseudoIdentifier = (new Random()).nextInt();
3434

35-
@Override
36-
public void saveToNodeSettings(NodeSettingsWO settings) {
35+
/**
36+
* Port number where FSK-Service is running.
37+
*
38+
* <p>
39+
* The service port number is to not be saved to settings as it depends on the computer. The same
40+
* port cannot be available in the future. So it is assigned during runtime by the node model.
41+
* </p>
42+
*/
43+
private int servicePort;
44+
45+
public FSKEditorJSViewRepresentation() {
46+
servicePort = 0;
47+
}
48+
49+
public int getServicePort() {
50+
return servicePort;
51+
}
52+
53+
public void setServicePort(int servicePort) {
54+
this.servicePort = servicePort;
3755
}
3856

3957
@Override
40-
public void loadFromNodeSettings(NodeSettingsRO settings) throws InvalidSettingsException {
41-
}
58+
public void saveToNodeSettings(NodeSettingsWO settings) {}
59+
60+
@Override
61+
public void loadFromNodeSettings(NodeSettingsRO settings) throws InvalidSettingsException {}
4262

4363
@Override
4464
public int hashCode() {
45-
return pseudoIdentifier;
65+
return servicePort;
4666
}
4767

4868
@Override
@@ -56,6 +76,6 @@ public boolean equals(final Object obj) {
5676
if (obj.getClass() != getClass()) {
5777
return false;
5878
}
59-
return true;
79+
return servicePort == ((FSKEditorJSViewRepresentation)obj).servicePort;
6080
}
6181
}

de.bund.bfr.knime.fsklab.service/src/de/bund/bfr/knime/fsklab/service/FskService.java

Lines changed: 9 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
11
package de.bund.bfr.knime.fsklab.service;
22

3+
import static spark.Spark.awaitInitialization;
34
import static spark.Spark.before;
45
import static spark.Spark.get;
56
import static spark.Spark.options;
67
import static spark.Spark.port;
7-
88
import java.io.File;
99
import java.io.IOException;
1010
import java.net.URI;
@@ -17,17 +17,13 @@
1717
import java.util.Arrays;
1818
import java.util.List;
1919
import java.util.Properties;
20-
2120
import org.apache.commons.io.FileUtils;
2221
import org.eclipse.core.runtime.FileLocator;
2322
import org.eclipse.core.runtime.Platform;
24-
import org.eclipse.jetty.server.Server;
2523
import org.h2.tools.DeleteDbFiles;
2624
import org.knime.core.node.NodeLogger;
2725
import org.osgi.framework.Bundle;
28-
2926
import com.google.gson.Gson;
30-
3127
import de.bund.bfr.rakip.vocabularies.data.AccreditationProcedureRepository;
3228
import de.bund.bfr.rakip.vocabularies.data.AvailabilityRepository;
3329
import de.bund.bfr.rakip.vocabularies.data.BasicProcessRepository;
@@ -76,15 +72,11 @@ public class FskService implements Runnable {
7672
private static final NodeLogger LOGGER = NodeLogger.getLogger(FskService.class);
7773

7874
private static final JsonTransformer jsonTransformer = new JsonTransformer();
79-
80-
private Server server;
81-
82-
public FskService() {
83-
server = new Server(0);
84-
}
75+
76+
private int port;
8577

8678
public int getPort() {
87-
return server.getURI() != null ? server.getURI().getPort() : -1;
79+
return port;
8880
}
8981

9082
@Override
@@ -111,7 +103,7 @@ public void run() {
111103
if (accessControlRequestMethod != null) {
112104
response.header("Access-Control-Allow-Methods", accessControlRequestMethod);
113105
}
114-
106+
115107
return "OK";
116108
});
117109

@@ -160,6 +152,10 @@ public void run() {
160152
//
161153
// return mgr.getFilenames();
162154
// }, jsonTransformer);
155+
156+
// After initializing the service, get the randomly picked port by Spark.
157+
awaitInitialization();
158+
port = port();
163159
}
164160

165161
private static class JsonTransformer implements ResponseTransformer {

0 commit comments

Comments
 (0)