Constructor-Based Properties
This page relates to Scala
The com.gigaspaces.annotation.pojo.SpaceClassConstructor
annotation on a constructor will cause the data class property analysis to be based on properties found in the constructor (instead of getters/setters). This allows data class properties to be immutable.
Usage
The following is an example of this type of data class.
package org.openspaces.scala.example.data
import scala.beans.BeanProperty
/*
* This imports enhanced space annotations such as @SpaceId, @SpaceRouting, etc...
* with a @beanGetter annotation attached to them so annotations will be attached to the generated getter method.
*/
import org.openspaces.scala.core.aliases.annotation._
/**
* Data properties should be inferred from the constructor.
* This allows the pojo properties to remain immutable as demonstrated below.
*/
case class Data @SpaceClassConstructor() (
@BeanProperty
@SpaceId
@SpaceProperty(nullValue = "-1")
id: Long = -1,
@BeanProperty
@SpaceRouting
@SpaceProperty(nullValue = "-1")
routing The mechanism that is in charge of routing the objects into and out of the corresponding partitions. The routing is based on a designated attribute inside the objects that are written to the Space, called the Routing Index.: Long = -1,
@BeanProperty
data: String = null
)
Considerations
- Each property defined in the specified constructor must have a matching bean getter method. This method can be generated automatically by the compiler by using the
@BeanProperty
annotation. If custom behavior is required, the getter method can be written explicitly. - To extract the names from the constructor parameters, the classes must be compiled with debug information.
- Space Where GigaSpaces data is stored. It is the logical cache that holds data objects in memory and might also hold them in layered in tiering. Data is hosted from multiple SoRs, consolidated as a unified data model. metadata annotations (such as
@SpaceId
) should be placed on the getter method. If the getter method is generated by the compiler using@BeanProperty
then the annotation aliases underorg.openspaces.scala.core.aliases.annotation
can be used, which include the@beanGetter
annotation.