fury icon indicating copy to clipboard operation
fury copied to clipboard

[Java]Fury With IBM Semeru OpenJ9 run Error

Open mail-ricklee-mail opened this issue 10 months ago • 6 comments

Search before asking

  • [x] I had searched in the issues and found no similar issues.

Version

Fury 0.9.0 ibm-semeru-open-jdk_x64_windows_8u432b06_openj9-0.48.0

Component(s)

Java

Minimal reproduce step

when i use ibm-semeru-open-jdk_x64_windows_8u432b06_openj9-0.48.0 then error message

` Caused by: java.lang.NoClassDefFoundError: org.apache.fury.serializer.StringSerializer (initialization failure) at java.lang.J9VMInternals.initializationAlreadyFailed(J9VMInternals.java:108) at org.apache.fury.resolver.ClassResolver.addDefaultSerializers(ClassResolver.java:320) at org.apache.fury.resolver.ClassResolver.initialize(ClassResolver.java:313) at org.apache.fury.Fury.(Fury.java:150) at org.apache.fury.config.FuryBuilder.newFury(FuryBuilder.java:419) at org.apache.fury.config.FuryBuilder.lambda$buildThreadSafeFuryPool$1(FuryBuilder.java:487) at org.apache.fury.pool.ClassLoaderFuryPooled.addFury(ClassLoaderFuryPooled.java:119) at org.apache.fury.pool.ClassLoaderFuryPooled.(ClassLoaderFuryPooled.java:77) at org.apache.fury.pool.FuryPooledObjectFactory.getOrAddCache(FuryPooledObjectFactory.java:138) at org.apache.fury.pool.FuryPooledObjectFactory.setClassLoader(FuryPooledObjectFactory.java:121) at org.apache.fury.pool.ThreadPoolFury.setClassLoader(ThreadPoolFury.java:284) at org.apache.fury.pool.ThreadPoolFury.setClassLoader(ThreadPoolFury.java:279) at org.apache.fury.config.FuryBuilder.buildThreadSafeFuryPool(FuryBuilder.java:492)

Caused by: java.lang.IllegalArgumentException: Current jdk not supported at org.apache.fury.util.Preconditions.checkArgument(Preconditions.java:58) at org.apache.fury.serializer.StringSerializer.(StringSerializer.java:101) at org.apache.fury.resolver.ClassResolver.addDefaultSerializers(ClassResolver.java:320) at org.apache.fury.resolver.ClassResolver.initialize(ClassResolver.java:313) at org.apache.fury.Fury.(Fury.java:150) at org.apache.fury.config.FuryBuilder.newFury(FuryBuilder.java:419) at org.apache.fury.config.FuryBuilder.lambda$buildThreadSafeFuryPool$1(FuryBuilder.java:487) at org.apache.fury.pool.ClassLoaderFuryPooled.addFury(ClassLoaderFuryPooled.java:119) at org.apache.fury.pool.ClassLoaderFuryPooled.(ClassLoaderFuryPooled.java:77) at org.apache.fury.pool.FuryPooledObjectFactory.getOrAddCache(FuryPooledObjectFactory.java:138) at org.apache.fury.pool.FuryPooledObjectFactory.setClassLoader(FuryPooledObjectFactory.java:121) at org.apache.fury.pool.ThreadPoolFury.setClassLoader(ThreadPoolFury.java:284) at org.apache.fury.pool.ThreadPoolFury.setClassLoader(ThreadPoolFury.java:279) at org.apache.fury.config.FuryBuilder.buildThreadSafeFuryPool(FuryBuilder.java:492) `

What did you expect to see?

Caused by: java.lang.IllegalArgumentException: Current jdk not supported

What did you see instead?

fury can support openj9 with ibm-semeru-open-jdk

Anything Else?

No response

Are you willing to submit a PR?

  • [ ] I'm willing to submit a PR!

mail-ricklee-mail avatar Feb 21 '25 03:02 mail-ricklee-mail

package org.apache.fury.serializer;

public final class StringSerializer extends ImmutableSerializer<String>

// String length field for android.
Preconditions.checkArgument(
    ReflectionUtils.getFieldNullable(String.class, "count") == null,
    "Current jdk not supported");
Preconditions.checkArgument(
    ReflectionUtils.getFieldNullable(String.class, "offset") == null,
    "Current jdk not supported");

mail-ricklee-mail avatar Feb 21 '25 03:02 mail-ricklee-mail

ibm-semeru-open-jdk_x64_windows_8u432b06_openj9-0.48.0 is not android

mail-ricklee-mail avatar Feb 21 '25 03:02 mail-ricklee-mail

Hi @mail-ricklee-mail , thanks for reporting this issue. Would you like to submit a pr to fix it?

We could add a new path in writeJavaString:

  public void writeJavaString(MemoryBuffer buffer, String value) {
    if (STRING_WITH_OFFSET) {
      writeStringWithOffset(buffer, value);
    }
    if (STRING_VALUE_FIELD_IS_BYTES) {
      if (compressString) {
        writeCompressedBytesString(buffer, value);
      } else {
        writeBytesString(buffer, value);
      }
    } else {
      assert STRING_VALUE_FIELD_IS_CHARS;
      if (compressString) {
        writeCompressedCharsString(buffer, value);
      } else {
        writeCharsString(buffer, value);
      }
    }
  }

StringSerializer#writeStringExpr also be updated.

chaokunyang avatar Feb 21 '25 03:02 chaokunyang

Can Fix This bug Next Version?

mail-ricklee-mail avatar Feb 21 '25 03:02 mail-ricklee-mail

We plan to make a new release in next week. If it can be fix this week, it will be fixed in next release version

chaokunyang avatar Feb 21 '25 03:02 chaokunyang

thanks

mail-ricklee-mail avatar Feb 21 '25 03:02 mail-ricklee-mail