Как проверить утечку соединения с помощью регулярного выражения? - PullRequest
1 голос
/ 21 апреля 2010

Я должен проверить утечку соединения в моем приложении, то есть открыть соединения, которые не были закрыты.

После поиска, после того как я узнал, что тысячи раз были открыты соединения, но я не могу вручную перейти к каждому фрагменту кода и проверить наличие соединения.

Я думаю, это могло бы быть возможно при использовании регулярного выражения, но на самом деле я не настолько хорошо разбираюсь в регулярных выражениях, что мог бы написать его.

Пожалуйста, предложите регулярное выражение для проверки номера java-файлов на предмет того, было закрытое соединение закрыто или нет.

Мой кодовый паттерн выглядит примерно так.

    try {
        /*
         Some code goes here
         */ 

     con = EJBUtil.getConnection(JNDI_NAME);

        /*
         Some code goes here
         */ 
         } 
    finally 
       {
            /*
              Some code goes here
           */ 
            DBUtil.close(con);
     or
         closeConnection.close(con);
           /*
            Some code goes here
           */ 
      } 

Ответы [ 3 ]

2 голосов
/ 21 апреля 2010

регулярное выражение не очень хороший инструмент. Просто найдите в своих файлах getConnection, а затем найдите close для соответствующей переменной.

1 голос
/ 21 апреля 2010

В качестве первого среза выполните FindBugs или PMD над своим кодом. Оба из них имеют правила для обнаружения исходного кода, в котором ресурсы базы данных не закрыты или не могут быть должным образом закрыты. И они, вероятно, выделят множество других проблем, которые стоит исправить.

0 голосов
/ 21 апреля 2010

вы можете написать скрипт для подсчета открытых и закрытых предложений
например, этот (скрипт perl) выводит файлы со строками, в которых открытая скобка не была закрыта:

#!/usr/bin/perl -w
# brackets.pl: output filenames with unmatched brackets (with hint to linenumber)
# example: ./brackets *.c
while(<>)
{
    if(!defined($f) or $f ne $ARGV){$f=$ARGV;$l=0}
    $l++;
    push @ar,"$f: $l" if(/{/);
    pop @ar if(/}/)
}
print"$_\n" for(@ar);

Вы можете заменить скобки своими регулярными выражениями

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...