CORDA-3590: Optimise classloading for DJVM deserialization. (#5944)

This commit is contained in:
Chris Rankin 2020-02-12 17:15:46 +00:00 committed by GitHub
parent 084bf4d844
commit 9c743897fd
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 41 additions and 2 deletions

View File

@ -5,6 +5,6 @@ import net.corda.djvm.rewiring.SandboxClassLoader
class DelegatingClassLoader(private val delegate: SandboxClassLoader) : ClassLoader(null) {
@Throws(ClassNotFoundException::class)
override fun loadClass(name: String, resolve: Boolean): Class<*> {
return delegate.loadForSandbox(name).type
return delegate.toSandboxClass(name)
}
}

View File

@ -0,0 +1,39 @@
package net.corda.serialization.djvm
import net.corda.core.serialization.internal._contextSerializationEnv
import net.corda.core.serialization.serialize
import net.corda.serialization.djvm.SandboxType.KOTLIN
import org.junit.jupiter.api.Assertions.assertEquals
import org.junit.jupiter.api.Test
import org.junit.jupiter.api.extension.ExtendWith
import org.junit.jupiter.api.fail
import java.time.Duration
import java.util.function.Function
@ExtendWith(LocalSerialization::class)
class DeserializeDurationTest : TestBase(KOTLIN) {
@Test
fun `test deserializing duration`() {
val duration = Duration.ofSeconds(12345, 6789)
val data = duration.serialize()
sandbox {
_contextSerializationEnv.set(createSandboxSerializationEnv(classLoader))
val sandboxDuration = data.deserializeFor(classLoader)
val taskFactory = classLoader.createRawTaskFactory()
val showDuration = taskFactory.compose(classLoader.createSandboxFunction()).apply(ShowDuration::class.java)
val result = showDuration.apply(sandboxDuration) ?: fail("Result cannot be null")
assertEquals(duration.toString(), result.toString())
assertEquals(SANDBOX_STRING, result::class.java.name)
}
}
class ShowDuration : Function<Duration, String> {
override fun apply(duration: Duration): String {
return duration.toString()
}
}
}

View File

@ -13,7 +13,7 @@ import java.util.function.Function
@ExtendWith(LocalSerialization::class)
class DeserializeOffsetTimeTest : TestBase(KOTLIN) {
@Test
fun `test deserializing instant`() {
fun `test deserializing offset time`() {
val time = OffsetTime.now()
val data = time.serialize()