Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Support Dapr Java SDK with JDK 17 and Spring boot version 3.0 #886

Open
rahulpoddar-fyndna opened this issue Jul 6, 2023 · 16 comments
Open
Labels
good first issue Good for newcomers kind/enhancement New feature or request

Comments

@rahulpoddar-fyndna
Copy link

Dapr java SDK is available with JDK 11 and uses spring boot version 2.7.8 as of now. Spring boot has the release latest version 3.0.
In order to move the Spring 3.0 the library has to be supported with JDK 17.

With JDK 17, the java enterprise edition has moved to Jakarta enterprise edition and this needs some code changes as well.Specifically all the javax namespace has moved to Jakarta namespace.

We plan to move to JDK 17 along with Spring Boot 3.0.

Dapr SDK provides sdk-springboot library to support development using spring boot. As of now this library uses spring boot version 2.7.8. sdk-springboot library needs to be supported with latest version of spring boot 3.0.

After successfully moving to JDK 17 and Spring boot 3.0, we will adopt Spring native.

@rahulpoddar-fyndna rahulpoddar-fyndna added the kind/enhancement New feature or request label Jul 6, 2023
@yaron2 yaron2 transferred this issue from dapr/dapr Jul 6, 2023
@yaron2
Copy link
Member

yaron2 commented Jul 6, 2023

cc @artursouza

@artursouza
Copy link
Member

There are users already reporting wanting to use Dapr's SDK with Spring Boot 3.0, like in #815

We need to complete this migration but have not started the work yet - I am looking for someone to get this work done. I can accept contribution from the community on this as well.

@yaron2 yaron2 added the good first issue Good for newcomers label Jul 10, 2023
@skyao
Copy link
Member

skyao commented Aug 16, 2023

I have one question about the target of this issue and related PR #894 : after this update, should dapr java sdk

  • supports only jdk17 and spring boot 3.0
  • or supports both jdk17 with spring boot 3.0 and jdk11 with spring boot 2.x

I think the answer should be the second, and also I found some changes in PR to support this idea:

      matrix:
 -       java: [ 11, 13, 15, 16 ]
 -       spring-boot-version: [ 2.7.8 ]
 +       java: [ 11, 13, 15, 16, 17 ]
 +      spring-boot-version: [ 2.7.8, 3.1.2 ]

and also :

          - java: 11
            spring-boot-version: 2.3.6.RELEASE
            experimental: false
+          - java: 17
+           spring-boot-version: 3.1.2
+          experimental: false

It seems that we will "ADD" support for java 17 and spirng boot 3.0 and still "keep" support for java 11+ and spring boot 2.

But I found that in the root pom.xml, the value of property springboot.version has simply changed from 2.7.8 to 3.1.2:

-    <springboot.version>2.7.8</springboot.version>
+    <springboot.version>3.1.2</springboot.version>

And when I used jdk11 to execute maven command like mvn compile:

$ sdk current java 
Using java version 11.0.20-zulu

# mvn compile
......
[ERROR] Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.11.0:compile (default-compile) on project dapr-sdk-springboot: Compilation failure
[ERROR] Could not load processor class file due to 'org/springframework/boot/configurationprocessor/ConfigurationMetadataAnnotationProcessor has been compiled by a more recent version of the Java Runtime (class file version 61.0), this version of the Java Runtime only recognizes class file versions up to 55.0'.

So from content of the PR #894, It seems that we will "ONLY" support for java 17 with spring boot 3 after this PR.

That's why I ask this question here: We must clarify or make decision about the target before we go deep into this update.

@skyao
Copy link
Member

skyao commented Aug 18, 2023

@artursouza @yaron2 @krizsan please have a look at my above comments and clarify what's your target for spring boot 3.0 support.

@skyao
Copy link
Member

skyao commented Aug 18, 2023

I have an suggestion about how to support jdk17/springboot3 in dapr java sdk and also keep supporting jdk11 (even jdk8 if possible) /springboot2:

Let's split current dapr java sdk project.

Picture1

