1. Java / Говнокод #9964

    +72

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    17. 17
    18. 18
    19. 19
    private static Map<String, Connection> cachedConns =
            Collections.synchronizedMap(new HashMap<String, Connection>(0xA)
        {
            private static final long serialVersionUID = 7466291025126853439L;
    
            @Override
            protected void finalize() throws Throwable
            {
                super.finalize();
    
                for (Connection aConn : this.values())
                {
                    if (!aConn.isClosed())
                    {
                        aConn.close();
                    }
                }
            }
        });

    Плохо настроенный WebLogic не возвращает подключения СУБД обратно в пул.
    Из-за говно-админа и мне ничего больше в голову не могло прийти...

    Запостил: dwinner, 16 Апреля 2012

    Комментарии (8) RSS

    • WebLogic не знаю, но что мешает использовать свой пул? Скажем, DBCP?
      Ответить
    • а что мешает попинать админа, через начальство хотя бы.
      Ответить
    • Свой пул - лучше кофейку лишний раз попить, чем тратить время на баян, хотя тоже вариант. Попинать админа - хорошая идея. Самая лучшая идея - создать учетку на меня к Admin Console и самому все настроить, но типа разделение обязанностей и вся такая прочая чушь. Меня другое удивило: как человек, который 15-й год уже работает сист. администратором СУБД Oracle не может WebLogic настроить?
      Ответить
    • А что значит "не возвращает подключения СУБД обратно в пул"?
      Подключения в пул должно возвращать само приложение, а никак не не Weblogic.
      Ответить
      • При закрытии типа if (!conn.isClosed()) conn.close() один connection pool остается занят, а не уменьшает число свободных подключений в пуле. Если поставить число подключений 15 и 16 раз подключиться с разных клиентов, 16-й поток "обломится".
        Ответить
        • >>При закрытии типа if (!conn.isClosed()) conn.close()
          Не может быть.
          Метод isClosed и close работают ровно так как в документации. И на их работу не влияют настройки.

          >>Если поставить число подключений 15 и 16 раз подключиться с разных клиентов, 16-й поток "обломится"
          Если первые 15 клиентов всё ещё держат свои подключения (скажем, нетранзакционный datasource и они не вызвали close), то, разумеется, к 16-му прилетит птица обломинго.

          Изначально говорилось: "Плохо настроенный WebLogic не возвращает подключения СУБД обратно в пул.".
          Где именно weblogic не возвращает соединения? Можно пример?
          Ответить
          • Я тоже раньше думал, что не может, пока сам в админ-консоли не увидел. В документации написано, что он закрывает подключение, а про пулы app-серверов где сказано?!
            Ответить
    • А еще если закрытие первого соединения отвалится с исключением, то остальные все равно не закроются.
      Ответить

    Добавить комментарий