JMX RMI and Google Code Search

Рубрика: Development, Google, Java | 22 March 2007, 10:34 | juriy

Уфф, вот за что люблю свою работу, так это за те моменты, когда после длительных и изнурительных мучений кусочек кода оживает и начинает работать так как надо.

В этой заметке хочу рассказать про маленький Success Story: как я писал Hello World в стиле JMX + RMI. (Hello World’ы становятся все страшнее и страшнее). И про то, как google code search помог решить проблему в коде.

[Далее...]

JasperReports Video Kick-Off

Рубрика: Development, JasperReports, Java | 16 March 2007, 20:53 | juriy

После работы было весьма творческое настроение, поэтому натворил видеодемку – как начать работать с JasperReports в среде Eclipse. Все знают, что в любом деле самое сложное – это первый удачный шаг. Надеюсь демка поможет вам без труда начать использовать одно из наиболее мощных средств создания отчетов – JasperReports.

Вот ссылка на видео. Если будет интерес – кину еще пару туториалов.

Смотреть видео | Загрузить ролик (в SWF)

What non-Java language are you most interested in running on the JVM?

Рубрика: Development, Groovy, Java | 7 February 2007, 14:17 | Vadim Voituk

На Java.net завершился опрос “Какой не Java-язык вы хотели бы запускать на платформе JVM?”.

Я ожидал что будет очередное флеймообразующее обсуждение из серии “какой язык лучше”, но так не случилось.

Показательно, что по результатам лидирует Groovy. Но этого наверное и стоило ожидать в связи с растущей популярностью “рельсовых” web-фреймворков и как результат повышеным интересом к GRails.

Удивило, что организаторы опроса добавили в список языков Visual Basic, и ещё больше удивило что почти 5% отпрошенных отдали ему свои голоса. Куда катится этот мир!

Среди предложенных пользователями вариантов мелькали Scala, Scheme, F3, C, E, K, Fortress, Fortan, Beanshell, OCaml, Haskell, Lisp, Pnuts, Smalltalk, Fortress и даже Delphi/Object Pascal вместе C# (мсье знает толк в извратах).
Хорошо, что ещё никто brainf*ck не предложил :)

Догадайтесь за какой голосовал я?

P.S. Помогите найти ссылочки на остальные языки!

What is groovy

Рубрика: Development, Groovy, Java | 26 January 2007, 18:31 | Vadim Voituk

Около полугода назад я впервые познакомился с Groovy – динамическим языком для платформы Java.
Он включает разнообразный syntax-sugar (как бы так правильно перевести?) из Python, Ruby, Smalltalk но при этом использует всю мощь JRE и близкий к Java синтаксис.
Вариантов для использоавния такого чуда техники масса: от написания рабочих простеньких утилит и shell-скриптов, до продуктивной разработки web-приложений, тест-кейсов, и сценариев сборки.
Кстати для последних двух задач у Groovy есть встроенные средства: поддержка Ant и JUnit на уровне языка.
Т.к. Groovy компилируется в .class – файлы, то связать поделки на Groovy с Java-программой труда не составляет.
Таким образом проект может быть запрототипирован на Groovy, а потом, при необходимости, понемногу заменять его Java-кодом.

Программа HelloWorld на Groovy будет выглядеть так:

println "Hello world!" // ";" можно не ставить 

Компиляция

groovyс Hello.groovy

На выходе получаем Hello.class
Запуск

groovy Hello

Т.к. в динамических языках фаза компиляции часто опускается, достаточно просто

 groovy Hello.groovy

По аналогии с Python у Groovy есть графическая (groovyConsole) и текстовая (groovysh) консоль.
Ввод команд в консоль необходимо завершать вызовом команды “go”.
Также достаточно интересной мне кажется команда “inspect” – открывает Groovy Object Browser на последней выполненой операции – такая себе минимальная IDE.

Но это все мелочи жизни.
Самое интересное в Groovy это поддержка на уровне синтаксиса списков, хэш-таблиц и замыканий:

[ 10, 20, 40, "Vadim", "Hello" ].each({println it});

или ещё веселее

["Brett":100, "Pete":"Did not finish", "Andrew":86.87934 ].each{it,val ->
println it  + "=>" + val
}

И под конец хотелось бы добавить о возможности доступа к членам класса а-ля JavaBeans (вылетело из головы название термина) и передаче значений параметров в конструктор.

import javax.swing.*
def x = new JFrame(title:"Hello", size:[200, 300],
defaultCloseOperation:JFrame.EXIT_ON_CLOSE)
x.visible = true

Для “затравки” приведу ещё ссылку на статью “GUI in IronPython, Groovy and JRuby“, предлагается построить простенький GUI на 3х скриптовых языках, а также ссылку на колонку “Practically Groovy” на сайте IBM.

Метки в Java – прозрение

Рубрика: Development, Java | 11 January 2007, 11:12 | Vadim Voituk

Сегодня утром был искренне поражен узнав что в Java есть метки.
Да-да, именно те самые метки какие есть в других языках и на какие можно “делать goto”.
К моей огромной радости оказалось, что ненавистного оператора goto все-таки в Java нет.
Но есть возможность выполнить continue или break с указанием метки.
continue <label> – это безусловный переход к началу блока (почти goto).
break <label> – это выход из блока кода помеченного меткой.
Практичных применений этому я пока не нашел но подозреваю, что можно использовать например выхода из набора вложенных циклов:

public class Test {

  public static void main(String[] argv) {
    lab1: for (int i=0; i<10; i++) {
      for (int j=0; j<10; j++) {
        if (j>=5 && i>5)
          break lab1;
        System.out.println(i + " / " + j);
      }
    }
  }

}

