Skip to content

Commit

Permalink
Proj a testing to main v2.4.0 testing (#177)
Browse files Browse the repository at this point in the history
* preliminary removing of simple db connection source

* Using linux epoch timestamp in name of worker

-

* decreasing starting connections to 1, in pool

* splitting out CWS and Camunda to two different JDBC pools

and also setting removeAbandoned timeout value to be 15 minutes

* Update WorkerMonitorBackgroundThread.java

* Merge pull request #70 from NASA-AMMOS/issue-41-hikaricp

Switch connection pool from Tomcat to HikariCP

* making pool half the size

* Allow custom adaptation actions to be added to the actions dropdown

* Add ability to invoke adaptation js code to the workers page (#121)

Co-authored-by: zef <[email protected]>

* Allow customization of the workers modal

* External Adaptation DB Support (#127)

* add adaptation jdbc connectors and configs

* adaptation installer and server xml update

* installer and configure script edit

* cleaned Cwsinstaller adapt configs

* remove log

* new server adaptation plugin resource

* change pool name for external db server

* add qualifier for jdbc adaptation template

* add cws-engine and cws-ui jdbc adapt template

* empty commit

* empty commit 2

* clean up xml file and naming convention

* clear webdriver cache - update to 5.5.0 (#179)

---------

Co-authored-by: Galen A Hollins <[email protected]>
Co-authored-by: Galen Hollins <[email protected]>
Co-authored-by: zef <[email protected]>
Co-authored-by: Josh Haile <[email protected]>
  • Loading branch information
5 people authored Oct 27, 2023
1 parent e09842c commit 89ded7b
Show file tree
Hide file tree
Showing 15 changed files with 208 additions and 16 deletions.
1 change: 1 addition & 0 deletions create_server_dist.sh
Original file line number Diff line number Diff line change
Expand Up @@ -68,6 +68,7 @@ cp ${INSTALL_DIR}/tomcat_lib/css-jaas.cfg ${CONFIG_TEMPLATES
cp ${INSTALL_DIR}/tomcat_bin/setenv.sh ${CONFIG_TEMPLATES_DIR}/tomcat_bin
cp ${INSTALL_DIR}/tomcat_conf/bpm-platform.xml ${CONFIG_TEMPLATES_DIR}/tomcat_conf
cp ${INSTALL_DIR}/tomcat_conf/server.xml ${CONFIG_TEMPLATES_DIR}/tomcat_conf
cp ${INSTALL_DIR}/tomcat_conf/server_adaptation.xml ${CONFIG_TEMPLATES_DIR}/tomcat_conf
cp ${INSTALL_DIR}/tomcat_conf/web.xml ${CONFIG_TEMPLATES_DIR}/tomcat_conf
cp ${INSTALL_DIR}/tomcat_conf/ldap_plugin_bean.xml ${CONFIG_TEMPLATES_DIR}/tomcat_conf
cp ${INSTALL_DIR}/tomcat_conf/ldap_plugin_ref.xml ${CONFIG_TEMPLATES_DIR}/tomcat_conf
Expand Down
13 changes: 10 additions & 3 deletions cws-core/src/main/java/jpl/cws/core/db/DbService.java
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.namedparam.MapSqlParameterSource;
import org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate;
Expand All @@ -22,9 +23,15 @@
public class DbService {
private static final Logger log = LoggerFactory.getLogger(DbService.class);

@Autowired protected JdbcTemplate jdbcTemplate;
@Autowired protected NamedParameterJdbcTemplate namedJdbcTemplate;

@Autowired
protected JdbcTemplate jdbcTemplate;

@Autowired
protected NamedParameterJdbcTemplate namedJdbcTemplate;

@Autowired
protected JdbcTemplate jdbcAdaptationTemplate;

protected static final long SLOW_WARN_THRESHOLD = 100;
protected static final int IN_CLAUSE_MAX_ELEMENTS = 100;

Expand Down
85 changes: 85 additions & 0 deletions cws-installer/src/main/java/jpl/cws/task/CwsInstaller.java
Original file line number Diff line number Diff line change
Expand Up @@ -149,6 +149,16 @@ public class CwsInstaller {
private static String cws_db_username;
private static String cws_db_password;

private static String cws_adapt_use_shared_db;
private static String cws_adapt_db_type;
private static String cws_adapt_db_host;
private static String cws_adapt_db_port;
private static String cws_adapt_db_name;
private static String cws_adapt_db_url;
private static String cws_adapt_db_driver;
private static String cws_adapt_db_username;
private static String cws_adapt_db_password;

private static String cws_auth_scheme;
private static String cws_user;
private static String cws_user_firstname;
Expand Down Expand Up @@ -1571,6 +1581,34 @@ private static void showInstallationInfo() {
print("Database User = " + cws_db_username);
print("Database Password = ****** (hidden) ");
print("....................................................................................");

cws_adapt_use_shared_db = getPreset("adaptation_use_shared_db");
cws_adapt_db_type = getPreset("adaptation_db_type");
cws_adapt_db_host = getPreset("adaptation_db_host");
cws_adapt_db_port = getPreset("adaptation_db_port");
cws_adapt_db_name = getPreset("adaptation_db_name");
cws_adapt_db_username = getPreset("adaptation_db_username");
cws_adapt_db_password = getPreset("adaptation_db_password");
cws_adapt_db_url = "jdbc:" + cws_adapt_db_type + "://" + cws_adapt_db_host + ":" + cws_adapt_db_port + "/" + cws_adapt_db_name + "?autoReconnect=true";

if (cws_adapt_use_shared_db != null) {
if (cws_adapt_use_shared_db.equalsIgnoreCase("y")) {

if (cws_adapt_db_type.equals("mariadb")) {
cws_adapt_db_driver = "org.mariadb.jdbc.Driver";
} else if (cws_adapt_db_type.equals("mysql")) {
cws_adapt_db_driver = "com.mysql.jdbc.Driver";
}
print(" CWS Adapt Database ");
print(" Database Type = " + cws_adapt_db_type);
print(" Database URL = " + cws_adapt_db_url);
print(" Database Driver = " + cws_adapt_db_driver);
print(" Database User = " + cws_adapt_db_username);
print(" Database Password = ****** (hidden) ");
}
}
print("....................................................................................");

if (cws_auth_scheme.equals("LDAP")) {
print("LDAP User = " + cws_user);
}
Expand Down Expand Up @@ -2140,6 +2178,8 @@ private static void createFreshWorkDir() {
Paths.get(config_work_dir + SEP + "tomcat_conf" + SEP + "bpm-platform.xml"));
copy(Paths.get( config_templates_dir + SEP + "tomcat_conf" + SEP + "server.xml"),
Paths.get(config_work_dir + SEP + "tomcat_conf" + SEP + "server.xml"));
copy(Paths.get( config_templates_dir + SEP + "tomcat_conf" + SEP + "server_adaptation.xml"),
Paths.get(config_work_dir + SEP + "tomcat_conf" + SEP + "server_adaptation.xml"));
copy(Paths.get( config_templates_dir + SEP + "tomcat_conf" + SEP + "web.xml"),
Paths.get(config_work_dir + SEP + "tomcat_conf" + SEP + "web.xml"));
copy(Paths.get( config_templates_dir + SEP + "engine-rest_mods" + SEP + "web.xml"),
Expand Down Expand Up @@ -2208,6 +2248,28 @@ private static void updateFiles() throws IOException {
content = content.replace("__CWS_DB_DRIVER__", cws_db_driver);
content = content.replace("__CWS_DB_USERNAME__", cws_db_username);
content = content.replace("__CWS_DB_PASSWORD__", cws_db_password);

writeToFile(filePath, content);
copy(
Paths.get(config_work_dir + SEP + "tomcat_conf" + SEP + "server_adaptation.xml"),
Paths.get(cws_tomcat_root + SEP + "conf" + SEP + "server_adaptation.xml"));
if (cws_adapt_db_url != null && cws_adapt_db_driver != null &&
cws_adapt_db_username != null && cws_adapt_db_password != null) {

// Fill in the __ADAPTATION_SERVER_RESOURCE__
String serverAdaptationContent = getFileContents(
Paths.get(config_work_dir + SEP + "tomcat_conf" + SEP + "server_adaptation.xml"));
content = content.replace("<Resource name=\"jdbc/cws\"", serverAdaptationContent);

content = content.replace("__CWS_ADAPT_DB_URL__", cws_adapt_db_url);
content = content.replace("__CWS_ADAPT_DB_DRIVER__", cws_adapt_db_driver);
content = content.replace("__CWS_ADAPT_DB_USERNAME__", cws_adapt_db_username);
content = content.replace("__CWS_ADAPT_DB_PASSWORD__", cws_adapt_db_password);
} else {
content = content.replace("__ADAPTATION_SERVER_RESOURCE__", "");

}

content = content.replace("__CWS_TOMCAT_CONNECTOR_PORT__", cws_tomcat_connector_port);
content = content.replace("__CWS_TOMCAT_SSL_PORT__", cws_tomcat_ssl_port);
content = content.replace("__CWS_TOMCAT_AJP_PORT__", cws_tomcat_ajp_port);
Expand Down Expand Up @@ -2381,6 +2443,17 @@ private static void updateWorkerAppContext() throws IOException {
Path filePath = Paths.get(config_work_dir + SEP + "cws-engine" + SEP + "applicationContext.xml");
String content = getFileContents(filePath);

if (cws_adapt_db_url != null && cws_adapt_db_driver != null &&
cws_adapt_db_username != null && cws_adapt_db_password != null) {
content = content.replace("__CWS_ADAPTATION_JNDI__", "<jee:jndi-lookup id=\"cwsAdaptDataSource\" jndi-name=\"java:comp/env/jdbc/cws_adaptation\" expected-type=\"javax.sql.DataSource\" />");
content = content.replace("__CWS_ADAPTATION_BEAN__", "<bean id=\"jdbcAdaptationTemplate\" class=\"org.springframework.jdbc.core.JdbcTemplate\">\n" +
"\t\t<constructor-arg ref=\"cwsAdaptDataSource\"/>\n" +
"\t</bean>");
} else {
content = content.replace("__CWS_ADAPTATION_JNDI__", "");
content = content.replace("__CWS_ADAPTATION_BEAN__", "");
}

content = content.replace("__CWS_DB_DRIVER__", cws_db_driver);
content = content.replace("__CWS_DB_URL__", cws_db_url);
content = content.replace("__CWS_DB_USERNAME__", cws_db_username);
Expand Down Expand Up @@ -2490,6 +2563,18 @@ private static void updateCwsUiConfig() throws IOException {
print(" Updating cws-ui/applicationContext.xml...");
Path path = Paths.get(config_work_dir + SEP + "cws-ui" + SEP + "applicationContext.xml");
String content = getFileContents(path);

if (cws_adapt_db_url != null && cws_adapt_db_driver != null &&
cws_adapt_db_username != null && cws_adapt_db_password != null) {
content = content.replace("__CWS_ADAPTATION_JNDI__", "<jee:jndi-lookup id=\"cwsAdaptDataSource\" jndi-name=\"java:comp/env/jdbc/cws_adaptation\" expected-type=\"javax.sql.DataSource\" />");
content = content.replace("__CWS_ADAPTATION_BEAN__", "<bean id=\"jdbcAdaptationTemplate\" class=\"org.springframework.jdbc.core.JdbcTemplate\">\n" +
"\t\t<constructor-arg ref=\"cwsAdaptDataSource\"/>\n" +
"\t</bean>");
} else {
content = content.replace("__CWS_ADAPTATION_JNDI__", "");
content = content.replace("__CWS_ADAPTATION_BEAN__", "");
}

content = content.replace("__CWS_DB_DRIVER__", cws_db_driver);
content = content.replace("__CWS_DB_URL__", cws_db_url);
content = content.replace("__CWS_DB_USERNAME__", cws_db_username);
Expand Down
2 changes: 1 addition & 1 deletion cws-test/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -114,7 +114,7 @@
<dependency>
<groupId>io.github.bonigarcia</groupId>
<artifactId>webdrivermanager</artifactId>
<version>5.2.0</version>
<version>5.5.0</version>
<scope>test</scope>
</dependency>

Expand Down
2 changes: 1 addition & 1 deletion cws-test/src/test/java/jpl/cws/test/WebTestUtil.java
Original file line number Diff line number Diff line change
Expand Up @@ -123,7 +123,7 @@ protected void initChromeDriver() {
chromeOptions.addArguments("--disable-gpu");
chromeOptions.addArguments("--disable-dev-shm-usage");

WebDriverManager.chromedriver().setup();
WebDriverManager.chromedriver().clearDriverCache().setup();
driver = new ChromeDriver(chromeOptions);

log.info("Driver initialized: " + driver);
Expand Down
8 changes: 8 additions & 0 deletions cws-ui/src/main/webapp/js/adaptation-workers-modal.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
// override with js code file in your adaptation project for example like this
// cp your-cws-adaptation/src/main/resources/cws-ui/adaptation-deployments.js common-workflow-service/cws-ui/src/web/main/webapp/js/adaptation-deployments.js
// This adaptation allows extra information to be added to each worker. The particular use case that
// drove this need is a request to add the aws scaling class each worker belongs to
function addAdaptationWorkersInfo(dataProcKey, listWorkers) {
return; // Common workflow behavior is to do nothing
}

1 change: 0 additions & 1 deletion cws-ui/src/main/webapp/js/adaptation-workers.js
Original file line number Diff line number Diff line change
Expand Up @@ -3,4 +3,3 @@
function adaptationWorkersReady() {
return; // CWS core behavior is to do nothing here
}

69 changes: 60 additions & 9 deletions install/configure.sh
Original file line number Diff line number Diff line change
Expand Up @@ -318,16 +318,66 @@ if [[ "${CWS_INSTALL_TYPE}" = "1" ]] || [[ "${CWS_INSTALL_TYPE}" = "2" ]]; then
# Record the fact that tables have been created
touch ${ROOT}/.databaseTablesCreated


# Create any adaptation tables, if provided
if [[ -f ${ROOT}/sql/cws/adaptation.sql ]]; then
print "Creating adaptation tables..."
mysql --defaults-file=${ROOT}/config/my.cnf ${DB_NAME} < ${ROOT}/sql/cws/adaptation.sql
if [[ $? -gt 0 ]]; then
print "ERROR: Problem creating adaptation tables."
print " Please check your database configuration and/or adaptation script '${ROOT}/sql/cws/adaptation.sql', and try again."
rm -rf ${ROOT}/config/my.cnf
exit 1
fi
if [[ -f ${ROOT}/sql/cws/adaptation.sql && -f ${ROOT}/sql/cws/adaptation_core.sql && -f ${ROOT}/sql/cws/adaptation_external.sql ]]; then
print "Checking for Adaptation DB Settings..."
ADAPT_USE_SHARED_DB=`grep adaptation_use_shared_db ${CWS_INSTALLER_PRESET_FILE} | grep -v "^#" | cut -d"=" -f 2`

if [[ "${ADAPT_USE_SHARED_DB}" == "y" ]]; then
ADAPT_DB_HOST=`grep adaptation_db_host ${CWS_INSTALLER_PRESET_FILE} | grep -v "^#" | cut -d"=" -f 2`
ADAPT_DB_NAME=`grep adaptation_db_name ${CWS_INSTALLER_PRESET_FILE} | grep -v "^#" | cut -d"=" -f 2`
ADAPT_DB_USER=`grep adaptation_db_username ${CWS_INSTALLER_PRESET_FILE} | grep -v "^#" | cut -d"=" -f 2`
ADAPT_DB_PASS=`grep adaptation_db_password ${CWS_INSTALLER_PRESET_FILE} | grep -v "^#" | cut -d"=" -f 2`

echo "[mysql]" > ${ROOT}/config/myadapt.cnf
echo "host=${ADAPT_DB_HOST}" >> ${ROOT}/config/myadapt.cnf
echo "user=\"${ADAPT_DB_USER}\"" >> ${ROOT}/config/myadapt.cnf
echo "password=\"${ADAPT_DB_PASS}\"" >> ${ROOT}/config/myadapt.cnf
chmod 644 ${ROOT}/config/myadapt.cnf

cat ${ROOT}/config/myadapt.cnf

# ----------------------------------------
print "Your adaptation database configuration is:"
print " DB HOST: ${ADAPT_DB_HOST}"
print " DB NAME: ${ADAPT_DB_NAME}"
print " DB USER: ${ADAPT_DB_USER}"
print "This script will now create the database necessary for CWS to function."


print "Checking whether database ${ADAPT_DB_NAME} already exists..."
RES=`mysql --defaults-file=${ROOT}/config/myadapt.cnf -e "SELECT SCHEMA_NAME FROM INFORMATION_SCHEMA.SCHEMATA WHERE SCHEMA_NAME = '${ADAPT_DB_NAME}'"`

if [[ $? -gt 0 ]]; then
print "ERROR: Problem checking for database. "
print " Please check your database configuration, and try again."
rm -f ${ROOT}/config/myadapt.cnf
exit 1
fi
print " Database ${ADAPT_DB_NAME} exists."

print "Creating adaptation tables in External DB..."
mysql --defaults-file=${ROOT}/config/my.cnf ${DB_NAME} < ${ROOT}/sql/cws/adaptation_core.sql
mysql --defaults-file=${ROOT}/config/myadapt.cnf ${ADAPT_DB_NAME} < ${ROOT}/sql/cws/adaptation_external.sql
if [[ $? -gt 0 ]]; then
print "ERROR: Problem creating adaptation tables."
print " Please check your database configuration and/or adaptation script '${ROOT}/sql/cws/adaptation_external.sql', and try again."
rm -rf ${ROOT}/config/myadapt.cnf
exit 1
fi
else
print "Creating adaptation tables in Default Core DB..."
if [[ -f ${ROOT}/sql/cws/adaptation.sql ]]; then
mysql --defaults-file=${ROOT}/config/my.cnf ${DB_NAME} < ${ROOT}/sql/cws/adaptation.sql
if [[ $? -gt 0 ]]; then
print "ERROR: Problem creating adaptation tables."
print " Please check your database configuration and/or adaptation script '${ROOT}/sql/cws/adaptation.sql', and try again."
rm -rf ${ROOT}/config/my.cnf
exit 1
fi
fi
fi

# Record the fact that we applied a database adaptation
touch ${ROOT}/.adaptationTablesCreated
Expand All @@ -346,5 +396,6 @@ if [[ "${CWS_INSTALL_TYPE}" = "1" ]] || [[ "${CWS_INSTALL_TYPE}" = "2" ]]; then
fi

rm -f ${ROOT}/config/my.cnf
rm -f ${ROOT}/config/myadapt.cnf

print "Finished"
2 changes: 2 additions & 0 deletions install/context.xml
Original file line number Diff line number Diff line change
Expand Up @@ -36,4 +36,6 @@

<ResourceLink name="jdbc/cws" global="jdbc/cws" type="javax.sql.DataSource" />

<ResourceLink name="jdbc/cws_adaptation" global="jdbc/cws_adaptation" type="javax.sql.DataSource" />

</Context>
4 changes: 4 additions & 0 deletions install/cws-engine/applicationContext.xml
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,8 @@

<jee:jndi-lookup id="cwsDataSource" jndi-name="java:comp/env/jdbc/cws" expected-type="javax.sql.DataSource" />

__CWS_ADAPTATION_JNDI__

<bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
<constructor-arg ref="cwsDataSource"/>
</bean>
Expand All @@ -30,6 +32,8 @@
<constructor-arg ref="cwsDataSource"/>
</bean>

__CWS_ADAPTATION_BEAN__

<bean id="cwsConfig" class="jpl.cws.core.CwsConfig" />

<!-- CWS SERVICES -->
Expand Down
9 changes: 9 additions & 0 deletions install/cws-ui/adaptation-workers-modal.ftl
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
<!-- override with adaptation actions
adaptation workers-div modal custom html
In your adaptation project override this file with
cp your-cws-adaptation/src/main/resources/cws-ui/adaptation-workers-modal.ftl common-workflow-service/install/cws-ui/adaptation-workers-modal.ftl
This adaptation allows for enhancements of the workers modal. The particular case driving this is the
need to add a filter box next to the select all checkbox to be able to filter workers by
scaling class (see the comments in adaptation-workers-modal.js for more info)
-->

4 changes: 4 additions & 0 deletions install/cws-ui/applicationContext.xml
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,8 @@

<jee:jndi-lookup id="dbDataSource" jndi-name="java:comp/env/jdbc/ProcessEngine" expected-type="javax.sql.DataSource" />

__CWS_ADAPTATION_JNDI__

<bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
<constructor-arg ref="dbDataSource"/>
</bean>
Expand All @@ -33,6 +35,8 @@
<constructor-arg ref="dbDataSource"/>
</bean>

__CWS_ADAPTATION_BEAN__

<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dbDataSource" />
</bean>
Expand Down
8 changes: 7 additions & 1 deletion install/cws-ui/deployments.ftl
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,8 @@
<link href="/${base}/css/bootstrap.min.css" rel="stylesheet">
<link href="/${base}/css/bootstrap-toggle.min.css" rel="stylesheet">
<script src="/${base}/js/bootstrap-toggle.min.js"></script>
<!-- Custom js adaptation script; override this file from your adaptation project -->
<script src="/${base}/js/adaptation-workers-modal.js"></script>
<!-- Custom styles for this template -->
<link href="/${base}/css/dashboard.css" rel="stylesheet">
<script>
Expand Down Expand Up @@ -755,6 +757,7 @@
<div>
<input type="checkbox" id="all-workers" />&nbsp;
<label for="all-workers" id='selAll-label'>Select All Workers</label>
<#include "adaptation-workers-modal.ftl">
</div>
<hr/>
<div id="workers-div"></div>
Expand Down Expand Up @@ -883,6 +886,9 @@
$("#workers-div").html('');
//Returned JSON is an array of objects
var listWorkers = JSON.parse(data);
//-------Add potential extra adaptation info to each worker-----
addAdaptationWorkersInfo(dataProcKey, listWorkers);
//-------------
//$.each(JSON.parse(data), function(i) {
for(i in listWorkers){
var div = "<div>" +
Expand All @@ -891,7 +897,7 @@
" onClick=\'enableDisable(\""+listWorkers[i].id.toString()+"\");\' "+(listWorkers[i].accepting_new ? "checked" :"")+"/>"+
"<label for='"+listWorkers[i].id+"-box'"+( (listWorkers[i].status == 'down') ? " class='w-down'" : '')+">"+listWorkers[i].name+
(listWorkers[i].cws_install_type == 'console_only'? '*' : '') +"</label>"+
"<span id='"+listWorkers[i].id+"-msg'>"+
"<span id='"+listWorkers[i].id+"-msg'></span>" +
"</div>";
$("#workers-div").append(div);
}
Expand Down
1 change: 1 addition & 0 deletions install/tomcat_conf/server.xml
Original file line number Diff line number Diff line change
Expand Up @@ -80,6 +80,7 @@
password="__CWS_DB_PASSWORD__"

transactionIsolation="TRANSACTION_READ_COMMITTED" />
__ADAPTATION_SERVER_RESOURCE__

<Resource name="global/camunda-bpm-platform/process-engine/ProcessEngineService!org.camunda.bpm.ProcessEngineService" auth="Container"
type="org.camunda.bpm.ProcessEngineService"
Expand Down
15 changes: 15 additions & 0 deletions install/tomcat_conf/server_adaptation.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
<Resource name="jdbc/cws_adaptation"
auth="Container"
type="javax.sql.DataSource"
factory="com.zaxxer.hikari.HikariJNDIFactory"
poolName="cws-adapt-pool"

maximumPoolSize="5"
connectionTimeout="300000"

driverClassName="__CWS_ADAPT_DB_DRIVER__"
jdbcUrl="__CWS_ADAPT_DB_URL__"
username="__CWS_ADAPT_DB_USERNAME__"
password="__CWS_ADAPT_DB_PASSWORD__" />

<Resource name="jdbc/cws"

0 comments on commit 89ded7b

Please sign in to comment.