Background: in current dapr java sdk project, we have several subprojects(ignoring docs/examples/tests): sdk / sdk-autogen / sdk-actors / sdk-workflows and sdk-springboot. Now it's for both pure java and spring boot 2.0, and the jdk version is jdk 11. In fact, jdk 8.0 is also supported.

Now I think our requirement should be both:

  1. add support for jdk17 and springboot 3.0
  2. still support for jdk 11 and springboot 2.0 (as what we do now)

And I had confirmed that both maven and gradle can't support to use different version of jdk to diffrent subprojects. So to support both above two requirements, I suggest to split current dapr java sdk project:

  • Move dapr-springboot subproject out of dapr java sdk: to a new project named dapr-springboot2
  • Make dapr java sdk to be a pure java project, no framework integration
  • Create a new project named dapr-springboot3

Picture2

After this updating, we will have 3 projects (and also 3 github repos):

  1. dapr/java-sdk: for pure java only, jdk version should be 8(nice to have) / 11 / 17(need to verify)
  2. dapr/dapr-springboot2: for spring boot 2.0 integration, jdk version should be 8 / 11 (no change)
  3. dap/dapr-springboot3: for spring boot 3.0 integration, jdk version should be 17

@rabollin
Copy link

@skyao - Given the limitations we are running to support both JAVA 17 & 11 the approach proposed you seem to be a best option. I think this approach may introduce some breaking changes to existing projects and can they be avoided?

@artursouza
Copy link
Member

artursouza commented Aug 21, 2023

I agree to have a different project (artifact) for springboot3. Let's keep the current one as-is (without renaming) for backwards compatibility. I don't think there is a need to create new repositories, just new projects under the same parent pom.

So, I recommend creating dapr-springboot3 under the same parent pom.

@skyao
Copy link
Member

skyao commented Aug 22, 2023

Hi, @artursouza , I agree with you except that can we have solution to just add dapr-springboot3 with jdk17 in the java-sdk project without upgrade the sdk of the whole project from jdk11 to jdk 17?

I had confirmed that both maven and gradle can't support to use different version of jdk to diffrent subprojects.

Another solution is keeping our jdk strategy in current java-sdk project that using jdk 11 but set source and target to jdk8:

    <maven.compiler.source>8</maven.compiler.source>
    <maven.compiler.target>8</maven.compiler.target>

We can then using jdk 17 and also set source and target to jdk8 (or jdk11 if jdk 8 not work) . But we should verify it before we make decision.

@krizsan you have coded on jdk17 and change a lot of dapr java-sdk code, would you please give us some suggestion?

@skyao
Copy link
Member

skyao commented Aug 22, 2023

I did some test and share the results to you.

First I changed the jdk version to 17 (by sdkman) , and I used jdk17 to execute mvn compile command in dapr java-sdk project without changing any code.

At first it reported many errors like:

