Как стать автором
Поиск
Написать публикацию
Обновить
202.47

Java *

Объектно-ориентированный язык программирования

Сначала показывать
Порог рейтинга
Уровень сложности

Java-ассемблер, мета-программирование и JPA

Время на прочтение20 мин
Количество просмотров9.6K
В этом топике хочу поделиться первым опытом по написанию системы генерации кода «на лету». В коде реализуются некоторые идеи, описанные в предыдущем топике, а сам код используется в одной старой, но работающей системе управления сайтами.

Краткая постановка задачи:
  • Есть набор виртуальных «классов» в понятии бизнес-пользователя. Например, «сайт», «папка», «новость», и т.д. Каждый из таких классов имеет набор полей (аттрибутов).
  • Пока что у нас нет наследования классов, а поля ограничены примитивными String/Integer/Long/Enum/Boolean, даже без multiple, но с возможными заданными значениями по умолчанию
  • Каждый класс записывается в отдельную таблицу, например, objects_sites, objects_news, objects_folder, etc. Таблица всегда содержит ID объекта, а также колонки для полей.
  • Нужно сделать так, чтобы загрузка этих объектов работала через JPA (Hibernate), с использованием необходимого кэширования/транзакций/Lazy-loading'а и других вкусностей, которые нам даёт JPA.

Для выполнения данной задачи использовалось:
  • В качестве баз данных — MySQL 5.0, InnoDB, три схемы базы данных (разные типы могут лежать в разных схемах, чтобы отделить системные типы от пользовательских)
  • Sun JDK 6.0
  • Tomcat 6 + JOTM 2.1.9 + Hibernate 3.5.0-Final (patched)
  • Для создания классов использовалась связка CGLib 2.2 (входящая в Hibernate) и ASM 3.2 (в Hibernate входит 3.1)

Читать дальше →

Sun Tech Days 2010 — продолжение…

Время на прочтение1 мин
Количество просмотров636
По возвращении из Петербурга уже успел заметить развернутые описания прошедших Tech Days. Спасибо ребятам, что выложили более или менее качественные фотографии, после которых свои «мыльные» фотокарточки и показывать не хочется.

Но раз уж пообещал продолжения фронтовых новостей, доведу дело до конца. Формат прежний — «плюсы-минусы-нейтрально».

Итак, день второй.
Читать дальше →

Мета-данные. На пути к идеалам управления моделями данных

Время на прочтение6 мин
Количество просмотров10K
О чём этот пост

  1. Это пост-обзор вариантов управления моделями данных, известных автору, на основе опыта, слухов, и чтения инструкций
  2. Также этот пост — попытка классификации существующих вариантов управления моделями данных
  3. Напоследок приводится идея и начальные штрихи в реализации системы управления моделями данных, которая не должна содержать недостатков предыдущих


Определения и ограничения

Предполагается, что читатель является (или когда-нибудь станет) разработчиком Enterprise Application, которому часто нужно писать быстро и качественно, но не боящегося лезть в дебри JPA/JTA/RMI чтобы «подкрутить напильником» особо тонкие места.

Данные — то, что хранится в базе данных приложения. Данные о клиентах, пользователях, заказах и т.п.

Метаданные — описание структуры данных. Описание того, какие типы объектов хранятся в базе данных, какие у них есть поля (аттрибуты, элементы), описание зависимостей между объектами. В общем случает типы могут наследовать атрибуты родительского типа, а один атрибут в общем случае может присутствовать у двух и более типов, несвязанных отношением наследования.

Читать дальше →

Sun Tech Days 2010 — как это было

Время на прочтение2 мин
Количество просмотров990
Вести с фронта Sun Tech Days 2010, Санкт-Петербург.
Итак, после 30 часов тряски в поезде мы на месте.
Сразу к делу, впечатления после почти подошедшего к концу первого дня.
Читать дальше →

JetBrains на Sun Tech Days 2010

Время на прочтение1 мин
Количество просмотров701
В этом году компания JetBrains принимает активное участие в Sun Tech Days. 8 и 9 апреля вы сможете встретиться с ведущими разработчиками наших продуктов на стенде JetBrains и послушать их доклады.
Читать дальше →

