[CORDA-1267]: Making Corda's JPA classes non-final and Serializable. (#2882)

* Making Corda's JPA classes non-final and Serializable.

* Making Corda's JPA classes non-final and Serializable.

* Making Corda's JPA classes non-final and Serializable.

* Making Corda's JPA classes non-final and Serializable.
This commit is contained in:
Michele Sollecito 2018-03-28 08:40:28 +01:00 committed by josecoll
parent 4269e4a02e
commit 36f02ff4b4
16 changed files with 62 additions and 39 deletions

View File

@ -2842,27 +2842,27 @@ public final class net.corda.core.schemas.CommonSchemaV1 extends net.corda.core.
@javax.persistence.MappedSuperclass @net.corda.core.serialization.CordaSerializable public static class net.corda.core.schemas.CommonSchemaV1$FungibleState extends net.corda.core.schemas.PersistentState
public <init>()
public <init>(Set, net.corda.core.identity.AbstractParty, long, net.corda.core.identity.AbstractParty, byte[])
@org.jetbrains.annotations.NotNull public final net.corda.core.identity.AbstractParty getIssuer()
@org.jetbrains.annotations.NotNull public final byte[] getIssuerRef()
@org.jetbrains.annotations.NotNull public final net.corda.core.identity.AbstractParty getOwner()
@org.jetbrains.annotations.NotNull public net.corda.core.identity.AbstractParty getIssuer()
@org.jetbrains.annotations.NotNull public byte[] getIssuerRef()
@org.jetbrains.annotations.NotNull public net.corda.core.identity.AbstractParty getOwner()
@org.jetbrains.annotations.Nullable public Set getParticipants()
public final long getQuantity()
public final void setIssuer(net.corda.core.identity.AbstractParty)
public final void setIssuerRef(byte[])
public final void setOwner(net.corda.core.identity.AbstractParty)
public long getQuantity()
public void setIssuer(net.corda.core.identity.AbstractParty)
public void setIssuerRef(byte[])
public void setOwner(net.corda.core.identity.AbstractParty)
public void setParticipants(Set)
public final void setQuantity(long)
public void setQuantity(long)
##
@javax.persistence.MappedSuperclass @net.corda.core.serialization.CordaSerializable public static class net.corda.core.schemas.CommonSchemaV1$LinearState extends net.corda.core.schemas.PersistentState
public <init>()
public <init>(Set, String, UUID)
public <init>(net.corda.core.contracts.UniqueIdentifier, Set)
@org.jetbrains.annotations.Nullable public final String getExternalId()
@org.jetbrains.annotations.Nullable public String getExternalId()
@org.jetbrains.annotations.Nullable public Set getParticipants()
@org.jetbrains.annotations.NotNull public final UUID getUuid()
public final void setExternalId(String)
@org.jetbrains.annotations.NotNull public UUID getUuid()
public void setExternalId(String)
public void setParticipants(Set)
public final void setUuid(UUID)
public void setUuid(UUID)
##
public class net.corda.core.schemas.MappedSchema extends java.lang.Object
public <init>(Class, int, Iterable)
@ -2874,10 +2874,10 @@ public class net.corda.core.schemas.MappedSchema extends java.lang.Object
@javax.persistence.MappedSuperclass @net.corda.core.serialization.CordaSerializable public class net.corda.core.schemas.PersistentState extends java.lang.Object implements net.corda.core.schemas.StatePersistable
public <init>()
public <init>(net.corda.core.schemas.PersistentStateRef)
@org.jetbrains.annotations.Nullable public final net.corda.core.schemas.PersistentStateRef getStateRef()
public final void setStateRef(net.corda.core.schemas.PersistentStateRef)
@org.jetbrains.annotations.Nullable public net.corda.core.schemas.PersistentStateRef getStateRef()
public void setStateRef(net.corda.core.schemas.PersistentStateRef)
##
@javax.persistence.Embeddable public final class net.corda.core.schemas.PersistentStateRef extends java.lang.Object implements java.io.Serializable
@javax.persistence.Embeddable public class net.corda.core.schemas.PersistentStateRef extends java.lang.Object implements java.io.Serializable
public <init>()
public <init>(String, Integer)
public <init>(net.corda.core.contracts.StateRef)
@ -2885,18 +2885,18 @@ public class net.corda.core.schemas.MappedSchema extends java.lang.Object
@org.jetbrains.annotations.Nullable public final Integer component2()
@org.jetbrains.annotations.NotNull public final net.corda.core.schemas.PersistentStateRef copy(String, Integer)
public boolean equals(Object)
@org.jetbrains.annotations.Nullable public final Integer getIndex()
@org.jetbrains.annotations.Nullable public final String getTxId()
@org.jetbrains.annotations.Nullable public Integer getIndex()
@org.jetbrains.annotations.Nullable public String getTxId()
public int hashCode()
public final void setIndex(Integer)
public final void setTxId(String)
public void setIndex(Integer)
public void setTxId(String)
public String toString()
##
@net.corda.core.serialization.CordaSerializable public interface net.corda.core.schemas.QueryableState extends net.corda.core.contracts.ContractState
@org.jetbrains.annotations.NotNull public abstract net.corda.core.schemas.PersistentState generateMappedObject(net.corda.core.schemas.MappedSchema)
@org.jetbrains.annotations.NotNull public abstract Iterable supportedSchemas()
##
public interface net.corda.core.schemas.StatePersistable
public interface net.corda.core.schemas.StatePersistable extends java.io.Serializable
##
public interface net.corda.core.serialization.ClassWhitelist
public abstract boolean hasListed(Class)

