Skip to content

Commit

Permalink
[RHBA-181] - Kie server timers aren't clustered
Browse files Browse the repository at this point in the history
Signed-off-by: Filippe Spolti <fspolti@redhat.com>
  • Loading branch information
spolti committed Apr 18, 2018
1 parent 235f741 commit 9a0005e
Show file tree
Hide file tree
Showing 2 changed files with 330 additions and 4 deletions.
125 changes: 125 additions & 0 deletions os.bpmsuite.executionserver/added/launch/bpmsuite-executionserver.sh
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,16 @@ source $JBOSS_HOME/bin/launch/logging.sh

function prepareEnv() {
# please keep these in alphabetical order
unset AUTO_CONFIGURE_EJB_TIMER
unset DROOLS_SERVER_FILTER_CLASSES
unset EJB_TIMER_DATABASE
unset EJB_TIMER_JNDI
unset EJB_TIMER_MAX_POOL_SIZE
unset EJB_TIMER_MIN_POOL_SIZE
unset EJB_TIMER_NONXA
unset EJB_TIMER_PASSWORD
unset EJB_TIMER_TX_ISOLATION
unset EJB_TIMER_USERNAME
unset JBPM_HT_CALLBACK_CLASS
unset JBPM_HT_CALLBACK_METHOD
unset JBPM_LOOP_LEVEL_DISABLED
Expand Down Expand Up @@ -38,6 +47,10 @@ function prepareEnv() {
unset KIE_SERVER_USER
}

function preConfigure() {
configure_EJB_Timer_datasource
}

function configureEnv() {
configure
}
Expand All @@ -58,6 +71,118 @@ function configure() {
configure_server_state
}

function configure_EJB_Timer_datasource {

source $JBOSS_HOME/bin/launch/datasource-common.sh

local autoConfigure=${AUTO_CONFIGURE_EJB_TIMER:-true}
if [ "${autoConfigure^^}" = "TRUE" ]; then
log_info "EJB Timer will be auto configured if any datasource is configured via DB_SERVICE_PREFIX_MAPPING or DATASOURCES envs."

# configure the EJB timer datasource based on DB_SERVICE_PREFIX_MAPPING
if [ -n "${DB_SERVICE_PREFIX_MAPPING}" ]; then
log_info "configuring EJB Timer Datasource based on DB_SERVICE_PREFIX_MAPPING env"
local serviceMappingName=${DB_SERVICE_PREFIX_MAPPING%=*}
local prefix=${DB_SERVICE_PREFIX_MAPPING#*=}

EJB_TIMER_JNDI=$(find_env "${prefix}_JNDI")
EJB_TIMER_JNDI="${EJB_TIMER_JNDI}_EJBTimer"

# force the provided datasource to be xa
eval ${prefix}_NONXA=false

#mysql need to be created manually because the DB_SERVICE_PREFIX_MAPPING does not allow to configure the XA URL
if [[ "${serviceMappingName}" = *"mysql"* ]]; then
DATASOURCES="EJB_TIMER"

local service=${serviceMappingName^^}
service=${service//-/_}
local host=$(find_env "${service}_SERVICE_HOST")
local port=$(find_env "${service}_SERVICE_PORT" "3306")
local database=$(find_env "${prefix}_DATABASE")
EJB_TIMER_DRIVER="mysql"
EJB_TIMER_XA_CONNECTION_PROPERTY_URL="jdbc:mysql://${host}:${port}/${database}?pinGlobalTxToPhysicalConnection=true"
EJB_TIMER_CONNECTION_CHECKER=$(find_env "${prefix}_CONNECTION_CHECKER" "org.jboss.jca.adapters.jdbc.extensions.mysql.MySQLValidConnectionChecker")
EJB_TIMER_EXCEPTION_SORTER=$(find_env "${prefix}_EXCEPTION_SORTER" "org.jboss.jca.adapters.jdbc.extensions.mysql.MySQLExceptionSorter")
EJB_TIMER_BACKGROUND_VALIDATION=$(find_env "${prefix}_BACKGROUND_VALIDATION" "true")
EJB_TIMER_BACKGROUND_VALIDATION_MILLIS=$(find_env "${prefix}_BACKGROUND_VALIDATION_MILLIS" "10000")
TIMER_SERVICE_DATA_STORE="EJB_TIMER"
else
# Make sure that the EJB datasource is configured first, in this way the timer's default-data-store wil be the
# EJBTimer datasource
DB_SERVICE_PREFIX_MAPPING="${serviceMappingName}=EJB_TIMER,${DB_SERVICE_PREFIX_MAPPING}"
EJB_TIMER_DATABASE=$(find_env "${prefix}_DATABASE")
EJB_TIMER_DRIVER="postgresql"
TIMER_SERVICE_DATA_STORE="${serviceMappingName}"
fi
EJB_TIMER_USERNAME=$(find_env "${prefix}_USERNAME")
EJB_TIMER_PASSWORD=$(find_env "${prefix}_PASSWORD")
EJB_TIMER_MIN_POOL_SIZE=$(find_env "${prefix}_MIN_POOL_SIZE")
EJB_TIMER_MAX_POOL_SIZE=$(find_env "${prefix}_MAX_POOL_SIZE")
EJB_TIMER_TX_ISOLATION="${EJB_TIMER_TX_ISOLATION:-TRANSACTION_READ_COMMITTED}"
EJB_TIMER_NONXA="false"
#inject_ejb_timer_datastore

elif [ -n "${DATASOURCES}" ]; then
log_info "configuring EJB Timer Datasource based on DATASOURCES env"
# Make sure that the EJB datasource is configured first, in this way the timer's default-data-store wil be the
# EJBTimer datasource
local dsPrefix="${DATASOURCES%,*}"
# force the provided datasource to be xa
eval ${dsPrefix}_NONXA=false

DATASOURCES="EJB_TIMER,${DATASOURCES}"

EJB_TIMER_DRIVER=$(find_env "${dsPrefix}_DRIVER")

if [ "${EJB_TIMER_DRIVER}" = "postgresql" ]; then
EJB_TIMER_DATABASE=$(find_env "${dsPrefix}_DATABASE")
EJB_TIMER_SERVICE_HOST=$(find_env "${dsPrefix}_SERVICE_HOST")
EJB_TIMER_SERVICE_PORT=$(find_env "${dsPrefix}_SERVICE_PORT")

elif [ "${EJB_TIMER_DRIVER}" = "mysql" ]; then
local host=$(find_env "${dsPrefix}_SERVICE_HOST")
local port=$(find_env "${dsPrefix}_SERVICE_PORT" "3306")
local database=$(find_env "${dsPrefix}_DATABASE")
EJB_TIMER_XA_CONNECTION_PROPERTY_URL="jdbc:mysql://${host}:${port}/${database}?pinGlobalTxToPhysicalConnection=true"
else
# these values are set automatically it the driver is mysql or postgresql, if the driver does not match, these values must be provided
EJB_TIMER_CONNECTION_CHECKER=$(find_env "${dsPrefix}_CONNECTION_CHECKER")
EJB_TIMER_EXCEPTION_SORTER=$(find_env "${dsPrefix}_EXCEPTION_SORTER")
EJB_TIMER_BACKGROUND_VALIDATION=$(find_env "${dsPrefix}_BACKGROUND_VALIDATION")
EJB_TIMER_BACKGROUND_VALIDATION_MILLIS=$(find_env "${dsPrefix}_BACKGROUND_VALIDATION_MILLIS")

# if prefix_URL and prefix_XA_CONNECTION_PROPERTY_propertyName are set, rely on XA property
# the same will be valid for others XA properties
local url=$(find_env "${dsPrefix}_URL")
url=$(find_env "${dsPrefix}_XA_CONNECTION_PROPERTY_URL" "${url}")
if [ "x${url}" != "x" ]; then
EJB_TIMER_XA_CONNECTION_PROPERTY_URL=${url}

else
local databaseName=$(find_env "${dsPrefix}_DATABASE")
databaseName=$(find_env "${dsPrefix}_XA_CONNECTION_PROPERTY_DatabaseName" "${databaseName}")
local serverName=$(find_env "${dsPrefix}_SERVICE_HOST" )
serverName=$(find_env "${dsPrefix}_XA_CONNECTION_PROPERTY_ServerName" "${serverName}")
local portNumber=$(find_env "${dsPrefix}_SERVICE_PORT" )
portNumber=$(find_env "${dsPrefix}_XA_CONNECTION_PROPERTY_PortNumber" "${portNumber}")
EJB_TIMER_XA_CONNECTION_PROPERTY_DatabaseName=${databaseName}
EJB_TIMER_XA_CONNECTION_PROPERTY_ServerName=${serverName}
EJB_TIMER_XA_CONNECTION_PROPERTY_PortNumber=${portNumber}
fi
fi
EJB_TIMER_USERNAME=$(find_env "${dsPrefix}_USERNAME")
EJB_TIMER_PASSWORD=$(find_env "${dsPrefix}_PASSWORD")
EJB_TIMER_MIN_POOL_SIZE=$(find_env "${dsPrefix}_MIN_POOL_SIZE" "10")
EJB_TIMER_MAX_POOL_SIZE=$(find_env "${dsPrefix}_MAX_POOL_SIZE" "10")
EJB_TIMER_NONXA="false"
EJB_TIMER_TX_ISOLATION="${EJB_TIMER_TX_ISOLATION:-TRANSACTION_READ_COMMITTED}"
TIMER_SERVICE_DATA_STORE="EJB_TIMER"
fi
fi
}


function configure_server_env {
# source the KIE config
source $JBOSS_HOME/bin/launch/kieserver-env.sh
Expand Down

0 comments on commit 9a0005e

Please sign in to comment.