mirror of
https://github.com/corda/corda.git
synced 2025-06-19 15:43:52 +00:00
Improved classloader closing (#2650)
* Better handling of classloader closing
This commit is contained in:
committed by
GitHub
parent
3391810101
commit
3066926f0f
@ -24,10 +24,9 @@ fun scanJarForContracts(cordappJarPath: String): List<ContractClassName> {
|
|||||||
val contracts = (scanResult.getNamesOfClassesImplementing(Contract::class.qualifiedName) ).distinct()
|
val contracts = (scanResult.getNamesOfClassesImplementing(Contract::class.qualifiedName) ).distinct()
|
||||||
|
|
||||||
// Only keep instantiable contracts
|
// Only keep instantiable contracts
|
||||||
val classLoader = URLClassLoader(arrayOf(File(cordappJarPath).toURL()), currentClassLoader)
|
return URLClassLoader(arrayOf(File(cordappJarPath).toURL()), currentClassLoader).use {
|
||||||
val concreteContracts = contracts.map(classLoader::loadClass).filter { !it.isInterface && !Modifier.isAbstract(it.modifiers) }
|
contracts.map(it::loadClass).filter { !it.isInterface && !Modifier.isAbstract(it.modifiers) }
|
||||||
classLoader.close()
|
}.map { it.name }
|
||||||
return concreteContracts.map { it.name }
|
|
||||||
}
|
}
|
||||||
|
|
||||||
fun <T> withContractsInJar(jarInputStream: InputStream, withContracts: (List<ContractClassName>, InputStream) -> T): T {
|
fun <T> withContractsInJar(jarInputStream: InputStream, withContracts: (List<ContractClassName>, InputStream) -> T): T {
|
||||||
|
Reference in New Issue
Block a user