Обновить
155.48

Java *

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

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

Облегчаем вес приложения при деплое на сервер приложений Apache Tomcat

Время на прочтение2 мин
Охват и читатели5.2K
Очень часто вес приложения, которое мы выкладываем на сервер достигает неприлично больших размеров из-за включения в него всех нужных зависимостей. У меня в конечном итоге приложения занимают от 20 до 50 метров. Деплой таких war-ов на удаленный сервер, на Tomcat, дело не одной минуты, а при плохой связи и вовсе становится проблематичным. Класть библиотеки в ${tomcat.home}/lib дело очень неблагодарное и зачастую опасное. Мы на фирме немного погуглили и нашли очень приятное решение на DZone. Хочу с вами поделиться…
Читать дальше →

Аннотации в JAVA: обзор синтаксиса и создание собственных

Время на прочтение4 мин
Охват и читатели270K
Статья ориентирована больше на новичков, или тех, кто еще не работал с данным механизмом в языке. Я постараюсь рассказать, что это такое, зачем они нужны, и как можно самому создавать удобные для себя аннотации.

Аннотации представляют из себя дескрипторы, включаемые в текст программы, и используются для хранения метаданных программного кода, необходимых на разных этапах жизненного цикла программы.
Информация, хранимая в аннотациях, может использоваться соответствующими обработчиками для создания необходимых вспомогательных файлов или для маркировки классов, полей и т.д.
Читать дальше →

Участие в работе над JavaFX

Время на прочтение1 мин
Охват и читатели2.2K
Stephen Chin, автор проекта JFXtras, предлагает желающим возглавить проект. Аргументирует своё решение отсутствием времени из-за работы над книгой по JavaFX.

image

Участники проекта JFXtras тесно сотрудничают с Oracle (либо являются штатными работниками Oracle). JFXtras служит инкубатором для новых компонентов JavaFX, часть из них войдёт в официальный релиз JavaFX 3.0.

Ссылка на письмо С.Чина — http://groups.google.com/group/jfxtras-users/browse_thread/thread/437d8f8f25faafc2. В комментариях к его письму можно предложить своё участие, если кому интересно.

Создание spring beans из обычных классов и юнит тесты

Время на прочтение3 мин
Охват и читатели7.3K
У нас и rich client, и сервер активно используют Spring. И очень быстро возникла проблема — как использовать спринг бины из обычных классов (которые сами — не бины).

Сначала возникли две идеи — передавать им нужные бины как аргументы в конструкторе или использовать какое то статическое поле для хранения Spring context.
Первая идея была признана порочной. Получается, что ныжные сервисы надо тянуть через длинную череду конструкторов.
Вторая идея тоже была признана порочной — возникает вопрос кто и когда будет инициализировать это поле и что будет происходить с юнит тестами.

Вскоре я нагуглил в интернетах такой красивый вариант:
Читать дальше →

Почему IDEA лучше Eclipse

Время на прочтение5 мин
Охват и читатели216K

Священный спор


Принято считать, что есть «вечные» вопросы, на которые нет правильного ответа. Например, что лучше: Windows или Linux, Java или C#; Чужой против Хищника или Чак Норрис против Ван Дамма.

Одним из таких холиваров считается выбор лучшей IDE для Java:


Идут постоянные споры о том, в которой из них больше плагинов, горячих клавиш и т.д. Различий так много, что трудно выбрать, какие из них важнее, и все сходятся в одном: обе IDE примерно одинаковы по своим возможностям, и выбор одной из них — это дело вкуса.

Так вот, я утверждаю, что это не просто дело вкуса. Есть объективные причины, почему
Intellij IDEA однозначно лучше, чем Eclipse.

Подчёркиваю, мы сейчас рассматриваем обе среды именно как Java IDE.

Я не буду приводить кучу мелких различий вроде плагинов, горячих клавиш и т.п. — этому посвящены многие страницы в интернете, а объясню лишь одно, самое главное отличие. Как правило, о нём не знают ни идеяшники, ни эклипсофилы, ибо первые привыкли к нему и не знают, что в других IDE этого может и не быть, а вторые привыкли жить без него, и даже не догадываются, что может быть лучше. Более того, эклипсники его не замечают, когда пробуют IDEA ради интереса, ибо привыкли работать по-старому.

Итак, главное различие между IDEA и Eclipse

Java Day 2012. Впечатления

Время на прочтение2 мин
Охват и читатели1.9K
Хочу вам рассказать немного о Java Day, который случился 10 февраля. Сразу поясню, почему публикую так поздно — первоначально идея была в том, чтобы сравнить Java Day с семинаром Red Hat (читайте в моём следующем посте), но мероприятия оказались настолько разными, что писать о них «вперемешку» нет никакого смысла. Вообще-то, пост будет не столько описанием того, что там происходило (такое уже публиковалось), сколько о впечатлениях, которые у меня остались.

Я уже посещал ранее «Sun Tech Days», но тогда мероприятие проходило «под крылом» Sun, поэтому, честно говоря, я ехал посмотреть, насколько Oracle всё испортила. :-) К счастью, сильно разочароваться мне не пришлось, хотя влияние нового владельца Java всё же было очень заметно.
Читать дальше →

