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

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

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

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

Любовь к программированию

- Ты хочешь, чтоб я от тебя ушла? Ты этого хочешь?! Этого да?!
- Нет. Не хочу я этого.
- А почему ты тогда относишься ко мне как чужому человеку?!
- Ты же со мной не разговариваешь. Я пробовал…
- Да! Я не разговариваю. Ты не приходишь домой потому что! Каждый день в одиннадцать! Не ешь дома!
- (пожимая плечами) Ты перестала меня кормить ужином. Я работаю до позднего вечера. Потом приходится идти в ресторан, чтоб не ложиться спать голодным. Пока закажешь , пока принесут..
- Да! Я перестала кормить тебя ужином! Мы спим порознь уже две недели! За что тебя кормить?
- Милая, ты не путай. Я сплю там же где всегда – на нашей кровати. А ты почему-то стелишь себе отдельно.
- Ты мог бы и попросить, чтоб я не стелила отдельно.
- Я просил. Ты не ответила ничего.
- Не ответила! Потому что я с тобой не разговариваю!
- Ну и чего мне делать? Я же не могу в одностороннем порядке с тобой разговаривать?
- Он еще спрашивает! Мог бы и извиниться.
- За что?
- Он еще спрашивает! Ты даже не замечаешь, когда обижаешь меня!
- Ну и на что ты обиделась? Скажи – я извинюсь.
- Я обиделась.. (more…)

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

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

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

SpringSource анонсировал Spring 2.5.6. Качаем господа!

Вчера, 2008-11-04, в 19:08 SpringSource анонсировал Spring 2.5.6. Источник: http://www.springsource.org/taxonomy/term/4

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

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