Skip to content

boot-java.remote-apps: manualConnect from settings is overwritten, so declared remote apps no longer connect (5.3.0.RELEASE) #1956

Description

@luceat-lux-vestra

Summary

In 5.3.0.RELEASE, every RemoteBootAppData parsed from the boot-java.remote-apps
setting has manualConnection forced to true before it reaches
SpringProcessConnectorRemote.updateApps. The user's own manualConnect value is
deserialised and then overwritten, so declaring a remote app no longer connects it —
and there is no setting that restores the previous behaviour.

In 5.2.0.RELEASE a declared app connects on its own.

Where

BootLanguageServerBootApp.lambda$remoteAppsFromSettingsConnector$0 gained a loop
over the parsed array:

aload         6
iconst_1
invokevirtual  // Method …SpringProcessConnectorRemote$RemoteBootAppData.setManualConnection:(Z)V

iconst_1 — unconditional, after deserialisation, before updateApps. For
comparison, updateApps itself is byte-identical between the two releases, and
connectProcess differs only by a new null-jmxurl branch into
connectLocalProcessByPid.

RemoteBootAppData.manualConnect still exists and is still populated from the
settings JSON in 5.3.0.RELEASE, which is what makes this look like an oversight
rather than an intended API change: the field is read and then discarded.

Reproduction

Driven with a minimal LSP client over stdio against the released server jars —
no VS Code, no other IDE client — so nothing here depends on a particular
front-end.

  1. Start any Boot application with the Actuator HTTP endpoints exposed
    (management.endpoints.web.exposure.include=*), reachable at
    http://localhost:8080/actuator.

  2. initialize the language server, then send workspace/didChangeConfiguration
    with:

    { "boot-java": { "remote-apps": [ { "jmxurl": "http://localhost:8080/actuator" } ] } }
  3. Wait, then call sts/livedata/listConnected.

5.2.0.RELEASE 5.3.0.RELEASE
listConnected after declaring 1 entry 0 entries
listProcesses for the declared app 2 entries (refresh, disconnect) 1 entry (connect)
same, with "manualConnect": false written explicitly still 0 entries

The wait is not the variable: 5.3.0.RELEASE is still unconnected after 150 s,
while 5.2.0.RELEASE connects within the same window.

Everything after an explicit connect is unchanged on both releases —
sts/liveprocess/connected with type: "remote" and processKey equal to the
declared jmxurl, sts/livedata/get returning 409 beans and 30 mappings,
sts/livedata/getLoggers answering, and clearing the array to [] publishing
sts/liveprocess/disconnected. Only the automatic attach is affected.

Expected

Either manualConnect from the settings entry is honoured (it is still read), or
the field is removed and the new behaviour documented. Right now a client can set
it, the server stores it, and the value never takes effect.

Environment

  • Spring Tools 5.3.0.RELEASE (spring-boot-language-server-2.3.0-SNAPSHOT-exec.jar)
    vs 5.2.0.RELEASE (spring-boot-language-server-2.2.0-SNAPSHOT-exec.jar), both
    from the official GitHub release VSIX
  • macOS 26.5.2 arm64, Eclipse Temurin JDK 21.0.11
  • Target: Spring Boot 3.5.5 over Actuator HTTP

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions