FewsPiService.properties
Introduction
Since FEWS 2017.02 all FEWS Web Services have been unified into one installation package (FewsWebServices.war). The following WebServices are available with this installation using HTTP(s):
- PI REST Web Service: The PI REST Service can be accessed using the REST protocol. See also: https://fewsdocs.deltares.nl/webservices/rest-api/v1
- WMS-T Web Mapping Service: The Web Mapping Service with time support can be accessed using the OGC-WMS protocol. See also: https://fewsdocs.deltares.nl/webservices/rest-api/v1
- FEWS Schematic Status Display Web Services: The SSD Web service can by access by the REST protocol. See also: https://fewsdocs.deltares.nl/webservices/ssd
- PI SOAP Web Service: The PI SOAP Service can be accessed by the SOAP protocol. The Delft-FEWS PI SOAP Web Services has been removed in Delft-FEWS 2022.01. See: Delft-FEWS End of Life Modules and Displays#FEWSEndofLifeModulesandDisplays-FEWSWebServicesAPIsthatwillberemoved
- WaterML Web Service: The WaterML2 Web Service can be accessed by the WaterML protocol.
- Digitale Delta Web Service: The Digitale Delta Web Service can be accessed by the REST protocol.
- Operating Request Web Service: The Operating Request Web Service can be accessed by the REST protocol. See also: https://fewsdocs.deltares.nl/webservices/operatingrequest/
- Umaquo Web Service: The Umaquo Web Service can be accessed by the SOAP protocol. Was removed in the 2022.02 release.
The different service are available at the following endpoints:
- FEWS PI Rest Web Services: /rest/fewspiservice/*
- FEWS WMS-T Web Mapping Services: /wms
- FEWS Schematic Status Display Web Services: /ssd
- FEWS PI SOAP Web Services: /fewspiservice Was removed in the 2022.01 release.
- FEWS WaterML Web Services: /waterml
- FEWS Digitale Delta Web Services: /rest/digitaledelta/*
- FEWS Operating Request Web Services: /rest/operatingrequest/*
- FEWS Umaquo Web Services: /umaquo Was removed in the 2022.02 release.
Embedded tomcat
Since FEWS 2022.02 the Delft-FEWS Web Services can be started from a standalone or operator client with the F12 menu option: "start embedded tomcat web services" which will try to start the FewsWebServices on port 8080 which makes it available on your local machine at: http://localhost:8080/FewsWebServices/. It is also possible with a configuration option in the explorer.xml from the SystemConfigFiles folder. See: https://publicwiki.deltares.nl/display/FEWSDOC/01+FEpiServicePortRangeWS+Explorer#id-01FEWSExplorer-piServicePortRange.
Installation
Tomcat Installation
The FEWS Web Services are supported on the Tomcat application server, check Tomcat requirements for the required version (depends on the Delft-FEWS version you use). You can download Tomcat here: https://tomcat.apache.org/download-70.cgi, https://tomcat.apache.org/download-80.cgi and https://tomcat.apache.org/download-90.cgi.
The requirements of the Java version to be used for Tomcat is the same as for the FEWS version that is being used. It is strongly advised to use same Java JRE for tomcat as is used for a FEWS OC when installing tomcat. For 2018.02 the java version should be java 11.
The root of the tomcat installation is referred to as "${catalina.home}" and will be used from here. The root of a tomcat installation can be recognized by the webapps and conf directories.
It is recommended to give a tomcat a heapsize of at least 1GByte, but preferably more. This can be done using the -Xmx1024m java argument. Since 2019.02 the FEWS Web Services won't start if there is not enough memory available. For general instructions on installing tomcat, see also: Delft-FEWS Installation - Install Apache Tomcat.
Since 2021.02 the test page is disabled by default. To enable the test page, please see: FEWS WebServices Configuration File - since 2022.02.
FewsWebServices.war installation
The FEWS Web Services are packaged in a file called the FewsWebServices.war. Before installation, make sure the tomcat server has been shutdown. Inspect the ${catalina.home}/webapps folder and inspect if there is a FewsWebServices folder. If this folder exists, delete the ${catalina.home}/webapps/FewsWebServices folder. The FewsWebServices.war file has to be copied to the ${catalina.home}/webapps folder.
Web Services log files
After upgrading the FewsWebServices.war, old log files have to be deleted. The log files are stored in: ${catalina.home}/fews/Region_Home folder. All *.txt files should be deleted.
Delft-FEWS Web Services configuration
If Tomcat is successfully installed and the FewsWebServices.war deployed, the Delf-FEWS Web Services configuration can be done. FEWS itself (i.e. the bin\ folder) is packaged inside the FewsWebServices.war. Please see below for notes regarding a Stand Alone Delft-FEWS application used in combination with the FEWS Web Services.
Direct database access using ENV variables (since 2020.02)
Since 2020.02 it is possible to install the Delft-FEWS Web Services by only providing Environment variables. This is the recommended way of configuration.
The environment variables can be set with SETX /M for windows or in the systemd configuration file for Linux. Run SETX /M makes variables available for all (service) user accounts.
user environment variable | description |
---|---|
FEWS_WS_CLIENT_CONFIG_FILE_NAME | Name of the client config file as available in the RootConfigFiles folder of the uploaded Delft-FEWS configuration. ClientType has to be: Web Services |
FEWS_WS_DATABASE_URL | Database url, e.g. jdbc:vjdbc:servlet:https://<host>:<port>/FewsDatabaseHttpsProxy jdbc:postgresql://<host>:<port>/<databaseName> jdbc:oracle:thin:@<host>:<port>:<sid> or jdbc:sqlserver://<host>:<port>;DatabaseName=<databaseName> |
FEWS_WS_DATABASE_USER | Database user name to connect with. The name should not be specified when using AD (Active Directory). |
FEWS_WS_DATABASE_ENCRYPTED_PASSWORD | Encrypted Database password. The password should be specified when using AD (Active Directory). |
FEWS_WS_HOME | Optional. Folder where caches are stored. If not configured, it will be set to the "${catalina.home}/fews/Region_Home". |
FEWS_WS_WEB_SERVICES_CONFIG_FILE_NAME | Optional. Name of the Web Services configuration file from the Delft-FEWS Configuration folder: PiServiceConfigFiles. Default is: WebServices.xml. Since 2022.02. See also: FEWS WebServices Configuration File - since 2022.02 |
FEWS_WS_CLIENTCONFIGFILEID | Optional. Name of the client config file from the Delft-FEWS Configuration folder: PiClientConfigFiles. Default is: FewsPiService.properties. Deprecated since 2022.02. See also: FEWS Web Services Configuration FewsPiService.properties - deprecated since 2022.02 |
An example of configured environment variables.
FEWS_WS_DATABASE_URL=jdbc:postgresql://dummy_hostname:6001/dummy_databasename FEWS_WS_DATABASE_USER=dummy_username FEWS_WS_DATABASE_ENCRYPTED_PASSWORD=dummy_password_encrypted FEWS_WS_CLIENT_CONFIG_FILE_NAME=ws_clientConfig.xml FEWS_WS_HOME=d:\fews-ws\region-home FEWS_WS_WEB_SERVICES_CONFIG_FILE_NAME=WebServices.xml #FEWS_WS_CLIENTCONFIGFILEID is deprecated since 2022.02. Use FEWS_WS_WEB_SERVICES_CONFIG_FILE_NAME instead: #FEWS_WS_CLIENTCONFIGFILEID=CustomFewsPiService.properties
The clientConfiguration of type "Web Services".
Take note in the following example that the clientType is set to "Web Services". Also a global.properties file is required. The configurated property file will be used by the Delft_FEWS configuration.
The client config file and the referenced global properties are synchronized to the FewsWebServices on startup. Any changes applied to the client config or global properties, require a restart of the FewsWebServices.
<?xml version="1.0" encoding="UTF-8"?> <clientConfiguration xsi:schemaLocation="http://www.wldelft.nl/fews http://fews.wldelft.nl/schemas/version1.0/clientConfig.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://www.wldelft.nl/fews"> <title>My WebServices Client</title> <clientType>Web Services</clientType> <otherRootConfigFiles> <name>ws_global.properties</name> </otherRootConfigFiles> </clientConfiguration>
Since 2023.02 the autoExportModuleDataSet in the clientConfig is recognized on startup of the webservice. A restart of tomcat is required to update the module datasets if changed
Migrating from 2020.01 and before
Before 2020.02 the FewsWebServices required a local clientConfig.xml file and global.properties in the ${catalina.home}/fews/Region_Home folder. N.B.: this folder still needs to exist if no FEWS_WS_HOME env variable is used.
When migrating to 2020.02 all files in this folder have to be deleted. Please follow the configuration steps in DirectdatabaseaccessusingENVvariables(since2020.02) to complete the migration.
Direct database access using clientConfig.xml (before 2020.02)
clientConfig.xml
Direct database access has to be configured in the "${catalina.home}/fews/Region_Home" directory. Make sure the exact folder names are use (case sensitive on linux): /fews/Region_Home
<?xml version="1.0" encoding="UTF-8"?> <clientConfiguration xmlns="http://www.wldelft.nl/fews" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.wldelft.nl/fews http://fews.wldelft.nl/schemas/version1.0/clientConfig.xsd"> <connection id="Database" name="Database"> <databaseServer> <url>FEWS_DATABASE_URL</url> <user>dummy_username</user> <encryptedPassword>dummy_password_encrypted</encryptedPassword> </databaseServer> </connection> </clientConfiguration>
Cache configuration
Since 2020.02 it is possible to use the localCacheSizeMB in the clientConfig.xml to tune the amount of in memory caching the PI service is allowed to do. This can be quite useful for performance tuning when using seamless integration with the archive.
This setting was already available to the Operator Client and Forecasting Shell Servers. If not configured a default cache size of 500MByte will be used.
See also: 08 Root Configuration Files for Operator Client and Forecasting Shell Servers
Configure Database connection over Active Directory
When using MS Sql Server it is possible to connect to the database through Active Directory. This can be configured by updating the client configuration file (see example below).
- remove user
- remove encryptedPassword
- extend URL by adding integratedSecurity=true
Furthermore it is necessary to copy sqljdbc_auth.dll to the Tomcat/bin folder. This can be found here:
- 2020.02 and earlier: from the Master Controller build/lib folder installation
- 2021.01 and later: Delft-FEWS bin folder
<?xml version="1.0" encoding="UTF-8"?> <clientConfiguration xmlns="http://www.wldelft.nl/fews" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.wldelft.nl/fews http://fews.wldelft.nl/schemas/version1.0/clientConfig.xsd"> <connection id="Database" name="Database"> <databaseServer> <url>FEWS_DATABASE_URL;integratedSecurity=true</url> </databaseServer> </connection> </clientConfiguration>
FewsPiService.properties
The FEWS Web Services have a custom property file that can be used to make service specific configurations available. This is a property file that is located in the FEWS configuration in the directory:
%REGION_HOME%/Config/PiClientConfigFiles/FewsPiService.properties
For more information about the possible properties, see FEWS Web Services Configuration FewsPiService.properties - deprecated since 2022.02.
Global Properties
In case global properties are needed by the FEWS Web Services, a global.properties file can be put in the Region_Home directory as well. If the same global.properties is available in the RootConfigFile in the FEWS configuration, the properties will be overwritten by the one in the FEWS database.
Index Files
Since 2018.02 the FEWS Web Services will not startup before an index file is available in the Database. Index files are created automatically by Forecasting Shells. This means that the FEWS Web Services will only start if a running Forecasting Shell is available on the live system.
Stand alone
When using a stand alone configuration with an existing local data store, note that only the Derby database datastore is supported for the Fews Web Services. Existing firebird datastores can be converted into a derby datastore using FEWS F12/Database/Replicate Central Database option. In the context of this Web Service, you can use the replica directly as (and where) it is created with this method. Update the localDatastoreFormat in your global properties file if needed.
If installation fails, please check the webservice.log and catalina.log files in the ${catalina.home}/logs directory.
Since 2018.02 there is no longer a webservices.log file. The FEWS Web Services log files are written to the /fews/Region_Home folder with the name log.1.txt etc.. use the environment variable LOG4J_DEBUG=true to enable debug logging.
FEWS has to be installed in the root folder of tomcat in the directory "${catalina.home}/fews/Region_Home". Make sure the exact folder names are use (case sensitive on linux): /fews/Region_Home
<?xml version="1.0" encoding="UTF-8"?> <clientConfiguration xmlns="http://www.wldelft.nl/fews" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.wldelft.nl/fews http://fews.wldelft.nl/schemas/version1.0/clientConfig.xsd"> <clientType>Stand alone</clientType> </clientConfiguration>
Only direct database access should be used for operational use of the FEWS Web Services. A standalone configuration can be used, but only has limited functionality. For example only the Derby local data store is supported and workflows depending on DLL's (or .so files on Linux) are NOT supported.
Delft-FEWS Configuration requirements
Configure a default filter in the Filters.xml of the FEWS configuration with the name of the filter that should be used for all requested timeSeries. For a standalone application this applies to the following file: "${catalina.home}/fews/Region_Home/Config/RegionConfigFiles/Filters.xml"
<?xml version="1.0" encoding="UTF-8"?> <filters version="1.1" xmlns="http://www.wldelft.nl/fews" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.wldelft.nl/fews http://fews.wldelft.nl/schemas/version1.0/filters.xsd"> <defaultFilterId>some_defined_filter</defaultFilterId> ...
Alternatively a property file can be used to configure the default filter (and other properties as well). For a standalone application, the property file should be located at: "${catalina.home}/fews/Region_Home/Config/PiClientConfigFiles/FewsPiService.properties". In the following code snippet the default filter to be used by the FEWS Web Services is configured using the property key "FILTER_ID" where the filter has been configured. A filter configured in the FewsPiService.properties overrules the default filter in the Filters.xml.
FILTER_ID=some_defined_filter
If the previous configurations have been applied, the FewsWebServices.war can be installed using the standard deployment options of Tomcat. See the tomcat deployment documentation for more information. When installing a new version of the FewsWebServices.war file it is recommended to delete the FewsWebService directory in the webapps directory and restart tomcat after deployment.
Advanced Installation and Configuration (Since 2022.02)
Since 2022.02 multiple FewsWebServices are supported in the same tomcat by specifying the ENV_PREFIX servlet context variable. The prefix is used to resolve the FewsWebServices specific environment variables. If not set, the ENV_PREFIX defaults to FEWS_WS_ .
For example if multiple FewsWebServices are deployed in the same tomcat, multiple Context.xml configurations can be configured with different prefixes.
<?xml version="1.0" encoding="UTF-8"?> <Context docBase="${catalina.home}/fews/FewsWebServices.war"> <Parameter name="ENV_PREFIX" value="FEWS_WS_01_" override="false"/> </Context>
Using this configuration the web service will now expect the following ENV variables to be available:
FEWS_WS_01_DATABASE_URL=jdbc:postgresql://dummy_hostname:6001/dummy_databasename FEWS_WS_01_DATABASE_USER=dummy_username FEWS_WS_01_DATABASE_ENCRYPTED_PASSWORD=dummy_password_encrypted FEWS_WS_01_CLIENT_CONFIG_FILE_NAME=ws_clientConfig.xml FEWS_WS_01_HOME=d:\fews-ws\region-home-01 FEWS_WS_01_WEB_SERVICES_CONFIG_FILE_NAME=FewsWebServices01.xml
For a StandAlone system it is also possible to have multiple web services. In this case, only the following ENV variables should be specified:
FEWS_WS_01_HOME=d:\fews-ws\region-home-01 FEWS_WS_01_WEB_SERVICES_CONFIG_FILE_NAME=FewsWebServices01.xml
The FewsWebServices will be available at http://localhost:8080/FewsWebServices01/. For multiple configurations more context xml files can be created with custom ENV variables.
Advanced Installation and Configuration (Since 2020.02)
Since 2020.02 multiple FewsWebServices are supported in the same tomcat by specifying the ENV_PREFIX servlet context variable. The prefix is used to resolve the FewsWebServices specific environment variables. If not set, the ENV_PREFIX defaults to FEWS_WS_ .
For example if multiple FewsWebServices are deployed in the same tomcat, multiple Context.xml configurations can be configured with different prefixes.
<?xml version="1.0" encoding="UTF-8"?> <Context docBase="${catalina.home}/fews/FewsWebServices.war"> <Parameter name="ENV_PREFIX" value="FEWS_WS_01_" override="false"/> </Context>
Using this configuration the web service will now expect the following ENV variables to be available:
FEWS_WS_01_DATABASE_URL=jdbc:postgresql://dummy_hostname:6001/dummy_databasename FEWS_WS_01_DATABASE_USER=dummy_username FEWS_WS_01_DATABASE_ENCRYPTED_PASSWORD=dummy_password_encrypted FEWS_WS_01_CLIENT_CONFIG_FILE_NAME=ws_clientConfig.xml FEWS_WS_01_HOME=d:\fews-ws\region-home-01 FEWS_WS_01_CLIENTCONFIGFILEID=FewsPiService01.properties
The FewsWebServices will be available at http://localhost:8080/FewsWebServices01/. For multiple configurations more context xml files can be created with custom ENV variables.
Advanced Installation and Configuration (Before 2020.02)
In some cases it may be required to support different FewsPiService.properties on the same database, for example to support different default filters. In this case and advanced installation of the FEWS Web Services is required that is similar to installations before 2017.02.
The FewsWebServices.war file should be put in the ${catalina.home}/fews folder, instead of the ${catalina.home}/webapps.
In the ${catalina.home}/conf/Catalina/localhost folder a context.xml should be created where a specific client config file id can be configured. In this xml file a reference to the FewsWebServices.war file should be made and a reference to the property file to be used.
<?xml version="1.0" encoding="UTF-8"?> <Context docBase="${catalina.home}/fews/FewsWebServices.war"> <Parameter name="clientConfigFileId" value="FewsPiService01.properties" override="false"/> <Parameter name="regionHome" value="${catalina.home}/fews/Region_Home01" override="false"/> </Context>
The FewsPiService01.properties is expected to be in:
%REGION_HOME%/Config/PiClientConfigFiles/FewsPiService01.properties
Using this configuration the web service will now be available at http://localhost:8080/FewsWebServices01/. For multiple configurations more context xml files can be created.
Security
Since 2017.02 it is also possible to run the Delft-FEWS Web Services in readOnly mode. The FewsPiService.properties can be configured with the property READONLY_MODE=true to only allow read access.
Since 2018.02 readOnly mode is enabled by default.
Since 2021.02 the testing page is disabled by default. To enable the testing page, the FewsPiService.properties can be configured with the property TEST_PAGE_ENABLED=true to allow the usage of the test page. It is also possible to pass a java property to the JVM to enable the testpage: -DTEST_PAGE_ENABLED=true.
The Delft-FEWS Web Services can be protected using the capabilities of the Tomcat Application Server. See FEWS Web Services Tomcat Security for more information.
Security Headers
By default the WebServices use some default headers that are provided by Tomcat. In same cases these headers may be too strict. Since 2023.02 it is possible to configure if the Web Services should use these security header, which is enabled by default. In the general section the httpHeaders element can be used to disable these headers.
A typical use case is when using the Web OC some specific headers need to be configured in a proxy server like NGINX which may conflict with the default security headers provided by the Web Service.
In the default configuration the tomcat HTTP_Header_Security_filter is enabled with its default settings. See also: https://tomcat.apache.org/tomcat-10.0-doc/config/filter.html#HTTP_Header_Security_Filter.
To disable the HTTP_Header_Security_Filter set this option to false. If set to false, make sure headers are correctly configured in the proxy server (e.g. NGINX) that is used in front of the Web Services.
An example configuration looks as follows:
<httpHeaders> <httpHeadersSecurity> <enabled>false</enabled> </httpHeadersSecurity> </httpHeaders>
Testing
The FEWS Web Services come with a testing page that can be accessed at: http://localhost:8080/FewsWebServices/. This leads to an overview page with links to test pages for the different services (SOAP, REST, WaterML, Digitale Delta). You can find more on how to configure the different services on 18 FEWS data exchange interfaces.
See. For general instructions on installing tomcat, see also: Delft-FEWS Installation - Install Apache Tomcat.
Since 2021.02 the test page is disabled by default. To enable the test page, please see the TEST_PAGE_ENABLED property: FEWS Web Services Configuration FewsPiService.properties - deprecated since 2022.02.
Migrating from before 2017.02
In case an existing Delft-FEWS web service has to be migrated to the 2017.02 or later version, the following changes should be taken into account.
Installation directory
The FewsWebServices.war file is installed in the ${catalina.home}/webapps folder instead of the ${catalina.home}/fews folder.
Derby Local datastore
Running the FEWS Web Services in standalone mode is only supported for the Derby local datastore with limited functionality. Please see the previous Installation section if an existing non-Derby local datastore needs to be converted to Derby using the Database replication functionality of FEWS. For full functionality configure a clientConfig.xml file with a direct database connection.
Default PI Version
URL changes
The example URLs are based on a default tomcat installation with port 8080. Please adjust in case the defaults have been changed where appropriate.
PI SOAP Web Service
The change that has the largest impact on the URLs of the Web services is the changed context path (the URL part after the servername + port). Before 2017.02 every FEWS Web service has its own context path. Since 2017.02 all webservices have the same context path, which is FewsWebServices by default.
For example before 2017.02 the URL endpoint of the FEWS PI SOAP Web Service would be: http://localhost:8080/FewsPiServices/fewspiservice
Since 2017.02 it is: http://localhost:8080/FewsWebServices/fewspiservice
If it is required to keep the endpoints backwards compatible, the FewsWebServices.war can be renamed into FewsPiService.war.
PI REST Web Service
For the PI REST Web Service it is not possible to keep the endpoints backwards compatible since the "rest" path is now a required part of the endpoint.
http://localhost:8080/FewsWebServices/rest/fewspiservice
Tomcat installation changes
N.B.: It is highly recommended to install a clean version of tomcat.
Cleanup
It is advisable to cleanup the ${catalina.home}/temp and ${catalina.home}/work folder. N.B. Don't delete the folders themselves, only their content!
In case there is an old FewsPIService.war in the fews folder, please remove the old FewsPIService.war.
If there is a FewsPIService folder in the ${catalina.home}/webapps folder, please remove this folder.
DAC
Previously the FEWS Web services required a DAC.jar to be installed. Since 2017.02 this component is obsolete and should be removed from existing tomcat installations. See also the tomcat installation guide.
To uninstall the DAC.jar it should be removed from ${catalina.home}/lib directory. Also the ${catalina.home}/conf/server.xml should be cleaned up. The reference to the DacLifecycleListener should be removed from the server.xml:
<Listener className="nl.wldelft.fews.system.data.dac.DacLifecycleListener" />
Also a reference to the fews_dac resource should be removed:
<Resource name="fews_dac" auth="Container" type="nl.wldelft.fews.system.data.dac.DataAccessComponent" factory="nl.wldelft.fews.system.data.dac.DacBeanFactory" regionHome="${catalina.home}/fews/Region_Home" binPath="${catalina.home}/fews/bin/" closeMethod="stop" />
From the ${catalina.home}/conf/Catalina/localhost old xml configurations with references to the old services should be removed as well.