...
Schema generation
Boolean and TimeStamp
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 | ||||
---|---|---|---|---|
| ||||
@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; } |
...
MariaDB [controlloop]> describe Example;
+-----------+--------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-----------+--------------+------+-----+---------+-------+
| name | varchar(120) | NO | PRI | NULL | |
| version | varchar(20) | NO | PRI | NULL | |
| primed | tinyint(1) | YES | | NULL | |
| timeStamp | datetime(3) | YES | | NULL | |
+-----------+--------------+------+-----+---------+-------+
Map and List of Strings
When @ElementCollection is used properly there is enough compatibility. We can see that in the scenario shown below: there is only a small difference in how the primary keys are build.
Code Block | ||||||
---|---|---|---|---|---|---|
| ||||||
@Entity @Table(name = "ExampleCollection") @Data public class JpaExampleCollection implements Serializable { private static final long serialVersionUID = 1L; @EmbeddedId @VerifyKey @NotNull private ExampleKey key; @ElementCollection @Lob private Map<@NotNull String, @NotNull String> attributes; @ElementCollection private List<String> occurrences; } |
...
MariaDB [controlloop]> select * from JpaExampleCollection_ATTRIBUTES;
+-------------------+---------+-----------------+----------------+
| name | version | attributes | attributes_KEY |
+-------------------+---------+-----------------+----------------+
| ExampleCollection | 1.0.0 | ValueAttribute1 | Attribute1 |
| ExampleCollection | 1.0.0 | ValueAttribute2 | Attribute2 |
+-------------------+---------+-----------------+----------------+
MariaDB [controlloop]> select * from JpaExampleCollection_OCCURRENCES;
+-------------------+---------+-------------+
| name | version | occurrences |
+-------------------+---------+-------------+
| ExampleCollection | 1.0.0 | Occurrence1 |
| ExampleCollection | 1.0.0 | Occurrence2 |
+-------------------+---------+-------------+
JpaToscaCapabilityAssignment_ATTRIBUTES table
Currently in tosca model template, due the complexity of the schema there are some issues in foreign keys using Collections of String. The SQL code below shows the JpaToscaCapabilityAssignment_ATTRIBUTES table.
Eclipse-Link
MariaDB [controlloop]> SHOW CREATE TABLE JpaToscaCapabilityAssignment_ATTRIBUTES;
+-----------------------------------------+-------------------------------------------------------------------------------------------+
| Table | Create Table |
+-----------------------------------------+-------------------------------------------------------------------------------------------+
| JpaToscaCapabilityAssignment_ATTRIBUTES | CREATE TABLE `JpaToscaCapabilityAssignment_ATTRIBUTES` (
`name` varchar(120) DEFAULT NULL,
`version` varchar(20) DEFAULT NULL,
`ATTRIBUTES` longtext DEFAULT NULL,
`ATTRIBUTES_KEY` varchar(255) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 |
+-----------------------------------------+-------------------------------------------------------------------------------------------+
Currently in controlloop database, I have not found out why foreign key has not be generated in this table and in all '_ATTRIBUTES', '_META' and '_CONSTRAINTS' tables as well.
...
Map of Objects using ElementCollection (fixed)
The below example shows ElementCollection with embedded class. In order to avoid collisions with field names ("name" and "version"), it has been used AttributeOverride annotation to change their names.
Code Block | ||||||
---|---|---|---|---|---|---|
| ||||||
@Data
@Embeddable
public class JpaExampleEmd | ||||||
Code Block | ||||||
| ||||||
@Data
@Embeddable
public class JpaExampleEmd implements Serializable {
private static final long serialVersionUID = 1L;
@VerifyKey
@NotNull
@AttributeOverride(name = "name", column = @Column(name = "child_name"))
@AttributeOverride(name = "version", column = @Column(name = "child_version"))
private ExampleKey key;
@Column
private Boolean primed;
@Column(name = "timeStamp", precision = 3)
@Temporal(TemporalType.TIMESTAMP)
@NotNull
private Date timeStamp;
}
@Entity
@Table(name = "ExampleObjMapEc")
@Data
public class JpaExampleObjMapEc implements Serializable {
private static final long serialVersionUID = 1L;
@EmbeddedId
@VerifyKey
@NotNull
private ExampleKey key;
@ElementCollection
private Map<@NotNull String, @NotNull JpaExampleEmd> 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 |
+-----------------------------+-------------------------------------------------------------------------------------------------------+
...
MariaDB [controlloop]> select * from ExampleObjMapEc;
+-----------------+---------+
| name | version |
+-----------------+---------+
| ExampleObjMapEc | 1.0.0 |
+-----------------+---------+
MariaDB [controlloop]> select * from JpaExampleObjMapEc_EXAMPLES;
+-----------------+---------+------------+---------------+--------+-----------+--------------+
| name | version | child_name | child_version | primed | timeStamp | examples_KEY |
+-----------------+---------+------------+---------------+--------+-----------+--------------+
| ExampleObjMapEc | 1.0.0 | example1 | 1.0.0 | NULL | NULL | MyKey1 |
| ExampleObjMapEc | 1.0.0 | example2 | 1.0.0 | NULL | NULL | MyKey2 |
+-----------------+---------+------------+---------------+--------+-----------+--------------+
JpaToscaDataType_PROPERTIES table
Eclipse-Link
Map of Objects using ElementCollection (hacked)
In this scenario JpaExampleLob class is not entity and neither embedded.
Code Block | ||||||
---|---|---|---|---|---|---|
| ||||||
@Data
public class JpaExampleLob implements Serializable {
private static final long serialVersionUID = 1L;
@VerifyKey
@NotNull
private ExampleKey key;
private Boolean primed;
@NotNull
private Date timeStamp;
}
@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 JpaExampleLob> examples;
} |
Hibernate
MariaDB [controlloop]> SHOW CREATE TABLE JpaExampleObjMapEc_EXAMPLES;
+--MariaDB [controlloop]> describe JpaToscaDataType_PROPERTIES;
+----------------+--------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+----------------+--------------+------+-----+---------+-------+
| name | varchar(120) | YES | | NULL | |
| 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;
+------------------+--------------+------+-----+---------+-------+
| FieldTable | Type | NullCreate |Table 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. Move JpaToscaProperty as embeddable class, all max length in varchar fields will be apply.
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 | ||||||
---|---|---|---|---|---|---|
| ||||||
@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 | CREATE TABLE `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 | |
+---------+--------------+------+-----+---------+-------+MariaDB
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 | ||||||
---|---|---|---|---|---|---|
| ||||||
@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;
+-------------+---------+
| name-------+
| Field | Type | version |
+-------------+---------+
| ExampleList | 1.0.0 |
+----Null | Key | Default | Extra |
+---------+---------+
MariaDB [controlloop]> select * from JpaExampleObjListEc_EXAMPLES;
+-------------+---------+-----+---------+-------------+
| name | varchar(120) | NO | PRI | NULL | |
| version | EXAMPLESvarchar(20) | NO | PRI | NULL | |
+---------+----+----------+------+-----+---------+-------+| ExampleList | 1.0.0 | .... <binary code> .... |
| ExampleList | 1.0.0 | .... <binary code> .... |
+--
MariaDB [controlloop]> SHOW CREATE TABLE JpaExampleObjListEc_EXAMPLES;
+-----------+---------+---------------------------+
Hibernate
MariaDB [controlloop]> describe ExampleObjListEc;
++-----------+--------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+---------+--------------+------+-----+---------+-------+
| nameTable | varchar(120) | NO | PRI | NULL | Create Table |
| version | varchar(20) | NO | PRI | NULL | |
+---------+--------------+------+-----+---------+-------+
MariaDB [controlloop]> SHOW CREATE TABLE JpaExampleObjListEc_EXAMPLES; |
+------------------------------+------------------------------------------------------------------------------------------------------+
| JpaExampleObjListEc_EXAMPLES | Table 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 NULLKEY `FK_JpaExampleObjListEc_EXAMPLES_name` (`name`,`version`),
`examplesCONSTRAINT `FK_JpaExampleObjListEc_EXAMPLES_name` varchar(120) NOT NULL,
`examples_version` varchar(20) NOT NULL,
FOREIGN KEY (`name`, `version`)
UNIQUE KEY `UK_8nnxsomci4yiwc8ks6radimiq` (`examples_name`,`examples_version`),
KEY `FK1a58hldurq1910ne2hbm9a7af` REFERENCES `ExampleObjListEc` (`name`, `version`),
CONSTRAINT `FK1a58hldurq1910ne2hbm9a7af` FOREIGN KEY (`name`, `version`)
ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 REFERENCES `ExampleObjListEc` (`name`, `version`),
CONSTRAINT `FKnj1lga10so090q9wf38k4jf7p` FOREIGN KEY (`examples_name`, `examples_version`)
REFERENCES `Example` (`name`, `version`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 |
+---------------|
+------------------------------+------------------------------------------------------------------------------------------------------+
...
MariaDB [controlloop]> select * from ExampleExampleObjListEc;
+----------+---------+--------+-----------+
| name | version | primed | timeStamp |
+----------+----+-----+--------+-----------+
| example1 | 1.0.0 | NULL | NULL |
| example2 | +
| ExampleList | 1.0.0 | NULL | NULL |
+----------+---------+--------+-----------+
MariaDB [controlloop]> select * from ExampleObjListEcJpaExampleObjListEc_EXAMPLES;
+-------------+---------+
| name | version |
+------------------+---------+
| ExampleListname | version | 1.0.0 |
+-------------+---------+
MariaDB [controlloop]> select * from JpaExampleObjListEc_EXAMPLES; EXAMPLES |
+-------------+---------+---------------+------------------+
| nameExampleList | 1.0.0 | version | examples_name | examples_version |
+ .... <binary code> .... |
| ExampleList | 1.0.0 | .... <binary code> .... |
+-------------+---------+---------------------------+
Hibernate
MariaDB [controlloop]> describe ExampleObjListEc;
+---------+--------------+------+-----+---------+-------+
| ExampleList | 1.0.0 Field | example1 | 1.0.0 Type |
| ExampleListNull | 1.0.0 Key | example2 Default | 1.0.0 Extra |
+---------+-----+---------+--------+-------+---------+---------+
List of Objects using ElementCollection (fixed)
Code Block | ||||||
---|---|---|---|---|---|---|
| ||||||
@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;
} |
...
+
| name | varchar(120) | NO | PRI | NULL | |
| version | varchar(20) | NO | PRI | NULL | |
+---------+--------------+------+-----+---------+-------+
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 NULL UNIQUE KEY `UK_8nnxsomci4yiwc8ks6radimiq` (`examples_name`,`examples_version`),
KEY `FK1a58hldurq1910ne2hbm9a7af` (`name`,`version`),
`version` varchar(20) DEFAULT NULL,
CONSTRAINT `FK1a58hldurq1910ne2hbm9a7af` FOREIGN KEY (`name`, `version`)
KEY `FK_JpaExampleObjListEc_EXAMPLES_name`REFERENCES `ExampleObjListEc` (`name`, `version`),
CONSTRAINT `FK_JpaExampleObjListEc_EXAMPLES_name``FKnj1lga10so090q9wf38k4jf7p` FOREIGN KEY (`name``examples_name`, `version``examples_version`)
REFERENCES `ExampleObjListEc``Example` (`name`, `version`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 |
+------------------------------+------------------------------------------------------------------------------------------------------+
...
MariaDB [controlloop]> select * from ExampleObjListEcExample;
+----------+---------+--------+-----------+
| name | version | primed | versiontimeStamp |
+-------------+---------+
| ExampleList | 1.0.0 |
+---------+----+---------+
MariaDB [controlloop]> select * from JpaExampleObjListEc_EXAMPLES;| example1 | 1.0.0 | NULL | NULL |
| example2 | 1.0.0 | NULL | NULL |
+--------+--+---------+------------+---------------+
MariaDB [controlloop]> select * from ExampleObjListEc;
+-------------+---------+
| PRIMEDname | timeStamp | child_name | child_version |
+-------------+---------+
| nameExampleList | 1.0.0 | version |
+----------+---+---------+
MariaDB [controlloop]> select * from JpaExampleObjListEc_EXAMPLES;
+-------------+---------+-----------+----+---------+---------+
| name NULL | NULL | example1version | 1.0.0 | ExampleList | 1.0.0 |
| NULL | NULL | example2 | 1.0.0 | ExampleList | 1.0.0 examples_name | examples_version |
+--------+-----------+------------+---------------+-------------+---------+
Hibernate
+
| ExampleList | 1.0.0 | example1 | 1.0.0 |
| ExampleList | 1.0.0 | example2 | 1.0.0 |MariaDB [controlloop]> SHOW CREATE TABLE JpaExampleObjListEc_EXAMPLES;
+--------------+----------------+---------------+------------------+
List of Objects using ElementCollection (fixed)
The below example shows ElementCollection with embedded class.
Code Block | ||||||
---|---|---|---|---|---|---|
| ||||||
@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 --------------------------------------------+
| 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 |
+--------+-----+------+---+---------+---+------------+---+--------+--+---------+
| ExampleListNULL | 1.0.0 NULL | example1 | 1.0.0 | NULL ExampleList | NULL 1.0.0 |
| ExampleListNULL | 1.0.0NULL | example2 | 1.0.0 | NULLExampleList | NULL 1.0.0 |
+--------+-----+------+---+---------+---+------------+---+--------+--+---------+
Map of Objects using OneToMany
Code Block | ||||||
---|---|---|---|---|---|---|
| ||||||
@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 | ||||||
---|---|---|---|---|---|---|
| ||||||
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;
+------MariaDB [controlloop]> describe ExampleObjMap;
+----------+--------------+--------+------------+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+----------+--------------+------+-----+---------+-------+
| EXAMPLES | longblob---------------+
| Table | Create YESTable | | 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 |
+--------------------------+---------------+---------+
| .... <binary code> .... | 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]> describe ExampleObjMap;
+---------+--------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+---------+--------------+------+-----+---------+-------+
| name | varchar(120) | NO | PRI | NULL | |
| version | varchar(20) | NO | PRI | NULL | |
+---------+--------------+------+-----+---------+-------+
MariaDB [controlloop]> SHOW CREATE TABLE ExampleObjMap_Example;
+-----------------------+-------------------------------------------------------------------------------------------------------------+
| Table | Create Table |
+-----------------------+-------------------------------------------------------------------------------------------------------------+
| ExampleObjMap_Example | CREATE TABLE `ExampleObjMap_Example` (
JpaExampleObjListEc_EXAMPLES | 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,
`name` `primed` varcharbit(1201) NOTDEFAULT NULL,
`version` varchar(20) NOT NULL,
`timeStamp` datetime(6) DEFAULT NULL,
`EXAMPLES_KEY` varchar(255) DEFAULT NULL,
KEY PRIMARY`FK1a58hldurq1910ne2hbm9a7af` KEY (`name`,`version`),
CONSTRAINT `FK_ExampleObjMap_Example_name``FK1a58hldurq1910ne2hbm9a7af` FOREIGN KEY (`name`, `version`)
REFERENCES `ExampleObjMap``ExampleObjListEc` (`name`, `version`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 |
+-----------------------+-------+------------------------------------------------------------------------------------------------------+
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)
Code Block | ||||||
---|---|---|---|---|---|---|
| ||||||
@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
After saving an example:
MariaDB [controlloop]> select * from ExampleObjListEc;
+-------------+---------+
| name | version |
+-------------+---------+
| ExampleList | 1.0.0 |
+-------------+---------+
MariaDB [controlloop]> select * from JpaExampleObjListEc_EXAMPLES;
+---MariaDB [controlloop]> SHOW CREATE TABLE ExampleObjMap_Example;
+----------+-------------+------------+---------------+--------+------------------+
| name | version | child_name | child_version | primed | timeStamp |
+-------------+---------+------------+---------------+--------+-----------+
| TableExampleList | 1.0.0 | example1 | Create Table1.0.0 | NULL | NULL |
| ExampleList | 1.0.0 | example2 | 1.0.0 | NULL | NULL |
+-------------+----------+------------+---------------+--------+-----------+
List of Objects using ElementCollection (hacked)
In this scenario JpaExampleLob class is not entity and neither embedded.
Code Block | ||||||
---|---|---|---|---|---|---|
| ||||||
@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 |
+------------------------------+------------------------------------------------------------------------------------------------------+
| JpaExampleObjListEc_EXAMPLES | CREATE TABLE `JpaExampleObjListEc_EXAMPLES` (
---------------------------------------------------------------+
| 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`name` KEY (`parent_name`,`parent_version`,`child_name`,`child_version`)varchar(120) NOT NULL,
KEY `FK_ExampleObjMap_Example_child_name` (`child_name`,`child_version`)`version` varchar(20) NOT NULL,
CONSTRAINT `FK_ExampleObjMap_Example_child_name` FOREIGN KEY (`child_name`, `child_version`)
`examples` longblob DEFAULT NULL,
REFERENCESKEY `Example``FK1a58hldurq1910ne2hbm9a7af` (`name`, `version`),
CONSTRAINT `FK_ExampleObjMap_Example_parent_name``FK1a58hldurq1910ne2hbm9a7af` FOREIGN KEY (`parent_name``name`, `parent_version``version`)
REFERENCES `ExampleObjMap``ExampleObjListEc` (`name`, `version`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 |
+-----------------------+-------+------------------------------------------------------------------------------------------------------+
After saving the an example:
MariaDB [controlloop]> select * from ExampleObjMapJpaExampleObjListEc_EXAMPLES;
+-------------+---------+---------------------------+
| name | version | versionexamples |
+-------------+---+------+---+
| ExampleObjMap | 1.0.0 |
+---------------+---------+
MariaDB [controlloop]> select * from Example;
+--------+-----------+----------+---------+
| PRIMED | timeStamp | name | version |
+--------+-----------+----------+---------+
| NULL | NULL | example1 | | ExampleList | 1.0.0 | .... <binary code> .... |
| ExampleList | 1.0.0 |
| .... NULL<binary | NULL | example2 | 1.0.0 code> .... |
+--------+-----+------+---+-------+---------+MariaDB [controlloop]> select * from ExampleObjMap_Example;
+---------------+----------------+------------+---------------+--------------+
| parent_name | parent_version | child_name |+
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 | ||||||
---|---|---|---|---|---|---|
| ||||||
@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 | ||||||
---|---|---|---|---|---|---|
| ||||||
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 [controlloop]> describe ExampleObjMap;
+ 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;
+-----------+
| 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 Table | Create Table |
+-----------------------+-------------------------------------------------------------------------------------------------------------+
| ExampleObjMap_Example | CREATE TABLE `ExampleObjMap_Example` (
`parent_name` varchar(120) NOT NULL,
| name | version |
+--------------------------+---------------+---------+
| .... <binary code> .... | 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]> describe ExampleObjMap;
+---------+--------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+---------+--------------+------+-----+---------+-------+
| name | varchar(120) | NO | PRI | NULL | |
| version | varchar(20) | NO | PRI | NULL | |
+---------+--------------+------+-----+---------+-------+
MariaDB [controlloop]> SHOW CREATE TABLE ExampleObjMap_Example;
+-----------------------+-------------------------------------------------------------------------------------------------------------+
| Table | Create Table |
+-----------------------+-------------------------------------------------------------------------------------------------------------+
| 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 |
+-----------------------+-------------------------------------------------------------------------------------------------------------+
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 | ||||||
---|---|---|---|---|---|---|
| ||||||
@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 | ||||||
---|---|---|---|---|---|---|
| ||||||
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 |
...
After saving the example:
...
releaseName: nginxms
namespace: test
repository:
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):
...
- Avoid default name and version (for each template/node/data type, etc.. name and version have to be mandatory)
- Java code to manual check for each table if name and version are already used
Conclusion
- Move to Hibernate with EclipseLink tables is probably possible.
- The presence of longblob types used to store whole objects is definitely not so maintainable. The fix for those issues could be done in both Eclipse-Link and Hibernate. Before to apply the fix it needs to check the max length of varchar fields.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
extendCrudRepository
and expose the capabilities of the underlying persistence technology in addition to the rather generic persistence technology-agnostic interfaces like e.g.CrudRepository
.
...