Debug методов в Documentum Process Builder’е

Время на прочтение3 мин
Охват и читатели2.3K
Добрый день!
По роду работы (Documentum developer) столкнулся с необходимостью отлаживать процессы, которые создаю в Process Builder. Нашёл простой способ это сделать. И вот этим знанием хотелось бы поделится с разработчиками Documentum, которые наверняка присутствуют на Хабре.

Введение


Рассмотрим процесс локальной отладки метод, вызываемых активностями в Process Builder’е (PB) в режиме в Debug. Причины этого очевидны – для отладки и проверки на минимальную работоспособность методов не нужно «заливать» их в Java Method Server (JMS) с его рестартом. И ладно если с ним работаешь только ты один, а если несколько человек одновременно разрабатывают свои методы?
Читать дальше →

Немного про повторное использование объектов

Время на прочтение1 мин
Охват и читатели2.6K
Недавно я наткнулся на блог, который ведет Peter Lawrey. Там можно найти интересную информацию, которая касается производительности кода под JVM.

Там я нашел непривычный подход, который состоит в повторном использовании объектов. Непривычен он по нескольким причинам:
  • Общепринятое мнение, что создание объектов сейчас настолько быстрое, что не стоит обращать на него внимание
  • Этот подход редко где используется, и на это должны быть причины.

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

Kotlin теперь OpenSource

Время на прочтение1 мин
Охват и читатели2.3K
Сегодня компания JetBrains объявила о доступности исходных текстов языка программирования Kotlin, который предназначен для разработки на платформах Java и JavaScript. В дополнение был предоставлен доступ к сборкам компилятора, стандартным библиотекам Kotlin, инструментам сборки (интеграция с Ant, Gradle, Maven), и плагину для Intellij Idea. Ранее стала доступна Веб-демо версия Kotlin.
Читать дальше →

JetBrains показали исходные коды Kotlin

Время на прочтение1 мин
Охват и читатели3K
В июле прошлого года JetBrains анонсировали новый язык программирования Kotlin. Сегодня, JetBrains выложили исходные коды этого языка программирования в Open Source. Теперь пощупать новинку могут все желающие.
Читать дальше →

Непрерывный мониторинг JVM с помощью Zabbix

Время на прочтение10 мин
Охват и читатели58K
Предположим, у вас есть большое приложение написанное на Java. Это может быть web-сервлет размещенный в контейнере или standalone-сервис. В процессе разработки (да и во время эксплуатации) возникает необходимость отслеживать процессы, протекающие в JVM: работу garbage collector, использование памяти, жизненный цикл потоков, а так же иные специфичные для вашего проекта показатели посредством MBean. Самый простой вариант — использовать профилировщик. Но увы, проблемы не случаются по расписанию, и невозможно заранее знать, когда нужно подключить профилировщик, а держать его постоянно включенным тоже не вариант. В таких случаях идеальное решение — непрерывный мониторинг. О нем и пойдет речь. Но для начала пара слов о классической профилировке.
Читать дальше →

Размер Java объектов. Используем полученные знания

Время на прочтение5 мин
Охват и читатели15K
В предыдущей статье много комментаторов были не согласны в необходимости наличия знаний о размере объектов в java. Я категорически не согласен с этим мнением и поэтому подготовил несколько практических приемов, которые потенциально могут пригодится для оптимизации в Вашем приложении. Хочу сразу отметить, что не все из данных приемов могут применяться сразу во время разработки. Для придания большего драматизма, все расчеты и цифры будут приводится для 64-х разрядной HotSpot JVM.

Денормализация модели

Итак, давайте рассмотрим следующий код:
class Cursor {
    String icon;
    Position pos;
    Cursor(String icon, int x, int y) {
         this.icon = icon;
         this.pos = new Position(x, y);
    }
}
class Position {
    int x;
    int y;
    Position(int x, int y) {
        this.x = x;
        this.y = y;
    }
}

А теперь проведем денормализацию:
class Cursor2 {
    String icon;
    int x;
    int y;
    Cursor2(String icon, int x, int y) {
        this.icon = icon;
        this.x = x;
        this.y = y;
    }
}

Казалось бы — избавились от композиции и все. Но нет. Объект класса Cursor2 потребляет приблизительно на 30% меньше памяти чем объект класса Cursor (по сути Cursor + Position). Такое вот не очевидное следствие декомпозиции. За счет ссылки и заголовка лишнего объекта. Возможно это кажется не важным и смешным, но только до тех пор, пока объектов у Вас мало, а когда счет идет на миллионы ситуация кардинально меняется. Это не призыв к созданию огромных классов по 100 полей. Ни в коем случаем. Это может пригодится исключительно в случае, когда Вы вплотную подошли к верхней границе Вашей оперативной памяти и в памяти у Вас много однотипных объектов.
Читать дальше →

Java DNS API, Wikipedia и twitter-марафон в одном флаконе