Отчет о DeadLock'ах в работающем приложении

Время на прочтение6 мин
Количество просмотров4.5K
Привет тебе хабражитель!
В данной статье, точнее примере я хочу показать как можно получить информацию о залоченных потоках Вашего многопоточного java приложения. Под катом будет представлен пример простейшей ситтуации DeadLock'а, а также способы получения информации о нем.
Под кат

Wicket: HelloWorld

Время на прочтение7 мин
Количество просмотров9.2K
Недавно занялся изучением замечательного фреймворка Wicket. К сожалению, в рунете информации о нем крайне мало и поэтому здесь я бы хотел вам показать некоторые его возможности. А за одно и записать чтобы самому не забыть.
Wicket — это фреймворк для написания пользовательских интерфейсов для веб приложений, который позволяет подавляющее большинство задач реализовать на java. Более подробно обо всех его преимуществах написано на оффсайте. Там же есть примеры, но лично мне они не очень понравились, поэтому заинтересовавшимся рекомендую полистать книгу (на английском) под названием «Wicket in action» (перевод полностью я врядли осилю, но некоторые вкусности оттуда покажу).
Читать дальше →

Google Annotations Gallery

Время на прочтение4 мин
Количество просмотров1.8K
The Google Annotations Gallery — новая open-source библиотека, которая предоставляет широкие возможности программистам для самовыражения. Вы не находите, что стандартные Java аннотации суховаты и безжизненны? Вам не хотелось поставить аннотацию LOL или Facepalm (?) Тогда, эта галерея для вас.

Исходный код: code.google.com/p/gag

Описание аннотаций


@AnimalsHarmedDuringTheMaking

