Посты
Java DataBase Connectivity: мощь чистого SQL

Spring_Deep_6.11_site-5020-239eb9.png

Этот пост для тех, кто устал писать запросы в JDBC template и хочет мощи, которая есть в Spring Data JPA-репозиториях, но не может/не готов использовать JPA. А также для тех, кто устал разрабатывать сущности с JPA/Hibernate и хочет более душевного и близкого «к железу» SQL. Как ни странно, но для решения этих противоречивых с первого взгляда вопросов есть один способ — Spring Data JDBC.

X-files в Java: обфускация и виды шифраторов

Java_Deep_12-5020-17c8a3.10_site.png

Вы же знаете, что jar-файл это zip-архив? То есть, его можно unzip -d target my.jar распаковать и достать все class-файлы. А каждый class-файл это bytecode, который легко-легко можно декомпилировать и получить весь ваш проект с именами всех ваших классов и их переменных и методов. И кодом методов. То есть, совсем всё можно из jar-файла получить. Если, конечно, он не обфусцирован.

JMM: ошибки многопоточного доступа к данным

Java_Deep_9-5020-55bf9f.10_site.png

Принято считать, что многопоточность (multithreading) одна из самых сложных тем в программировании. В первой заметке мы постарались ответить на вопрос, почему так много разработчиков делают ошибки при создании приложений, которые работают более чем в одном потоке. В этой заметке разберём типы ошибок многопоточного доступа к данным: race condition и memory consistency errors. Но, перед тем как обсуждать ошибки доступа, давайте сначала разберёмся, что такое многопоточный доступ к данным.

Multithreading в Java: просто о сложном

java_Deep_5-5020-bb8540.10_site.png

Принято считать, что многопоточность (multithreading) — одна из самых сложных тем в программировании. Давайте разберёмся, почему так много разработчиков делают ошибки при создании приложений, которые работают более чем в одном потоке.

Нужна ли функция public static void main(String[] args){...} ?

Java_Deep_1-5020-576a84.10_site.png

На первый взгляд может показаться, что приложение без функции public static void main(String[] args){...} бессмысленно. Ведь его нельзя запустить. Точнее его нельзя запустить через вызов java -jar name.jar.

И тем не менее, многие Java-разработчики регулярно пишут такие приложения. И запаковывают их не в jar-файлы, а в war-файлы. Давайте сегодня с этими war-файлами и разберёмся.

HTTP-сессия в мире Java

JavaEE_Deep_26-5020-63a492.09_site.png

В любом веб-приложении одним из краеугольных вопросов является поддержка клиентских сессий. Платформа JavaEE не исключение и для этих целей в ней существует специализированный HttpSession API, доступ к которому есть у любого веб-приложения, развёрнутого в некотором сервлет-контейнере. Что же из себя представляют эти самые сессии?

CDI Interceptors

JavaEE_Deep_12-5020-1ade4a.09_site.png

В спецификации CDI предусмотрен механизм «перехватчиков», который позволяет реализовывать в прикладном коде приёмы аспектно-ориентированного программирования. Иначе говоря, разработчику становится доступна сквозная функциональность (cross cutting concerns), то есть прежде, чем обратиться к некоторому методу CDI-бина, у программиста появляется возможность выполнить предобработку, сам бизнес-метод и постобработку.

Для этих целей и существует механизм CDI Interceptors, причём применяется он не только для спецификации CDI, но и активно используется в технологии Enterprise JavaBeans.