......
     [java]   Couldn't get class info for java/lang/NumberFormatException
     [java]     java.lang.IllegalArgumentException: Unsupported class file major version 61
     [java]       At org.objectweb.asm.ClassReader.<init>(ClassReader.java:189)
     [java]       At org.objectweb.asm.ClassReader.<init>(ClassReader.java:170)
     [java]       At org.objectweb.asm.ClassReader.<init>(ClassReader.java:156)
     [java]       At edu.umd.cs.findbugs.asm.FBClassReader.<init>(FBClassReader.java:35)
     [java]       At edu.umd.cs.findbugs.classfile.engine.asm.ClassReaderAnalysisEngine.analyze(ClassReaderAnalysisEngine.java:48)
     [java]       At edu.umd.cs.findbugs.classfile.engine.asm.ClassReaderAnalysisEngine.analyze(ClassReaderAnalysisEngine.java:34)
     [java]       At edu.umd.cs.findbugs.classfile.impl.AnalysisCache.getClassAnalysis(AnalysisCache.java:261)
     [java]       At edu.umd.cs.findbugs.classfile.engine.ClassInfoAnalysisEngine.analyze(ClassInfoAnalysisEngine.java:75)
     [java]       At edu.umd.cs.findbugs.classfile.engine.ClassInfoAnalysisEngine.analyze(ClassInfoAnalysisEngine.java:38)
     [java]       At edu.umd.cs.findbugs.classfile.impl.AnalysisCache.getClassAnalysis(AnalysisCache.java:261)
     [java]       At edu.umd.cs.findbugs.ba.XFactory.getXClass(XFactory.java:685)
     [java]       At edu.umd.cs.findbugs.ba.AnalysisContext.setAppClassList(AnalysisContext.java:975)
     [java]       At edu.umd.cs.findbugs.FindBugs2.setAppClassList(FindBugs2.java:909)
     [java]       At edu.umd.cs.findbugs.FindBugs2.execute(FindBugs2.java:252)
     [java]       At edu.umd.cs.findbugs.FindBugs.runMain(FindBugs.java:395)
     [java]       At edu.umd.cs.findbugs.FindBugs2.main(FindBugs2.java:1231)
     [java]   Couldn't get class info for java/lang/AssertionError
     [java]     java.lang.IllegalArgumentException: Unsupported class file major version 61
     [java]       At org.objectweb.asm.ClassReader.<init>(ClassReader.java:189)
     [java]       At org.objectweb.asm.ClassReader.<init>(ClassReader.java:170)
     [java]       At org.objectweb.asm.ClassReader.<init>(ClassReader.java:156)
     [java]       At edu.umd.cs.findbugs.asm.FBClassReader.<init>(FBClassReader.java:35)
     [java]       At edu.umd.cs.findbugs.classfile.engine.asm.ClassReaderAnalysisEngine.analyze(ClassReaderAnalysisEngine.java:48)
     [java]       At edu.umd.cs.findbugs.classfile.engine.asm.ClassReaderAnalysisEngine.analyze(ClassReaderAnalysisEngine.java:34)
     [java]       At edu.umd.cs.findbugs.classfile.impl.AnalysisCache.getClassAnalysis(AnalysisCache.java:261)
     [java]       At edu.umd.cs.findbugs.classfile.engine.ClassInfoAnalysisEngine.analyze(ClassInfoAnalysisEngine.java:75)
     [java]       At edu.umd.cs.findbugs.classfile.engine.ClassInfoAnalysisEngine.analyze(ClassInfoAnalysisEngine.java:38)
     [java]       At edu.umd.cs.findbugs.classfile.impl.AnalysisCache.getClassAnalysis(AnalysisCache.java:261)
     [java]       At edu.umd.cs.findbugs.ba.XFactory.getXClass(XFactory.java:685)
     [java]       At edu.umd.cs.findbugs.ba.AnalysisContext.setAppClassList(AnalysisContext.java:975)
     [java]       At edu.umd.cs.findbugs.FindBugs2.setAppClassList(FindBugs2.java:909)
     [java]       At edu.umd.cs.findbugs.FindBugs2.execute(FindBugs2.java:252)
     [java]       At edu.umd.cs.findbugs.FindBugs.runMain(FindBugs.java:395)
     [java]       At edu.umd.cs.findbugs.FindBugs2.main(FindBugs2.java:1231)
     [java]   Couldn't get class info for java/util/Collections
     [java]     java.lang.IllegalArgumentException: Unsupported class file major version 61
     [java]       At org.objectweb.asm.ClassReader.<init>(ClassReader.java:189)
     [java]       At org.objectweb.asm.ClassReader.<init>(ClassReader.java:170)
     [java]       At org.objectweb.asm.ClassReader.<init>(ClassReader.java:156)
     [java]       At edu.umd.cs.findbugs.asm.FBClassReader.<init>(FBClassReader.java:35)
     [java]       At edu.umd.cs.findbugs.classfile.engine.asm.ClassReaderAnalysisEngine.analyze(ClassReaderAnalysisEngine.java:48)
     [java]       At edu.umd.cs.findbugs.classfile.engine.asm.ClassReaderAnalysisEngine.analyze(ClassReaderAnalysisEngine.java:34)
     [java]       At edu.umd.cs.findbugs.classfile.impl.AnalysisCache.getClassAnalysis(AnalysisCache.java:261)
     [java]       At edu.umd.cs.findbugs.classfile.engine.ClassInfoAnalysisEngine.analyze(ClassInfoAnalysisEngine.java:75)
     [java]       At edu.umd.cs.findbugs.classfile.engine.ClassInfoAnalysisEngine.analyze(ClassInfoAnalysisEngine.java:38)
     [java]       At edu.umd.cs.findbugs.classfile.impl.AnalysisCache.getClassAnalysis(AnalysisCache.java:261)
     [java]       At edu.umd.cs.findbugs.ba.XFactory.getXClass(XFactory.java:685)
     [java]       At edu.umd.cs.findbugs.ba.AnalysisContext.setAppClassList(AnalysisContext.java:975)
     [java]       At edu.umd.cs.findbugs.FindBugs2.setAppClassList(FindBugs2.java:909)
     [java]       At edu.umd.cs.findbugs.FindBugs2.execute(FindBugs2.java:252)
     [java]       At edu.umd.cs.findbugs.FindBugs.runMain(FindBugs.java:395)
     [java]       At edu.umd.cs.findbugs.FindBugs2.main(FindBugs2.java:1231)
     [java]   Couldn't get class info for java/lang/Float
     [java]     java.lang.IllegalArgumentException: Unsupported class file major version 61
     [java]       At org.objectweb.asm.ClassReader.<init>(ClassReader.java:189)
     [java]       At org.objectweb.asm.ClassReader.<init>(ClassReader.java:170)
     [java]       At org.objectweb.asm.ClassReader.<init>(ClassReader.java:156)
     [java]       At edu.umd.cs.findbugs.asm.FBClassReader.<init>(FBClassReader.java:35)
     [java]       At edu.umd.cs.findbugs.classfile.engine.asm.ClassReaderAnalysisEngine.analyze(ClassReaderAnalysisEngine.java:48)
     [java]       At edu.umd.cs.findbugs.classfile.engine.asm.ClassReaderAnalysisEngine.analyze(ClassReaderAnalysisEngine.java:34)
     [java]       At edu.umd.cs.findbugs.classfile.impl.AnalysisCache.getClassAnalysis(AnalysisCache.java:261)
     [java]       At edu.umd.cs.findbugs.classfile.engine.ClassInfoAnalysisEngine.analyze(ClassInfoAnalysisEngine.java:75)
     [java]       At edu.umd.cs.findbugs.classfile.engine.ClassInfoAnalysisEngine.analyze(ClassInfoAnalysisEngine.java:38)
     [java]       At edu.umd.cs.findbugs.classfile.impl.AnalysisCache.getClassAnalysis(AnalysisCache.java:261)
     [java]       At edu.umd.cs.findbugs.ba.XFactory.getXClass(XFactory.java:685)
     [java]       At edu.umd.cs.findbugs.ba.AnalysisContext.setAppClassList(AnalysisContext.java:975)
     [java]       At edu.umd.cs.findbugs.FindBugs2.setAppClassList(FindBugs2.java:909)
     [java]       At edu.umd.cs.findbugs.FindBugs2.execute(FindBugs2.java:252)
     [java]       At edu.umd.cs.findbugs.FindBugs.runMain(FindBugs.java:395)
     [java]       At edu.umd.cs.findbugs.FindBugs2.main(FindBugs2.java:1231)
     [java]   Couldn't get class info for java/util/Set
     [java]     java.lang.IllegalArgumentException: Unsupported class file major version 61
     [java]       At org.objectweb.asm.ClassReader.<init>(ClassReader.java:189)
     [java]       At org.objectweb.asm.ClassReader.<init>(ClassReader.java:170)
     [java]       At org.objectweb.asm.ClassReader.<init>(ClassReader.java:156)
     [java]       At edu.umd.cs.findbugs.asm.FBClassReader.<init>(FBClassReader.java:35)
     [java]       At edu.umd.cs.findbugs.classfile.engine.asm.ClassReaderAnalysisEngine.analyze(ClassReaderAnalysisEngine.java:48)
     [java]       At edu.umd.cs.findbugs.classfile.engine.asm.ClassReaderAnalysisEngine.analyze(ClassReaderAnalysisEngine.java:34)
     [java]       At edu.umd.cs.findbugs.classfile.impl.AnalysisCache.getClassAnalysis(AnalysisCache.java:261)
     [java]       At edu.umd.cs.findbugs.classfile.engine.ClassInfoAnalysisEngine.analyze(ClassInfoAnalysisEngine.java:75)
     [java]       At edu.umd.cs.findbugs.classfile.engine.ClassInfoAnalysisEngine.analyze(ClassInfoAnalysisEngine.java:38)
     [java]       At edu.umd.cs.findbugs.classfile.impl.AnalysisCache.getClassAnalysis(AnalysisCache.java:261)
     [java]       At edu.umd.cs.findbugs.ba.XFactory.getXClass(XFactory.java:685)
     [java]       At edu.umd.cs.findbugs.ba.AnalysisContext.setAppClassList(AnalysisContext.java:975)
     [java]       At edu.umd.cs.findbugs.FindBugs2.setAppClassList(FindBugs2.java:909)
     [java]       At edu.umd.cs.findbugs.FindBugs2.execute(FindBugs2.java:252)
     [java]       At edu.umd.cs.findbugs.FindBugs.runMain(FindBugs.java:395)
     [java]       At edu.umd.cs.findbugs.FindBugs2.main(FindBugs2.java:1231)
     [java] Exception in thread "main" java.lang.IllegalArgumentException: Unsupported class file major version 61
     [java]     at org.objectweb.asm.ClassReader.<init>(ClassReader.java:189)
     [java]     at org.objectweb.asm.ClassReader.<init>(ClassReader.java:170)
     [java]     at org.objectweb.asm.ClassReader.<init>(ClassReader.java:156)
     [java]     at edu.umd.cs.findbugs.asm.FBClassReader.<init>(FBClassReader.java:35)
     [java]     at edu.umd.cs.findbugs.classfile.engine.asm.ClassReaderAnalysisEngine.analyze(ClassReaderAnalysisEngine.java:48)
     [java]     at edu.umd.cs.findbugs.classfile.engine.asm.ClassReaderAnalysisEngine.analyze(ClassReaderAnalysisEngine.java:34)
     [java]     at edu.umd.cs.findbugs.classfile.impl.AnalysisCache.getClassAnalysis(AnalysisCache.java:261)
     [java]     at edu.umd.cs.findbugs.classfile.engine.ClassInfoAnalysisEngine.analyze(ClassInfoAnalysisEngine.java:75)
     [java]     at edu.umd.cs.findbugs.classfile.engine.ClassInfoAnalysisEngine.analyze(ClassInfoAnalysisEngine.java:38)
     [java]     at edu.umd.cs.findbugs.classfile.impl.AnalysisCache.getClassAnalysis(AnalysisCache.java:261)
     [java]     at edu.umd.cs.findbugs.ba.XFactory.getXClass(XFactory.java:685)
     [java]     at edu.umd.cs.findbugs.ba.AnalysisContext.setAppClassList(AnalysisContext.java:975)
     [java]     at edu.umd.cs.findbugs.FindBugs2.setAppClassList(FindBugs2.java:909)
     [java]     at edu.umd.cs.findbugs.FindBugs2.execute(FindBugs2.java:252)
     [java]     at edu.umd.cs.findbugs.FindBugs.runMain(FindBugs.java:395)
     [java]     at edu.umd.cs.findbugs.FindBugs2.main(FindBugs2.java:1231)
