четверг, 16 апреля 2015 г.

Автоматизация: делаем Flush всех JDBC пулов, для всех доменов GlassFish

При перезагрузке Oracle сервера иногда зависают JDBC соединения с базой, а бывает соединения просто "утекают". В результате заканчивается пул подключений и GlassFish перестает нормально функционировать.
Чтобы это исправить нужно сделать Flush каждому JDBC пулу. А когда этих пулов больше 2-3 это становится очень утомительным занятием.


Для автоматизации очистки JDBC пулов написал следующий скрипт:
утилита получает список всех директорий (доменов) GlassFish, парсит конфиг файл каждого домена, получает список всех JDBC пулов и делает им очистку.

#!/bin/bash
# путь к доменам GlassFish и административной утилите
asadmin="/cygdrive/с/glassfish3/bin/asadmin.bat"
glassfish_path="/cygdrive/с/glassfish3/glassfish/domains/"

cd $glassfish_path

# Получаем список всех доменов
find . -maxdepth 1 -mindepth 1 -type d | sed -e '/^$/d' | while read line; do
    echo -n "Parsing Domain: " $line", Admin Port: "
    if ls "$glassfish_path/$line/config/domain.xml" > /dev/null 2> /dev/null ; then 

        # Получаем админский порт ...
        admin_port=$(cat $glassfish_path/$line/config/domain.xml | grep 'network-listener port=' | grep 'admin-listener'  | head -1 | sed -e 's/.*listener port="//g' -e 's/".protocol.*//g')

        if [ "$admin_port" -gt 0 ]; then 
            echo "$admin_port"
            # ... подключаемся к этому порту и получаем список всех JDBC пулов 
$asadmin --host=localhost --port=$admin_port --passwordfile 'Path_To_FIle\password_file.txt' --user=admin << EOF | grep -ve "DerbyPool" -e "_TimerPool" -e "executed successfully" -e "for online help" | while read connection; do
list-jdbc-connection-pools
EOF
                echo -e "\tFlushing Pool: " $connection
                # чистим пул
$asadmin  --interactive=false --echo=false --port $admin_port --passwordfile 'Path_To_FIle\password_file.txt' --user admin <<EOF | grep -ve "for online help" -e "Command multimode" -e "executed successfully"
flush-connection-pool $connection
EOF
            done
        else
            echo "N/A"
        fi
    fi
done
 
Если статья была вам полезна - кликните на баннер или кнопку Donate :)

Популярные сообщения