diff --git a/.gitignore b/.gitignore index 07e8230707a..bdbbccd1176 100644 --- a/.gitignore +++ b/.gitignore @@ -16,4 +16,5 @@ release.properties dist/ yarn-debug.log* yarn-error.log* -ddf-ui-deplist.out \ No newline at end of file +ddf-ui-deplist.out +**/.java-version \ No newline at end of file diff --git a/pom.xml b/pom.xml index e3547d28189..b3682d70ce1 100644 --- a/pom.xml +++ b/pom.xml @@ -65,7 +65,7 @@ 2.3.0 - 2.29.17 + 2.29.18 0.9 2.3.16 4.3 diff --git a/ui-backend/catalog-ui-search/pom.xml b/ui-backend/catalog-ui-search/pom.xml index cab17995658..cafa3ecf8ec 100644 --- a/ui-backend/catalog-ui-search/pom.xml +++ b/ui-backend/catalog-ui-search/pom.xml @@ -41,6 +41,21 @@ ows-v_1_1_0-schema ${ows-v_1_0_0-schema.version} + + org.eclipse.jetty.websocket + websocket-server + ${jetty.version} + + + org.eclipse.jetty + jetty-http + ${jetty.version} + + + org.codice.ddf.search + catalog-ui-websockets + ${project.version} + org.jvnet.jaxb2_commons jaxb2-basics-runtime diff --git a/ui-backend/catalog-ui-search/src/main/resources/OSGI-INF/blueprint/blueprint.xml b/ui-backend/catalog-ui-search/src/main/resources/OSGI-INF/blueprint/blueprint.xml index 962beee4e5d..390132c9228 100644 --- a/ui-backend/catalog-ui-search/src/main/resources/OSGI-INF/blueprint/blueprint.xml +++ b/ui-backend/catalog-ui-search/src/main/resources/OSGI-INF/blueprint/blueprint.xml @@ -393,6 +393,7 @@ Implementation details + @@ -425,6 +426,13 @@ Implementation details + + + + + + + + + 4.0.0 + + backend + org.codice.ddf.search + 5.2.19-SNAPSHOT + + bundle + + catalog-ui-websockets + DDF :: Catalog :: UI :: Websockets + + + + ddf.security.servlet + security-servlet-web-socket-api + ${ddf.version} + + + + + + + org.apache.felix + maven-bundle-plugin + + + ${project.artifactId} + /search/catalog/ws + + + + + + + + diff --git a/ui-backend/catalog-ui-websockets/src/main/java/org/codice/ddf/catalog/ui/websockets/CustomWebSocketCreator.java b/ui-backend/catalog-ui-websockets/src/main/java/org/codice/ddf/catalog/ui/websockets/CustomWebSocketCreator.java new file mode 100644 index 00000000000..b667a10d76e --- /dev/null +++ b/ui-backend/catalog-ui-websockets/src/main/java/org/codice/ddf/catalog/ui/websockets/CustomWebSocketCreator.java @@ -0,0 +1,15 @@ +package org.codice.ddf.catalog.ui.websockets; + +import org.eclipse.jetty.websocket.servlet.ServletUpgradeRequest; +import org.eclipse.jetty.websocket.servlet.ServletUpgradeResponse; +import org.eclipse.jetty.websocket.servlet.WebSocketCreator; + +public class CustomWebSocketCreator implements WebSocketCreator { + + @Override + public Object createWebSocket( + ServletUpgradeRequest servletUpgradeRequest, ServletUpgradeResponse servletUpgradeResponse) { + return StaticHolder.webSocketCreator.createWebSocket( + servletUpgradeRequest, servletUpgradeResponse); + } +} diff --git a/ui-backend/catalog-ui-search/src/main/java/org/codice/ddf/catalog/ui/WebSocketContextHelper.java b/ui-backend/catalog-ui-websockets/src/main/java/org/codice/ddf/catalog/ui/websockets/SearchCatalogWebSocket.java similarity index 57% rename from ui-backend/catalog-ui-search/src/main/java/org/codice/ddf/catalog/ui/WebSocketContextHelper.java rename to ui-backend/catalog-ui-websockets/src/main/java/org/codice/ddf/catalog/ui/websockets/SearchCatalogWebSocket.java index 79249e563a8..395beac1aa6 100644 --- a/ui-backend/catalog-ui-search/src/main/java/org/codice/ddf/catalog/ui/WebSocketContextHelper.java +++ b/ui-backend/catalog-ui-websockets/src/main/java/org/codice/ddf/catalog/ui/websockets/SearchCatalogWebSocket.java @@ -11,13 +11,20 @@ * License is distributed along with this program and can be found at * . */ -package org.codice.ddf.catalog.ui; +package org.codice.ddf.catalog.ui.websockets; -import org.osgi.service.component.annotations.Component; -import org.osgi.service.component.annotations.ServiceScope; -import org.osgi.service.http.context.ServletContextHelper; -import org.osgi.service.http.whiteboard.propertytypes.HttpWhiteboardContext; +import javax.servlet.annotation.WebServlet; +import org.eclipse.jetty.websocket.servlet.WebSocketServlet; +import org.eclipse.jetty.websocket.servlet.WebSocketServletFactory; -@Component(service = ServletContextHelper.class, scope = ServiceScope.BUNDLE) -@HttpWhiteboardContext(name = "websocketContextHelper", path = "/search/catalog/ws") -public class WebSocketContextHelper extends ServletContextHelper {} +@WebServlet( + name = "SearchCatalogWebsockets", + urlPatterns = {"/*", "/"}, + asyncSupported = true +) +public class SearchCatalogWebSocket extends WebSocketServlet { + @Override + public void configure(WebSocketServletFactory factory) { + factory.setCreator(new CustomWebSocketCreator()); + } +} diff --git a/ui-backend/catalog-ui-websockets/src/main/java/org/codice/ddf/catalog/ui/websockets/StaticHolder.java b/ui-backend/catalog-ui-websockets/src/main/java/org/codice/ddf/catalog/ui/websockets/StaticHolder.java new file mode 100644 index 00000000000..718cf4c6adf --- /dev/null +++ b/ui-backend/catalog-ui-websockets/src/main/java/org/codice/ddf/catalog/ui/websockets/StaticHolder.java @@ -0,0 +1,11 @@ +package org.codice.ddf.catalog.ui.websockets; + +import org.eclipse.jetty.websocket.servlet.WebSocketCreator; + +public class StaticHolder { + public static WebSocketCreator webSocketCreator; + + public StaticHolder(WebSocketCreator webSocketCreator) { + StaticHolder.webSocketCreator = webSocketCreator; + } +} diff --git a/ui-backend/catalog-ui-websockets/src/main/resources/OSGI-INF/blueprint/blueprint.xml b/ui-backend/catalog-ui-websockets/src/main/resources/OSGI-INF/blueprint/blueprint.xml new file mode 100644 index 00000000000..abd5f3491e9 --- /dev/null +++ b/ui-backend/catalog-ui-websockets/src/main/resources/OSGI-INF/blueprint/blueprint.xml @@ -0,0 +1,14 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/ui-backend/intrigue-ui-app/src/main/resources/features.xml b/ui-backend/intrigue-ui-app/src/main/resources/features.xml index cffe7a7d942..c1cc56d1a08 100644 --- a/ui-backend/intrigue-ui-app/src/main/resources/features.xml +++ b/ui-backend/intrigue-ui-app/src/main/resources/features.xml @@ -76,6 +76,7 @@ mvn:org.codice.ddf.search/catalog-ui-enumeration/${project.version} mvn:com.google.code.gson/gson/${gson.version} mvn:org.codice.ddf.search/catalog-ui-splitter/${project.version} + mvn:org.codice.ddf.search/catalog-ui-websockets/${project.version} mvn:org.apache.commons/commons-math3/${commons-math3.version} mvn:org.codice.ddf.search/audit-api/${project.version} mvn:org.codice.ddf.search/audit-application/${project.version} diff --git a/ui-backend/pom.xml b/ui-backend/pom.xml index cb10e30cd75..70faf89e271 100644 --- a/ui-backend/pom.xml +++ b/ui-backend/pom.xml @@ -25,5 +25,6 @@ audit javalin-utils deprecatable-enumeration-api + catalog-ui-websockets diff --git a/ui-frontend/packages/catalog-ui-search/src/main/webapp/js/model/QueryResponse.ts b/ui-frontend/packages/catalog-ui-search/src/main/webapp/js/model/QueryResponse.ts index 30b4f786b03..b23d721d0b9 100644 --- a/ui-frontend/packages/catalog-ui-search/src/main/webapp/js/model/QueryResponse.ts +++ b/ui-frontend/packages/catalog-ui-search/src/main/webapp/js/model/QueryResponse.ts @@ -35,7 +35,7 @@ if (StartupDataStore.Configuration.getWebSocketsEnabled() && window.WebSocket) { // @ts-expect-error ts-migrate(7053) FIXME: Element implicitly has an 'any' type because expre... Remove this comment to see the full error message const url = `${protocol[location.protocol]}//${location.hostname}:${ location.port - }${location.pathname}ws` + }${location.pathname}ws/` rpcInitial = new Client(url, { autoconnect: false }) // Only set rpc if the connection succeeds