Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

The goal of this document is to show implications for tosca model template to move from Eclipse-Link to Hibernate. Primary focus is to show the database compatibility and eventually schema changes where is necessary.
In all these tests I am using some strategies to make sure that tables and fields name generated by Hibernate will be the same as Eclipse-Link.

...

Definitions

  • ElementCollection: Specifies a collection of instances of a basic type or embeddable class. Must be specified if the collection is to be mapped by means of a collection table.
  • OneToMany: Specifies a many-valued association with one-to-many multiplicity. If the collection is defined using generics to specify the element type, the associated target entity type need not be specified; otherwise the target entity class must be specified. If the relationship is bidirectional, the mappedBy element must be used to specify the relationship field or property of the entity that is the owner of the relationship. The OneToMany annotation may be used within an embeddable class contained within an entity class to specify a relationship to a collection of entities. If the relationship is bidirectional, the mappedBy element must be used to specify the relationship field or property of the entity that is the owner of the relationship. When the collection is a java.util.Map, the cascade element and the orphanRemoval element apply to the map value.

...

Control Loop runtime uses persistence.xml file: is the deployment descriptor file for persistence using JPA. It specifies the persistence units and declares the managed persistence classes, the object/relation mapping, and the database connection details.

Hibernate

SpringBoot auto-configuration can automatically scan entity classes. In Control Loop Runtime we can use @EntityScan annotation because entity classes are not placed in the main application package or its sub-packages. In this situation, we need declare the package or list of packages in the main configuration class within @EntityScan annotation.

...

In the most of the cases, in tosca model template there is compatibility in field types. Only two types (java.util.Date and Boolean) are not compatible between Eclipse-Link and Hibernate.