Аннотация @AnimalsHarmedDuringTheMaking позволяет раскрыть факты о жестоком обращении с животными.
Copy Source | Copy HTML
  1. @AnimalsHarmedDuringTheMaking(
  2.     number = 1,
  3.     animal = "хомяк",
  4.     disclosure = "не кормил Fermie 2 дня чтобы закончить вовремя")
  5. public class ConstantTimePrimalityTest {

Читать дальше →

Java для профессионалов: задачи на знание спецификации

Время на прочтение3 мин
Количество просмотров5.9K
По ходу подготовки к сертификационному экзамену SCJP, а также при чтении в различных источниках нюансов использования языка Java, возникают множество различных вопросов. Также некоторые особенности языка кажутся совершенно нелогичными, однако так указано в спецификации языка, и каждый уважающий себя профессионал стремится к тому, чтобы знать эти мелочи.

Данный топик посвящен коротким примерам программ (или участков кода). Для каждой программы требуется ответить на простые вопросы: как она будет выполняться и что будет выведено на консоль после ее выполнения. Предполагается использование Java 1.6, если в задаче не указано иное.

Читать дальше →

Будущее построения архитектуры Java EE приложений становится яснее

Время на прочтение1 мин
Количество просмотров3.6K
Известный JavaEE архитектор-фрилансер недавно опубликовал свое видение будущего в построении архитектуры корпоративных приложений. Далее идет вольный перевод.

Java EE 6 и Spring 3 оказались очень похожи — как минимум архитектура и дизайн отличаются лишь в деталях. Не вижу отличий и в процессе разработки, где JPA и SessionBean-ы в Glassfish можно заменить технологиями Spring.

Spring также идет со своим сервером приложений, который с 7 октября 2008 является open source сервером с коммерческой поддержкой. Если вам понадобится получить патчи старых версий Spring — вам будет необходимо преобрести коммерческую поддержку от SpringSource/VMWare. Для серьезных проектов вы будете вынуждены преобрести два пакета поддержки — для сервера приложений от вендора и один от SpringSource, хотя этом случае одновременное использование Java EE 5/6 опровдать сложно. В перспективе я вижу два возможных варианта:
  • Развертывание Spring-а на проприетарный tc сервер
  • Развертывание Java EE 6 приложений без Spring-а
Обозначенная выше дилемма также справедлива и для проектов по миграции — стоит ли использовать стек Java EE, либо мигрировать на Spring. Это скорее стратегическая или политическая дилемма, нежели технологическая. Конечно, можно еще самостоятельно собирать и распространять Spring, однако такой подход недопустим в большинстве коммерческих проектов.

Я считаю, что будущее корпоративной Java очень чистое — мы полностью используем либо Spring, либо стек Java EE, но не эти технологии вместе.

См. также Oracle опубликовал планы развития Glassfish

Oracle опубликовал планы развития Glassfish

Время на прочтение2 мин
Количество просмотров1.9K
Oracle Glassfish roadmap

25 марта Oracle официально представил планы по развитию недавно преобретенного вместе с Sun Microsystems сервера приложений Glassfish. Самая важная новость — никаких изменений в работе сообщества над проектом не произойдет, Oracle заинтересован в дальнейшем развитии продукта.

Open source версия Glassfish остается, а в дополнение к ней Oracle будет поставлять свой Oracle GlassFish Server с преферансом и куртизанками со своей поддержкой, лицензированием и закрытыми дополнениями. Были опровергнуты утверждения о том, что прекратится поддержка кластеризации, проект станет закрытым для внешних разработчиков, Oracle не понимает Open source и т.д.

Планы по развитию затрагивают следующие аспекты: следующие релизы версий 2 и 3 через 100 дней (в основном интеграция с технологиями Oracle), векторы технологического развития Glassfish, интеграции с семейством Oracle Fusion Middleware, анонс версий 3 и 4.

Подробности...

Подсчёт времени выполнения метода через аннотацию

Время на прочтение8 мин
Количество просмотров20K
Во многих проектах требуется посчитать время, которое затратил тот или иной метод. Для этого можно вручную сохранять значение System.currentTimeMillis() и после метода вычислять затраченное время. Когда методов много это становится не очень удобным.
Поэтому я решил написать простенькую аннотацию, которая бы считала время выполнения метода. Попытавшись найти информацию в интернете, понял, что её по данной теме очень мало. Придётся как-то выкручиваться, собирая информацию по крупицам.
Читать дальше →

Java EE 6. Обзор JPA 2.0, часть 2: Коллекции

Время на прочтение3 мин
Количество просмотров24K


image

Продолжение серии. Ранее: Java EE 6. Обзор JPA 2.0, часть 1: Введение. В данной статье я продолжаю рассматривать изменения в JPA.

Встроенные коллекции

Введенный в JPA 2.0 компонент ElementCollection позволяет задавать политики отображения для необычных в JPA 1.0 видов коллекций: коллекций embeddable объектов, либо коллекций «простых» типов (Integer, String и т.д.). Также это компонент используется при в определениях отношений с Map, в роли ключа которого выступают любого рода объекты, а в роли значения — embeddable или «простые» объекты.

Значения ElementCollection всегда хранятся в отдельных таблицах, которые задаются аннотацией @CollectionTable. CollectionTable отпределяет имя таблицы и @JoinColumn или @JoinColumns в случае составного первичного ключа.
Читать дальше →

Ближайшие события

Java EE 6. Обзор JPA 2.0, часть 1: Введение

Время на прочтение2 мин
Количество просмотров16K

Пожалуй, наибольшее количество изменений с выходом спецификации Java EE 6 было привнесено в JPA (Java Persistence API). В серии статей, начиная с этой, я планирую рассказать подбробно о каждом из нововведений.

Введение


Технология JPA является абстракцией над JDBC и позволяет быть независимым от SQL. Все классы и интерфейсы JPA расположены в пакете javax.persistence, основными составляющими технологии являются:
  • ORM (механизм объектно-реляционного отображения);
  • Entity manager API — позволяет осуществлять базовые операции CRUD;
  • JPQL и Criteria API — механизмы извлечения данных;
  • Управление транзакциями и блокировками (как с использованием JTA, так и без);
  • Механизмы обратных вызовов и listener-ов.

Читать дальше →

Java EE 6. Что нового в Servlet API 3.0

Время на прочтение3 мин
Количество просмотров22K


С выходом Java EE 6 на ряду со значительными изменениями в JPA 2.0 спецификации сервлетов 3.0 также притерпела ряд улучшений: упростилась разработка и процедура развертывания, конфигурирование стало более удобным, появилась поддержка асинхронных запросов и улучшилась модель безопасности. Далее я попытаюсь осветить основные изменения в API.

Программирование и развертывание сервлетов упростилось главным образом за счет введения аннотаций для декларирования сервлет (@WebServlet), фильтров (@WebFilter), листнеров (@WebListener) и ограничений безопасности (@ServletSecurity). Таким образом, и дескриптор развертывания web.xml стал опциональным элементом. Обращаю внимание, что сами компоненты Servlet API не стали POJO, привычную иерархию интерфейсов и классов никто не отменял. Также добавилась аннотация для поддержки загрузки файлов @MultipartConfig и для установки параметров инициализации @WebInitParam.

Пример Hello World сервлета
package net.ismailov.tests;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;

@WebServlet(name="hw", urlPatterns = "/hello_world")
public class HelloWorld extends HttpServlet{

  public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

    PrintWriter writer = response.getWriter();
    writer.println("<h1>Hello, World!</h1>");
    
  }

}


