This is an automated email from the ASF dual-hosted git repository.

chaokunyang pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/incubator-fury.git


The following commit(s) were added to refs/heads/main by this push:
     new 8e14efad chore(java): Extract BaseFury interface (#1382)
8e14efad is described below

commit 8e14efad1a5472240ece1ea731361d596e8d0a93
Author: LiangliangSui <[email protected]>
AuthorDate: Wed Feb 21 14:24:22 2024 +0800

    chore(java): Extract BaseFury interface (#1382)
    
    Extract the BaseFury interface based on Fury and ThreadSafeFury, and
    extract the common methods in Fury and ThreadSafeFury into BaseFury.
    
    Signed-off-by: LiangliangSui <[email protected]>
---
 .../fury/{ThreadSafeFury.java => BaseFury.java}    | 71 +++---------------
 .../src/main/java/org/apache/fury/Fury.java        | 69 ++++-------------
 .../main/java/org/apache/fury/ThreadSafeFury.java  | 87 +---------------------
 3 files changed, 29 insertions(+), 198 deletions(-)

diff --git a/java/fury-core/src/main/java/org/apache/fury/ThreadSafeFury.java 
b/java/fury-core/src/main/java/org/apache/fury/BaseFury.java
similarity index 59%
copy from java/fury-core/src/main/java/org/apache/fury/ThreadSafeFury.java
copy to java/fury-core/src/main/java/org/apache/fury/BaseFury.java
index ad251a8f..2fc943cf 100644
--- a/java/fury-core/src/main/java/org/apache/fury/ThreadSafeFury.java
+++ b/java/fury-core/src/main/java/org/apache/fury/BaseFury.java
@@ -19,26 +19,24 @@
 
 package org.apache.fury;
 
-import java.nio.ByteBuffer;
-import java.util.function.Function;
 import org.apache.fury.memory.MemoryBuffer;
 import org.apache.fury.serializer.Serializer;
 import org.apache.fury.serializer.Serializers;
-import org.apache.fury.util.LoaderBinding;
 
-/**
- * Thread safe serializer interface. {@link Fury} is not thread-safe, the 
implementation of this
- * interface will be thread-safe. And support switch classloader dynamically.
- */
-public interface ThreadSafeFury {
+/** All Fury’s basic interface, including Fury’s basic methods. */
+public interface BaseFury {
 
-  /** register class. */
+  /**
+   * register class.
+   *
+   * @param cls class to register.
+   */
   void register(Class<?> cls);
 
   /**
    * Register class.
    *
-   * @param cls class to register
+   * @param cls class to register.
    * @param createSerializer whether to create serializer, if true and codegen 
enabled, this will
    *     generate the serializer code too.
    */
@@ -50,7 +48,7 @@ public interface ThreadSafeFury {
   /**
    * Register class with specified id.
    *
-   * @param cls class to register
+   * @param cls class to register.
    * @param id id for provided class.
    * @param createSerializer whether to create serializer, if true and codegen 
enabled, this will
    *     generate the serializer code too.
@@ -60,18 +58,12 @@ public interface ThreadSafeFury {
   /**
    * Register a Serializer.
    *
-   * @param type class needed to be serialized/deserialized
-   * @param serializerClass serializer class can be created with {@link 
Serializers#newSerializer}
-   * @param <T> type of class
+   * @param type class needed to be serialized/deserialized.
+   * @param serializerClass serializer class can be created with {@link 
Serializers#newSerializer}.
+   * @param <T> type of class.
    */
   <T> void registerSerializer(Class<T> type, Class<? extends Serializer> 
serializerClass);
 
-  /**
-   * Provide a context to execution operations on {@link Fury} directly and 
return the executed
-   * result.
-   */
-  <R> R execute(Function<Fury, R> action);
-
   /** Return serialized <code>obj</code> as a byte array. */
   byte[] serialize(Object obj);
 
@@ -96,9 +88,6 @@ public interface ThreadSafeFury {
   /** Deserialize <code>obj</code> from a <code>buffer</code>. */
   Object deserialize(MemoryBuffer buffer);
 
-  /** Deserialize <code>obj</code> from a {@link ByteBuffer}. */
-  Object deserialize(ByteBuffer byteBuffer);
-
   /**
    * Serialize java object without class info, deserialization should use 
{@link
    * #deserializeJavaObject}.
@@ -122,40 +111,4 @@ public interface ThreadSafeFury {
    * #serializeJavaObject}.
    */
   <T> T deserializeJavaObject(MemoryBuffer buffer, Class<T> cls);
-
-  /**
-   * Set classLoader of serializer for current thread only.
-   *
-   * @see LoaderBinding#setClassLoader(ClassLoader)
-   */
-  void setClassLoader(ClassLoader classLoader);
-
-  /**
-   * Set classLoader of serializer for current thread only.
-   *
-   * <p>If <code>staging</code> is true, a cached {@link Fury} instance will 
be returned if not
-   * null, and the previous classloader and associated {@link Fury} instance 
won't be gc unless
-   * {@link #clearClassLoader} is called explicitly. If false, and the passed 
<code>classLoader
-   * </code> is different, a new {@link Fury} instance will be created, 
previous classLoader and
-   * associated {@link Fury} instance will be cleared.
-   *
-   * @param classLoader {@link ClassLoader} for resolving unregistered class 
name to class
-   * @param stagingType Whether cache previous classloader and associated 
{@link Fury} instance.
-   * @see LoaderBinding#setClassLoader(ClassLoader, LoaderBinding.StagingType)
-   */
-  void setClassLoader(ClassLoader classLoader, LoaderBinding.StagingType 
stagingType);
-
-  /** Returns classLoader of serializer for current thread. */
-  ClassLoader getClassLoader();
-
-  /**
-   * Clean up classloader set by {@link #setClassLoader(ClassLoader, 
LoaderBinding.StagingType)},
-   * <code>
-   * classLoader
-   * </code> won't be referenced by {@link Fury} after this call and can be gc 
if it's not
-   * referenced by other objects.
-   *
-   * @see LoaderBinding#clearClassLoader(ClassLoader)
-   */
-  void clearClassLoader(ClassLoader loader);
 }
diff --git a/java/fury-core/src/main/java/org/apache/fury/Fury.java 
b/java/fury-core/src/main/java/org/apache/fury/Fury.java
index 0ee93a9e..1320c23b 100644
--- a/java/fury-core/src/main/java/org/apache/fury/Fury.java
+++ b/java/fury-core/src/main/java/org/apache/fury/Fury.java
@@ -54,7 +54,6 @@ import org.apache.fury.serializer.OpaqueObjects;
 import org.apache.fury.serializer.PrimitiveSerializers.LongSerializer;
 import org.apache.fury.serializer.Serializer;
 import org.apache.fury.serializer.SerializerFactory;
-import org.apache.fury.serializer.Serializers;
 import org.apache.fury.serializer.StringSerializer;
 import org.apache.fury.type.Generics;
 import org.apache.fury.type.Type;
@@ -74,7 +73,7 @@ import org.slf4j.Logger;
  * serialization.
  */
 @NotThreadSafe
-public final class Fury {
+public final class Fury implements BaseFury {
   private static final Logger LOG = LoggerFactory.getLogger(Fury.class);
 
   public static final byte NULL_FLAG = -3;
@@ -139,35 +138,22 @@ public final class Fury {
     LOG.info("Created new fury {}", this);
   }
 
-  /** register class. */
+  @Override
   public void register(Class<?> cls) {
     classResolver.register(cls);
   }
 
-  /**
-   * Register class.
-   *
-   * @param cls class to register
-   * @param createSerializer whether to create serializer, if true and codegen 
enabled, this will
-   *     generate the serializer code too.
-   */
+  @Override
   public void register(Class<?> cls, boolean createSerializer) {
     classResolver.register(cls, createSerializer);
   }
 
-  /** register class with given id. */
+  @Override
   public void register(Class<?> cls, Short id) {
     classResolver.register(cls, id);
   }
 
-  /**
-   * Register class with specified id.
-   *
-   * @param cls class to register
-   * @param id id for provided class.
-   * @param createSerializer whether to create serializer, if true and codegen 
enabled, this will
-   *     generate the serializer code too.
-   */
+  @Override
   public void register(Class<?> cls, Short id, boolean createSerializer) {
     classResolver.register(cls, id, createSerializer);
   }
@@ -177,13 +163,7 @@ public final class Fury {
     classResolver.register(cls, typeTag);
   }
 
-  /**
-   * Register a Serializer.
-   *
-   * @param type class needed to be serialized/deserialized
-   * @param serializerClass serializer class can be created with {@link 
Serializers#newSerializer}
-   * @param <T> type of class
-   */
+  @Override
   public <T> void registerSerializer(Class<T> type, Class<? extends 
Serializer> serializerClass) {
     classResolver.registerSerializer(type, serializerClass);
   }
@@ -200,17 +180,14 @@ public final class Fury {
     return classResolver.getSerializerFactory();
   }
 
-  /**
-   * Serialize <code>obj</code> to a off-heap buffer specified by 
<code>address</code> and <code>
-   * size</code>.
-   */
+  @Override
   public MemoryBuffer serialize(Object obj, long address, int size) {
     MemoryBuffer buffer = MemoryUtils.buffer(address, size);
     serialize(buffer, obj, null);
     return buffer;
   }
 
-  /** Return serialized <code>obj</code> as a byte array. */
+  @Override
   public byte[] serialize(Object obj) {
     MemoryBuffer buf = getBuffer();
     buf.writerIndex(0);
@@ -226,6 +203,7 @@ public final class Fury {
     return buf.getBytes(0, buf.writerIndex());
   }
 
+  @Override
   public MemoryBuffer serialize(MemoryBuffer buffer, Object obj) {
     return serialize(buffer, obj, null);
   }
@@ -685,7 +663,7 @@ public final class Fury {
     return LongSerializer.readLong(buffer, longEncoding);
   }
 
-  /** Deserialize <code>obj</code> from a byte array. */
+  @Override
   public Object deserialize(byte[] bytes) {
     return deserialize(MemoryUtils.wrap(bytes), null);
   }
@@ -694,15 +672,12 @@ public final class Fury {
     return deserialize(MemoryUtils.wrap(bytes), outOfBandBuffers);
   }
 
-  /**
-   * Deserialize <code>obj</code> from a off-heap buffer specified by 
<code>address</code> and
-   * <code>size</code>.
-   */
+  @Override
   public Object deserialize(long address, int size) {
     return deserialize(MemoryUtils.buffer(address, size), null);
   }
 
-  /** Deserialize <code>obj</code> from a <code>buffer</code>. */
+  @Override
   public Object deserialize(MemoryBuffer buffer) {
     return deserialize(buffer, null);
   }
@@ -993,10 +968,7 @@ public final class Fury {
     }
   }
 
-  /**
-   * Serialize java object without class info, deserialization should use 
{@link
-   * #deserializeJavaObject}.
-   */
+  @Override
   public byte[] serializeJavaObject(Object obj) {
     MemoryBuffer buf = getBuffer();
     buf.writerIndex(0);
@@ -1004,10 +976,7 @@ public final class Fury {
     return buf.getBytes(0, buf.writerIndex());
   }
 
-  /**
-   * Serialize java object without class info, deserialization should use 
{@link
-   * #deserializeJavaObject}.
-   */
+  @Override
   public void serializeJavaObject(MemoryBuffer buffer, Object obj) {
     try {
       jitContext.lock();
@@ -1043,18 +1012,12 @@ public final class Fury {
     serializeToStream(outputStream, buf -> serializeJavaObject(buf, obj));
   }
 
-  /**
-   * Deserialize java object from binary without class info, serialization 
should use {@link
-   * #serializeJavaObject}.
-   */
+  @Override
   public <T> T deserializeJavaObject(byte[] data, Class<T> cls) {
     return deserializeJavaObject(MemoryBuffer.fromByteArray(data), cls);
   }
 
-  /**
-   * Deserialize java object from binary by passing class info, serialization 
should use {@link
-   * #serializeJavaObject}.
-   */
+  @Override
   @SuppressWarnings("unchecked")
   public <T> T deserializeJavaObject(MemoryBuffer buffer, Class<T> cls) {
     try {
diff --git a/java/fury-core/src/main/java/org/apache/fury/ThreadSafeFury.java 
b/java/fury-core/src/main/java/org/apache/fury/ThreadSafeFury.java
index ad251a8f..0f730297 100644
--- a/java/fury-core/src/main/java/org/apache/fury/ThreadSafeFury.java
+++ b/java/fury-core/src/main/java/org/apache/fury/ThreadSafeFury.java
@@ -21,50 +21,13 @@ package org.apache.fury;
 
 import java.nio.ByteBuffer;
 import java.util.function.Function;
-import org.apache.fury.memory.MemoryBuffer;
-import org.apache.fury.serializer.Serializer;
-import org.apache.fury.serializer.Serializers;
 import org.apache.fury.util.LoaderBinding;
 
 /**
  * Thread safe serializer interface. {@link Fury} is not thread-safe, the 
implementation of this
  * interface will be thread-safe. And support switch classloader dynamically.
  */
-public interface ThreadSafeFury {
-
-  /** register class. */
-  void register(Class<?> cls);
-
-  /**
-   * Register class.
-   *
-   * @param cls class to register
-   * @param createSerializer whether to create serializer, if true and codegen 
enabled, this will
-   *     generate the serializer code too.
-   */
-  void register(Class<?> cls, boolean createSerializer);
-
-  /** register class with given id. */
-  void register(Class<?> cls, Short id);
-
-  /**
-   * Register class with specified id.
-   *
-   * @param cls class to register
-   * @param id id for provided class.
-   * @param createSerializer whether to create serializer, if true and codegen 
enabled, this will
-   *     generate the serializer code too.
-   */
-  void register(Class<?> cls, Short id, boolean createSerializer);
-
-  /**
-   * Register a Serializer.
-   *
-   * @param type class needed to be serialized/deserialized
-   * @param serializerClass serializer class can be created with {@link 
Serializers#newSerializer}
-   * @param <T> type of class
-   */
-  <T> void registerSerializer(Class<T> type, Class<? extends Serializer> 
serializerClass);
+public interface ThreadSafeFury extends BaseFury {
 
   /**
    * Provide a context to execution operations on {@link Fury} directly and 
return the executed
@@ -72,57 +35,9 @@ public interface ThreadSafeFury {
    */
   <R> R execute(Function<Fury, R> action);
 
-  /** Return serialized <code>obj</code> as a byte array. */
-  byte[] serialize(Object obj);
-
-  /**
-   * Serialize <code>obj</code> to a off-heap buffer specified by 
<code>address</code> and <code>
-   * size</code>.
-   */
-  MemoryBuffer serialize(Object obj, long address, int size);
-
-  /** Serialize data into buffer. */
-  MemoryBuffer serialize(MemoryBuffer buffer, Object obj);
-
-  /** Deserialize <code>obj</code> from a byte array. */
-  Object deserialize(byte[] bytes);
-
-  /**
-   * Deserialize <code>obj</code> from a off-heap buffer specified by 
<code>address</code> and
-   * <code>size</code>.
-   */
-  Object deserialize(long address, int size);
-
-  /** Deserialize <code>obj</code> from a <code>buffer</code>. */
-  Object deserialize(MemoryBuffer buffer);
-
   /** Deserialize <code>obj</code> from a {@link ByteBuffer}. */
   Object deserialize(ByteBuffer byteBuffer);
 
-  /**
-   * Serialize java object without class info, deserialization should use 
{@link
-   * #deserializeJavaObject}.
-   */
-  byte[] serializeJavaObject(Object obj);
-
-  /**
-   * Serialize java object without class info, deserialization should use 
{@link
-   * #deserializeJavaObject}.
-   */
-  void serializeJavaObject(MemoryBuffer buffer, Object obj);
-
-  /**
-   * Deserialize java object from binary without class info, serialization 
should use {@link
-   * #serializeJavaObject}.
-   */
-  <T> T deserializeJavaObject(byte[] data, Class<T> cls);
-
-  /**
-   * Deserialize java object from binary by passing class info, serialization 
should use {@link
-   * #serializeJavaObject}.
-   */
-  <T> T deserializeJavaObject(MemoryBuffer buffer, Class<T> cls);
-
   /**
    * Set classLoader of serializer for current thread only.
    *


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to