Quarkus: Using Java 14 Record causes quarkusDev to hang

Created on 29 Apr 2020  路  14Comments  路  Source: quarkusio/quarkus

As discussed on the forum it seems when using a Java 14 Record the app hangs during startup.

2020-04-28T22:43:48.465+0200 [DEBUG] [org.gradle.process.internal.DefaultExecHandle] Changing state to: STARTING
2020-04-28T22:43:48.465+0200 [DEBUG] [org.gradle.process.internal.DefaultExecHandle] Waiting until process started: command '/Users/marceloverdijk/.sdkman/candidates/java/14.0.0-open/bin/java'.
2020-04-28T22:43:48.469+0200 [DEBUG] [org.gradle.process.internal.DefaultExecHandle] Changing state to: STARTED
2020-04-28T22:43:48.469+0200 [INFO] [org.gradle.process.internal.DefaultExecHandle] Successfully started process 'command '/Users/marceloverdijk/.sdkman/candidates/java/14.0.0-open/bin/java''
2020-04-28T22:43:48.469+0200 [DEBUG] [org.gradle.process.internal.ExecHandleRunner] waiting until streams are handled...
2020-04-28T22:43:48.486+0200 [QUIET] [system.out] OpenJDK 64-Bit Server VM warning: Options -Xverify:none and -noverify were deprecated in JDK 13 and will likely be removed in a future release.
2020-04-28T22:43:48.525+0200 [QUIET] [system.out] Listening for transport dt_socket at address: 5005
2020-04-28T22:43:59.889+0200 [LIFECYCLE] [org.gradle.cache.internal.DefaultFileLockManager]
2020-04-28T22:43:59.889+0200 [DEBUG] [org.gradle.cache.internal.DefaultFileLockManager] Waiting to acquire shared lock on daemon addresses registry.
2020-04-28T22:43:59.889+0200 [DEBUG] [org.gradle.cache.internal.DefaultFileLockManager] Lock acquired on daemon addresses registry.
2020-04-28T22:43:59.890+0200 [DEBUG] [org.gradle.cache.internal.DefaultFileLockManager] Releasing lock on daemon addresses registry.
2020-04-28T22:43:59.890+0200 [DEBUG] [org.gradle.cache.internal.DefaultFileLockManager] Waiting to acquire shared lock on daemon addresses registry.
2020-04-28T22:43:59.890+0200 [DEBUG] [org.gradle.cache.internal.DefaultFileLockManager] Lock acquired on daemon addresses registry.
2020-04-28T22:43:59.890+0200 [DEBUG] [org.gradle.cache.internal.DefaultFileLockManager] Releasing lock on daemon addresses registry.
2020-04-28T22:44:09.891+0200 [DEBUG] [org.gradle.cache.internal.DefaultFileLockManager] Waiting to acquire shared lock on daemon addresses registry.
2020-04-28T22:44:09.891+0200 [DEBUG] [org.gradle.cache.internal.DefaultFileLockManager] Lock acquired on daemon addresses registry.
2020-04-28T22:44:09.892+0200 [DEBUG] [org.gradle.cache.internal.DefaultFileLockManager] Releasing lock on daemon addresses registry.
2020-04-28T22:44:09.892+0200 [DEBUG] [org.gradle.cache.internal.DefaultFileLockManager] Waiting to acquire shared lock on daemon addresses registry.
2020-04-28T22:44:09.892+0200 [DEBUG] [org.gradle.cache.internal.DefaultFileLockManager] Lock acquired on daemon addresses registry.
2020-04-28T22:44:09.892+0200 [DEBUG] [org.gradle.cache.internal.DefaultFileLockManager] Releasing lock on daemon addresses registry.
<==========---> 80% EXECUTING [28s]

When I remove the Java Record it work again.

I encountered this initially using Gradle, but even adding Maven setup to the project I see the same issue.

Attached is a reproducer.

quarkus-java-record-issue.zip

kinbug

All 14 comments

Thanks for reporting.

Did you perhaps miss something in the reproducer, because it doesn't compile:

/home/gandrian/Downloads/quarkus-java-record-issue/quarkus-java-record-issue/src/test/java/com/example/domain/DriverTest.java:16: error: cannot find symbol
    Driver driver;
    ^
  symbol:   class Driver
  location: class DriverTest
/home/gandrian/Downloads/quarkus-java-record-issue/quarkus-java-record-issue/src/test/java/com/example/domain/DriverTest.java:20: error: cannot find symbol
        driver = new Driver();
                     ^
  symbol:   class Driver
  location: class DriverTest

Ah, forgot to delete the Test. You can delete it safely.
(I removed the domain classes but not the test)

I've updated the zip as well.

I can indeed reproduce the problem.

The problem is the old ASM version. We need to get https://github.com/quarkusio/gizmo/pull/36 in order for records to work properly (there is a an exception that is not being shown which is java.lang.RuntimeException: java.lang.UnsupportedOperationException: This feature requires ASM8_EXPERIMENTAL)

Thx, for now I can skip using Records and just create an immutable class with an args constructor.
That way I can move to Records later without much impact.

Sounds like a plan.

FWIW, the reason why we haven't merged the PR above is that we are waiting for ByteBuddy to do a new release with ASM 8 support (ByteBuddy is used at build time with Hibernate, so we need to have same ASM version used everywhere).

Just read ByteBuddy did a new release today 馃挭

Yup, saw that too, so I'll probably be checking it out soon.

@gsmet I assume we first need I hibernate release to pick up the ByteBuddy change?

@marceloverdijk can you give it another try with master? Everything should be OK now, we updated to ASM 8 and newest ByteBuddy.

I just tried this with master and now the application starts.

So I'm going to mark as fixed by https://github.com/quarkusio/quarkus/pull/9042.

Feel free to open another issue if you encounter problems with records.

Thx!

:+1:

Was this page helpful?
0 / 5 - 0 ratings