Читать дальше →

Настраиваем Tomcat для работы с JSF2 и другими компонентами Java EE 6

Время на прочтение7 мин
Количество просмотров20K
Данная статья описывает по шагам как настроить Tomcat (на текущий момент версия 6.0.26) на работу с разными компонентами Java EE 6.Вы можете пропустить чтение этой статьи и сразу получить настроенный Tomcat и пример приложения.
подробности

Пробуем 3D с помощью jMonkeyEngine

Время на прочтение6 мин
Количество просмотров29K
Практически каждый, кто занимался геймдевом, понимает, что наилучшей производительности в этой области, по понятным причинам, можно добиться лишь на языках С/С++/asm. С данным утверждением в этой статье я спорить не буду, да и раньше даже как-то не задумывался о создании realtime-игр на других языках. Однако, игры бывают разные, и надо отдавать себе отчёт в том, насколько оправданы трудозатраты на реализацию очередного продукта. Если проект монструозен, с «тяжёлой» графической составляющей, даже после проведения весьма агрессивной оптимизации всё равно требующий от конечных пользователей (геймеров) топового железа на борту, то особых конкурентов на данный момент среди языков разработки у С/С++ в этом случае нету. Но если игрушка — не более чем обыкновенная казуалка, для запуска которой и нетбука будет достаточно, то можно позволить себе куда больший простор для фантазии в вопросе выбора инструментов для разработки. Исходя из этого принципа, в данной статье попробуем разобраться, чем может похвастаться в области геймдева такой, казалось бы, не совсем подходящий для этого, но удобный в целом язык Java, на примере движка jME.
Читать дальше →

Видеоурок — Java + Intellij IDEA 9 + GWT 2.0 + Apache Tomcat

Время на прочтение1 мин
Количество просмотров11K
Записал видеоурок, думаю многим начинающим он пойдёт на пользу и ответит на многие вопросы.

image

Скачать в разрешении 1280x800 можно здесь Размер 32 мегабайта.

Вы узнаете, как создать приложение на GWT в среде Intellij IDEA 9. Мы напишем простой асинхронный запрос, сгенерируем число на сервере, отправим ответ клиенту и выведем результат на экране.

Далее, всё задеплоим на сервер Apache Tomcat и покажем работающий пример.

Конечно, многие нюансы опущены. Всё-таки урок для начинающий гвт-шников!
Удачи в программировании!

ПС. Один момент сглючил при сжатии видео, когда нужно было скопировать библиотеку gwt-servlet.jar с папки GWT 2.0 в папку WEB-INF/lib.

Введение в Spring MVC с аннотациями

Время на прочтение4 мин
Количество просмотров82K
Вчера начал разбираться со Spring MVC 3.0.Искал статьи на Хабре, нашел пару штук.Правда они были без аннотаций.
Цель этой статьи написать Hello World c использованием возможностей писать конфиги прямо в коде, благодаря аннотациям.Ну что приступим.
Читать дальше →

Вклад авторов