From ccc5550598b9c4537e64fe78059e05b0a3134614 Mon Sep 17 00:00:00 2001 From: Relism Date: Mon, 11 May 2026 16:14:26 +0200 Subject: [PATCH] feat: introduce WebSocket support with new endpoints and transaction propagation enhancements --- .github/workflows/publish-javadoc.yml | 38 ++ .idea/workspace.xml | 512 ++++++------------ benchmarks/websocket/benchmark.yml | 24 + .../flash-ext-data-core/docs/README.md | 81 +++ .../relism/flash/ext/data/DataExtension.java | 10 +- .../dev/relism/flash/ext/data/core/Query.java | 28 + .../flash/ext/data/core/Repository.java | 191 +++---- .../ext/data/core/RepositorySupport.java | 24 + .../flash/ext/data/core/ResourceRegistry.java | 5 + .../dev/relism/flash/ext/data/core/Sort.java | 6 +- .../dev/relism/flash/ext/data/core/Spec.java | 26 + .../flash/ext/data/core/SpecBuilder.java | 37 ++ .../flash/ext/data/core/SpecContext.java | 5 + .../ext/data/core/TransactionPropagation.java | 1 + .../dev/relism/flash/ext/data/core/Tx.java | 69 +-- .../flash-ext-data-hibernate/docs/README.md | 92 ++++ .../data/hibernate/HibernateRepository.java | 164 +++--- .../data/hibernate/HibernateSpecContext.java | 28 + .../data/hibernate/HibernateTxManager.java | 107 +++- .../ext/data/hibernate/HibernateTxStatus.java | 3 + .../flash-ext-data-jdbc/docs/README.md | 96 ++++ .../flash/ext/data/jdbc/JdbcRepository.java | 158 +++--- .../flash/ext/data/jdbc/JdbcSpecContext.java | 28 + .../flash/ext/data/jdbc/JdbcTxManager.java | 76 ++- .../flash/ext/data/jdbc/JdbcTxStatus.java | 3 + .../flash/ext/openapi/OpenApiExtension.java | 2 +- .../ext/openapi/OpenApiExtensionTest.java | 6 + .../flash/ext/view/jte/JteExtensionTest.java | 6 + .../java/dev/relism/flash/HttpServer.java | 335 ++++++++++-- .../java/dev/relism/flash/RequestParser.java | 95 +++- .../java/dev/relism/flash/ServerHandle.java | 7 +- .../dev/relism/flash/extension/FlashApp.java | 54 +- .../flash/extension/FlashConfiguration.java | 4 + .../flash/extension/FlashRegistrar.java | 20 +- .../relism/flash/extension/FlashScope.java | 10 + .../flash/extension/PackageScanner.java | 64 ++- .../flash/routing/AbstractWsRouter.java | 34 ++ .../java/dev/relism/flash/routing/Ws.java | 25 + .../fastpathrouter/FastPathWsRouterImpl.java | 68 +++ .../flash/websocket/WebSocketEndpoint.java | 42 ++ .../flash/websocket/WebSocketFrame.java | 81 +++ .../flash/websocket/WebSocketHandler.java | 20 + .../flash/websocket/WebSocketSession.java | 210 +++++++ .../relism/flash/HttpServerWebSocketTest.java | 193 +++++++ .../extension/FlashAppWebSocketTest.java | 47 ++ .../flash/extension/PackageScannerTest.java | 24 + .../flash/routing/AbstractWsRouterTest.java | 43 ++ .../websocket/WebSocketEndpointTest.java | 40 ++ .../flash/websocket/WebSocketFrameTest.java | 24 + .../websocket/WebSocketSessionFrameTest.java | 43 ++ .../flash/websocket/WebSocketSessionTest.java | 39 ++ .../websocket/onlyws/OnlyWsEndpoint.java | 22 + .../websocket/scantest/ScanHttpHandler.java | 16 + .../websocket/scantest/ScanWsEndpoint.java | 22 + qodana.yaml | 49 ++ 55 files changed, 2705 insertions(+), 752 deletions(-) create mode 100644 .github/workflows/publish-javadoc.yml create mode 100644 benchmarks/websocket/benchmark.yml create mode 100644 flash-extensions/flash-ext-data-core/docs/README.md create mode 100644 flash-extensions/flash-ext-data-core/src/main/java/dev/relism/flash/ext/data/core/Query.java create mode 100644 flash-extensions/flash-ext-data-core/src/main/java/dev/relism/flash/ext/data/core/RepositorySupport.java create mode 100644 flash-extensions/flash-ext-data-core/src/main/java/dev/relism/flash/ext/data/core/Spec.java create mode 100644 flash-extensions/flash-ext-data-core/src/main/java/dev/relism/flash/ext/data/core/SpecBuilder.java create mode 100644 flash-extensions/flash-ext-data-core/src/main/java/dev/relism/flash/ext/data/core/SpecContext.java create mode 100644 flash-extensions/flash-ext-data-hibernate/docs/README.md create mode 100644 flash-extensions/flash-ext-data-hibernate/src/main/java/dev/relism/flash/ext/data/hibernate/HibernateSpecContext.java create mode 100644 flash-extensions/flash-ext-data-jdbc/docs/README.md create mode 100644 flash-extensions/flash-ext-data-jdbc/src/main/java/dev/relism/flash/ext/data/jdbc/JdbcSpecContext.java create mode 100644 flash/src/main/java/dev/relism/flash/routing/AbstractWsRouter.java create mode 100644 flash/src/main/java/dev/relism/flash/routing/Ws.java create mode 100644 flash/src/main/java/dev/relism/flash/routing/routers/fastpathrouter/FastPathWsRouterImpl.java create mode 100644 flash/src/main/java/dev/relism/flash/websocket/WebSocketEndpoint.java create mode 100644 flash/src/main/java/dev/relism/flash/websocket/WebSocketFrame.java create mode 100644 flash/src/main/java/dev/relism/flash/websocket/WebSocketHandler.java create mode 100644 flash/src/main/java/dev/relism/flash/websocket/WebSocketSession.java create mode 100644 flash/src/test/java/dev/relism/flash/HttpServerWebSocketTest.java create mode 100644 flash/src/test/java/dev/relism/flash/extension/FlashAppWebSocketTest.java create mode 100644 flash/src/test/java/dev/relism/flash/extension/PackageScannerTest.java create mode 100644 flash/src/test/java/dev/relism/flash/routing/AbstractWsRouterTest.java create mode 100644 flash/src/test/java/dev/relism/flash/websocket/WebSocketEndpointTest.java create mode 100644 flash/src/test/java/dev/relism/flash/websocket/WebSocketFrameTest.java create mode 100644 flash/src/test/java/dev/relism/flash/websocket/WebSocketSessionFrameTest.java create mode 100644 flash/src/test/java/dev/relism/flash/websocket/WebSocketSessionTest.java create mode 100644 flash/src/test/java/dev/relism/flash/websocket/onlyws/OnlyWsEndpoint.java create mode 100644 flash/src/test/java/dev/relism/flash/websocket/scantest/ScanHttpHandler.java create mode 100644 flash/src/test/java/dev/relism/flash/websocket/scantest/ScanWsEndpoint.java create mode 100644 qodana.yaml diff --git a/.github/workflows/publish-javadoc.yml b/.github/workflows/publish-javadoc.yml new file mode 100644 index 0000000..ca89052 --- /dev/null +++ b/.github/workflows/publish-javadoc.yml @@ -0,0 +1,38 @@ +name: Deploy Publish JavaDoc + +on: + push: + branches: + - master + +jobs: + publish: + runs-on: ubuntu-latest + permissions: + contents: write + steps: + - name: Checkout + uses: actions/checkout@v4 + + - name: Set up Temurin 21 + uses: actions/setup-java@v4 + with: + distribution: temurin + java-version: 21 + cache: maven + + - name: Build release artifacts + run: mvn -B -DskipTests clean verify + + - name: Generate aggregated JavaDoc + run: mvn -B -DskipTests -pl flash,flash-extensions -am javadoc:aggregate + + - name: Publish JavaDoc + uses: MathieuSoysal/Javadoc-publisher.yml@v3.0.2 + with: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + javadoc-branch: javadoc + java-version: 21 + target-folder: javadoc + project: maven + custom-command: mvn -B -DskipTests -pl flash,flash-extensions -am javadoc:aggregate -DskipTests diff --git a/.idea/workspace.xml b/.idea/workspace.xml index 49a3dae..ffe5512 100644 --- a/.idea/workspace.xml +++ b/.idea/workspace.xml @@ -4,292 +4,95 @@