Преждевременная оптимизация является первопричиной всех бед в программировании. Дональд Кнут

Брюс Эккель. “Философия Java”, 4-е издание

Для тех кто в танке, хочу сообщить, что вот уже как несколько месяцев мы имеем возможность читать шедевр Брюса Эккеля “Философия Java” в 4-ом издании на русском языке. Для информативности привожу аннотацию: Java нельзя понять, взглянув на него только как на коллекцию некоторых характеристик, — необходимо понять задачи этого языка как частные задачи программирования в целом. Эта книга — о проблемах программирования: почему они стали проблемами и какой подход использует Java в их решении. Поэтому обсуждаемые в каждой главе черты языка неразрывно связаны с тем, как они используются для решения определенных задач. Эта книга, выдержавшая в оригинале не одно переиздание, за глубокое и поистине философское изложение тонкостей языка считается одним из лучших пособий для программирующих на Java. В четвертом издании автор постарался полностью интегрировать усовершенствования Java SE5/6, включить и использовать их во всей книге.

Просмотрев книгу за 5 минут, могу сказать слудующее: судя по картинкам :) в книге мало что изменилось, те же лампочки, те же UML диаграммы, а вот по тексту – хз, ещё не читал. Цена книги тоже не очень радует, стоит в районе 160 едениц украинской девальвирующей гривны. Хочу обратить Ваше внимание на то, как правильно нужно подходить к развитию бизнеса в сфере IT ;) внимательно рассмотрев обложку книги и прочитав 6-ю страницу ;)

А вы уже прочитали мегахит всех времён и народов “Философия Java“, 4-е издание?

Какими должны быть EntityBean’ы?

Вот уже в который раз мне пришлось исправлять ранее написанные сущностные бины (в моем случае это OpenJPA) таким образом, что бы они соответствовали следующим требованиям:

  1. Каждый класс должен быть объявлен с модификатором public
  2. Каждый класс должен реализовывать интерфейс Serializable
  3. Каждый класс должен иметь публичный конструктор без аргументов
  4. Если класс является внутренним, он должен быть статическим
  5. Метод equals должен быть реализован таким образом, чтобы он обеспечивал уникальность сущности в соответствии с теми полями, которые непосредственно обеспечивают уникальность в таблице. (more…)

ORM и подводные камни реализации equals и hashCode.

Думаю каждому, кому приходилось работать в плотную с ORM (аля Hibernate, TopLink, OpenJPA, …), приходилось сталкиваться с подводными камнями при реализации классов. Тоже самое случилось и со мной, когда мне поручили искать бажину в одном из наших приложений …. окна дебага поглотили меня не на один час… Проблема заключалась в том, что при вызове утильного метода ListUtils.subtract(list1, list2) (данный метод исключает list2 из list1) на выходе получалось совсем не то что ожидалось, а получалось так потому, что лажа скрывалась в реализации метода equals. Просто не нужно в equals обрабатыать ВСЕ поля класса, ну не нужно, я Вас умоляю. В моём случае в equals обрабатывалось поле lastUpdated – о чём это говорит, думаю Вы догадываетесь. Именно по этой причине некоторые классы входящие в список list2 не исключались из списка классов list1, которые были детачены ранее. Плюс ко всему, старайтесь реализовывать метод equals таким образом, что бы он обеспечивал УНИКАЛЬНОСТЬ сущности в соответствии с теми полями, которые непосредственно обеспечивают уникальность в таблице! (more…)

Инициализация “static property” в “Spring application context configuration”

В проекте, над которым я работаю в данный момент, возникла необходимость инициализации статических свойств (в моем случае это Axis – org.apache.axis.AxisProperties) при формировании спрингового контекста. Закатав рукава с криками “Да это как два байта переслать” сразу же возник следующий вопрос: “Как в Spring application context configuration статическому методу передать параметры ?” (more…)