View File

@ -93,6 +93,7 @@ buildscript {
}
dependencies {
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
classpath "org.jetbrains.kotlin:kotlin-allopen:$kotlin_version"
classpath 'com.jfrog.bintray.gradle:gradle-bintray-plugin:1.4'
classpath "net.corda.plugins:publish-utils:$gradle_plugins_version"
classpath "net.corda.plugins:quasar-utils:$gradle_plugins_version"
@ -140,6 +141,15 @@ allprojects {
apply plugin: 'java'
apply plugin: 'jacoco'
apply plugin: 'org.owasp.dependencycheck'
apply plugin: 'kotlin-allopen'
allOpen {
annotations(
"javax.persistence.Entity",
"javax.persistence.Embeddable",
"javax.persistence.MappedSuperclass"
)
}
dependencyCheck {
suppressionFile = '.ci/dependency-checker/suppressedLibraries.xml'

View File

@ -69,4 +69,4 @@ data class PersistentStateRef(
/**
* Marker interface to denote a persistable Corda state entity that will always have a transaction id and index
*/
interface StatePersistable
interface StatePersistable : Serializable

View File

@ -10,6 +10,7 @@ import net.corda.core.serialization.serialize
import net.corda.core.utilities.MAX_HASH_HEX_SIZE
import net.corda.core.utilities.NetworkHostAndPort
import net.corda.node.services.persistence.NodePropertiesPersistentStore
import java.io.Serializable
import javax.persistence.*
object NodeInfoSchema
@ -52,7 +53,7 @@ object NodeInfoSchemaV1 : MappedSchema(
*/
@Column(name = "serial")
val serial: Long
) {
) : Serializable {
fun toNodeInfo(): NodeInfo {
return NodeInfo(
this.addresses.map { it.toHostAndPort() },
@ -72,7 +73,7 @@ object NodeInfoSchemaV1 : MappedSchema(
var id: Int,
val host: String? = null,
val port: Int? = null
) {
) : Serializable {
companion object {
fun fromHostAndPort(hostAndPort: NetworkHostAndPort) = DBHostAndPort(
0, hostAndPort.host, hostAndPort.port
@ -106,7 +107,7 @@ object NodeInfoSchemaV1 : MappedSchema(
@ManyToMany(mappedBy = "legalIdentitiesAndCerts", cascade = arrayOf(CascadeType.ALL)) // ManyToMany because of distributed services.
private val persistentNodeInfos: Set<PersistentNodeInfo> = emptySet()
) {
) : Serializable {
constructor(partyAndCert: PartyAndCertificate, isMain: Boolean = false)
: this(partyAndCert.name.toString(),
partyAndCert.party.owningKey.toStringShort(),

View File

@ -31,6 +31,7 @@ import net.corda.nodeapi.internal.persistence.CordaPersistence
import net.corda.nodeapi.internal.persistence.NODE_DATABASE_PREFIX
import org.apache.activemq.artemis.utils.ReusableLatch
import org.slf4j.Logger
import java.io.Serializable
import java.time.Duration
import java.time.Instant
import java.util.*
@ -155,7 +156,7 @@ class NodeSchedulerService(private val clock: CordaClock,
@Column(name = "scheduled_at", nullable = false)
var scheduledAt: Instant = Instant.now()
)
) : Serializable
private class InnerState {
var scheduledStatesQueue: PriorityQueue<ScheduledStateRef> = PriorityQueue({ a, b -> a.scheduledAt.compareTo(b.scheduledAt) })

View File

@ -17,6 +17,7 @@ import net.corda.nodeapi.internal.crypto.X509Utilities
import net.corda.nodeapi.internal.crypto.x509Certificates
import net.corda.nodeapi.internal.persistence.NODE_DATABASE_PREFIX
import org.apache.commons.lang.ArrayUtils.EMPTY_BYTE_ARRAY
import java.io.Serializable
import java.security.InvalidAlgorithmParameterException
import java.security.PublicKey
import java.security.cert.*
@ -75,7 +76,7 @@ class PersistentIdentityService(override val trustRoot: X509Certificate,
@Lob
@Column(name = "identity_value")
var identity: ByteArray = EMPTY_BYTE_ARRAY
)
) : Serializable
@Entity
@javax.persistence.Table(name = "${NODE_DATABASE_PREFIX}named_identities")
@ -86,7 +87,7 @@ class PersistentIdentityService(override val trustRoot: X509Certificate,
@Column(name = "pk_hash", length = MAX_HASH_HEX_SIZE)
var publicKeyHash: String = ""
)
) : Serializable
override val caCertStore: CertStore
override val trustAnchor: TrustAnchor = TrustAnchor(trustRoot, null)

View File

@ -10,6 +10,7 @@ import net.corda.node.utilities.AppendOnlyPersistentMap
import net.corda.nodeapi.internal.persistence.NODE_DATABASE_PREFIX
import org.apache.commons.lang.ArrayUtils.EMPTY_BYTE_ARRAY
import org.bouncycastle.operator.ContentSigner
import java.io.Serializable
import java.security.KeyPair
import java.security.PrivateKey
import java.security.PublicKey
@ -42,7 +43,7 @@ class PersistentKeyManagementService(val identityService: IdentityService,
@Lob
@Column(name = "private_key")
var privateKey: ByteArray = EMPTY_BYTE_ARRAY
) {
) : Serializable {
constructor(publicKey: PublicKey, privateKey: PrivateKey)
: this(publicKey.toStringShort(), publicKey.encoded, privateKey.encoded)
}

View File

@ -46,6 +46,7 @@ import org.apache.commons.lang.ArrayUtils.EMPTY_BYTE_ARRAY
import rx.Observable
import rx.Subscription
import rx.subjects.PublishSubject
import java.io.Serializable
import java.security.PublicKey
import java.time.Instant
import java.util.*
@ -189,7 +190,7 @@ class P2PMessagingClient(private val config: NodeConfiguration,
@Column(name = "insertion_time")
var insertionTime: Instant = Instant.now()
)
) : Serializable
@Entity
@javax.persistence.Table(name = "${NODE_DATABASE_PREFIX}message_retry")
@ -204,7 +205,7 @@ class P2PMessagingClient(private val config: NodeConfiguration,
@Lob
@Column
var recipients: ByteArray = EMPTY_BYTE_ARRAY
)
) : Serializable
fun start() {
state.locked {

View File

@ -6,6 +6,7 @@ import net.corda.node.services.api.CheckpointStorage
import net.corda.nodeapi.internal.persistence.NODE_DATABASE_PREFIX
import net.corda.nodeapi.internal.persistence.currentDBSession
import org.apache.commons.lang.ArrayUtils.EMPTY_BYTE_ARRAY
import java.io.Serializable
import javax.persistence.Column
import javax.persistence.Entity
import javax.persistence.Id
@ -26,7 +27,7 @@ class DBCheckpointStorage : CheckpointStorage {
@Lob
@Column(name = "checkpoint_value")
var checkpoint: ByteArray = EMPTY_BYTE_ARRAY
)
) : Serializable
override fun addCheckpoint(checkpoint: Checkpoint) {
currentDBSession().save(DBCheckpoint().apply {

View File

@ -11,6 +11,7 @@ import net.corda.nodeapi.internal.persistence.NODE_DATABASE_PREFIX
import net.corda.nodeapi.internal.persistence.bufferUntilDatabaseCommit
import net.corda.nodeapi.internal.persistence.wrapWithDatabaseTransaction
import rx.subjects.PublishSubject
import java.io.Serializable
import java.util.*
import javax.annotation.concurrent.ThreadSafe
import javax.persistence.*
@ -33,7 +34,7 @@ class DBTransactionMappingStorage : StateMachineRecordedTransactionMappingStorag
@Column(name = "state_machine_run_id", length = 36)
var stateMachineRunId: String = ""
)
) : Serializable
private companion object {
fun createMap(): AppendOnlyPersistentMap<SecureHash, StateMachineRunId, DBTransactionMapping, String> {

View File

@ -16,6 +16,7 @@ import net.corda.nodeapi.internal.persistence.wrapWithDatabaseTransaction
import org.apache.commons.lang.ArrayUtils.EMPTY_BYTE_ARRAY
import rx.Observable
import rx.subjects.PublishSubject
import java.io.Serializable
import java.util.*
import javax.persistence.*
@ -36,7 +37,7 @@ class DBTransactionStorage(cacheSizeBytes: Long) : WritableTransactionStorage, S
@Lob
@Column(name = "transaction_value")
var transaction: ByteArray = EMPTY_BYTE_ARRAY
)
) : Serializable
private companion object {
fun createTransactionsMap(maxSizeInBytes: Long)

View File

@ -9,6 +9,7 @@ import net.corda.nodeapi.internal.persistence.CordaPersistence
import net.corda.nodeapi.internal.persistence.NODE_DATABASE_PREFIX
import org.slf4j.Logger
import rx.subjects.PublishSubject
import java.io.Serializable
import javax.persistence.Column
import javax.persistence.Entity
import javax.persistence.Id
@ -34,7 +35,7 @@ class NodePropertiesPersistentStore(readPhysicalNodeId: () -> String, persistenc
@Column(name = "property_value")
var value: String? = ""
)
) : Serializable
}
private class FlowsDrainingModeOperationsImpl(readPhysicalNodeId: () -> String, private val persistence: CordaPersistence, logger: Logger) : FlowsDrainingModeOperations {

View File

@ -18,6 +18,7 @@ import net.corda.core.utilities.contextLogger
import net.corda.node.utilities.AppendOnlyPersistentMap
import net.corda.nodeapi.internal.persistence.NODE_DATABASE_PREFIX
import net.corda.nodeapi.internal.persistence.currentDBSession
import java.io.Serializable
import java.time.Clock
import java.time.Instant
import java.util.*
@ -34,7 +35,7 @@ class PersistentUniquenessProvider(val clock: Clock) : UniquenessProvider, Singl
@Column(name = "consuming_transaction_id")
val consumingTxHash: String
)
) : Serializable
@Entity
@javax.persistence.Table(name = "${NODE_DATABASE_PREFIX}notary_request_log")
@ -56,7 +57,7 @@ class PersistentUniquenessProvider(val clock: Clock) : UniquenessProvider, Singl
@Column(name = "request_timestamp")
var requestDate: Instant
)
) : Serializable
@Entity
@javax.persistence.Table(name = "${NODE_DATABASE_PREFIX}notary_committed_states")

View File

@ -32,6 +32,7 @@ import net.corda.nodeapi.internal.config.NodeSSLConfiguration
import net.corda.nodeapi.internal.config.SSLConfiguration
import net.corda.nodeapi.internal.persistence.CordaPersistence
import net.corda.nodeapi.internal.persistence.NODE_DATABASE_PREFIX
import java.io.Serializable
import java.nio.file.Path
import java.time.Clock
import java.util.concurrent.CompletableFuture
@ -94,7 +95,7 @@ class RaftUniquenessProvider(
var value: String = "",
@Column(name = "raft_log_index")
var index: Long = 0
)
) : Serializable
/** Directory storing the Raft log and state machine snapshots */
private val storagePath: Path = transportConfiguration.baseDirectory

View File

@ -6,6 +6,7 @@ import net.corda.core.node.services.ContractUpgradeService
import net.corda.core.serialization.SingletonSerializeAsToken
import net.corda.nodeapi.internal.persistence.NODE_DATABASE_PREFIX
import net.corda.node.utilities.PersistentMap
import java.io.Serializable
import javax.persistence.Column
import javax.persistence.Entity
import javax.persistence.Id
@ -23,7 +24,7 @@ class ContractUpgradeServiceImpl : ContractUpgradeService, SingletonSerializeAsT
/** refers to the UpgradedContract class name*/
@Column(name = "contract_class_name")
var upgradedContractClassName: String = ""
)
) : Serializable
private companion object {
fun createContractUpgradesMap(): PersistentMap<String, String, DBContractUpgrade, String> {

View File

@ -20,6 +20,7 @@ import org.hibernate.annotations.Cascade
import org.hibernate.annotations.CascadeType
import org.junit.Ignore
import org.junit.Test
import java.io.Serializable
import javax.persistence.*
import kotlin.test.assertEquals
import kotlin.test.assertFalse
@ -141,7 +142,7 @@ object TestSchema : MappedSchema(SchemaFamily::class.java, 1, setOf(Parent::clas
@Suppress("unused")
@Entity
@Table(name = "Children")
class Child {
class Child : Serializable {
@Id
@GeneratedValue
@Column(name = "child_id", unique = true, nullable = false)