[CORDA-2296] Improve initialization of criteriaBuilder in NodeVaultService. (#4374)

This commit is contained in:
Florian Friemel 2018-12-06 15:02:38 +00:00 committed by GitHub
parent f78c464d86
commit af1202ba79
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 21 additions and 3 deletions

View File

@ -72,7 +72,7 @@ class NodeVaultService(
}
private val mutex = ThreadBox(InnerState())
private lateinit var criteriaBuilder: CriteriaBuilder
private val criteriaBuilder: CriteriaBuilder by lazy { database.hibernateConfig.sessionFactoryForRegisteredSchemas.criteriaBuilder }
private val persistentStateService = PersistentStateService(schemaService)
/**
@ -82,7 +82,6 @@ class NodeVaultService(
private val contractStateTypeMappings = mutableMapOf<String, MutableSet<String>>()
override fun start() {
criteriaBuilder = database.hibernateConfig.sessionFactoryForRegisteredSchemas.criteriaBuilder
bootstrapContractStateTypes()
rawUpdates.subscribe { update ->
update.produced.forEach {

View File

@ -5,9 +5,12 @@ import net.corda.core.flows.FlowLogic
import net.corda.core.flows.StartableByService
import net.corda.core.context.InvocationContext
import net.corda.core.context.InvocationOrigin
import net.corda.core.contracts.ContractState
import net.corda.core.node.AppServiceHub
import net.corda.core.node.ServiceHub
import net.corda.core.node.services.CordaService
import net.corda.core.node.services.Vault
import net.corda.core.node.services.vault.QueryCriteria
import net.corda.core.serialization.SingletonSerializeAsToken
import net.corda.core.utilities.OpaqueBytes
import net.corda.core.utilities.ProgressTracker
@ -59,7 +62,6 @@ class TestCordaService(val appServiceHub: AppServiceHub): SingletonSerializeAsTo
assertTrue(count.get() > 1)
subscriber.unsubscribe()
}
}
@CordaService
@ -74,6 +76,14 @@ class TestCordaService2(val appServiceHub: AppServiceHub): SingletonSerializeAsT
@CordaService
class LegacyCordaService(@Suppress("UNUSED_PARAMETER") simpleServiceHub: ServiceHub) : SingletonSerializeAsToken()
@CordaService
class VaultQueryService(val serviceHub: AppServiceHub): SingletonSerializeAsToken() {
init {
val criteria = QueryCriteria.VaultQueryCriteria(Vault.StateStatus.UNCONSUMED)
serviceHub.vaultService.trackBy(ContractState::class.java, criteria)
}
}
class CordaServiceTest {
private lateinit var mockNet: MockNetwork
private lateinit var nodeA: StartedMockNode
@ -120,4 +130,13 @@ class CordaServiceTest {
service.startServiceFlowAndTrack()
}
/**
* Reproduce CORDA-2296
* Querying the vault from a services constructor failed because the criteriaBuilder
* had not been initialized.
*/
@Test
fun `Can query vault service in constructor`() {
nodeA.services.cordaService(VaultQueryService::class.java)
}
}