[INFO] ------------------------------------------------------------------------
[INFO] Reactor Summary:
[INFO] 
[INFO] dapr-sdk-parent 1.10.0-SNAPSHOT .................... SUCCESS [  1.040 s]
[INFO] dapr-sdk-autogen 1.10.0-SNAPSHOT ................... SUCCESS [  0.517 s]
[INFO] dapr-sdk 1.10.0-SNAPSHOT ........................... FAILURE [  1.695 s]
[INFO] dapr-sdk-actors 1.10.0-SNAPSHOT .................... SKIPPED
[INFO] dapr-sdk-workflows 0.10.0-SNAPSHOT ................. SKIPPED
[INFO] dapr-sdk-springboot 1.10.0-SNAPSHOT ................ SKIPPED
[INFO] dapr-sdk-examples 1.10.0-SNAPSHOT .................. SKIPPED
[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Total time:  3.565 s
[INFO] Finished at: 2023-08-22T09:17:53Z
[INFO] ------------------------------------------------------------------------
[ERROR] Failed to execute goal com.github.spotbugs:spotbugs-maven-plugin:4.1.4:spotbugs (spotbugs) on project dapr-sdk: Execution spotbugs of goal com.github.spotbugs:spotbugs-maven-plugin:4.1.4:spotbugs failed: Java returned: 1 -> [Help 1]

And then I removed the plugin of spotbugs in root pom.xml, and tried it again:

mvn compile

......
[INFO] dapr-sdk-parent 1.10.0-SNAPSHOT .................... SUCCESS [  0.785 s]
[INFO] dapr-sdk-autogen 1.10.0-SNAPSHOT ................... SUCCESS [  5.076 s]
[INFO] dapr-sdk 1.10.0-SNAPSHOT ........................... SUCCESS [  1.719 s]
[INFO] dapr-sdk-actors 1.10.0-SNAPSHOT .................... SUCCESS [  0.321 s]
[INFO] dapr-sdk-workflows 0.10.0-SNAPSHOT ................. SUCCESS [  0.184 s]
[INFO] dapr-sdk-springboot 1.10.0-SNAPSHOT ................ SUCCESS [  0.170 s]
[INFO] dapr-sdk-examples 1.10.0-SNAPSHOT .................. SUCCESS [  0.745 s]
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time:  9.523 s
[INFO] Finished at: 2023-08-22T09:20:02Z
[INFO] ------------------------------------------------------------------------

This is a good news for us. It seems that we use this simple solution to upgrade our jdk from 11 to 17 without too many code change. Yet this need more verification.

The jdk I used:

 $ java --version
java 17.0.8 2023-07-18 LTS
Java(TM) SE Runtime Environment (build 17.0.8+9-LTS-211)
Java HotSpot(TM) 64-Bit Server VM (build 17.0.8+9-LTS-211, mixed mode, sharing)

$ sdk current java          

Using java version 17.0.8-oracle

@skyao
Copy link
Member

skyao commented Aug 31, 2023

So from above discussion, it seems that at least we should move spring boot3 support out of dapr java sdk ( to a new repo).

@artursouza Do you agree with this proposal?

@skyao
Copy link
Member

skyao commented Sep 12, 2023

@artursouza please have a look at this discussion.

@artursouza
Copy link
Member

So from above discussion, it seems that at least we should move spring boot3 support out of dapr java sdk ( to a new repo).

@artursouza Do you agree with this proposal?

I don't think we should have a new repo just for springboot3 code - we should find a way to have it here. It is OK if Java17 is required for dev but the artifacts (jars) should be compatible for Java 11.

@artursouza
Copy link
Member

Is anyone working on dapr-springboot3 project? As discussed here, it can simply be a new artifact in this repo, similar to how dapr-workflow is being versioned.

@rabollin
Copy link

@skyao - FYA as this is in the priority list to solve it in 1.13 release timeframe.

@skyao
Copy link
Member

skyao commented Dec 13, 2023

Is anyone working on dapr-springboot3 project? As discussed here, it can simply be a new artifact in this repo, similar to how dapr-workflow is being versioned.

Hi, Artur, please go this proposal and review it:

#971

After all kinds of testing and validation, I finally found a solution that looks ideal for upgrading jdk17 and springboot 3.0. You can help me to see if this solution will satisfy you.

@salaboy
Copy link
Contributor

salaboy commented Jan 9, 2025

We upgraded to Spring Boot 3.x :

<springboot.version>3.2.6</springboot.version>
and the SDK as far as I know it is not using any JDK 17 features, so we are using 11, but it should be totally compatible. If someone finds an issue regarding this please create a new issue

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
good first issue Good for newcomers kind/enhancement New feature or request
Projects
None yet
Development

Successfully merging a pull request may close this issue.

6 participants