Представим ситуацию, что у нас многопотоковое приложение, написанное на Java. Есть некий класс, выполняющий какое-либо конкретное действие с данными, например, отправку их по почте, а сами данные подготавливаются в другом месте кода в другом потоке. Перед отправкой данных нам необходимо как-то связаться с потоком, подготавливающим данные, дабы поймать момент, когда они будут готовы.
Пример 1. Простой, но неправильный пример
Регулярные выражения в Java? А почему бы и нет, как говорится. Время от времени неизбежно появляется необходимость их использовать, чтобы разбить строку на подстроки или, например, отформатировать данные. Сделать это можно несколькими разными способами.
Способ первый, он же самый простой, для несложных манипуляций - использовать встроенные методы класса String для работы с регулярными выражениями.
Пример 1.1. Разбивание строки на массив строк.
Каждый java-разработчик рано или поздно сталкивается с необходимостью переопределения метода equals, а соответственно и hashCode(). Кто-то пишет их сам, кто-то использует прибамбасы среды разработки. Например, я частенько использовал автоматическую генерацию в среде IDE Intellij IDEA (ALT + Insert / equals() and hashCode()), пока не нашел "красивое" решение, реализованное в библиотеке org.apache.commons - HashCodeBuilder() и EqualsBuilder().
Конечно, кто-то скажет, зачем использовать какие-то дополнительные библиотеки и классы, когда все можно самому написать. Ну, что сказать, на вкус и цвет...
В самом начале своего нелегкого пути по изучению Hibernate и фреймворка Spring для Java столкнулся с проблемой возникновения некого LazyInitException, когда пытался получить некий объект, ссылку на инстанс которого содержал другой, полученный от хибернейта.
Как всегда, горел очередной проект и читать документации особо было некогда, поэтому, пробежавшись быстро по поисковикам, уловил основной смысл данного поведения - при описания меппинга одного объекта по-умолчанию все его связи с другими объектами воспринимаются Hibernate как "ленивые". Иными словами, при наполнении данными объекта Group, который, к примеру, содержит в себе List users и связан с таблицей USER как One-To-Many, Hibernate не пойдет по этой связи наполнять данными список. Сделает он это лишь тогда, когда мы обратимся к этому списку. Здесь то и кроется корень проблемы - в моем приложении обращение к списку шло в тот момент, когда хибернейт сессия работы с базой, в которой я получил объект Group была уже закрыта. Отсюда и LazyInitException.
Есть несколько вариантов организации иерархии при работе с Hibernate ORM. На данный момент выделяют три подхода:
Остановимся на 3м варианте - One table per subclass, наиболее удачном на мой взгляд, т.к. в базе данных не будет никакой избыточности полей, как в первом варианте, и не будет проблемы масштабирования, как в варианте 2.
Итак, дано: Apache Http Server и Apache Tomcat. Задача - настроить связку между серверами, дабы можно было легко совмещать Java Web-приложения с другими веб-сервисами, работающими под httpd. В своем примере я использовал Apache 2 и Tomcat 6.
Начнем пожалуй.
1. Необходимо подключить к Apache модуль mod_jk, который будет являться связующим звеном между нашими серверами. Для этого загружаем mod_jk.so подходящей версии, кладем его в каталог с модулями Апача и в /etc/httpd/conf/httpd.conf прописываем строчки:
Простой пример, как можно отформатировать дату на jsp странице с помощью fmt taglib.
Давно собирался собрать коллекцию анти-паттернов, дабы самому просвятиться и другим помочь. Данную заметку буду периодически пополнять, по мере нахождения последних.
Итак, азы! :)
Конкатенация строк
Клонирование объекта бывает 2-х видов:
Чтобы объект можно было клонировать, он должен реализовывать интерфейс Сloneable (маркер). Использование интерфейса влияет на поведение метода (clone) родительского класса (Object). Таким образом, вызов метода MyType.clone() создаст новый представитель типа MyType. Это будет shadow клонирование:

При глубоком клонирование рисунок будет выглядеть, так:
Последние комментарии
1 неделя 3 дня назад
1 неделя 4 дня назад
1 неделя 4 дня назад
1 неделя 5 дней назад
1 неделя 5 дней назад
1 неделя 5 дней назад
1 неделя 5 дней назад
1 неделя 5 дней назад
1 неделя 5 дней назад
2 недели 6 дней назад