Specify storage mechanism for the state value

Your entity must store its state in some form. A typical storage mechanism is to enumerate the states in a codetable and store the code's String value on a database column.

In this example, you'll enumerate these states in a new codetable called MYLIFECYCLEENTITYSTATE, and present the value as an instance of the generated MYLIFECYCLEENTITYSTATEEntry class.

Create the codetable:

Figure 1. Creating a code table file listing the states of an entity
<?xml version="1.0" encoding="UTF-8"?>
<codetables package="curam.mypackage.codetable">
  <codetable
    java_identifier="MYLIFECYCLEENTITYSTATE"
    name="MYLIFECYCLEENTITYSTATE"
  >
    <code
      default="false"
      java_identifier="OPEN"
      status="ENABLED"
      value="OPEN"
    >
      <locale
        language="en"
        sort_order="0"
      >
        <description>Open</description>
        <annotation/>
      </locale>
    </code>
    <code
      default="false"
      java_identifier="SUSPENDED"
      status="ENABLED"
      value="SUSPENDED"
    >
      <locale
        language="en"
        sort_order="0"
      >
        <description>Suspended</description>
        <annotation/>
      </locale>
    </code>
    <code
      default="false"
      java_identifier="CLOSED"
      status="ENABLED"
      value="CLOSED"
    >
      <locale
        language="en"
        sort_order="0"
      >
        <description>Closed</description>
        <annotation/>
      </locale>
    </code>
  </codetable>
</codetables>

Now mark your entity's interface to extend the Lifecycle interface, parameterized with the data type used to present the state (in this case, MYLIFECYCLEENTITYSTATEEntry):

Figure 2. Extending the Lifecycle interface
/**
 * Description of my state-machine entity.
 */
@ImplementedBy(MyLifecycleEntityImpl.class)
public interface MyLifecycleEntity extends StandardEntity,
    Lifecycle<MYLIFECYCLEENTITYSTATEEntry>