Note about precision in DATETIME (https://mariadb.com/kb/en/datetime/): MariaDB can store microseconds with a precision between 0 and 6. If no microsecond precision is specified, then 0 is used by default.

Code Block
titleJpaExample
collapsetrue
@Embeddable
@Data
public class ExampleKey implements Serializable {

    private static final long serialVersionUID = 1L;

    @Column(name = "name", length = 120)
    private String name;

    @Column(name = "version", length = 20)
    private String version;
}

@Entity
@Table(name = "Example")
@Data
public class JpaExample implements Serializable {

    private static final long serialVersionUID = 1L;

    @EmbeddedId
    @VerifyKey
    @NotNull
    private ExampleKey key;

    @Column
    private Boolean primed;

    @Column(name = "timeStamp", precision = 3)
    @Temporal(TemporalType.TIMESTAMP)
    @NotNull
    private Date timeStamp;
}

...

ElementCollection should be used with basic type or embeddable class, this example shows side effects using it with entity.

Code Block
languagejava
titleJpaExampleObjMapEc
collapsetrue
@Entity
@Table(name = "ExampleObjMapEc")
@Data
public class JpaExampleObjMapEc implements Serializable {

    private static final long serialVersionUID = 1L;

    @EmbeddedId
    @VerifyKey
    @NotNull
    private ExampleKey key;

    @ElementCollection
    @Lob
    private Map<@NotNull String, @NotNull JpaExample> examples;
}

...

MariaDB [controlloop]> SHOW CREATE TABLE JpaExampleObjMapEc_EXAMPLES;
+-----------------------------+-------------------------------------------------------------------------------------------------------+
| Table                       | Create Table                                   |
+-----------------------------+-------------------------------------------------------------------------------------------------------+
| JpaExampleObjMapEc_EXAMPLES | CREATE TABLE `JpaExampleObjMapEc_EXAMPLES` (
  `EXAMPLES_KEY` varchar(255) DEFAULT NULL,
  `PRIMED` tinyint(1) DEFAULT 0,
  `timeStamp` varchar(255) DEFAULT NULL,
  `child_name` varchar(255) DEFAULT NULL,
  `child_version` varchar(255) DEFAULT NULL,
  `name` varchar(120) DEFAULT NULL,
  `version` varchar(20) DEFAULT NULL,
  KEY `FK_JpaExampleObjMapEc_EXAMPLES_name` (`name`,`version`),
  CONSTRAINT `FK_JpaExampleObjMapEc_EXAMPLES_name` FOREIGN KEY (`name`, `version`)
REFERENCES `ExampleObjMapEc` (`name`, `version`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 |
+-----------------------------+-------------------------------------------------------------------------------------------------------+

...

MariaDB [controlloop]> SHOW CREATE TABLE JpaExampleObjMapEc_EXAMPLES;
+-----------------------------+-------------------------------------------------------------------------------------------------------+
| Table                       | Create Table                                   |
+-----------------------------+-------------------------------------------------------------------------------------------------------+
| JpaExampleObjMapEc_EXAMPLES | CREATE TABLE `JpaExampleObjMapEc_EXAMPLES` (
`name` varchar(120) NOT NULL,
  `version` varchar(20) NOT NULL,
`child_name` varchar(255) DEFAULT NULL,
  `child_version` varchar(255) DEFAULT NULL,
  `primed` bit(1) DEFAULT NULL,
  `timeStamp` datetime(6) DEFAULT NULL,
  `examples_KEY` varchar(255) NOT NULL,
  PRIMARY KEY (`name`,`version`,`examples_KEY`),
CONSTRAINT `FKeu2s8p9mhstus32uliuwib8rr` FOREIGN KEY (`name`, `version`)
REFERENCES `ExampleObjMapEc` (`name`, `version`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 |
+-----------------------------+-------------------------------------------------------------------------------------------------------+

...

Map of Objects using ElementCollection (hacked)

Using Jpa Converters, it is possible to convert Object class to binary array. In this scenario JpaExampleEmd JpaExampleLob class is not entity and neither embedded.

Code Block
languagejava
titleJpaExampleObjMapEc
collapsetrue
@Data
public class JpaExampleEmdJpaExampleLob implements Serializable {

    private static final long serialVersionUID = 1L;

    @VerifyKey
    @NotNull
    private ExampleKey key;

    private Boolean primed;

    @NotNull
    private Date timeStamp;
}

@Entity
@Converter@Table(autoApplyname = true"ExampleObjMapEc")
@Data
public class ExampleConverterJpaExampleObjMapEc implements AttributeConverter<JpaExampleEmd, byte[]>Serializable {

    @Overrideprivate static final long serialVersionUID public byte[] convertToDatabaseColumn(JpaExampleEmd attribute) {= 1L;

    @EmbeddedId
    @VerifyKey
return SerializationUtils.serialize(attribute);   @NotNull
 }      @Override
    public JpaExampleEmd convertToEntityAttribute(byte[] dbData) {
        return (JpaExampleEmd) SerializationUtils.deserialize(dbData);
    }

}

@Entity
@Table(name = "ExampleObjMapEc")
@Data
public class JpaExampleObjMapEc implements Serializable {

    private static final long serialVersionUID = 1L;

    @EmbeddedId
    @VerifyKey
    @NotNull
    private ExampleKey key;

    @ElementCollection
    @Lob
    private Map<@NotNull String, @NotNull JpaExampleEmd>JpaExampleLob> examples;
}

JpaToscaDataType_PROPERTIES table

The SQL code below shows JpaToscaDataType_PROPERTIES table.

Eclipse-Link

Hibernate

MariaDB [controlloop]> SHOW CREATE describeTABLE JpaToscaDataTypeJpaExampleObjMapEc_PROPERTIESEXAMPLES;
+-----------------------------+----------------------+-----------+-----+---------+-------+
| Field          | Type         | Null | Key | Default | Extra |
+----------------+--------------+------+-----+---------+-------+
| nameTable           | varchar(120) | YES  |            | Create NULLTable    |       |
|  version         | varchar(20)   | YES   |     |  NULL     |       |
| PROPERTIES      | longblob     | YES  |     | NULL    |       |
| PROPERTIES_KEY | varchar(255) | YES  |     | NULL    |       |
+-----------------------------+---------------+------+-----+---------+-------+
MariaDB [controlloop]> SELECT count(1) FROM `JpaToscaDataType_PROPERTIES`;
+----------+
| count(1) |
+----------+
|       41 |
+----------+
MariaDB [controlloop]> describe ToscaProperty;
+------------------+--------------+------+-----+---------+-------+
| FieldJpaExampleObjMapEc_EXAMPLES  |  CREATE  TABLE      | Type         | Null | Key | Default | Extra |
+------------------+--------------+------+-----+---------+-------+
| DEFAULTVALUE     | varchar(255) | YES  |     | NULL    |       |
| DESCRIPTION      | varchar(255) | YES  |     | NULL    |       |
| ENTRYSCHEMA      | longblob     | YES  |     | NULL    |       |
| REQUIRED         | tinyint(1)   | YES  |     | 0       |       |
| STATUS           | int(11)      | YES  |     | NULL    |       |
| parentLocalName  | varchar(120) | NO   | PRI | NULL    |       |
| localName        | varchar(120) | NO   | PRI | NULL    |       |
| parentKeyVersion | varchar(15)  | NO   | PRI | NULL    |       |
| parentKeyName    | varchar(120) | NO   | PRI | NULL    |       |
| name             | varchar(120) | YES  |     | NULL    |       |
| version          | varchar(20)  | YES  |     | NULL    |       |
+------------------+--------------+------+-----+---------+-------+
MariaDB [controlloop]>  SELECT count(1) FROM  ToscaProperty;
+----------+
| count(1) |
+----------+
|        0 |
+----------+

Note

Right now JpaToscaProperty will generate ToscaProperty table but this one will never used. Moving JpaToscaProperty as embeddable class, all max length in varchar fields will be applied.

List of Objects using ElementCollection

ElementCollection should be used with basic type or embeddable class, this example shows side effects using it with entity.

Code Block
languagejava
titleJpaExampleObjListEc
collapsetrue
@Entity
@Table(name = "ExampleObjListEc")
@Data
public class JpaExampleObjListEc implements Serializable {

    private static final long serialVersionUID = 1L;

    @EmbeddedId
    @VerifyKey
    @NotNull
    private ExampleKey key;

    @ElementCollection
    @Lob
    private List<@NotNull JpaExample> examples;
}

Eclipse-Link

MariaDB [controlloop]> describe ExampleObjListEc;
+---------+-`JpaExampleObjMapEc_EXAMPLES` (
`name` varchar(120) NOT NULL,
  `version` varchar(20) NOT NULL,
  `examples` longblob DEFAULT NULL,
  `examples_KEY` varchar(255) NOT NULL,
  PRIMARY KEY (`name`,`version`,`examples_KEY`),
  CONSTRAINT `FKeu2s8p9mhstus32uliuwib8rr` FOREIGN KEY (`name`, `version`)
REFERENCES `ExampleObjMapEc` (`name`, `version`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 |
+-------------+------+-----+---------+-------+
| Field   | Type         | Null | Key | Default | Extra |
+---------+--------------+------+-----+---------+-------+
| name    | varchar(120) | NO   | PRI | NULL    |       |
| version | varchar(20)  | NO   | PRI | NULL    |       |
+---------+--------------+------+-----+---------+-------++


After saving an example:


MariaDB [controlloop]> SHOWselect CREATE* TABLEfrom JpaExampleObjListEcJpaExampleObjMapEc_EXAMPLES;
+-----------------+-------------+---------------------------+---------------------+
| name            | version | examples                 | examples_KEY |
+-----------------+---------+---------------------------+--------------+
| TableExampleObjMapEc    | 1.0.0    |  ....  <binary            | Create Table code> .... | MyKey1        |
|  ExampleObjMapEc    | 1.0.0    |  ....  <binary                                                          code> .... | MyKey2        |
+------------------+------------+---------------------------+-----------------------+

JpaToscaDataType_PROPERTIES table

The SQL code below shows JpaToscaDataType_PROPERTIES table.

Eclipse-Link

MariaDB [controlloop]> describe JpaToscaDataType_PROPERTIES;
+----------------+--------------+------+-----+---------+-------+
| JpaExampleObjListEc_EXAMPLESField |  CREATE  TABLE  `JpaExampleObjListEc_EXAMPLES` (
   | Type                        | Null | Key | Default | Extra |
+----------------+--------------+------+-----+---------+-------+
| name           `name`| varchar(120) DEFAULT| NULL,
YES  |     | NULL    |       |
| version        | varchar(20)  | YES  |     | NULL    |       |
| PROPERTIES     `version` varchar(20) DEFAULT NULL,
  `EXAMPLES` longblob DEFAULT NULL,
  KEY `FK_JpaExampleObjListEc_EXAMPLES_name` (`name`,`version`),
  CONSTRAINT `FK_JpaExampleObjListEc_EXAMPLES_name` FOREIGN KEY (`name`, `version`)
REFERENCES `ExampleObjListEc` (`name`, `version`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 |
+------------| longblob     | YES  |     | NULL    |       |
| PROPERTIES_KEY | varchar(255) | YES  |     | NULL    |       |
+----------------+--------------+------+-----+---------+-------+

MariaDB [controlloop]> SELECT count(1) FROM `JpaToscaDataType_PROPERTIES`;
+----------+
| count(1) |
+----------+
|       41 |
+----------+

MariaDB [controlloop]> describe ToscaProperty;
+------------------+--------------+------+-----+---------+-------+
| Field            | Type         | Null | Key | Default | Extra |
+------------------+--------------+------+-----+---------+-------+
| DEFAULTVALUE     | varchar(255) | YES  |     | NULL    |       |
| DESCRIPTION      | varchar(255) | YES  |     | NULL    |       |
| ENTRYSCHEMA      | longblob     | YES  |     | NULL    |       |
| REQUIRED         | tinyint(1)   | YES  |     | 0       |       |
| STATUS           | int(11)      | YES  |     | NULL    |       |
| parentLocalName  | varchar(120) | NO   | PRI | NULL    |       |
| localName        | varchar(120) | NO   | PRI | NULL    |       |
| parentKeyVersion | varchar(15)  | NO   | PRI | NULL    |       |
| parentKeyName    | varchar(120) | NO   | PRI | NULL    |       |
| name             | varchar(120) | YES  |     | NULL    |       |
| version          | varchar(20)  | YES  |     | NULL    |       |
+------------------+--------------+------+-----+---------+-------+

MariaDB [controlloop]>  SELECT count(1) FROM  ToscaProperty;
+----------+
| count(1) |
+----------+
|        0 |
+---------------------+

Note

Right now JpaToscaProperty will generate ToscaProperty table but this one will never used.

List of Objects using ElementCollection

ElementCollection should be used with basic type or embeddable class, this example shows side effects using it with entity.

Code Block
languagejava
titleJpaExampleObjListEc
collapsetrue
@Entity
@Table(name = "ExampleObjListEc")
@Data
public class JpaExampleObjListEc implements Serializable {

    private static final long serialVersionUID = 1L;

    @EmbeddedId
    @VerifyKey
    @NotNull
    private ExampleKey key;

    @ElementCollection
    @Lob
    private List<@NotNull JpaExample> examples;
}

Eclipse-Link

MariaDB [controlloop]> describe ExampleObjListEc;
+---------+------------+

After saving an example:

MariaDB [controlloop]> select * from ExampleObjListEc;
+--+------+-----+---------+-------+
| Field   | nameType         | versionNull | Key | Default | Extra |
+---------+----+----------+
| ExampleList | 1.0.0   |
------+-----+---------+---------+
MariaDB [controlloop]> select * from JpaExampleObjListEc_EXAMPLES;
+| name    | varchar(120) | NO   | PRI | NULL    |       |
| version | varchar(20)  | NO   | PRI | NULL    |       |
+---------+-----+---------+------+-----+---------+-------+| name        | version | EXAMPLES                  |
+
MariaDB [controlloop]> SHOW CREATE TABLE JpaExampleObjListEc_EXAMPLES;
+--------------+----------+------+---------------------+
| ExampleList | 1.0.0   |  .... <binary code> .... |
| ExampleList | 1.0.0   |  .... <binary code> .... |
+-------------+---------+---------------------------+

Hibernate

MariaDB [controlloop]> describe ExampleObjListEc;
+---------+--------------+------+-----+---------+-------+
| FieldTable   |  Type          |  Null  |  Key   | Create DefaultTable  |  Extra |
+---------+--------------+------+-----+---------+-------+
| name         | varchar(120) | NO               |  PRI  |  NULL     |       |
|  version  | varchar(20)     | NO    |  PRI  |  NULL     |       |
+---------+--------------+------+-----+---------+-------+
MariaDB [controlloop]> SHOW CREATE TABLE JpaExampleObjListEc_EXAMPLES;           |
+------------------------------+------------------------------------------------------------------------------------------------------+
| Table    JpaExampleObjListEc_EXAMPLES | CREATE TABLE `JpaExampleObjListEc_EXAMPLES` (
                     | Create Table                                                                                         |
+------------------------------+------------------------------------------------------------------------------------------------------+
| JpaExampleObjListEc_EXAMPLES | CREATE TABLE `JpaExampleObjListEc_EXAMPLES` (`name` varchar(120) DEFAULT NULL,
  `version` varchar(20) DEFAULT NULL,
  `name` varchar(120) NOT`EXAMPLES` longblob DEFAULT NULL,
  `version` varchar(20) NOT NULL KEY `FK_JpaExampleObjListEc_EXAMPLES_name` (`name`,`version`),
  `examples CONSTRAINT `FK_JpaExampleObjListEc_EXAMPLES_name` varchar(120) NOT NULL,
  `examples_version` varchar(20) NOT NULL,
  UNIQUE KEY `UK_8nnxsomci4yiwc8ks6radimiq` (`examples_name`,`examples_version`),FOREIGN KEY (`name`, `version`)
  KEY `FK1a58hldurq1910ne2hbm9a7af` (`name`,`version`),
  CONSTRAINT `FK1a58hldurq1910ne2hbm9a7af` FOREIGN KEY REFERENCES `ExampleObjListEc` (`name`, `version`)
REFERENCES `ExampleObjListEc` (`name`, `version`),
ENGINE=InnoDB DEFAULT CHARSET=utf8mb4   CONSTRAINT `FKnj1lga10so090q9wf38k4jf7p` FOREIGN KEY (`examples_name`, `examples_version`)
REFERENCES `Example` (`name`, `version`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 |
+--|
+------------------------------+------------------------------------------------------------------------------------------------------+

...

MariaDB [controlloop]> select * from ExampleExampleObjListEc;
+-------------+---------+
| name        | version |
+----------+---+---------+
| nameExampleList     | version | primed | timeStamp1.0.0   |
+-------------+---------+
MariaDB [controlloop]> select * from JpaExampleObjListEc_EXAMPLES;
+--------+-----+---------+---------------------------+
| example1name | 1.0.0       | NULL  version | NULLEXAMPLES      |
| example2 | 1.0.0   | NULL   | NULL            |
+----------+--------+-+--------+-----------+
MariaDB [controlloop]> select * from ExampleObjListEc;
+-------------+---------+
| name ExampleList | 1.0.0   |  .... <binary code> .... |
| ExampleList | 1.0.0   |  | version.... <binary code> .... |
+-------------+---------+
| ExampleList | 1.0.0   |
+------------------+---------+

Hibernate

MariaDB [controlloop]> select * from JpaExampleObjListEc_EXAMPLESdescribe ExampleObjListEc;
+---------+-----+---------+------+-----+----+------+------------+
| Field   | nameType         | versionNull | Key | examples_nameDefault | examples_versionExtra |
+---------+----+----------+--------+-------+-----------+-------+
| name ExampleList   | 1.0.0   varchar(120) | example1NO   |  PRI  | 1.0.0NULL    |        |
| ExampleListversion | 1.0.0varchar(20)   | example2NO    | PRI  | 1.0.0NULL    |        |
+---------+----+----------+------+---------+-----------+-------+

List of Objects using ElementCollection (fixed)

The below example shows ElementCollection with embedded class.

Code Block
languagejava
titleJpaExampleObjListEc
collapsetrue
@Entity
@Table(name = "ExampleObjListEc")
@Data
public class JpaExampleObjListEc implements Serializable {

    private static final long serialVersionUID = 1L;

    @EmbeddedId
    @VerifyKey
    @NotNull
    private ExampleKey key;

    @ElementCollection
    private List<@NotNull JpaExampleEmd> examples;
 }

Eclipse-Link



MariaDB [controlloop]> SHOW CREATE TABLE JpaExampleObjListEc_EXAMPLES;
+--MariaDB [controlloop]> SHOW CREATE TABLE JpaExampleObjListEc_EXAMPLES;
+-------------------------------+------------------------------------------------------------------------------------------------------+
| Table                        | Create Table                                                                                         |
+------------------------------+------------------------------------------------------------------------------------------------------+
| JpaExampleObjListEc_EXAMPLES | CREATE TABLE `JpaExampleObjListEc_EXAMPLES` (
  `PRIMED``name` tinyintvarchar(1120) DEFAULTNOT 0NULL,
  `timeStamp``version` varchar(25520) DEFAULTNOT NULL,
  `child`examples_name` varchar(255120) DEFAULTNOT NULL,
  `child`examples_version` varchar(25520) DEFAULTNOT NULL,
  `name` varchar(120) DEFAULT NULLUNIQUE KEY `UK_8nnxsomci4yiwc8ks6radimiq` (`examples_name`,`examples_version`),
  KEY `version``FK1a58hldurq1910ne2hbm9a7af` varchar(20) DEFAULT NULL`name`,`version`),
  KEY `FK_JpaExampleObjListEc_EXAMPLES_name`CONSTRAINT `FK1a58hldurq1910ne2hbm9a7af` FOREIGN KEY (`name`, `version`),
  CONSTRAINT `FK_JpaExampleObjListEc_EXAMPLES_name` FOREIGN KEY REFERENCES `ExampleObjListEc` (`name`, `version`),
  CONSTRAINT REFERENCES`FKnj1lga10so090q9wf38k4jf7p` FOREIGN `ExampleObjListEc`KEY (`name``examples_name`, `version``examples_version`)
) ENGINE=InnoDB DEFAULT REFERENCES `Example` (`name`, `version`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 |
+------------------------------+------------------------------------------------------------------------------------------------------+

...

MariaDB [controlloop]> select * from ExampleObjListEcExample;
+----------+---------+--------+-----------+
| name         | version | primed | versiontimeStamp |
+----------+---------+--------+-----------+
| ExampleListexample1 | 1.0.0   | NULL   | NULL      |
| example2 | 1.0.0   | NULL   | NULL      |
+----------+---------+--------+-----------+
MariaDB [controlloop]> select * from JpaExampleObjListEc_EXAMPLESExampleObjListEc;
+--------+-----------+------------+-+
| name        | version |
+--------------+---------+
| ExampleList | 1.0.0   |
+-------------+---------+
| PRIMED | timeStamp | child_name | child_version | MariaDB [controlloop]> select * from JpaExampleObjListEc_EXAMPLES;
+-------------+---------+---------------+------------------+
| name        | version | examples_name | examples_version |
+--------+-----------+------------+---------------+-------------+---------+
|   NULLExampleList | NULL  1.0.0    | example1      | 1.0.0            |
| ExampleList | 1.0.0   |
|   NULL | NULL   example2    | example2   | 1.0.0         | ExampleList | 1.0.0      |
+--------+-----+------+---+---------+-------+--------+-------------+---------+

...

+

List of Objects using ElementCollection (fixed)

The below example shows ElementCollection with embedded class.

Code Block
languagejava
titleJpaExampleObjListEc
collapsetrue
@Entity
@Table(name = "ExampleObjListEc")
@Data
public class JpaExampleObjListEc implements Serializable {

    private static final long serialVersionUID = 1L;

    @EmbeddedId
    @VerifyKey
    @NotNull
    private ExampleKey key;

    @ElementCollection
    private List<@NotNull JpaExampleEmd> examples;
 }

Eclipse-Link

MariaDB [controlloop]> SHOW CREATE TABLE JpaExampleObjListEc_EXAMPLES;
+------------------------------+------------------------------------------------------------------------------------------------------+
| Table                        | Create Table                                                                                         |
+------------------------------+------------------------------------------------------------------------------------------------------+
| JpaExampleObjListEc_EXAMPLES | CREATE TABLE `JpaExampleObjListEc_EXAMPLES` (
  `name``PRIMED` varchartinyint(1201) NOTDEFAULT NULL0,
   `version``timeStamp` varchar(20255) NOTDEFAULT NULL,
 `child`child_name` varchar(255) DEFAULT NULL,
   `child`child_version` varchar(255) DEFAULT NULL,
   `primed``name` bitvarchar(1120) DEFAULT NULL,
   `timeStamp``version` datetimevarchar(620) DEFAULT NULL,
  KEY `FK1a58hldurq1910ne2hbm9a7af` (`FK_JpaExampleObjListEc_EXAMPLES_name` (`name`,`version`),
  CONSTRAINT `FK1a58hldurq1910ne2hbm9a7af``FK_JpaExampleObjListEc_EXAMPLES_name` FOREIGN KEY (`name`, `version`)
REFERENCES `ExampleObjListEc` (`name`, `version`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 |
+------------------------------+------------------------------------------------------------------------------------------------------+

...

MariaDB [controlloop]> select * from ExampleObjListEc;
+-------------+---------+
| name        | version |
+-------------+---------+
| ExampleList | 1.0.0   |
+-------------+---------+
MariaDB [controlloop]> select * from JpaExampleObjListEc_EXAMPLES;
+--------+-----+------+---+---------+---+------------+---+--------+--+---------+
| name        PRIMED | versiontimeStamp | child_name | child_version | primed name        | timeStampversion |
+--------+-----+------+---+---------+---+------------+---+--------+--+---------+
| ExampleList  NULL | 1.0.0 NULL      | example1   | 1.0.0         | NULL  ExampleList | NULL1.0.0      |
| ExampleList  NULL | 1.0.0NULL      | example2   | 1.0.0         | NULL  ExampleList | NULL1.0.0      |
+--------+-----+------+---+---------+---+------------+---+--------+--+---------+

Map of Objects using OneToMany

OneToMany is not used in tosca model template. The example below shows an alternative to ElementCollection. In this example there is a field names collision.

Code Block
languagejava
titleJpaExampleObjMap
collapsetrue
@Entity
@Table(name = "ExampleObjMap")
@Data
public class JpaExampleObjMap implements Serializable {

    private static final long serialVersionUID = 1L;

    @EmbeddedId
    @VerifyKey
    @NotNull
    private ExampleKey key;

    @OneToMany(fetch = FetchType.EAGER, cascade = CascadeType.ALL, orphanRemoval = true)
    @Lob
    private Map<@NotNull String, @NotNull JpaExample> examples;
}

Representation of the example in YAML of what we could save using JpaExampleObjMap entity.

Code Block
languageyml
titleExample
collapsetrue
ExampleObjMap:
  name: ExampleObjMap
  version: 1.0.0
  examples:
    MyKey1:
      name: example1
      version: 1.0.0
     MyKey2:
      name: example2
      version: 1.0.0

Eclipse-Link

...

Hibernate

MariaDB [controlloop]> SHOW CREATE TABLE JpaExampleObjListEc_EXAMPLES;
+------------------------------+------------------------------------------------------------------------------------------------------+
| Table                        | Create Table                                                                                         |
+----------------+--------------+--------+-------+---------+-------+
| Field    | Type         | Null | Key | Default | Extra |
+------------------------------+--------------+------+-----+---------+-------+
| JpaExampleObjListEc_EXAMPLES | longblob     | YES  |     | NULL    |       |
| name     | varchar(120) | NO   | PRI | NULL    |       |
| version  | varchar(20)  | NO   | PRI | NULL    |       |
+----------+--------------+------+-----+---------+-------+

After saving the example:

...

Removing @Lob Annotation

The keys name and version of the JpaExampleObjMap as the same as JpaExample, so Eclipse-Link creates a wrong ExampleObjMap_Example table.

MariaDB [controlloop]> describe ExampleObjMap;
+---------+--------------+------+-----+---------+-------+
| Field   | Type         | Null | Key | Default | Extra |
+---------+--------------+------+-----+---------+-------+
| name    | varchar(120) | NO   | PRI | NULL    |       |
| version | varchar(20)  | NO   | PRI | NULL    |       |
+---------+ CREATE TABLE `JpaExampleObjListEc_EXAMPLES` (
  `name` varchar(120) NOT NULL,
 `version` varchar(20) NOT NULL,
 `child_name` varchar(255) DEFAULT NULL,
 `child_version` varchar(255) DEFAULT NULL,
 `primed` bit(1) DEFAULT NULL,
 `timeStamp` datetime(6) DEFAULT NULL,
  KEY `FK1a58hldurq1910ne2hbm9a7af` (`name`,`version`),
  CONSTRAINT `FK1a58hldurq1910ne2hbm9a7af` FOREIGN KEY (`name`, `version`)
REFERENCES `ExampleObjListEc` (`name`, `version`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 |
+-------------------+------+-----+---------+---------------------------------------------------------------------------------------------+


After saving an example:


MariaDB [controlloop]> SHOWselect CREATE* TABLEfrom ExampleObjMap_ExampleExampleObjListEc;
+-------------+----------++
| name        | version |
+-------------+---------+
| ExampleList | 1.0.0   |
+-------------+---------+
MariaDB [controlloop]> select * from JpaExampleObjListEc_EXAMPLES;
+-------------+---------+------------+---------------+--------+-----------+
| Tablename        |  version  |  child_name   | Createchild_version Table|  primed  |                        timeStamp |
+-------------+---------+------------+---------------+--------+-----------+
| ExampleList | 1.0.0   | example1   | 1.0.0          |  NULL    |  NULL      |
|  ExampleList    | 1.0.0    |  example2      | 1.0.0          |  NULL    |    NULL      |
+--------------+---------+------------+---------------+--------+--------------------------------------------------------------------------+
| ExampleObjMap_Example | CREATE TABLE `ExampleObjMap_Example` (
+

List of Objects using ElementCollection (hacked)

In this scenario JpaExampleLob class is not entity and neither embedded.

Code Block
languagejava
titleJpaExampleObjListEc
collapsetrue
@Entity
@Table(name = "ExampleObjListEc")
@Data
public class JpaExampleObjListEc implements Serializable {

    private static final long serialVersionUID = 1L;

    @EmbeddedId
 

...

   

...

@VerifyKey

...

 

...

 

...

  @NotNull
    private ExampleKey key;

    @ElementCollection
    @Lob
   

...

 private List<@NotNull 

...

JpaExampleLob> examples;
}

Hibernate

MariaDB [controlloop]> SHOW CREATE TABLE JpaExampleObjListEc_EXAMPLES;
+------------------------------+------------------------------------------------------------------------------------------------------+
| Table                        | Create Table                                                                                         |
+-----------------------+-------+------------------------------------------------------------------------------------------------------+

Using these tables I have got this error: Cannot add or update a child row: a foreign key constraint fails (`controlloop`.`ExampleObjMap_Example`, CONSTRAINT `FK_ExampleObjMap_Example_name` FOREIGN KEY (`name`, `version`) REFERENCES `ExampleObjMap` (`name`, `version`))
Error Code: 1452

Map of Objects using OneToMany (fixed)

The example below shows an alternative to ElementCollection with the fix to avoid field names collision.

...

languagejava
titleJpaExampleObjMap
collapsetrue

...

| JpaExampleObjListEc_EXAMPLES | CREATE TABLE `JpaExampleObjListEc_EXAMPLES` (

...

 

...

 

...

 

...

 

...

 

...

 

...

      

...

   `name` varchar(120) NOT 

...

NULL,

...

     

...

 

...

 

...

      

...

 

...

 

...

 

...

 

...

 

...

     

...

       `version` varchar(20) NOT NULL,

...

 

...

 

...

 

...

 

...

 

...

 

...

 

...

                     

...

 

...

  `examples` longblob DEFAULT NULL,

...

   

...

 

...

 

...

 

...

 

...

 

...

 

...

             KEY `FK1a58hldurq1910ne2hbm9a7af` (`name`,`version`),

...

 

...

 

...

 

...

 

...

 

...

  

...

 

...

 

...

 

...

 

...

 

...

 

...

 

...

Eclipse-Link

MariaDB [controlloop]> SHOW CREATE TABLE ExampleObjMap_Example;
+-----------------------+-------------------------------------------------------------------------------------------------------------+
| Table              CONSTRAINT  `FK1a58hldurq1910ne2hbm9a7af` |FOREIGN CreateKEY Table                                                                                                (`name`, `version`)
REFERENCES `ExampleObjListEc` (`name`, `version`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 |
+-----------------------+-------+------------------------------------------------------------------------------------------------------+| ExampleObjMap_Example | CREATE TABLE `ExampleObjMap_Example` (


After saving an example:


MariaDB [controlloop]> select * from JpaExampleObjListEc_EXAMPLES;
+-------------+---------+---------------------------+
| name        | version | examples  `parent_name` varchar(120) NOT NULL,
  `parent_version` varchar(20) NOT NULL,
|
+-------------+---------+---------------------------+
| ExampleList | 1.0.0   |  .... <binary code> .... |
| ExampleList | 1.0.0   |  .... <binary code> .... |
+-------------+---------+---------------------------+

Map of Objects using OneToMany

OneToMany is not used in tosca model template. The example below shows an alternative to ElementCollection. In this example there is a field names collision.

Code Block
languagejava
titleJpaExampleObjMap
collapsetrue
@Entity
@Table(name = "ExampleObjMap")
@Data
public class JpaExampleObjMap implements Serializable {

    private static 

...

final long serialVersionUID = 1L;

    @EmbeddedId
    @VerifyKey
    @NotNull
    private ExampleKey key;

  

...

 

...

 

...

@OneToMany(

...

fetch 

...

= 

...

FetchType.EAGER,

...

 cascade = CascadeType.ALL, orphanRemoval = true)
    @Lob
    private Map<@NotNull String, @NotNull JpaExample> 

...

examples;
}

Representation of the example in YAML of what we could save using JpaExampleObjMap entity.

Code Block
languageyml
titleExample
collapsetrue
ExampleObjMap:
  name: ExampleObjMap
  version: 1.0.0
  examples:
    MyKey1:
      name: example1

...

 

...

 

...

 

...

   version: 1.0.0
     MyKey2:
      name: example2
      version: 1.0.0

Eclipse-Link

MariaDB    KEY `FK_ExampleObjMap_Example_child_name` (`child_name`,`child_version`),
  CONSTRAINT `FK_ExampleObjMap_Example_child_name` FOREIGN KEY (`child_name`, `child_version`)
REFERENCES `Example` (`name`, `version`),
  CONSTRAINT `FK_ExampleObjMap_Example_parent_name` FOREIGN KEY (`parent_name`, `parent_version`)
REFERENCES `ExampleObjMap` (`name`, `version`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 |
+-----[controlloop]> describe ExampleObjMap;
+----------+--------------+------+-----+---------+-------+
| Field    | Type         | Null | Key | Default | Extra |
+----------+--------------+------+-----+---------+-------+
| EXAMPLES | longblob     | YES  |     | NULL    |       |
| name     | varchar(120) | NO   | PRI | NULL    |       |
| version  | varchar(20)  | NO   | PRI | NULL    |       |
+----------+--------------+----+--+-----+---------+-------+


After saving the example:


MariaDB [controlloop]> select * from ExampleObjMap;
+--------------------------+---------------+-----------------+
| EXAMPLES                 | name          | version |
+----------------------------+

After saving the example:

MariaDB [controlloop]> select * from ExampleObjMap;
+---------------+---------+
| name          | version .... <binary code> .... | ExampleObjMap | 1.0.0   |
+----------------+----------+
| ExampleObjMap | 1.0.0   |
+---------------+---------+

Removing @Lob Annotation

The keys name and version of the JpaExampleObjMap as the same as JpaExample, so Eclipse-Link creates a wrong ExampleObjMap_Example table.

MariaDB [controlloop]> select * from Exampledescribe ExampleObjMap;
+---------+--------------+------+-----+---------+-------+
| Field PRIMED  | timeStampType |  name      | versionNull | Key | Default | Extra |
+---------+--------------+------+-----+---------+-------+
| name   NULL | varchar(120) | NO   | PRI | NULL    |       |
| example1version | 1.0.0varchar(20)  | |
|NO   NULL| PRI | NULL    |  | example2 | 1.0.0     |
+---------+--------------+------+-----+---------+-------+

MariaDB [controlloop]> selectSHOW *CREATE fromTABLE ExampleObjMap_Example;
+---------------+----------------+------------+---------------+--------------+
| parent_name   | parent_version | child_name | child_version | EXAMPLES_KEY |
+---------------+----------------+------------+---------------+--------------+
| ExampleObjMapTable | 1.0.0             | example1   | 1.0.0Create Table         |  MyKey1        |
|  ExampleObjMap  | 1.0.0             | example2    | 1.0.0            | MyKey2                                           |
+---------------+----------------+------------+---------------+--------------+

Hibernate

MariaDB [controlloop]> SHOW CREATE TABLE ExampleObjMap_Example;

+-----------------------+--------------------------------------------------------------------------------------------+
| ExampleObjMap_Example | CREATE TABLE `ExampleObjMap_Example` (
  `name` varchar(120) NOT NULL,
  `version` varchar(20) NOT NULL,
  `EXAMPLES_KEY` varchar(255) DEFAULT NULL,
  PRIMARY KEY (`name`,`version`),
  CONSTRAINT `FK_ExampleObjMap_Example_name` FOREIGN KEY (`name`, `version`)
REFERENCES `ExampleObjMap` (`name`, `version`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 |
+-----------------+
| Table                 | Create Table                                                                                                |
+-----------------------+-------------------------------------------------------------------------------------------------------------+
| ExampleObjMap_Example | CREATE TABLE `ExampleObjMap_Example` (
-------+-------------------------------------------------------------------------------------------------------------+


Using these tables I have got this error: Cannot add or update a child row: a foreign key constraint fails (`controlloop`.`ExampleObjMap_Example`, CONSTRAINT `FK_ExampleObjMap_Example_name` FOREIGN KEY (`name`, `version`) REFERENCES `ExampleObjMap` (`name`, `version`))
Error Code: 1452

Map of Objects using OneToMany (fixed)

The example below shows an alternative to ElementCollection with the fix to avoid field names collision.

Code Block
languagejava
titleJpaExampleObjMap
collapsetrue
@Entity
@Table(name = "ExampleObjMap")
@Data
public class JpaExampleObjMap implements Serializable {

    private static final long serialVersionUID = 1L;

    @EmbeddedId
    @VerifyKey
    @NotNull
    private ExampleKey key;

    @OneToMany(cascade = CascadeType.ALL, fetch = FetchType.EAGER)
    @JoinTable(
            joinColumns = {@JoinColumn(name = "parent_name", referencedColumnName = "name"),
                    @JoinColumn(name = "parent_version", referencedColumnName = "version")},
            inverseJoinColumns = {@JoinColumn(name = "child_name", referencedColumnName = "name"),
                    @JoinColumn(name = "child_version", referencedColumnName = "version")})
    private Map<@NotNull String, @NotNull JpaExample> examples;
}

Eclipse-Link

MariaDB [controlloop]> SHOW CREATE TABLE ExampleObjMap_Example;
+-----------------------+-------------------------------------------------------------------------------------------------------------+
| Table                 | Create Table                                                                                                |
+-----------------------+-------------------------------------------------------------------------------------------------------------+
| ExampleObjMap_Example | CREATE TABLE `ExampleObjMap_Example` (
`parent_name` varchar(120) NOT NULL,
  `parent_version` varchar(20) NOT NULL,
  `child_name` varchar(120) NOT NULL,
  `child_version` varchar(20) NOT NULL,
  `EXAMPLES_KEY` varchar(255) DEFAULT NULL,
  PRIMARY KEY (`parent_name`,`parent_version`,`child_name`,`child_version`),
  KEY `FK_ExampleObjMap_Example_child_name` (`child_name`,`child_version`),
  CONSTRAINT `FK_ExampleObjMap_Example_child_name` FOREIGN KEY (`child_name`, `child_version`)
REFERENCES `Example` (`name`, `version`),
  CONSTRAINT `FK_ExampleObjMap_Example_parent_name` FOREIGN KEY (`parent_name`, `parent_version`)
REFERENCES `ExampleObjMap` (`name`, `version`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 |
+-----------------------+-------------------------------------------------------------------------------------------------------------+


After saving the example:


MariaDB [controlloop]> select * from ExampleObjMap;
+---------------+---------+
| name          | version |
+---------------+---------+
| ExampleObjMap | 1.0.0   |
+---------------+---------+
MariaDB [controlloop]> select * from Example;
+--------+-----------+----------+---------+
| PRIMED | timeStamp | name     | version |
+--------+-----------+----------+---------+
|   NULL | NULL      | example1 | 1.0.0   |
|   NULL | NULL      | example2 | 1.0.0   |
+--------+-----------+----------+---------+
MariaDB [controlloop]> select * from ExampleObjMap_Example;
+---------------+----------------+------------+---------------+--------------+
| parent_name   | parent_version | child_name | child_version | EXAMPLES_KEY |
+---------------+----------------+------------+---------------+--------------+
| ExampleObjMap | 1.0.0          | example1   | 1.0.0         | MyKey1       |
| ExampleObjMap | 1.0.0          | example2   | 1.0.0         | MyKey2       |
+---------------+----------------+------------+---------------+--------------+

Hibernate

MariaDB [controlloop]> SHOW CREATE TABLE ExampleObjMap_Example;

+-----------------------+-------------------------------------------------------------------------------------------------------------+
| Table                 | Create Table                                                                                                |
+-----------------------+-------------------------------------------------------------------------------------------------------------+
| ExampleObjMap_Example | CREATE TABLE `ExampleObjMap_Example` (
  `parent_name` varchar(120) NOT NULL,
  `parent_version` varchar(20) NOT NULL,
  `child_name` varchar(120) NOT NULL,
  `child_version` varchar(20) NOT NULL,
  `examples_KEY` varchar(255) NOT NULL,
  PRIMARY KEY (`parent_name`,`parent_version`,`examples_KEY`),
  UNIQUE KEY `UK_ma8t20i58tt5ilqjrk2ged242` (`child_name`,`child_version`),
  CONSTRAINT `FK2n1x5g38x55wejkvnvhqin980` FOREIGN KEY (`parent_name`, `parent_version`)
REFERENCES `ExampleObjMap` (`name`, `version`),
  CONSTRAINT `FKstwyuf69lrj4tjpafwriuwp3h` FOREIGN KEY (`child_name`, `child_version`)
REFERENCES `Example` (`name`, `version`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 |
+-----------------------+-------------------------------------------------------------------------------------------------------------+


After saving the example:


MariaDB [controlloop]> select * from ExampleObjMap;
+---------------+---------+
| name          | version |
+---------------+---------+
| ExampleObjMap | 1.0.0   |
+---------------+---------+

MariaDB [controlloop]> select * from Example;
+----------+---------+--------+-----------+
| name     | version | primed | timeStamp |
+----------+---------+--------+-----------+
| example1 | 1.0.0   | NULL   | NULL      |
| example2 | 1.0.0   | NULL   | NULL      |
+----------+---------+--------+-----------+

MariaDB [controlloop]> select * from ExampleObjMap_Example;
+---------------+----------------+------------+---------------+--------------+
| parent_name   | parent_version | child_name | child_version | examples_KEY |
+---------------+----------------+------------+---------------+--------------+
| ExampleObjMap | 1.0.0          | example1   | 1.0.0         | MyKey1       |
| ExampleObjMap | 1.0.0          | example2   | 1.0.0         | MyKey2       |
+---------------+----------------+------------+---------------+--------------+

Performance issue

Using current version, for each operation save/read/delete of the service template below, control-loop runtime application access to 14 tables and handles 51 rows.

Code Block
languageyml
titleExample of Service Template
collapsetrue
name: ToscaServiceTemplateSimple
version: 1.0.1
tosca_definitions_version: tosca_simple_yaml_1_3
data_types:
  onap.datatypes.ToscaConceptIdentifier:
    derived_from: tosca.datatypes.Root
    properties:
      name:
        type: string
        required: true
      version:
        type: string
        required: true
node_types:
  org.onap.policy.clamp.controlloop.Participant:
    version: 1.0.1
    derived_from: tosca.nodetypes.Root
    properties:
      provider:
        type: string
        requred: false
  org.onap.policy.clamp.controlloop.ControlLoopElement:
    version: 1.0.1
    derived_from: tosca.nodetypes.Root
    properties:
      provider:
        type: string
        requred: false
      participantType:
        type: onap.datatypes.ToscaConceptIdentifier
        requred: true
      startPhase:
        type: integer
        required: false
        constraints:
          - greater_or_equal: 0
        metadata:
          common: true
        description: check wiki documentation about start phase
          stopped simultaneously
  org.onap.policy.clamp.controlloop.ControlLoop:
    version: 1.0.1
    derived_from: tosca.nodetypes.Root
    properties:
      provider:
        type: string
        requred: false
      elements:
        type: list
        required: true
        entry_schema:
          type: onap.datatypes.ToscaConceptIdentifier
  org.onap.policy.clamp.controlloop.K8SMicroserviceControlLoopElement:
    version: 1.0.1
    derived_from: org.onap.policy.clamp.controlloop.ControlLoopElement
    properties:
      chart:
        type: string
        required: true
      configs:
        type: list
        required: false
      requirements:
        type: string
        requred: false
      templates:
        type: list
        required: false
        entry_schema:
      values:
        type: string
        requred: true
topology_template:
  node_templates:
    org.onap.k8s.controlloop.K8SControlLoopParticipant:
      version: 2.3.4
      type: org.onap.policy.clamp.controlloop.Participant
      type_version: 1.0.1
      description: Participant for K8S
      properties:
        provider: ONAP
   
    org.onap.domain.database.HelloWorld_K8SMicroserviceControlLoopElement:
      # Chart from any chart repository configured on helm client.
      version: 1.2.3
      type: org.onap.policy.clamp.controlloop.K8SMicroserviceControlLoopElement
      type_version: 1.0.0
      description: Control loop element for the K8S microservice for Hello World
      properties:
        provider: ONAP
        participantType:
          name: org.onap.k8s.controlloop.K8SControlLoopParticipant1
          version: 2.3.4
        chart:  
          chartId:         
            name: dummy
            version: 0.1.0 
          releaseName: test                         
          namespace: test   

    org.onap.domain.database.PMSH_K8SMicroserviceControlLoopElement:  
      # Chart from local file system    
      version: 1.2.3
      type: org.onap.policy.clamp.controlloop.K8SMicroserviceControlLoopElement
      type_version: 1.0.0
      description: Control loop element for the K8S microservice for PMSH
      properties:
        provider: ONAP
        participantType:
          name: org.onap.k8s.controlloop.K8SControlLoopParticipant2
          version: 2.3.4
        startPhase: 1
        chart:          
          chartId: 
         

...

 

...

 

...

 name: dcae-pmsh         
            version: 8.0.0
  

...

 

...

 

...

 

...

 

...

    namespace: onap 
          releaseName: pmshms
       

...

 

...

 

...

 repository:
            repoName: chartmuseum
            

...

protocol: http
            address: 10.152.183.120
            port: 80

...

 

...

 

...

 

...

 

...

        userName: onapinitializer
            password: demo123456!
  

...

 

...

 

...

 

...

     overrideParams:
            global.masterPassword: test
      

...

 

...

 

...

 

...

 

...

  
                 

    

...

org.onap.domain.database.Local_K8SMicroserviceControlLoopElement: 
      # Chart installation without passing repository name     
      version: 1.2.3
      type: org.onap.policy.clamp.controlloop.K8SMicroserviceControlLoopElement
      type_version: 1.0.0
 

...

 

...

 

...

 

...

  description: Control loop element for the K8S microservice for local chart
      properties:
      

...

 

...

 

...

provider: 

...

ONAP

...

 

...

 

...

      participantType:
          name: org.onap.k8s.controlloop.K8SControlLoopParticipant
          version: 2.3.4
        

...

chart:
          chartId:      
          

...

 

...

 

...

name: nginx-ingress
            version: 0.9.1    
          releaseName: nginxms
          namespace: test   
          repository:
            

...

After saving the example:

...

repoName: nginx-stable       

    org.onap.domain.sample.GenericK8s_ControlLoopDefinition:
      version: 1.2.3
      type: org.onap.policy.clamp.controlloop.ControlLoop
      type_version: 1.0.0
      description: Control loop for Hello World
      properties:
        provider: ONAP
        elements:        
        - name: org.onap.domain.database.HelloWorld_K8SMicroserviceControlLoopElement
          version: 1.2.3   
        - name: org.onap.domain.database.PMSH_K8SMicroserviceControlLoopElement
          version: 1.2.3     
        - name: org.onap.domain.database.Local_K8SMicroserviceControlLoopElement
          version: 1.2.3                  
   


Multi templates

Right now using Spring repositories it is possible to create more than one service template, as service templates in policy-models/tosca. It works in both Eclipse-Link and Hibernate.

How to create additional service template (just add different name and version into the yaml file):

...

  • Move to Hibernate with EclipseLink tables is probably possible using Jpa Converters.
  • The presence of longblob types used to store whole objects is an issues, it is readable only by Java language or by any other language compatible with Java binary code. I am not sure if a db-migrator can handle that.
  • Document databases store all information for a given object in a single instance in the database, and every stored object can be different from every other.  Each operation save/read/delete of a service template, could be done using one access to a document. So, using Cassandra/MongoDB /Cassandra will solve all issues. JpaRepository and  and CassandraRepository/MongoRepository extend CrudRepository and expose the capabilities of the underlying persistence technology in addition to the rather generic persistence technology-agnostic interfaces like e.g. CrudRepository.