<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wiki.sdmxcloud.org/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Lythhishmeh</id>
	<title>Fusion Registry Wiki - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.sdmxcloud.org/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Lythhishmeh"/>
	<link rel="alternate" type="text/html" href="https://wiki.sdmxcloud.org/Special:Contributions/Lythhishmeh"/>
	<updated>2026-04-12T19:01:06Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.32.0</generator>
	<entry>
		<id>https://wiki.sdmxcloud.org/index.php?title=Data_Stores&amp;diff=7524</id>
		<title>Data Stores</title>
		<link rel="alternate" type="text/html" href="https://wiki.sdmxcloud.org/index.php?title=Data_Stores&amp;diff=7524"/>
		<updated>2025-01-14T13:23:54Z</updated>

		<summary type="html">&lt;p&gt;Lythhishmeh: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Functions]]&lt;br /&gt;
[[Category:How_To]]&lt;br /&gt;
= Overview =&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;The Fusion Registry can act as a Virtual Data Store. This means that the Registry is able to link to datasets accross multiple physical data stores, and each data store can be of a diffent type (database, web service, file).  The Fusion Registry is able to query multiple data stores for a single data query and then combine the data at the end, before writing it back to the user in a response format of their choice.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
== Registry Managed Data Store ==&lt;br /&gt;
A Registry Managed Data Store is one which the Registry maintains.  This means as data is published to the Fusion Registry, the Registry wil write the data to the store and manage the transaction. Registry managed data stores come in two flavours, a relational database (MySQL or SQL Server) store, or a Fusion Store which has been custom built by Metadata Technology for rapid storage and dissemination of data.     &lt;br /&gt;
&lt;br /&gt;
=== Fusion Data Store === &lt;br /&gt;
The Fusion Data Store is an in-memory database, custom built by Metadata Technology for storing time series SDMX datasets.  The data is ultimately persisted to the Registry database, so that when the Fusion Registry server is terminated, and re-launched, the Fusion Data Stores will be read back into memory.  For the duration of the server up-time, the data store will live in memory.  &lt;br /&gt;
&lt;br /&gt;
=== Registry Managed Database ===&lt;br /&gt;
&amp;lt;p&amp;gt;A Registry Managed Database includes support for SQL Server and MySQL database platforms, MariaDB&amp;lt;sup&amp;gt;*&amp;lt;/sup&amp;gt;.  The Fusion Registry is responsible for creating the database tables when new datasets are loaded.  The Fusion Registry will also update table definitions if the [[Data_Structure_Definition|Data Structure Definition]] is changed.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;&amp;lt;sup&amp;gt;*&amp;lt;/sup&amp;gt;Note&amp;lt;/strong&amp;gt; Maria DB re-writes a query for both lastNObservation and firstNObservations to [https://dba.stackexchange.com/questions/117954/is-a-ranking-querys-order-by-in-from-subquery-is-preserved optimise away] a required part of the SQL query.  MariaDB can be configured to run in MySQL compatability mode, where this error does not occur.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;The database table structure is a two or three tables per Dataflow.  The table names are based on the Dataflow, but can be changed if required.  The tables include:&lt;br /&gt;
* Table for Series Definitions&lt;br /&gt;
* Table for Observations &lt;br /&gt;
* Table data dataset attributes (only created if Dataset Attributes exist on the Data Structure Definition)&lt;br /&gt;
&lt;br /&gt;
==== Column Names ====&lt;br /&gt;
The Series Table will have the following Columns created.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Column Name !! Column Type  !! Purpose&lt;br /&gt;
|-&lt;br /&gt;
| ID || Varchar || A concatenation of the Dimension values that make up the series. &amp;lt;br/&amp;gt; The width of the ID column is a combination of all the Dimension Widths plus the number of Dimensions.&lt;br /&gt;
An example ID is M:FR:EMP.  It is important that the column width for each Dimension of the Data Structure Definition is low, i.e if the Dimenison is data type String then place a Max Width restriction on the Dimension's definition so that the database table can be constructed with a primary key that does not exceed the limit set by the database vendor.&lt;br /&gt;
|-&lt;br /&gt;
| FR_GROUP_ID || varchar|| (optional) Created on if the Data Structure Definition defines a Groups. &amp;lt;br/&amp;gt;This coulmn enable the storage of Group level Attributes&lt;br /&gt;
|-&lt;br /&gt;
| FR_PROVIDER_ACY || varchar || Data Provider's Agency, used if the data query includes Data Provider filters&lt;br /&gt;
|-&lt;br /&gt;
| FR_PROVIDER_ID || varchar|| Data Provider's Id, used if the data query includes Data Provider filters&lt;br /&gt;
|-&lt;br /&gt;
| FR_PROVISION || varchar || Provision Agreement short URN e.g ECB:EXR(1.0)&lt;br /&gt;
|-&lt;br /&gt;
| FR_ERROR || varchar || Internal Use only &lt;br /&gt;
|-&lt;br /&gt;
| FR_UPDATED_DATE || varchar|| Last updated date for the series&lt;br /&gt;
|-&lt;br /&gt;
| DIM ID/ATT_ID || varchar|text|| A Column for each Dimension and Series Level Attribute.  The Column Name is the ID of the Dimension/Attribute and the Column Type is dependant on the Text Format &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The Observation Table will have the following Columns created.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Column Name !! Column Type  !! Purpose&lt;br /&gt;
|-&lt;br /&gt;
| ID || int || Auto increment primary key&lt;br /&gt;
|-&lt;br /&gt;
| FR_KEY_ID || varchar|| Foreign key to the series ID column&lt;br /&gt;
|-&lt;br /&gt;
| FR_OBS_DATE || datetime || A datetime representaion of the TIME_PERIOD column&lt;br /&gt;
|-&lt;br /&gt;
| OBS_VALUE|| varchar || The Observation Value&lt;br /&gt;
|-&lt;br /&gt;
| TIME_PERIOD || varchar || [[SDMX_Time_Formats|Reported Time Period]]  &lt;br /&gt;
|-&lt;br /&gt;
| FR_ERROR || varchar || Internal use only&lt;br /&gt;
|-&lt;br /&gt;
| FR_EMBARGO || int || Deprecated&lt;br /&gt;
|-&lt;br /&gt;
| FR_IS_PUBLIC || int || Deprecated&lt;br /&gt;
|-&lt;br /&gt;
| FR_UPDATED_DATE_OBS || int || Last time the observation was inserted/updated&lt;br /&gt;
|-&lt;br /&gt;
| FR_VALID_FROM || datetime || Used to support the &amp;lt;b&amp;gt;includeHistory&amp;lt;/b&amp;gt; query parameter. &amp;lt;br/&amp;gt;A time stamp of when the observation is valid from, either taken from the Header of the dataset, or set to the time the observation was inserted&lt;br /&gt;
|-&lt;br /&gt;
| FR_VALID_TO|| datetime || Used to support the &amp;lt;b&amp;gt;includeHistory&amp;lt;/b&amp;gt; query parameter. &amp;lt;br/&amp;gt;A time stamp of when the observation is valid to (if the observation is updated, this is used to capture previous revisions)&lt;br /&gt;
|-&lt;br /&gt;
| FR_CHKSUM || varchar|| a checksum on the column (internal use)&lt;br /&gt;
|-&lt;br /&gt;
| ATT_ID || varchar|text|| A Column for each Observation Level Attribute.  The Column Name is the ID of the Attribute and the Column Type is dependant on the Text Format &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The Dataset Attribute Table, if required, will have the following Columns created.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Column Name !! Column Type  !! Purpose&lt;br /&gt;
|-&lt;br /&gt;
| ID || Varchar || The ID of the Dataset Level Attribute.&lt;br /&gt;
|-&lt;br /&gt;
| VALUE || varchar|| The reported value for the attribute&lt;br /&gt;
|-&lt;br /&gt;
| FR_ERROR || varchar|| internal use only&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Column Data Types ====&lt;br /&gt;
&amp;lt;p&amp;gt;The column data types that are based on the  [[Data_Structure_Definition|Data Structure Definitions]] Dimensions and Attributes are set to Varchar with the width restrictions based on the table below.  If the width restriction exceeds 250 characters the column data type is set to TEXT.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;Width restrictions are calculated as follows:&amp;lt;/p&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Component's Representation !! Column Width !! Example Value&lt;br /&gt;
|-&lt;br /&gt;
| String || Max Length defined on Component&amp;lt;br/&amp;gt; or 250 if unspecified || This is a series title&lt;br /&gt;
|-&lt;br /&gt;
| Codelist || Maximum length of the longest&amp;lt;br/&amp;gt; Code Id (e.g UK would be length 2) || UK&lt;br /&gt;
|-&lt;br /&gt;
| Boolean || 5 || true&lt;br /&gt;
|-&lt;br /&gt;
| Short || 5 || 32767&lt;br /&gt;
|-&lt;br /&gt;
| Integer || 10 || 123&lt;br /&gt;
|-&lt;br /&gt;
| Long || 19 || 123456&lt;br /&gt;
|-&lt;br /&gt;
| Float || 12 || 12.20&lt;br /&gt;
|-&lt;br /&gt;
| Double || 22 || 12.20&lt;br /&gt;
|-&lt;br /&gt;
| Double || 22 || 12.20&lt;br /&gt;
|-&lt;br /&gt;
| Date || 30 || 2002-01-01T12:15:00.000GMT&lt;br /&gt;
|-&lt;br /&gt;
| Date Time || 30 || 2002-01-01T12:15:00.000GMT&lt;br /&gt;
|-&lt;br /&gt;
| Time Period || 30 || 2002-Q1 (any valid [[SDMX_Time_Formats|Time Format]])&lt;br /&gt;
|-&lt;br /&gt;
| Day || 2 || 31&lt;br /&gt;
|-&lt;br /&gt;
| Month || 2 || 12&lt;br /&gt;
|-&lt;br /&gt;
| Year_Month || 7 || 2002-01&lt;br /&gt;
|-&lt;br /&gt;
| Year || 4 || 2001 &lt;br /&gt;
|-&lt;br /&gt;
| Time || 10 ||  12:15:00&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;strong&amp;gt;Note&amp;lt;/strong&amp;gt; If the dimenison or attribute is numerical and a maximum and minimum value is set, then this will be used to determine the column width.  For example if the Attribute is of type Double, with a min value of 0 and a max value of 10 with a Decimals of 3, then the maximum length is 6, allowing for the values such as 10.123 to be reported.&lt;br /&gt;
&lt;br /&gt;
== Externally Managed Database ==&lt;br /&gt;
An Externally Managed Database can be MySQL, SQLServer, or Oracle.  &lt;br /&gt;
&lt;br /&gt;
There are two options for the database table design when linking to an externally managed database, these are:&lt;br /&gt;
# Mirror the structure used by the Fusion Registry Managed database table structure (Series / Observation).  &lt;br /&gt;
# A single database table for a Dataflow, where the Series and Observations are in one table&lt;br /&gt;
&lt;br /&gt;
'''Note'''  The Table and column names must all be in UPPER CASE.&lt;br /&gt;
&lt;br /&gt;
When the Provision Agreement is linked to an externally managed data store, the user interface will provide the ability to specify what the database tables/views are used for the Series table and the Observation table.  The Series table is optional, and if it is not provided then the Single Table Design will be used to query the database table.  If the Series table is provided, the Series/Obs table design will be used. &lt;br /&gt;
&lt;br /&gt;
=== Series/Obs Table Design ===&lt;br /&gt;
See the [[#Registry_Managed_Database|registry table design]] section for the full structure.  The full table structure is not required, but there are some rules required for this table/view design, these are:&lt;br /&gt;
&lt;br /&gt;
# The '''Series table''' must have a primary key OR a Column called ID.  If there is a column called ID it will be expected to be the Primary Key column.&lt;br /&gt;
# If the '''Series table''' has an ID column AND it is of type Varchar, the values will be expected to be the concatenated series key (A:UK:EMP for example).&lt;br /&gt;
# The '''Obs table''' must either have a foreign key to the Series Table, OR a column called FR_KEY_ID which can be used to join to the primary key of the Series Table&lt;br /&gt;
# The '''Series table''' is expected to have a Column per Dimension, attribute columns are all optional&lt;br /&gt;
# The '''Obs table''' is expected to have a Column for Obs Value and Time Period, attribute columns are all optional&lt;br /&gt;
# All columns that are prefixed with 'FR_' are optional&lt;br /&gt;
&lt;br /&gt;
=== Single Table Design ===&lt;br /&gt;
The flat table structure is a denormalised structure where the Series and Observations are in one table.  This does lead to a repetition of dimension values where a series consists of multiple observations.  The flat table structure does not support all the features of a SDMX Query including firstNObservations, lastNObservations, includeHistory.&lt;br /&gt;
&lt;br /&gt;
The table structure is as follows:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Column Name !! Column Type   !! Required !! Purpose&lt;br /&gt;
|-&lt;br /&gt;
| DIM _ID || varchar || Required || Column per Dimension where the column name is that of the Dimension Id&lt;br /&gt;
|-&lt;br /&gt;
| ATTR_ID || varchar || Optional|| Column per Series or Observation Attribute where the column name is that of the Attribute Id &lt;br /&gt;
|-&lt;br /&gt;
| TIME_PERIOD || varchar || Required || [[SDMX_Time_Formats|Reported Time Period]]  &lt;br /&gt;
|-&lt;br /&gt;
| FR_VALID_FROM || datetime || Optional ||  Used to support startPeriod, endPeriod, lastNObservations, firstNObservations query parameters&lt;br /&gt;
|-&lt;br /&gt;
| FR_UPDATED_DATE || datetime || Optional  || to support the updatedAfter query parameter&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
'''Note:''' NVARCHAR and VARCHAR are not interchangeable and columns must be defined as VARCHAR and not NVARCHAR to prevent errors.&lt;br /&gt;
&lt;br /&gt;
== Custom Table and Column Names ==&lt;br /&gt;
It is possible to override the Registrys own table nameing and column naming convention.  To do this via a web service, use the following:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background-color:#eaecf0&amp;quot;|&amp;lt;b&amp;gt;Entry Point&amp;lt;/b&amp;gt;|| &amp;lt;b&amp;gt; /ws/secure/datasource/tableMapping&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background-color:#eaecf0&amp;quot;|&amp;lt;b&amp;gt;Access&amp;lt;/b&amp;gt;|| &amp;lt;span style='color:red'&amp;gt;&amp;lt;b&amp;gt;Private&amp;lt;/b&amp;gt;&amp;lt;/span&amp;gt; (admin)&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background-color:#eaecf0&amp;quot;|&amp;lt;b&amp;gt;Http Method&amp;lt;/b&amp;gt;|| POST&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background-color:#eaecf0&amp;quot;|&amp;lt;b&amp;gt;Accepts&amp;lt;/b&amp;gt;|| application/json&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background-color:#eaecf0&amp;quot;|&amp;lt;b&amp;gt;Compression&amp;lt;/b&amp;gt; || N/A&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background-color:#eaecf0&amp;quot;|&amp;lt;b&amp;gt;Content-Type&amp;lt;/b&amp;gt; || application/json&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background-color:#eaecf0&amp;quot;|&amp;lt;b&amp;gt;Response Format&amp;lt;/b&amp;gt;|| application/json&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background-color:#eaecf0&amp;quot;|&amp;lt;b&amp;gt;Response Statuses&amp;lt;/b&amp;gt;|| &amp;lt;p&amp;gt;&amp;lt;b&amp;gt;200&amp;lt;/b&amp;gt; - success &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&amp;lt;b&amp;gt;400&amp;lt;/b&amp;gt; - Bad JSON syntax&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&amp;lt;b&amp;gt;401&amp;lt;/b&amp;gt; - Unauthorized&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&amp;lt;b&amp;gt;500&amp;lt;/b&amp;gt; - Server Error&amp;lt;/p&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The JSON request has the following structure:&lt;br /&gt;
 {&lt;br /&gt;
   &amp;quot;URN&amp;quot; : &amp;quot;urn:sdmx:org.sdmx.infomodel.datastructure.Dataflow=WB:GCI(1.0)&amp;quot;,&lt;br /&gt;
   &amp;quot;DataSourceId&amp;quot; : &amp;quot;MY_STORE&amp;quot;,&lt;br /&gt;
   &amp;quot;KeyTable&amp;quot; : &amp;quot;GCI_KEY&amp;quot;,&lt;br /&gt;
   &amp;quot;ObsTable&amp;quot; : &amp;quot;GCI_OBS&amp;quot;,&lt;br /&gt;
   &amp;quot;DSAttributeTable&amp;quot; : null,&lt;br /&gt;
   &amp;quot;MappedColumns&amp;quot; : {&lt;br /&gt;
     &amp;quot;REF_AREA&amp;quot; : &amp;quot;COUNTRY&amp;quot;,&lt;br /&gt;
     &amp;quot;FR_UPDATE_DATE&amp;quot; : &amp;quot;UPDATED_DATE&amp;quot; &lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
The URN field is the URN of the Dataflow to map the table/colmn names for.  The Mapped Columns field is optional, and only required if column names require mapping as well as table names.  The same web service can be used to update a mapping, the Dataflow URN is the key for the mapping.&lt;br /&gt;
&lt;br /&gt;
To delete a mapping call the same web service with method DELETE, and post the following JSON:&lt;br /&gt;
&lt;br /&gt;
 {&lt;br /&gt;
   &amp;quot;URN&amp;quot; : &amp;quot;urn:sdmx:org.sdmx.infomodel.datastructure.Dataflow=WB:GCI(1.0)&amp;quot;,&lt;br /&gt;
   &amp;quot;DataSourceId&amp;quot; : &amp;quot;MY_STORE&amp;quot;,&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
To retrieve a mapping call the same web service with the following query parameters:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background-color:#eaecf0&amp;quot;|&amp;lt;b&amp;gt;urn&amp;lt;/b&amp;gt;||  urn of the Dataflow to get the table mapping description for&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background-color:#eaecf0&amp;quot;|&amp;lt;b&amp;gt;dataSourceId&amp;lt;/b&amp;gt;|| Id of the data store to get the table mapping description for&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Example Using Oracle==&lt;br /&gt;
The following is a short example demonstrating how to use Oracle and set up 2 externally managed tables and connect them to the Fusion Registry, allowing the Registry to disseminate data.&lt;br /&gt;
&lt;br /&gt;
The steps to follow are:&lt;br /&gt;
# Using the database tools of your choice, create the Key Table and Obs Table and populate both with data&lt;br /&gt;
# Load the structures (attached below) into your Fusion Registry&lt;br /&gt;
# Navigate to the Data Sources Manager page and:&lt;br /&gt;
#* Set up an Oracle Connection where the Connection Type is '''&amp;quot;Externally Managed&amp;quot;''' and the Database Platform is '''&amp;quot;Oracle&amp;quot;'''&lt;br /&gt;
#* Select this Oracle data source in the table and click the cogs at top-right. Select '''&amp;quot;Link Provision Agreement&amp;quot;''' and select the Provision Agreement '''&amp;quot;WB_WDI_ECON_POL_DEBT&amp;quot;'''&lt;br /&gt;
#* If everything has gone correctly, then the table will show 3 Series (and an unknown amount of Observations)&lt;br /&gt;
# The data can now be queried from the Registry using the appropriate Web Service and the dataflow '''&amp;quot;WDI_ECON_POL_DEBT&amp;quot;'''.  E.g.:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
http://localhost:8080/FusionRegistry/sdmx/v2/data/dataflow/WB/WDI_ECON_POL_DEBT/1.0/?format=sdmx-compact-2.1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Key Table:====&lt;br /&gt;
The following creates the Key Table: '''WB_WDI_ECON_POL_DEBT_1_0_KEY'''&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
CREATE TABLE WB_WDI_ECON_POL_DEBT_1_0_KEY (&lt;br /&gt;
 ID        VARCHAR2(250 BYTE),&lt;br /&gt;
 FREQ      VARCHAR2(5 BYTE),&lt;br /&gt;
 SERIES    VARCHAR2(25 BYTE),&lt;br /&gt;
 REF_AREA  VARCHAR2(3 BYTE)&lt;br /&gt;
)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Sample Data for Key Table:====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
INSERT INTO WB_WDI_ECON_POL_DEBT_1_0_KEY values ('A:AG_AGR_TRAC_NO:ABW', 'A', 'AG_AGR_TRAC_NO', 'ABW')&lt;br /&gt;
INSERT INTO WB_WDI_ECON_POL_DEBT_1_0_KEY values ('A:AG_AGR_TRAC_NO:ADO', 'A', 'AG_AGR_TRAC_NO', 'ADO')&lt;br /&gt;
INSERT INTO WB_WDI_ECON_POL_DEBT_1_0_KEY values ('A:AG_AGR_TRAC_NO:AFG', 'A', 'AG_AGR_TRAC_NO', 'AFG')&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Observation Table:====&lt;br /&gt;
The following creates the Observation Table: '''WB_WDI_ECON_POL_DEBT_1_0_OBS'''&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
CREATE TABLE WB_WDI_ECON_POL_DEBT_1_0_OBS (&lt;br /&gt;
 FR_KEY_ID       VARCHAR2(50 BYTE),&lt;br /&gt;
 FR_OBS_DATE     TIMESTAMP (6) NOT NULL,&lt;br /&gt;
 TIME_PERIOD     VARCHAR2(50 BYTE) NOT NULL,&lt;br /&gt;
 OBS_VALUE       VARCHAR2(10 BYTE) NOT NULL,&lt;br /&gt;
 UNIT_MULT       VARCHAR2(2  BYTE) NOT NULL,&lt;br /&gt;
 FR_VALID_FROM   TIMESTAMP (6) DEFAULT TO_TIMESTAMP( '2015-01-01 00:00:00', 'YYYY-MM-DD HH24:MI:SS') NOT NULL,&lt;br /&gt;
 FR_VALID_TO     TIMESTAMP (6) DEFAULT TO_TIMESTAMP( '2999-12-31 00:00:00', 'YYYY-MM-DD HH24:MI:SS') NOT NULL, &lt;br /&gt;
 FR_UPDATED_DATE_OBS     TIMESTAMP (6) DEFAULT TO_TIMESTAMP( '2014-01-01 00:00:00', 'YYYY-MM-DD HH24:MI:SS') NOT NULL &lt;br /&gt;
) &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Sample Data for Obs Table:====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
INSERT INTO WB_WDI_ECON_POL_DEBT_1_0_OBS (FR_KEY_ID, FR_OBS_DATE, TIME_PERIOD, OBS_VALUE, UNIT_MULT) values ('A:AG_AGR_TRAC_NO:ABW', '01-JAN-1950', '1950', '1950.5001', 'C')&lt;br /&gt;
INSERT INTO WB_WDI_ECON_POL_DEBT_1_0_OBS (FR_KEY_ID, FR_OBS_DATE, TIME_PERIOD, OBS_VALUE, UNIT_MULT) values ('A:AG_AGR_TRAC_NO:ABW', '01-JAN-1951', '1951', '1951.5152', 'C')&lt;br /&gt;
INSERT INTO WB_WDI_ECON_POL_DEBT_1_0_OBS (FR_KEY_ID, FR_OBS_DATE, TIME_PERIOD, OBS_VALUE, UNIT_MULT) values ('A:AG_AGR_TRAC_NO:ABW', '01-JAN-1952', '1952', '1952.52', 'C')&lt;br /&gt;
INSERT INTO WB_WDI_ECON_POL_DEBT_1_0_OBS (FR_KEY_ID, FR_OBS_DATE, TIME_PERIOD, OBS_VALUE, UNIT_MULT) values ('A:AG_AGR_TRAC_NO:ADO', '01-JAN-1951', '1951', '19.51', 'C')&lt;br /&gt;
INSERT INTO WB_WDI_ECON_POL_DEBT_1_0_OBS (FR_KEY_ID, FR_OBS_DATE, TIME_PERIOD, OBS_VALUE, UNIT_MULT) values ('A:AG_AGR_TRAC_NO:AFG', '01-JAN-1950', '1950', '11950.50', 'C')&lt;br /&gt;
INSERT INTO WB_WDI_ECON_POL_DEBT_1_0_OBS (FR_KEY_ID, FR_OBS_DATE, TIME_PERIOD, OBS_VALUE, UNIT_MULT) values ('A:AG_AGR_TRAC_NO:AFG', '01-JAN-1951', '1951', '11951.51', 'C')&lt;br /&gt;
INSERT INTO WB_WDI_ECON_POL_DEBT_1_0_OBS (FR_KEY_ID, FR_OBS_DATE, TIME_PERIOD, OBS_VALUE, UNIT_MULT) values ('A:AG_AGR_TRAC_NO:AFG', '01-JAN-1952', '1952', '11952.999', 'C'&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Dataflow, DSD and other related structures:====&lt;br /&gt;
The following file ( [[File:ExampleStructures.zip|thumb|Structures For Oracle]] ) contains the structures required by this demo. It includes:&lt;br /&gt;
* The Data Structure: '''WB:WDI(1.0)'''&lt;br /&gt;
* The Dataflow: '''WB:WDI_ECON_POL_DEBT(1.0)'''&lt;br /&gt;
* The Provision Agreement: '''WB:WB_WDI_ECON_POL_DEBT(1.0)'''&lt;br /&gt;
* Supporting structures such as Codelists and Concept Schemes&lt;/div&gt;</summary>
		<author><name>Lythhishmeh</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.sdmxcloud.org/index.php?title=Recommended_Tomcat_Setup&amp;diff=6731</id>
		<title>Recommended Tomcat Setup</title>
		<link rel="alternate" type="text/html" href="https://wiki.sdmxcloud.org/index.php?title=Recommended_Tomcat_Setup&amp;diff=6731"/>
		<updated>2024-06-13T21:09:55Z</updated>

		<summary type="html">&lt;p&gt;Lythhishmeh: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:How_To]]	&lt;br /&gt;
[[Category:Fusion Registry Install]]&lt;br /&gt;
&lt;br /&gt;
= Recommended Apache Tomcat Setup =&lt;br /&gt;
&lt;br /&gt;
Fusion Registry must be run within a Java Servlet Container. Regnology recommends using Apache Tomcat as the Java Servlet Container, as this has been used during the testing lifecycle of Fusion Registry. The Fusion Registry has only been tested in Apache Tomcat and therefore we cannot guarantee that the Fusion Registry will work with other Java Servlet Containers.&lt;br /&gt;
&lt;br /&gt;
There are a few things to consider when running Fusion Registry on Apache Tomcat.&lt;br /&gt;
&lt;br /&gt;
== Security ==&lt;br /&gt;
&lt;br /&gt;
It's worth noting that this is not an exhaustive list of all needed security settings, nor is it a substitute for on-team infrastructure expertise, but for enhanced security, we recommend the following settings:&lt;br /&gt;
&lt;br /&gt;
=== server.xml File ===&lt;br /&gt;
&lt;br /&gt;
==== Hiding Stack Traces ====&lt;br /&gt;
&lt;br /&gt;
By default, Tomcat will display Stack Traces in certain circumstances.  We recommend the following change be made to the file: '''server.xml'''. This file is located in the Apache Tomcat Directory ''&amp;lt;Apache Root&amp;gt;/conf''&lt;br /&gt;
&lt;br /&gt;
Edit the file and and locate the &amp;quot;Host&amp;quot; section.  At the end of this section, just before the closing &amp;lt;/Host&amp;gt; tag, insert the following:&lt;br /&gt;
  &amp;lt;Valve className=&amp;quot;org.apache.catalina.valves.ErrorReportValve&amp;quot; showReport=&amp;quot;false&amp;quot; showServerInfo=&amp;quot;false&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This will prevent stack traces from being displayed to the user with HTTP error codes.  Tomcat must be restarted for this change to take effect.&lt;br /&gt;
&lt;br /&gt;
=== context.xml File ===&lt;br /&gt;
&lt;br /&gt;
==== Same Site Cookies ====&lt;br /&gt;
&lt;br /&gt;
Since release 11.13 of the Fusion Registry, the product now ships with a default ''context.xml'' file which is located in the META-INF directory in the Fusion Registry directory.  This file overrides Tomcat's cookie pre-processor settings and enforces a strict SameSite cookies policy. More information on SameSite cookie security policies can be found [https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Set-Cookie here].  This prevents potential vulnerabilities related to Cross-Site Request Forgery (CSRF).&lt;br /&gt;
&lt;br /&gt;
No action is required on the deployer's side, but if you want to disable this setting, either change or delete the file.&lt;br /&gt;
&lt;br /&gt;
=== web.xml File ===&lt;br /&gt;
&lt;br /&gt;
==== HTTP Strict Transport Security (HSTS) ====&lt;br /&gt;
&lt;br /&gt;
We recommend the following change be made to the file: '''web.xml'''. This file is located in the Apache Tomcat Directory ''&amp;lt;Apache Root&amp;gt;/conf''. HTTP Strict Transport Security (HSTS) is a standard which forces those connecting to the registry over the internet to only use HTTPs. This can prevent sniffing attacks and MITM (Man in the middle) attacks which could compromise data security. We don't enable HSTS by default in the registry to allow for flexibility in configuration, but we do encourage our users to enable it.&lt;br /&gt;
&lt;br /&gt;
In Tomcat 9.0, HSTS can be enabled by doing the following:&lt;br /&gt;
&lt;br /&gt;
Modify/Update &amp;quot;httpHeaderSecurity&amp;quot; filter within Tomcat web.xml file with following values:&lt;br /&gt;
 &amp;lt;filter&amp;gt;&lt;br /&gt;
    &amp;lt;filter-name&amp;gt;httpHeaderSecurity&amp;lt;/filter-name&amp;gt;&lt;br /&gt;
    &amp;lt;filter-class&amp;gt;org.apache.catalina.filters.HttpHeaderSecurityFilter&amp;lt;/filter-class&amp;gt;&lt;br /&gt;
    &amp;lt;async-supported&amp;gt;true&amp;lt;/async-supported&amp;gt;&lt;br /&gt;
    &amp;lt;init-param&amp;gt;&lt;br /&gt;
        &amp;lt;param-name&amp;gt;hstsEnabled&amp;lt;/param-name&amp;gt;&lt;br /&gt;
        &amp;lt;param-value&amp;gt;true&amp;lt;/param-value&amp;gt;&lt;br /&gt;
    &amp;lt;/init-param&amp;gt;&lt;br /&gt;
    &amp;lt;init-param&amp;gt;&lt;br /&gt;
        &amp;lt;param-name&amp;gt;hstsMaxAgeSeconds&amp;lt;/param-name&amp;gt;&lt;br /&gt;
        &amp;lt;param-value&amp;gt;31536000&amp;lt;/param-value&amp;gt;&lt;br /&gt;
    &amp;lt;/init-param&amp;gt;&lt;br /&gt;
    &amp;lt;init-param&amp;gt;&lt;br /&gt;
        &amp;lt;param-name&amp;gt;hstsIncludeSubDomains&amp;lt;/param-name&amp;gt;&lt;br /&gt;
        &amp;lt;param-value&amp;gt;true&amp;lt;/param-value&amp;gt;&lt;br /&gt;
    &amp;lt;/init-param&amp;gt;&lt;br /&gt;
 &amp;lt;/filter&amp;gt;&lt;br /&gt;
and uncomment the below section which can be found further down in the web.xml file:&lt;br /&gt;
  &amp;lt;filter-mapping&amp;gt;&lt;br /&gt;
    &amp;lt;filter-name&amp;gt;httpHeaderSecurity&amp;lt;/filter-name&amp;gt;&lt;br /&gt;
    &amp;lt;url-pattern&amp;gt;/*&amp;lt;/url-pattern&amp;gt;&lt;br /&gt;
    &amp;lt;dispatcher&amp;gt;REQUEST&amp;lt;/dispatcher&amp;gt;&lt;br /&gt;
  &amp;lt;/filter-mapping&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The above filter values represent:&lt;br /&gt;
&lt;br /&gt;
'''hstsEnabled (true)''': HTTP Strict Transport Security (HSTS) header to be added to the response.&amp;lt;br&amp;gt;&lt;br /&gt;
'''hstsMaxAgeSeconds (31536000)''': The one year age value that should be used in the HSTS header.&amp;lt;br&amp;gt;&lt;br /&gt;
'''hstsIncludeSubDomains (true)''': The includeSubDomains parameter to be included in the HSTS header.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Setting a Maximum HTTP Request Size ====&lt;br /&gt;
&lt;br /&gt;
We recommend our customers set a limit on the maximum size of the HTTP requests they allow. This is to prevent malicious actors from sending overly large requests with the intent of crashing the registry. This can be done by modifying the '''web.xml''' file.&lt;br /&gt;
&lt;br /&gt;
Under the &amp;lt;code&amp;gt;&amp;lt;webapp&amp;gt;&amp;lt;/code&amp;gt; tag, create a new servlet with the following values:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;servlet&amp;gt;&lt;br /&gt;
    &amp;lt;multipart-config&amp;gt;&lt;br /&gt;
      &amp;lt;file-size-threshold&amp;gt;0&amp;lt;/file-size-threshold&amp;gt;&lt;br /&gt;
      &amp;lt;max-file-size&amp;gt;209715200&amp;lt;/max-file-size&amp;gt;&lt;br /&gt;
      &amp;lt;max-request-size&amp;gt;209715200&amp;lt;/max-request-size&amp;gt;&lt;br /&gt;
    &amp;lt;/multipart-config&amp;gt;&lt;br /&gt;
  &amp;lt;/servlet&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The above filter values represent:&lt;br /&gt;
&lt;br /&gt;
'''file-size-threshold''': Determines the size threshold over which a file will be flushed to disk instead of being held in memory.&amp;lt;br&amp;gt;&lt;br /&gt;
'''max-file-size''': Determines the largest size the server will accept for an uploaded file.&amp;lt;br&amp;gt;&lt;br /&gt;
'''max-request-size''': The threshold for the total size of a POST request.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The values are measured in bytes.&lt;/div&gt;</summary>
		<author><name>Lythhishmeh</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.sdmxcloud.org/index.php?title=Recommended_Tomcat_Setup&amp;diff=6730</id>
		<title>Recommended Tomcat Setup</title>
		<link rel="alternate" type="text/html" href="https://wiki.sdmxcloud.org/index.php?title=Recommended_Tomcat_Setup&amp;diff=6730"/>
		<updated>2024-06-13T21:07:51Z</updated>

		<summary type="html">&lt;p&gt;Lythhishmeh: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:How_To]]	&lt;br /&gt;
[[Category:Fusion Registry Install]]&lt;br /&gt;
&lt;br /&gt;
= Recommended Apache Tomcat Setup =&lt;br /&gt;
&lt;br /&gt;
Fusion Registry must be run within a Java Servlet Container. Regnology recommends using Apache Tomcat as the Java Servlet Container, as this has been used during the testing lifecycle of Fusion Registry. The Fusion Registry has only been tested in Apache Tomcat and therefore we cannot guarantee that the Fusion Registry will work with other Java Servlet Containers.&lt;br /&gt;
&lt;br /&gt;
There are a few things to consider when running Fusion Registry on Apache Tomcat.&lt;br /&gt;
&lt;br /&gt;
== Security ==&lt;br /&gt;
&lt;br /&gt;
For enhanced security, we recommend the following:&lt;br /&gt;
&lt;br /&gt;
=== server.xml File ===&lt;br /&gt;
&lt;br /&gt;
==== Hiding Stack Traces ====&lt;br /&gt;
&lt;br /&gt;
By default, Tomcat will display Stack Traces in certain circumstances.  We recommend the following change be made to the file: '''server.xml'''. This file is located in the Apache Tomcat Directory ''&amp;lt;Apache Root&amp;gt;/conf''&lt;br /&gt;
&lt;br /&gt;
Edit the file and and locate the &amp;quot;Host&amp;quot; section.  At the end of this section, just before the closing &amp;lt;/Host&amp;gt; tag, insert the following:&lt;br /&gt;
  &amp;lt;Valve className=&amp;quot;org.apache.catalina.valves.ErrorReportValve&amp;quot; showReport=&amp;quot;false&amp;quot; showServerInfo=&amp;quot;false&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This will prevent stack traces from being displayed to the user with HTTP error codes.  Tomcat must be restarted for this change to take effect.&lt;br /&gt;
&lt;br /&gt;
=== context.xml File ===&lt;br /&gt;
&lt;br /&gt;
==== Same Site Cookies ====&lt;br /&gt;
&lt;br /&gt;
Since release 11.13 of the Fusion Registry, the product now ships with a default ''context.xml'' file which is located in the META-INF directory in the Fusion Registry directory.  This file overrides Tomcat's cookie pre-processor settings and enforces a strict SameSite cookies policy. More information on SameSite cookie security policies can be found [https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Set-Cookie here].  This prevents potential vulnerabilities related to Cross-Site Request Forgery (CSRF).&lt;br /&gt;
&lt;br /&gt;
No action is required on the deployer's side, but if you want to disable this setting, either change or delete the file.&lt;br /&gt;
&lt;br /&gt;
=== web.xml File ===&lt;br /&gt;
&lt;br /&gt;
==== HTTP Strict Transport Security (HSTS) ====&lt;br /&gt;
&lt;br /&gt;
We recommend the following change be made to the file: '''web.xml'''. This file is located in the Apache Tomcat Directory ''&amp;lt;Apache Root&amp;gt;/conf''. HTTP Strict Transport Security (HSTS) is a standard which forces those connecting to the registry over the internet to only use HTTPs. This can prevent sniffing attacks and MITM (Man in the middle) attacks which could compromise data security. We don't enable HSTS by default in the registry to allow for flexibility in configuration, but we do encourage our users to enable it.&lt;br /&gt;
&lt;br /&gt;
In Tomcat 9.0, HSTS can be enabled by doing the following:&lt;br /&gt;
&lt;br /&gt;
Modify/Update &amp;quot;httpHeaderSecurity&amp;quot; filter within Tomcat web.xml file with following values:&lt;br /&gt;
 &amp;lt;filter&amp;gt;&lt;br /&gt;
    &amp;lt;filter-name&amp;gt;httpHeaderSecurity&amp;lt;/filter-name&amp;gt;&lt;br /&gt;
    &amp;lt;filter-class&amp;gt;org.apache.catalina.filters.HttpHeaderSecurityFilter&amp;lt;/filter-class&amp;gt;&lt;br /&gt;
    &amp;lt;async-supported&amp;gt;true&amp;lt;/async-supported&amp;gt;&lt;br /&gt;
    &amp;lt;init-param&amp;gt;&lt;br /&gt;
        &amp;lt;param-name&amp;gt;hstsEnabled&amp;lt;/param-name&amp;gt;&lt;br /&gt;
        &amp;lt;param-value&amp;gt;true&amp;lt;/param-value&amp;gt;&lt;br /&gt;
    &amp;lt;/init-param&amp;gt;&lt;br /&gt;
    &amp;lt;init-param&amp;gt;&lt;br /&gt;
        &amp;lt;param-name&amp;gt;hstsMaxAgeSeconds&amp;lt;/param-name&amp;gt;&lt;br /&gt;
        &amp;lt;param-value&amp;gt;31536000&amp;lt;/param-value&amp;gt;&lt;br /&gt;
    &amp;lt;/init-param&amp;gt;&lt;br /&gt;
    &amp;lt;init-param&amp;gt;&lt;br /&gt;
        &amp;lt;param-name&amp;gt;hstsIncludeSubDomains&amp;lt;/param-name&amp;gt;&lt;br /&gt;
        &amp;lt;param-value&amp;gt;true&amp;lt;/param-value&amp;gt;&lt;br /&gt;
    &amp;lt;/init-param&amp;gt;&lt;br /&gt;
 &amp;lt;/filter&amp;gt;&lt;br /&gt;
and uncomment the below section which can be found further down in the web.xml file:&lt;br /&gt;
  &amp;lt;filter-mapping&amp;gt;&lt;br /&gt;
    &amp;lt;filter-name&amp;gt;httpHeaderSecurity&amp;lt;/filter-name&amp;gt;&lt;br /&gt;
    &amp;lt;url-pattern&amp;gt;/*&amp;lt;/url-pattern&amp;gt;&lt;br /&gt;
    &amp;lt;dispatcher&amp;gt;REQUEST&amp;lt;/dispatcher&amp;gt;&lt;br /&gt;
  &amp;lt;/filter-mapping&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The above filter values represent:&lt;br /&gt;
&lt;br /&gt;
'''hstsEnabled (true)''': HTTP Strict Transport Security (HSTS) header to be added to the response.&amp;lt;br&amp;gt;&lt;br /&gt;
'''hstsMaxAgeSeconds (31536000)''': The one year age value that should be used in the HSTS header.&amp;lt;br&amp;gt;&lt;br /&gt;
'''hstsIncludeSubDomains (true)''': The includeSubDomains parameter to be included in the HSTS header.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Setting a Maximum HTTP Request Size ====&lt;br /&gt;
&lt;br /&gt;
We recommend our customers set a limit on the maximum size of the HTTP requests they allow. This is to prevent malicious actors from sending overly large requests with the intent of crashing the registry. This can be done by modifying the '''web.xml''' file.&lt;br /&gt;
&lt;br /&gt;
Under the &amp;lt;code&amp;gt;&amp;lt;webapp&amp;gt;&amp;lt;/code&amp;gt; tag, create a new servlet with the following values:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;servlet&amp;gt;&lt;br /&gt;
    &amp;lt;multipart-config&amp;gt;&lt;br /&gt;
      &amp;lt;file-size-threshold&amp;gt;0&amp;lt;/file-size-threshold&amp;gt;&lt;br /&gt;
      &amp;lt;max-file-size&amp;gt;209715200&amp;lt;/max-file-size&amp;gt;&lt;br /&gt;
      &amp;lt;max-request-size&amp;gt;209715200&amp;lt;/max-request-size&amp;gt;&lt;br /&gt;
    &amp;lt;/multipart-config&amp;gt;&lt;br /&gt;
  &amp;lt;/servlet&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The above filter values represent:&lt;br /&gt;
&lt;br /&gt;
'''file-size-threshold''': Determines the size threshold over which a file will be flushed to disk instead of being held in memory.&amp;lt;br&amp;gt;&lt;br /&gt;
'''max-file-size''': Determines the largest size the server will accept for an uploaded file.&amp;lt;br&amp;gt;&lt;br /&gt;
'''max-request-size''': The threshold for the total size of a POST request.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The values are measured in bytes.&lt;/div&gt;</summary>
		<author><name>Lythhishmeh</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.sdmxcloud.org/index.php?title=System_Properties&amp;diff=6729</id>
		<title>System Properties</title>
		<link rel="alternate" type="text/html" href="https://wiki.sdmxcloud.org/index.php?title=System_Properties&amp;diff=6729"/>
		<updated>2024-05-13T12:21:40Z</updated>

		<summary type="html">&lt;p&gt;Lythhishmeh: /* Properties which may be Dynamically changed */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:How_To]]&lt;br /&gt;
[[Category:Fusion Registry Install]]&lt;br /&gt;
= Overview = &lt;br /&gt;
&lt;br /&gt;
System Properties are generally set when the Java virual machine that is running Fusion Registry is launched.  However the Registry provides a way to list all of the System properties and also provides the ability to set their values. Note that setting some of the system properties will have no effect on the running Registry as these must be supplied at startup time . The properties that can be changed and for the change to have an effect are listed below.&lt;br /&gt;
&lt;br /&gt;
= Obtaining System Properties =&lt;br /&gt;
A root or an admin user of Fusion Registry can access the System Properites, returned in JSON form, by performing a GET request to the url:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
http://[server]:[port]/FusionRegistry/ws/secure/settings/getSystemProperties&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
As this is a secure Web Service the user must be logged on, or supply correct credentials.  The result is an array of JSON objects, where each object has a Key and a Value For example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  Key: &amp;quot;edi.lenient.enabled&amp;quot;,&lt;br /&gt;
  Value: &amp;quot;true&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Setting System Properties =&lt;br /&gt;
&lt;br /&gt;
A root or an admin user of Fusion Registry can set a System Properites by performing a POST request to the url:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
http://[server]:[port]/FusionRegistry/ws/secure/settings/setSystemProperty&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Appropriate credential must be supplied.  The input format is JSON of the form&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;Key&amp;quot;: &amp;quot;edi.lenient.enabled&amp;quot;,&lt;br /&gt;
    &amp;quot;Value&amp;quot;: &amp;quot;false&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If the &amp;quot;value&amp;quot; specified is blank this will have the effect of removing the property. For example the following will remove the property &amp;quot;ENFORCE_STRICT_SDMX_2.1&amp;quot;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;Key&amp;quot;: &amp;quot;ENFORCE_STRICT_SDMX_2.1&amp;quot;,&lt;br /&gt;
    &amp;quot;Value&amp;quot;: &amp;quot;&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''IMPORTANT NOTE:''' Values set by using the Web Service will '''not''' be preserved on a Registry reboot.  It is recommended to supply the System properties as part of the Java Server startup process (for example by the use of [[Tomcat_setenv_file | setenv]] in Apache Tomcat).&lt;br /&gt;
&lt;br /&gt;
= Properties which may be Dynamically changed =&lt;br /&gt;
&lt;br /&gt;
Changing a property whilst the Registry is running may not have any effect. The following properties can be changed and their effect will be immediate:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Property !! Default Value !! Effect&lt;br /&gt;
|-&lt;br /&gt;
| edi.lenient.enabled || false || [[Edi_Lenient_Mode|Sets the EDI Leniency of the Registry]]&lt;br /&gt;
|-&lt;br /&gt;
| edi.enforce.primarymeasure.enabled || false || [[Edi_Enforce_Primary_Measure|Sets whether a Primary Measure should be enforced in EDI]]&lt;br /&gt;
|-&lt;br /&gt;
| edi.forceTimeFormatSeriesAttr.enabled || false || [[Edi_Create_Time_Format|Sets whether a series attribute of TIME_FORMAT should be created]]&lt;br /&gt;
|-&lt;br /&gt;
| edi.skipagencycheck.enabled || false || When writing an EDI data file, does not check that the Agencies of the Dataflow and DSD match. When writing an EDI structure file, does not check that cross-referenced components are of the same agency as the DSD. This feature is part of EDI Leniency mode. &amp;lt;p&amp;gt;[[EDI_skipagencycheck_enabled|Ignores the Agency check when evaluating the DSI file]]&lt;br /&gt;
|-&lt;br /&gt;
| edi.dsi.dataflow.enabled || false || When reading an EDI file, determines whether the DSI segment should be used to refer to a Dataflow&amp;lt;p&amp;gt;[[EDI_dsi.dataflow_enabled|Switches the DSI from refering to the Datafllow]]&lt;br /&gt;
|-&lt;br /&gt;
|edi.datagroup.identifier || unset || [[Edi_DataGroup_Identifier|Sets how the Registry sets the Group name when reading an EDI data file]]&lt;br /&gt;
|-&lt;br /&gt;
| ENFORCE_STRICT_SDMX_2.1 || false || Puts the Registry into Enforcing Strict values for SDMX 2.1&lt;br /&gt;
&amp;lt;br/&amp;gt; Week data is of the format: YYYY-Www &lt;br /&gt;
&amp;lt;br/&amp;gt; Monthly data is of the format: YYYY-Mmm &lt;br /&gt;
&amp;lt;br/&amp;gt; Half-Yearly data is of the format: YYYY-S[1-2]&lt;br /&gt;
|-&lt;br /&gt;
| server.secondary || false || [[Secondary_Server|Sets the Registry into secondary server mode]]&lt;br /&gt;
|-&lt;br /&gt;
| TF_ALTERNATE_HALF_YEAR  || false || [[Time_Format_Alternate_Half_Year|Sets the Registry into Alternate Half Year mode]]&lt;br /&gt;
|-&lt;br /&gt;
| aggregation.series.threshold  || 500000 || Sets the limit for aggregated series. Keep in mind that increasing this value can have an impact on performance during data load/hierarchy association or hierarchy change.&lt;br /&gt;
|-&lt;br /&gt;
| HCL_OUTPUT_PERMIT_ALIAS_REF || false || Determine how Hierarchical Codelists should be output.&amp;lt;p&amp;gt;Fusion Registry version 10 only and since version 10.9.4.&amp;lt;p&amp;gt;[[Hierarchical_Codelists_Output_Format| Hierarchical Codelist Output]]&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Lythhishmeh</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.sdmxcloud.org/index.php?title=Temporary_Files&amp;diff=6716</id>
		<title>Temporary Files</title>
		<link rel="alternate" type="text/html" href="https://wiki.sdmxcloud.org/index.php?title=Temporary_Files&amp;diff=6716"/>
		<updated>2024-04-16T15:24:23Z</updated>

		<summary type="html">&lt;p&gt;Lythhishmeh: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== RFS Temporary Files ==&lt;br /&gt;
&lt;br /&gt;
RFS creates and uses temporary files for its operation. These files are created during the process of loading, conversion, and general manipulation of structures and data in the registry. These files are created because the buffers in RFS that manipulate structures and data '''overflow to disk when the amount of storage per buffer exceeds 30 Megabytes in size.''' These files are created in Apache Tomcat's temp directory by default, but this location can be modified either by changing the '''java.tmp''' key in RFS' properties file (see: https://wiki.sdmxcloud.org/Registry_Properties_File) or by going to '''Admin -&amp;gt; Server Settings -&amp;gt; Caching''' and then changing the ''''Temporary Directory'''' setting to the desired value.&lt;br /&gt;
&lt;br /&gt;
The files are usually named '''tmpFile''*random number here*''sdmxsource_tmp'''.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:Temp file settings2.png|400px|Temporary files settings in RFS]]&lt;br /&gt;
&lt;br /&gt;
== Temporary Files Lifetime ==&lt;br /&gt;
&lt;br /&gt;
'''All temporary files have a maximum lifetime of 15 minutes once RFS is no longer using them.''' The files are normally deleted after this and '''users should not be attempting to delete them manually.''' This could lead to errors in RFS if successful. If temporary files persist for longer than this, it indicates that either RFS is still processing them, if the files contain an exceptionally large amount of data of structures, or that RFS has failed to release the lock on those files after being done with them. This should not normally occur, but if it does, the optimal approach is to report this issue to customer support, stop RFS, then attempt to delete them before restarting RFS. It's worth noting that RFS can automatically delete these files on start-up if the correct setting is enabled ('''Admin -&amp;gt; Server Settings -&amp;gt; Caching,  Clear Temporary Directory on Startup''').&lt;/div&gt;</summary>
		<author><name>Lythhishmeh</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.sdmxcloud.org/index.php?title=Temporary_Files&amp;diff=6715</id>
		<title>Temporary Files</title>
		<link rel="alternate" type="text/html" href="https://wiki.sdmxcloud.org/index.php?title=Temporary_Files&amp;diff=6715"/>
		<updated>2024-04-16T15:22:09Z</updated>

		<summary type="html">&lt;p&gt;Lythhishmeh: Created page with &amp;quot;== RFS Temporary Files ==  RFS creates and uses temporary files for its operation. These files are created during the process of loading, conversion, and general manipulation...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== RFS Temporary Files ==&lt;br /&gt;
&lt;br /&gt;
RFS creates and uses temporary files for its operation. These files are created during the process of loading, conversion, and general manipulation of structures and data in the registry. These files are created because the buffers in RFS that manipulate structures and data '''overflow to disk when the amount of storage per buffer exceeds 30 Megabytes in size.''' These files are created in Apache Tomcat's temp directory by default, but this location can be modified either by changing the java.tmp key in RFS' properties file (see: https://wiki.sdmxcloud.org/Registry_Properties_File) or by going to '''Admin -&amp;gt; Server Settings -&amp;gt; Caching''' and then changing the ''''Temporary Directory'''' setting to the desired value.&lt;br /&gt;
&lt;br /&gt;
The files are usually named '''tmpFile''*random number here*''sdmxsource_tmp'''.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:Temp file settings2.png|400px|Temporary files settings in RFS]]&lt;br /&gt;
&lt;br /&gt;
== Temporary Files Lifetime ==&lt;br /&gt;
&lt;br /&gt;
'''All temporary files have a maximum lifetime of 15 minutes once RFS is no longer using them.''' The files are normally deleted after this and '''users should not be attempting to delete them manually.''' This could lead to errors in RFS if successful. If temporary files persist for longer than this, it indicates that either RFS is still processing them, if the files contain an exceptionally large amount of data of structures, or that RFS has failed to release the lock on those files after being done with them. This should not normally occur, but if it does, the optimal approach is to report this issue to customer support, stop RFS, then attempt to delete them before restarting RFS. It's worth noting that RFS can automatically delete these files on start-up if the correct setting is enabled ('''Admin -&amp;gt; Server Settings -&amp;gt; Caching,  Clear Temporary Directory on Startup''').&lt;/div&gt;</summary>
		<author><name>Lythhishmeh</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.sdmxcloud.org/index.php?title=File:Screenshot_2024-04-16_at_16.12.57.png&amp;diff=6714</id>
		<title>File:Screenshot 2024-04-16 at 16.12.57.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.sdmxcloud.org/index.php?title=File:Screenshot_2024-04-16_at_16.12.57.png&amp;diff=6714"/>
		<updated>2024-04-16T15:18:19Z</updated>

		<summary type="html">&lt;p&gt;Lythhishmeh: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Test&lt;/div&gt;</summary>
		<author><name>Lythhishmeh</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.sdmxcloud.org/index.php?title=File:Temp_file_settings2.png&amp;diff=6713</id>
		<title>File:Temp file settings2.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.sdmxcloud.org/index.php?title=File:Temp_file_settings2.png&amp;diff=6713"/>
		<updated>2024-04-16T15:14:29Z</updated>

		<summary type="html">&lt;p&gt;Lythhishmeh: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Lythhishmeh</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.sdmxcloud.org/index.php?title=File:Temp_file_settings.png&amp;diff=6712</id>
		<title>File:Temp file settings.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.sdmxcloud.org/index.php?title=File:Temp_file_settings.png&amp;diff=6712"/>
		<updated>2024-04-16T15:13:36Z</updated>

		<summary type="html">&lt;p&gt;Lythhishmeh: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Lythhishmeh</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.sdmxcloud.org/index.php?title=Recommended_Tomcat_Setup&amp;diff=6560</id>
		<title>Recommended Tomcat Setup</title>
		<link rel="alternate" type="text/html" href="https://wiki.sdmxcloud.org/index.php?title=Recommended_Tomcat_Setup&amp;diff=6560"/>
		<updated>2024-01-12T16:23:03Z</updated>

		<summary type="html">&lt;p&gt;Lythhishmeh: Created page with &amp;quot; == Recommended Apache Tomcat Setup ==  Fusion Registry 11 is designed to run on a variety of web servers and platforms, although we recommend and support Fusion Registry runn...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
== Recommended Apache Tomcat Setup ==&lt;br /&gt;
&lt;br /&gt;
Fusion Registry 11 is designed to run on a variety of web servers and platforms, although we recommend and support Fusion Registry running on Apache Tomcat.&lt;br /&gt;
&lt;br /&gt;
There are a few things to consider when running Fusion Registry on Apache Tomcat.&lt;br /&gt;
&lt;br /&gt;
=== Security ===&lt;br /&gt;
&lt;br /&gt;
For enhanced security, we recommend the following:&lt;br /&gt;
&lt;br /&gt;
==== server.xml file ====&lt;br /&gt;
&lt;br /&gt;
To prevent Tomcat related stack traces from being displayed in certain circumstances, we recommend the following changes be made to the server.xml file. This file can be found in (Apache Tomcat Directory)/conf. &lt;br /&gt;
&lt;br /&gt;
Open the file in a text editor, and just before the &amp;lt;/Host&amp;gt; tag, insert &lt;br /&gt;
&lt;br /&gt;
'''&amp;lt;Valve className=&amp;quot;org.apache.catalina.valves.ErrorReportValve&amp;quot; showReport=&amp;quot;false&amp;quot; showServerInfo=&amp;quot;false&amp;quot;/&amp;gt;&lt;br /&gt;
'''&lt;br /&gt;
&lt;br /&gt;
and then save the file.&lt;br /&gt;
&lt;br /&gt;
This prevents stack traces from being displayed to the user with HTTP error codes.&lt;br /&gt;
&lt;br /&gt;
==== context.xml file ====&lt;br /&gt;
&lt;br /&gt;
This is not a change you are required to make, but we present the following for informational purposes. To prevent potential vulnerabilities related to Cross-Site Request Forgery (CSRF), we have included a context.xml file, which is located in the META-INF directory in the Fusion Registry directory. This file overwrites Tomcat's cookie pre-processor settings and enforces a strict SameSite cookies policy. More information on SameSite cookie security policies can be found [https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Set-Cookie here].&lt;/div&gt;</summary>
		<author><name>Lythhishmeh</name></author>
		
	</entry>
</feed>