SONAR suggestion - Synchronize initialization of static fields
Change-Id: I2ddf8220bda49f235ddfc5713174c11a147df354
diff --git a/web/gui/src/main/java/org/onosproject/ui/impl/ApplicationResource.java b/web/gui/src/main/java/org/onosproject/ui/impl/ApplicationResource.java
index 16f288a..d8f5a44 100644
--- a/web/gui/src/main/java/org/onosproject/ui/impl/ApplicationResource.java
+++ b/web/gui/src/main/java/org/onosproject/ui/impl/ApplicationResource.java
@@ -41,7 +41,8 @@
@Path("applications")
public class ApplicationResource extends BaseResource {
- static String lastInstalledAppName = null;
+ private static String lastInstalledAppName = null;
+ private static final Object LAST_INSTALLED_APP_NAME_LOCK = new Object();
@Path("upload")
@@ -51,7 +52,9 @@
@FormDataParam("file") InputStream stream) throws IOException {
ApplicationAdminService service = get(ApplicationAdminService.class);
Application app = service.install(stream);
- lastInstalledAppName = app.id().name();
+ synchronized (LAST_INSTALLED_APP_NAME_LOCK) {
+ lastInstalledAppName = app.id().name();
+ }
if (Objects.equals(activate, "true")) {
service.activate(app.id());
}
@@ -87,4 +90,10 @@
Application app = service.getApplication(appId);
return Response.ok(app.icon()).build();
}
+
+ static String getLastInstalledAppName() {
+ synchronized (LAST_INSTALLED_APP_NAME_LOCK) {
+ return lastInstalledAppName;
+ }
+ }
}
diff --git a/web/gui/src/main/java/org/onosproject/ui/impl/ApplicationViewMessageHandler.java b/web/gui/src/main/java/org/onosproject/ui/impl/ApplicationViewMessageHandler.java
index 984dce2..6ed92a5 100644
--- a/web/gui/src/main/java/org/onosproject/ui/impl/ApplicationViewMessageHandler.java
+++ b/web/gui/src/main/java/org/onosproject/ui/impl/ApplicationViewMessageHandler.java
@@ -172,7 +172,7 @@
// If the ID was not specified in the payload, use the name of the
// most recently uploaded app.
if (isNullOrEmpty(id)) {
- id = ApplicationResource.lastInstalledAppName;
+ id = ApplicationResource.getLastInstalledAppName();
}
ApplicationId appId = as.getId(id);
diff --git a/web/gui/src/main/java/org/onosproject/ui/impl/UiWebSocketServlet.java b/web/gui/src/main/java/org/onosproject/ui/impl/UiWebSocketServlet.java
index 24e02e6..cfd2025 100644
--- a/web/gui/src/main/java/org/onosproject/ui/impl/UiWebSocketServlet.java
+++ b/web/gui/src/main/java/org/onosproject/ui/impl/UiWebSocketServlet.java
@@ -38,6 +38,7 @@
private static final long PING_DELAY_MS = 5000;
private static UiWebSocketServlet instance;
+ private static final Object INSTANCE_LOCK = new Object();
private ServiceDirectory directory = new DefaultServiceDirectory();
@@ -50,19 +51,23 @@
* Closes all currently open UI web-sockets.
*/
public static void closeAll() {
- if (instance != null) {
- instance.isStopped = true;
- instance.sockets.forEach(UiWebSocket::close);
- instance.sockets.clear();
- instance.pruner.cancel();
- instance.timer.cancel();
+ synchronized (INSTANCE_LOCK) {
+ if (instance != null) {
+ instance.isStopped = true;
+ instance.sockets.forEach(UiWebSocket::close);
+ instance.sockets.clear();
+ instance.pruner.cancel();
+ instance.timer.cancel();
+ }
}
}
@Override
public void init() throws ServletException {
super.init();
- instance = this;
+ synchronized (INSTANCE_LOCK) {
+ instance = this;
+ }
timer.schedule(pruner, PING_DELAY_MS, PING_DELAY_MS);
}
@@ -93,8 +98,10 @@
* @param payload message payload
*/
static void sendToAll(String type, ObjectNode payload) {
- if (instance != null) {
- instance.sockets.forEach(ws -> ws.sendMessage(type, payload));
+ synchronized (INSTANCE_LOCK) {
+ if (instance != null) {
+ instance.sockets.forEach(ws -> ws.sendMessage(type, payload));
+ }
}
}
@@ -106,9 +113,11 @@
* @param payload message payload
*/
static void sendToUser(String userName, String type, ObjectNode payload) {
- if (instance != null) {
- instance.sockets.stream().filter(ws -> userName.equals(ws.userName()))
- .forEach(ws -> ws.sendMessage(type, payload));
+ synchronized (INSTANCE_LOCK) {
+ if (instance != null) {
+ instance.sockets.stream().filter(ws -> userName.equals(ws.userName()))
+ .forEach(ws -> ws.sendMessage(type, payload));
+ }
}
}