Время на прочтение5 мин
Охват и читатели2.2K
Некоторое время назад я решал задачу автоматической покупки домена. Нужно было оформить в виде библиотеки (jar и файл настроек), которая использовалась бы в корпоративном приложении на Java. Я начал поиски DNS провайдеров с public API. Желательно, чтобы API были попроще, и домены подешевле — такой баланс оказалось не просто найти.
Читать дальше →

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

Тестирование в Java. Spock Framework

Время на прочтение15 мин
Охват и читатели72K

В предыдущих статьях на примерах JUnit и TestNG я упоминал о test-driven development(TDD) и data-driven testing(DDT). Но есть еще один активно набирающий популярность подход, behaviour-driven development(BDD). Это такое развитие TDD техники, при котором на тест смотрят не как на тестирование каких-то компонентов системы, а как на требования к функционалу. Если TDD оперирует такими понятиями, как тест или метод, то для BDD это спецификация и требования. Про эту технику уже говорили на хабре ранее:

Этот подход применим используя и JUnit, и TestNG. Но есть и другие инструменты заточенные именно под BDD. В этой статье я расскажу про такой фреймворк. Называется он Spock Framework и сочетает в себе не только принципы BDD, но и достоинства Groovy. Да-да, именно Groovy. И хотя используется Groovy, используется он и для тестирования Java кода. Примерами использования могут служить Spring, Grails, Tapestry5. Интересно? Тогда читаем дальше.
Читать дальше →

SOAP-сервер на Java при участии Apache CXF и Spring

Время на прочтение7 мин
Охват и читатели69K
imageЗа последнее время появилось несколько статей, рассказывающих о протоколе SOAP, а также описывающих процесс создания сервера на различных языках и платформах. Продолжим тему. В этой статье будет описываться создание сервера на языке Java с использование Apache CXF и Spring Framework. Предполагается, что читатель уже имеет общее представление об упомянутом протоколе, а также о работе с ant и maven. Для того, чтобы сделать задачу немного интереснее, добавим начальное условие: дана WSDL-схема, описывающая веб-сервис. Итак…
(Картинка из статьи на Wikipedia.)
Читать дальше →

Swing. Десять полезных простых вещей

Время на прочтение4 мин
Охват и читатели73K
image

Хочу поделиться недавним опытом разработки апплетов на Swing и рассказать про подводные камни, приемы найденные и использованные в процессе работы.

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

JTable и Serializable или таблицы в Java и танцы с бубном при сохранении объектов в файлы

Время на прочтение8 мин
Охват и читатели30K

Введение


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

В общем, я поставил перед собой не сложную задачу — создать таблицу, которую мог бы сохранять в файл как объект и паралельно отслеживать введенные пользователем данные подсвечивая ошибки и упрощая общение с таблицей моей программы путем подсвечивания наиболее важных элементов таблицы. Так-как я сторонник программирования по принципу пошаговой отладки при написании кода, наличие готовых кусков стабильного кода в сети Интернет, было для меня очень важным… Но… После тщательных поисков, экспериментально было установлено
Читать дальше →

Будни программиста или редкий случай ошибки в компиляторе

Время на прочтение1 мин
Охват и читатели1.7K
Имеем следующий код:

1    class A {
2        
3     private B line;
4   
5     public void foo() {
6       for (Integer line : line.getElements()) {
7    
8       }
9     }
10    }
11    
12    class B {
13    
14      List<Integer> getElements() {
15         return null; // doesn't matter
16      }
17    }


Вопрос: скомпилируется ли код?
Ответ: должен, но не будет

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

Multithreading in practice

Время на прочтение9 мин
Охват и читатели36K
Нашел как-то на stack overflow вопрос (link).
Need to create java CLI programm that searchs for specific files matched some pattern. Need to use multi-threading approach without using util.concurrent package and to provide good performance on parallel controllers.
Перевод
Нужно написать консольную программу, которая ищет файлы по какому-то паттерну. Программа должна быть многопоточная, но нельзя использовать пакет util.concurrent. Требуется добиться максимальной производительности.


В общем идея в принципе была не сложная. Т.к. по условию нельзя использовать util.concurrent, то надо реализовать свой пул потоков, плюс написать какие-то таски, которые в этом пуле потоков будут крутиться.
Так же я не был уверен в том, что при многопоточном использовании IO будет увеличение производительности.
Читать дальше →

Из Басры в Рим. Преобразовываем арабские числа в римские

Время на прочтение3 мин
Охват и читатели25K
Доброе время суток, Хабраюзер.

Разрабатывая в основном для платформы J2ME, я всегда старался вносить какие то изюминки в свои проекты. Так, однажды, мне понадобилось выделить пункты меню.

Стандартное решение, через тире или пронумеровав их, использовать не очень хотелось, но другие варианты тогда у меня отсутствовали. Обдумывая как бы лучше оформить эти пункты, я случайно наткнулся на свою старую школьную тетрадку по истории, в которой пункты были пронумерованы с использованием римских цифр. Бинго!

Стоит признаться, на то время моих познаний в римских цифрах хватало только для подсчета до второго-третьего десятка. Что вообще то для нумерации пунктов должно было хватить. Но как любой программист, захотелось иметь готовое решение, которое смогло бы переводить любые целые десятичные арабские числа в эквивалентные им римские.
Читать дальше →

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