Статьи по меткам ‘ganymed’

Почему я не люблю фреймворки

Март 20th, 2012

Вернее, так. Есть фреймворки плохие, а есть фреймворки относительно хорошие. Хороших фреймворков я пока встречал мало.
В моём понятии хороший фреймворк — это библиотека/система, готовая работать 24/7 в течение нескольких лет без серьёзного сбоя.
Под серьёзным сбоем понимается сбой в работе приложения, после которого невозможно восстановить изначальный цикл его функционирования без перезапуска, а также утечка памяти.
Под нормальными сбоями я понимаю такие ситуации, как обрыв сетевого соединения, временная нехватка места на файловой системе, некорректный формат подаваемых на вход данных или иная временная занятость некоторого ресурса.

Теперь более подробно рассмотрим вопрос применительно к тем Java-фреймворкам, которые приходится часто юзать.

К относительно хорошим фреймворкам относятся java-библиотеки производства Apache. Код в них вылизан достаточно качественно, можно ловить все нештатные ситуации.

К совершенно плохим фреймворкам относится Hibernate. Эта сука готова жрать память до посинения, а также время на выполнение кучи однострочных SELECT’ов для выдёргивания массивов объектов из БД.

Также к хреновым фреймворкам относятся JDBC-драйверы Oracle. Есть у них такое поганое свойство, как мёртвое зависание на socketRead0, например, и баги с байндингами. Это, конечно, решается, но только плясками с бубном.

Относительно хороший фреймворк — это Ganymed SSH. Если бы не некоторые косяки опять же с тем же socketRead0, зависание на котором ну никак не отловишь без бубна, было бы вообще зашибись.

А вот ещё один хреновый фреймворк, к сожалению, — это Hyper SQL Database. Очень много багов, когда возникает необходимость держать эту базу 24/7. Подтверждение тому — ряд багов, созданных мной в рамках разработки одного-единственного проекта:
OutOfMemory error
Integrity constraint violation
SQLException with NullPointerException in cause
Invalid sequence number generation on UPDATE in MERGE stmt
Perfectly invalid date/time truncation in TRUNC() function
PSM (PL/SQL) routines do not see variables in MERGE statement

При этом задача примитивнейшая: по входным данным посчитать в БД статистику (через несколько инструкций MERGE) и сохранить в таблице, а потом её же выгрузить SELECT’ом в файл.

Sequoia — вообще непонятно зачем создан и для кого. Ужасный фреймворк, о нём я писал раньше: 1, 2, 3, 4.

Ну, и сама Java Virtual Machine — относительно хороший фреймворк. Сбоит хоть метко, но редко, и то ненамеренно положить удавалось только отдельные версии jdk.