diff --git a/jboss-kie-kieserver/added/launch/jboss-kie-kieserver.sh b/jboss-kie-kieserver/added/launch/jboss-kie-kieserver.sh index c34efdc07..529dec5fa 100755 --- a/jboss-kie-kieserver/added/launch/jboss-kie-kieserver.sh +++ b/jboss-kie-kieserver/added/launch/jboss-kie-kieserver.sh @@ -98,15 +98,16 @@ function configure_EJB_Timer_datasource { # EJBTimer datasource local dsPrefix="${DATASOURCES%,*}" DATASOURCES="EJB_TIMER,${DATASOURCES}" - set_url $dsPrefix - set_timer_env $dsPrefix - TIMER_SERVICE_DATA_STORE="EJB_TIMER" # default value for ${prefix)_NONXA should be true if [ -z "$(eval echo \$${dsPrefix}_NONXA)" ]; then eval ${dsPrefix}_NONXA="true" fi + set_url $dsPrefix + set_timer_env $dsPrefix + TIMER_SERVICE_DATA_STORE="EJB_TIMER" + # set 4 as default value for ${prefix)_XA_CONNECTION_PROPERTY_DRIVER_TYPE if [[ "$(eval echo \$${dsPrefix}_DRIVER)" = *"db2"* ]]; then local driverType=$(find_env "${dsPrefix}_DRIVER_TYPE" "4") @@ -156,7 +157,7 @@ function declare_timer_common_variables { } function set_timer_defaults { - if [ "x${EJB_TIMER_JNDI}" != "x" ]; then + if [ "x${EJB_TIMER_JNDI}" != "x" ]; then EJB_TIMER_JNDI="${EJB_TIMER_JNDI}_EJBTimer" else EJB_TIMER_JNDI=$(find_env "${prefix}_JNDI" "java:jboss/datasources/ejb_timer") @@ -255,6 +256,11 @@ function declare_xa_variables { local url=$(find_env "${prefix}_URL") url=$(find_env "${prefix}_XA_CONNECTION_PROPERTY_URL" "${url}") if [ "x${url}" == "x" ]; then + local serviceHost=$(find_env "${service}_SERVICE_HOST") + local host=$(find_env "${prefix}_SERVICE_HOST" "${serviceHost}") + local servicePort=$(find_env "${service}_SERVICE_PORT") + local port=$(find_env "${prefix}_SERVICE_PORT" "${servicePort}") + local database=$(find_env "${prefix}_DATABASE") database=$(find_env "${prefix}_DATABASE") xa_database=$(find_env "${prefix}_XA_CONNECTION_PROPERTY_DatabaseName") EJB_TIMER_XA_CONNECTION_PROPERTY_DatabaseName=${xa_database:-${database}} @@ -265,13 +271,25 @@ function declare_xa_variables { get_svc_var "PORT" "PortNumber" $prefix $service fi + # keep compatibility with *SERVICE_* envs, set connection-url for non ejb timer ds + local jdbcUrl="jdbc:${EJB_TIMER_DRIVER}://${host}:${port}/${database}" + case $EJB_TIMER_DRIVER in + microsoft|mssql|sqlserver) + jdbcUrl=jdbc:sqlserver://${host}:${port};databaseName=${database}; + ;; + *) + ;; + esac + + local nonxa=$(find_env ${prefix}_NONXA) + if [ "${nonxa^^}" = "TRUE" ]; then + eval export ${prefix}_URL="${jdbcUrl}" + else + eval ${prefix}_XA_CONNECTION_PROPERTY_URL="${jdbcUrl}" + fi + #postgresql/mariadb/mysql with custom drivers are not correctly configured if no PREFIX_URL is set if [[ $EJB_TIMER_DRIVER = *"postgresql"* ]] || [[ $EJB_TIMER_DRIVER = *"mysql"* ]] || [[ $EJB_TIMER_DRIVER = *"mariadb"* ]]; then - local serviceHost=$(find_env "${service}_SERVICE_HOST") - local host=$(find_env "${prefix}_SERVICE_HOST" "${serviceHost}") - local servicePort=$(find_env "${service}_SERVICE_PORT") - local port=$(find_env "${prefix}_SERVICE_PORT" "${servicePort}") - local database=$(find_env "${prefix}_DATABASE") local dbType="postgresql" local enabledTLSParameterName="enabledSslProtocolSuites" if [[ $EJB_TIMER_DRIVER = *"mysql"* ]]; then @@ -304,6 +322,22 @@ function declare_xa_variables { fix_ejbtimer_xa_url fi + + elif [ "x${url}" != "x" ]; then + # RHPAM-2261 - db2 does not accept URL/Url XA property + if [[ $EJB_TIMER_DRIVER = *"db2"* ]]; then + local unprefixedUrl=${url#jdbc:db2://} + local serverName=${unprefixedUrl%:*} + local dataBaseName=${unprefixedUrl#*/} + local portNumber=$(echo ${unprefixedUrl%/*} | awk -F: '{print $2}') + + EJB_TIMER_XA_CONNECTION_PROPERTY_DatabaseName=${dataBaseName} + EJB_TIMER_XA_CONNECTION_PROPERTY_ServerName=${serverName} + EJB_TIMER_XA_CONNECTION_PROPERTY_PortNumber=${portNumber} + + eval unset EJB_TIMER_XA_CONNECTION_PROPERTY_URL + eval unset EJB_TIMER_XA_CONNECTION_PROPERTY_Url + fi fi } diff --git a/jboss-kie-kieserver/tests/bats/jboss-kie-kieserver.bats b/jboss-kie-kieserver/tests/bats/jboss-kie-kieserver.bats index 6b99c4c77..e53b16ddc 100644 --- a/jboss-kie-kieserver/tests/bats/jboss-kie-kieserver.bats +++ b/jboss-kie-kieserver/tests/bats/jboss-kie-kieserver.bats @@ -53,6 +53,7 @@ teardown() { export RHPAM_JTA="true" configure_EJB_Timer_datasource >&2 echo "EJBTimer url is ${EJB_TIMER_XA_CONNECTION_PROPERTY_Url} " >&2 + [ "${TIMER_SERVICE_DATA_STORE^^}" = "${expected_timer_service}" ] [ "${DATASOURCES}" = "${expected_datasources}" ] [ "${EJB_TIMER_DRIVER}" = "${RHPAM_DRIVER}" ] [ "${RHPAM_URL}" = "jdbc:mariadb://myapp-host:3306/rhpam-mariadb?enabledSslProtocolSuites=TLSv1.2" ] @@ -80,6 +81,7 @@ teardown() { configure_EJB_Timer_datasource >&2 echo "EJBTimer url is ${EJB_TIMER_XA_CONNECTION_PROPERTY_URL} " >&2 echo "RHPAM url is ${RHPAM_URL} " >&2 + [ "${TIMER_SERVICE_DATA_STORE^^}" = "${expected_timer_service}" ] [ "${DATASOURCES}" = "${expected_datasources}" ] [ "${EJB_TIMER_DRIVER}" = "${RHPAM_DRIVER}" ] [ "${RHPAM_URL}" = "jdbc:mysql://myapp-host:3306/rhpam-mysql?enabledTLSProtocols=TLSv1.2" ] @@ -110,6 +112,7 @@ teardown() { configure_EJB_Timer_datasource >&2 echo "EJBTimer url is ${EJB_TIMER_XA_CONNECTION_PROPERTY_URL} " >&2 echo "RHPAM url is ${RHPAM_URL} " >&2 + [ "${TIMER_SERVICE_DATA_STORE^^}" = "${expected_timer_service}" ] [ "${DATASOURCES}" = "${expected_datasources}" ] [ "${EJB_TIMER_DRIVER}" = "${RHPAM_DRIVER}" ] [ "${RHPAM_URL}" = "jdbc:mysql://myapp-host:3306/rhpam-mysql?enabledTLSProtocols=TLSv1.2" ] @@ -137,6 +140,7 @@ teardown() { export RHPAM_JTA="true" configure_EJB_Timer_datasource >&2 echo "EJBTimer url is ${EJB_TIMER_XA_CONNECTION_PROPERTY_Url} " >&2 + [ "${TIMER_SERVICE_DATA_STORE^^}" = "${expected_timer_service}" ] [ "${DATASOURCES}" = "${expected_datasources}" ] [ "${EJB_TIMER_DRIVER}" = "${RHPAM_DRIVER}" ] [ "${RHPAM_URL}" = "jdbc:${RHPAM_DRIVER}://${RHPAM_SERVICE_HOST}:${RHPAM_SERVICE_PORT}/${RHPAM_DATABASE}" ] @@ -198,6 +202,7 @@ teardown() { configure_EJB_Timer_datasource >&2 echo -en "EJB_TIMER env are: \n $(env | grep -i ejb_timer | sort -u) \n" >&2 log_info "EJB_TIMER_XA_CONNECTION_PROPERTY_URL is ${EJB_TIMER_XA_CONNECTION_PROPERTY_URL}" + [ "${TIMER_SERVICE_DATA_STORE^^}" = "${expected_timer_service}" ] [ "${DATASOURCES}" = "${expected_datasources}" ] [ "${EJB_TIMER_DRIVER}" = "${RHPAM_DRIVER}" ] # we do not expect that this var is set anymore, since we're using URL property directly @@ -210,6 +215,56 @@ teardown() { [ "${EJB_TIMER_XA_CONNECTION_PROPERTY_URL}" = "jdbc:${RHPAM_DRIVER}://${RHPAM_XA_CONNECTION_PROPERTY_ServerName}:${RHPAM_XA_CONNECTION_PROPERTY_Port}/${RHPAM_XA_CONNECTION_PROPERTY_DatabaseName}?pinGlobalTxToPhysicalConnection=true\&enabledTLSProtocols=TLSv1.2" ] } +@test "verify if EJB_TIMER is correctly configured with xa-data-sources when driver is db2 using SERVICE envs" { + local expected_timer_service="EJB_TIMER" + local expected_datasources="EJB_TIMER,RHPAM" + export DATASOURCES="RHPAM" + export RHPAM_DRIVER="db2" + export RHPAM_DATABASE="rhpam-db2" + export RHPAM_USERNAME="rhpam-user" + export RHPAM_PASSWORD="rhpam-pwd" + export RHPAM_SERVICE_HOST="myapp-host" + export RHPAM_SERVICE_PORT="50000" + export RHPAM_JNDI="jboss:/datasources/rhpam" + export RHPAM_JTA="true" + configure_EJB_Timer_datasource >&2 + echo "RHPAM_URL url is ${RHPAM_URL} " >&2 + echo "jdbc:${RHPAM_DRIVER}://${RHPAM_SERVICE_HOST}:${RHPAM_SERVICE_PORT}/${RHPAM_DATABASE}" >&2 + [ "${TIMER_SERVICE_DATA_STORE^^}" = "${expected_timer_service}" ] + [ "${DATASOURCES}" = "${expected_datasources}" ] + [ "${EJB_TIMER_DRIVER}" = "${RHPAM_DRIVER}" ] + [ "${RHPAM_URL}" = "jdbc:${RHPAM_DRIVER}://${RHPAM_SERVICE_HOST}:${RHPAM_SERVICE_PORT}/${RHPAM_DATABASE}" ] + [ "${EJB_TIMER_XA_CONNECTION_PROPERTY_ServerName}" = "${RHPAM_SERVICE_HOST}" ] + [ "${EJB_TIMER_XA_CONNECTION_PROPERTY_DatabaseName}" = "${RHPAM_DATABASE}" ] + [ "${EJB_TIMER_XA_CONNECTION_PROPERTY_PortNumber}" = "${RHPAM_SERVICE_PORT}" ] + # the URL property must not be set + [ "${EJB_TIMER_XA_CONNECTION_PROPERTY_URL}" = "" ] +} + +@test "verify if EJB_TIMER is correctly configured with xa-data-sources when driver is db2 using URL" { + local expected_timer_service="EJB_TIMER" + local expected_datasources="EJB_TIMER,RHPAM" + export DATASOURCES="RHPAM" + export RHPAM_DRIVER="db2" + export RHPAM_URL="jdbc:db2://myapp-host:50000/rhpam-db2" + export RHPAM_USERNAME="rhpam-user" + export RHPAM_PASSWORD="rhpam-pwd" + export RHPAM_JNDI="jboss:/datasources/rhpam" + export RHPAM_JTA="true" + configure_EJB_Timer_datasource >&2 + echo "RHPAM_URL url is ${RHPAM_URL} " >&2 + [ "${TIMER_SERVICE_DATA_STORE^^}" = "${expected_timer_service}" ] + [ "${DATASOURCES}" = "${expected_datasources}" ] + [ "${EJB_TIMER_DRIVER}" = "${RHPAM_DRIVER}" ] + [ "${RHPAM_URL}" = "jdbc:${RHPAM_DRIVER}://myapp-host:50000/rhpam-db2" ] + [ "${EJB_TIMER_XA_CONNECTION_PROPERTY_ServerName}" = "myapp-host" ] + [ "${EJB_TIMER_XA_CONNECTION_PROPERTY_DatabaseName}" = "rhpam-db2" ] + [ "${EJB_TIMER_XA_CONNECTION_PROPERTY_PortNumber}" = "50000" ] + # the URL property must not be set + [ "${EJB_TIMER_XA_CONNECTION_PROPERTY_URL}" = "" ] + [ "${EJB_TIMER_XA_CONNECTION_PROPERTY_Url}" = "" ] +} + @test "check if kie server location is set according to the route" { local expected="http://${HOSTNAME}:80/services/rest/server" KIE_SERVER_ROUTE_NAME="my-route-name" diff --git a/tests/features/rhpam/kieserver/rhpam-kieserver.feature b/tests/features/rhpam/kieserver/rhpam-kieserver.feature index 3db36c841..48a4daba4 100644 --- a/tests/features/rhpam/kieserver/rhpam-kieserver.feature +++ b/tests/features/rhpam/kieserver/rhpam-kieserver.feature @@ -67,6 +67,7 @@ Feature: RHPAM KIE Server configuration tests And container log should contain -Dorg.jbpm.ht.custom.callback=my.db.class And container log should contain -Djbpm.loop.level.disabled=true + # if this test fail, increase the cekit execution timeout, i.e. $ export CTF_WAIT_TIME=5; cekit.... Scenario: Check for the Executor's retries configuration When container is started with env | variable | value | @@ -81,6 +82,7 @@ Feature: RHPAM KIE Server configuration tests And container log should contain -Dorg.kie.executor.jms.transacted=false And container log should contain Executor JMS based support successfully activated on queue ActiveMQQueue[jms.queue.KIE.SERVER.EXECUTOR] + # if this test fail, increase the cekit execution timeout, i.e. $ export CTF_WAIT_TIME=5; cekit.... Scenario: KIECLOUD-122 - Enable JMS for RHDM and RHPAM, verify if the JMS executor configuration When container is started with env | variable | value | @@ -769,19 +771,21 @@ Feature: RHPAM KIE Server configuration tests Scenario: Checks if the EJB Timer was successfully configured for an external DB2 datasource with Type as default value and env using NONXA connection properties When container is started with env - | variable | value | - | DATASOURCES | TEST | - | TEST_USERNAME | bpmUser | - | TEST_PASSWORD | bpmPass | - | TEST_DRIVER | db2 | - | TEST_URL | jdbc:db2://localhost | - | TEST_NONXA | true | + | variable | value | + | DATASOURCES | TEST | + | TEST_USERNAME | bpmUser | + | TEST_PASSWORD | bpmPass | + | TEST_DRIVER | db2 | + | TEST_URL | jdbc:db2://localhost:50000/dbtest | + | TEST_NONXA | true | Then XML file /opt/eap/standalone/configuration/standalone-openshift.xml should contain value db2 on XPath //*[local-name()='xa-datasource']/*[local-name()='driver'] And XML file /opt/eap/standalone/configuration/standalone-openshift.xml should contain value db2 on XPath //*[local-name()='datasource']/*[local-name()='driver'] - And XML file /opt/eap/standalone/configuration/standalone-openshift.xml should contain value jdbc:db2://localhost on XPath //*[local-name()='xa-datasource']/*[local-name()='xa-datasource-property'][@name="URL"] + And XML file /opt/eap/standalone/configuration/standalone-openshift.xml should contain value localhost on XPath //*[local-name()='xa-datasource']/*[local-name()='xa-datasource-property'][@name="ServerName"] + And XML file /opt/eap/standalone/configuration/standalone-openshift.xml should contain value dbtest on XPath //*[local-name()='xa-datasource']/*[local-name()='xa-datasource-property'][@name="DatabaseName"] + And XML file /opt/eap/standalone/configuration/standalone-openshift.xml should contain value 50000 on XPath //*[local-name()='xa-datasource']/*[local-name()='xa-datasource-property'][@name="PortNumber"] And XML file /opt/eap/standalone/configuration/standalone-openshift.xml should contain value 4 on XPath //*[local-name()='xa-datasource']/*[local-name()='xa-datasource-property'][@name="DriverType"] And XML file /opt/eap/standalone/configuration/standalone-openshift.xml should contain value db2 on XPath //*[local-name()='database-data-store']/@database - And XML file /opt/eap/standalone/configuration/standalone-openshift.xml should contain value jdbc:db2://localhost on XPath //*[local-name()='datasource']/*[local-name()='connection-url'] + And XML file /opt/eap/standalone/configuration/standalone-openshift.xml should contain value jdbc:db2://localhost:50000/dbtest on XPath //*[local-name()='datasource']/*[local-name()='connection-url'] Scenario: Checks if the EJB Timer was successfully configured for an external DB2 datasource with Type 2 and env using XA connection properties When container is started with env @@ -790,14 +794,49 @@ Feature: RHPAM KIE Server configuration tests | TEST_USERNAME | bpmUser | | TEST_PASSWORD | bpmPass | | TEST_DRIVER | db2 | - | TEST_XA_CONNECTION_PROPERTY_URL | jdbc:db2://localhost | + | TEST_XA_CONNECTION_PROPERTY_URL | jdbc:db2://localhost:50000/test | | TEST_NONXA | false | | TEST_DRIVER_TYPE | 2 | Then XML file /opt/eap/standalone/configuration/standalone-openshift.xml should contain value db2 on XPath //*[local-name()='xa-datasource']/*[local-name()='driver'] - And XML file /opt/eap/standalone/configuration/standalone-openshift.xml should contain value jdbc:db2://localhost on XPath //*[local-name()='xa-datasource']/*[local-name()='xa-datasource-property'][@name="URL"] + And XML file /opt/eap/standalone/configuration/standalone-openshift.xml should contain value localhost on XPath //*[local-name()='xa-datasource']/*[local-name()='xa-datasource-property'][@name="ServerName"] + And XML file /opt/eap/standalone/configuration/standalone-openshift.xml should contain value test on XPath //*[local-name()='xa-datasource']/*[local-name()='xa-datasource-property'][@name="DatabaseName"] + And XML file /opt/eap/standalone/configuration/standalone-openshift.xml should contain value 50000 on XPath //*[local-name()='xa-datasource']/*[local-name()='xa-datasource-property'][@name="PortNumber"] And XML file /opt/eap/standalone/configuration/standalone-openshift.xml should contain value 2 on XPath //*[local-name()='xa-datasource']/*[local-name()='xa-datasource-property'][@name="DriverType"] And XML file /opt/eap/standalone/configuration/standalone-openshift.xml should contain value db2 on XPath //*[local-name()='database-data-store']/@database + Scenario: Checks if the EJB Timer was successfully configured with DB2 with SERVICE_HOST and PORT envs + When container is started with env + | variable | value | + | DATASOURCES | TEST | + | TEST_DATABASE | bpms | + | TEST_USERNAME | bpmUser | + | TEST_PASSWORD | bpmPass | + | TEST_DRIVER | db2 | + | TEST_SERVICE_HOST | 10.1.1.1 | + | TEST_SERVICE_PORT | 50000 | + | TEST_NONXA | true | + | TIMER_SERVICE_DATA_STORE_REFRESH_INTERVAL | 10000 | + Then XML file /opt/eap/standalone/configuration/standalone-openshift.xml should contain value java:jboss/datasources/test on XPath //*[local-name()='datasource']/@jndi-name + And XML file /opt/eap/standalone/configuration/standalone-openshift.xml should contain value test-TEST on XPath //*[local-name()='datasource']/@pool-name + And XML file /opt/eap/standalone/configuration/standalone-openshift.xml should contain value db2 on XPath //*[local-name()='xa-datasource']/*[local-name()='driver'] + And XML file /opt/eap/standalone/configuration/standalone-openshift.xml should contain value ejb_timer-EJB_TIMER on XPath //*[local-name()='xa-datasource']/@pool-name + And XML file /opt/eap/standalone/configuration/standalone-openshift.xml should contain value java:jboss/datasources/ejb_timer on XPath //*[local-name()='xa-datasource']/@jndi-name + And XML file /opt/eap/standalone/configuration/standalone-openshift.xml should contain value true on XPath //*[local-name()='xa-datasource']/@use-java-context + And XML file /opt/eap/standalone/configuration/standalone-openshift.xml should contain value true on XPath //*[local-name()='xa-datasource']/@enabled + And XML file /opt/eap/standalone/configuration/standalone-openshift.xml should contain value 10.1.1.1 on XPath //*[local-name()='xa-datasource']/*[local-name()='xa-datasource-property'][@name="ServerName"] + And XML file /opt/eap/standalone/configuration/standalone-openshift.xml should contain value 50000 on XPath //*[local-name()='xa-datasource']/*[local-name()='xa-datasource-property'][@name="PortNumber"] + And XML file /opt/eap/standalone/configuration/standalone-openshift.xml should contain value bpms on XPath //*[local-name()='xa-datasource']/*[local-name()='xa-datasource-property'][@name="DatabaseName"] + And XML file /opt/eap/standalone/configuration/standalone-openshift.xml should contain value jdbc:db2://10.1.1.1:50000/bpms on XPath //*[local-name()='datasource']/*[local-name()='connection-url'] + And XML file /opt/eap/standalone/configuration/standalone-openshift.xml should contain value bpmUser on XPath //*[local-name()='xa-datasource']/*[local-name()='security']/*[local-name()='user-name'] + And XML file /opt/eap/standalone/configuration/standalone-openshift.xml should contain value bpmPass on XPath //*[local-name()='xa-datasource']/*[local-name()='security']/*[local-name()='password'] + And XML file /opt/eap/standalone/configuration/standalone-openshift.xml should contain value TRANSACTION_READ_COMMITTED on XPath //*[local-name()='xa-datasource']/*[local-name()='transaction-isolation'] + And XML file /opt/eap/standalone/configuration/standalone-openshift.xml should contain value ejb_timer-EJB_TIMER_ds on XPath //*[local-name()='timer-service']/@default-data-store + And XML file /opt/eap/standalone/configuration/standalone-openshift.xml should contain value ejb_timer-EJB_TIMER_ds on XPath //*[local-name()='database-data-store']/@name + And XML file /opt/eap/standalone/configuration/standalone-openshift.xml should contain value java:jboss/datasources/ejb_timer on XPath //*[local-name()='database-data-store']/@datasource-jndi-name + And XML file /opt/eap/standalone/configuration/standalone-openshift.xml should contain value db2 on XPath //*[local-name()='database-data-store']/@database + And XML file /opt/eap/standalone/configuration/standalone-openshift.xml should contain value ejb_timer-EJB_TIMER_part on XPath //*[local-name()='database-data-store']/@partition + And XML file /opt/eap/standalone/configuration/standalone-openshift.xml should contain value 10000 on XPath //*[local-name()='database-data-store']/@refresh-interval + Scenario: Verify if the DB Schema and persistence dialect is correctly set. When container is started with env | variable | value |