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]