2 news from OnJava.com

Рубрика: Google, Java | 12 December 2006, 10:08 | Vadim Voituk

Google со своим GWT присоединяется к Eclipse Community и выпускает его по Apache Software License, а Джеймc Гослинг после выхода Java под GPL и релиза JDK6.0 Mustang пишет письма в Java community.
От второй новости чуть слезу не пустил :)

Tomcat resource usage monitoring using jConsole

Рубрика: Development, Java | 7 December 2006, 11:21 | Vadim Voituk

Ни для кого не секрет что серверные Java-приложения требуют под себя относительно много оперативной памяти, а OutOfMemoryException достаточно частое явление в J2EE среде.
Потому мониторинг загруженности сервера является достаточно необходимой задачей.

Самым примитивным методом мониторинга является *nix команда top.
Вот только полезной информации она дает мало, да и мониторит загруженность всей программно-апаратной системы.
Меня же чаще всего интерисует сколько ресурсов “отьедает” мое приложение в паре с сервлет-контейнером.
Можно, конечно, смотреть сколько ресурсов отедают всуме все java-процессы, но это скорее костыль, чем решение.
К моему огромному счастью в Java 5 придумали JMX API а к нему и jConsole.

С этого момента жизнь становится “проще и уютней”. Запускаем Tomcat таким образом:
$export JAVA_OPTS='-Dcom.sun.management.jmxremote.port=8004 -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false'
$/usr/local/tomcat/bin/catalina.sh start

далее на рабочей машине запускаем jconsole и указываем удаленное подключение на сервер по укананному (8004-му) порту.
В результате видим подобную картину:

jconsole

Более подробно можно прочитать тут.

P.S. Достаточно интересно наблюдать работу Garbage Collector на Heap Memory Usage Monitor – получается такая себе “пила”.

Apache/PHP VS Tomcat/Groovy V.2

Рубрика: Development, Groovy, Java | 15 November 2006, 14:15 | Vadim Voituk

Не удовлетворившись результами сравнения производительности описанного в предыдущем посте, я сделал выводы что во всем виноват JDBC и начал искать возможности повышения производительности работы с БД.

Дотаточно здравой мыслью показалось построение пула соединений к базе данных.
Создал DataSource и переписал Groovelet для использования соединения из пула.
Провел замеры производительности и ВУАЛЯ!
Значение Request Per Second показало числа от 480 до 650, при значениях для Apache+PHP от 280 до 350.

Следующим шагом планирую реализовать кеширование данных в Groovelet-e с помошью JCS.

After JUG

Рубрика: Development, Groovy, Java | 13 November 2006, 15:53 | Vadim Voituk

В субботу, 11 ноября, мне представилась возможность посетить встречу Киевского “отделения” Java Users Group.
Спонсором мероприятия выступила компания Global Logic (если мне мне изменяет память, это та что была Bonus Technologies, что в свою очередь была частью Miratech).

Запланировано было 3 доклада:

1. JetBrains TeamCity , Дмитрий Жемеров
2. Web development in Python, Максим Ищенко
3. Intellij IDEA 6.0: new features, Дмитрий Жемеров

Первый – посвящен интересной Continuous Integration Tool от JetBrains – TeamCity.
Доклад был построен достаточно грамотно и интересно. Вопросов у слушателей почти не вызвал.
Второй – был призван донести до Java – сообщества существование такого языка как Python, а также его возможности для WEB-разработки.
Очень жаль, что ничего небыло сказано о Groovy или Jyton.
Третий доклад – о нововведениях в Intellij IDEA 6.0 – мне дослушать не удалось, да и ценность его для меня, использующего Eclipse, весьма сомнительна.

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

Apache/PHP VS Tomcat/Groovy

Рубрика: Development, Groovy, Java | 20 October 2006, 16:37 | Vadim Voituk

Дернуло меня на днях опять в J2EE нос сунуть.
Поставил на одном из серверов JDK 1.6-beta, развернул Tomcat, “прикрутил” к нему Groovy, указал стандартные JSP-taglibs, и для теста написал простенький сервлет, какой выводит User-Agent посетителя. Позже ещё и аналогичную JSP страницу.

Все бы хорошо, но почему-то визуально казалось что работает это все медленно, чего ввиду HotSpot-компиляции Java быть не должно. Решил проверить с помошью утилиты “ab” скорость обработки запросов полученого “J2EE-монстра” и сравнить с данными полученными от связки Apache/PHP/ZendOptimizer.

Запускал так:

ab -n 1000 -c 100 http://somehost.com/GroovyTest
ab -n 1000 -c 100 http://somehost.com/test.php

и фиксировал значение Request Per Second
В результате поулчились такие числа (request/sec.):

Apache/mod_php4/ZendOptimizer:
PHP-скрипт = 363, 380, 325, 349, 351
Статичный HTML = 365, 315, 420, 288, 320

Tomcat 5.5.20/Groovy 1.0.6/JDK 1.6
GroovyServlet = 1375, 889, 1203, 1367
Статичный HTML = 2070, 2155, 1865, 2105

В результате получается что Tomcat+Groovy на простеньких приложениях за секунду обрабатывает почти в 4 раза больше запросов чем Apache/mod_php4/ZendOpt.
На отдаче статичного html-контента это число вырастает ещё на 20%.
На таком же приложении, но с использованием MySQL (примитивный SELECT в базу), Tomcat+Groovy проигрывают в производительности на 10%.
Скорее всего это связано с довольно низкой производительностью JDBC.

Продолжение читайте тут.

Страница 9 из 1012345678910