2013-03-12

Все опции java

# java -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions -XX:+PrintFlagsFinal -version [другие опции и аргументы]

http://q-redux.blogspot.ru/2011/01/inspecting-hotspot-jvm-options.html
http://javarevisited.blogspot.ru/2011/11/hotspot-jvm-options-java-examples.html

Версия попроще
# java -XX:+PrintCommandLineFlags -version [другие опции и аргументы]

2012-12-23

MSSQL и ошибки

Если вы работаете с MSSQL вообще или с MSSQL через jdbc, то от этих ссылок вы получите удовольствие!

Подробнейшее описание как обрабатывать ошибки в MSSQL:
http://www.sommarskog.se/error-handling-I.html
http://www.sommarskog.se/error-handling-II.html
кратенькая выжимка http://weblogs.sqlteam.com/dang/archive/2007/10/20/Use-Caution-with-Explicit-Transactions-in-Stored-Procedures.aspx

Ссылки которые я искал два дня. Вся порочная правда о MSSQL и jdbc (они об одном и том же)!
http://blogs.msdn.com/b/jdbcteam/archive/2008/08/04/why-doesn-t-executeupdate-give-me-the-exception-i-expected.aspx
http://blogs.msdn.com/b/jdbcteam/archive/2008/08/01/use-execute-and-getmoreresults-methods-for-those-pesky-complex-sql-queries.aspx


PS: если вы используете Java 6, MSSQL 2000 и jtds, то я сделал работающую с MSSQL2000 Java 6 версию jtds 1.3 http://sourceforge.net/p/jtds/bugs/683/

Полезные ссылки и утилиты

- текстовый редактор Sublime Text 2 (хотя я, из-за его самобытной раскладки, пользуюсь http://www.jetbrains.com/idea и http://notepad-plus-plus.org)

- редактор различных диаграмм  diagram.ly он же draw.io

- если нужна offline утилита: yEd описание и сайт производителя

- генератор UML схем (диаграмм) yuml.me

- доступ к удаленному ПК 2.0  LogMeIn

- скрипт анализирующий ваш MySQL и дающий советы по его лучшей настройке: mysqltuner.com

- утилита innotop для MySQL
  1. Download latest TermReadKey? from CPAN: http://search.cpan.org/~stsi/TermReadKey/ReadKey.pm
  2. tar -zxvf TermReadKey-2.30.02.tar.gz
  3. perl Makefile.PL
  4. make test
  5. make install
Innotop manual http://innotop.googlecode.com/svn/html/index.html, в частности:
innotop -u [username] -p [password] -h [hostname]

2011-12-04

Памятка по установке JRebel

Прежде всего хочу сказать, что настраивать-то особо нечего ;-)
Можно посмотреть презентацию "для вдохновения" zeroturnaround.com/jrebel/presentations.

Я использую IntelliJ IDEA, для других IDE инструкция может слегка отличаться, см zeroturnaround.com/resources .

1. Идем в IDE settings | plugins и находим среди доступных JRebel Plugin, Download and Install, Apply (restart).

С сайта zeroturnaround.com/jrebel/current ничего качать не нужно, все включено в плагин.


2. В IDE settings появится пункт JRebel, там нажимаем Launch JRebel Configuration Wiazard...
Первый пункт активация - проще и дешевле начать с evolution.
Второй пункт license пропускаем -  evolution сам сгенерирует и активизирует лицензию на 30 дней.


3. пункт Choose settings выбираем какая IDE используется, тогда следующие пункты будут показывать инструкции по мелкой оптимальной подстройке этой IDE.

Следует выставить три 'галочки' в IDE по инструкциям в последующих пунктах.

Закончили с установкой и конфигурированием.


4. В Project view проекта в pop-up menu выбираем Generate rebel.xml

Далее как сделал я и как удобно мне, возможно вам тоже понравится :-)



5. Сохраняем rebel.xml в [webroot]/WEB-INF/classess
Это единственный, довольно простой конфигурационный файл JRebel.

Основные настройки описаны в zeroturnaround.com/jrebel/how-to-configure-rebel-xml
На всякий случай ссылка на полное описание (скорее всего не понадобится): zeroturnaround.com/jrebel/configuration

Настройки по умолчанию мне не подошли т.к.
a. я использую Apache Click, который при старте достает некоторые ресурсы в [webroot], а так как по умолчанию используется [webroot] в исходниках, то система контроля версий обнаруживает кучу новых файлов.

b. в проекте много модулей, которые компилируются в jar-ы и кладутся в [webroot]/WEB-INF/lib

Поэтому пришлось прописать папку target/название_web_app - как [webroot],
и несколько target/production/название_модуля - как путь для поиска классов, где:
* target стандартное maven-название папки куда все компилируется,
* production - папка принудительно создаваемая IDEA,
* название_web_app - путь который вы прописали в Web Application exploded artifact, e.g. voip, smsrouter, etc,
* название_модуля - IDEA создает для каждого модуля свои подпапки в production.

Итоговый файл:

<?xml version="1.0" encoding="UTF-8"?>
<application xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://www.zeroturnaround.com" xsi:schemaLocation="http://www.zeroturnaround.com http://www.zeroturnaround.com/alderaan/rebel-2_0.xsd">

 <classpath>
  <dir name="C:/j/voip.dev/bh/target/production/core"/>
  <dir name="C:/j/voip.dev/bh/target/production/demo"/>
  <dir name="C:/j/voip.dev/bh/target/production/mca"/>
  <dir name="C:/j/voip.dev/bh/target/production/tts"/>
 </classpath>

 <web>
  <link target="/"><!-- если эту папку zip-ануть, получится .war -->
   <dir name="C:/j/voip.dev/bh/target/voip" />
  </link>
 </web>
 
</application>

Готово!

Далее просто запускаем Tomcat не обычной зеленой стрелочкой, а стрелочкой с "jr".
Вносим изменения в код, компилируем (IDEA перед этим сохраняет) Ctrl+Shift-F9 или Ctrl-F9, F5 в браузере и видим обновление.

PS: если хочется ускорить первый старт Tomcat, то мой предыдущий совет "скопировать папку VAADIN из vaadin.jar в [webroot]" по прежнему применим.


Кроме того, возможно вам захочется избавиться от сериализации HTTP сессии между рестартами Tomcat (пользы от этой сериализации в случае Vaadin не очень много), для этого в [webroot]/META-INF нужно поместить файл context.xml вида:
<?xml version='1.0' encoding='utf-8'?>
<Context antiJARLocking="true" >
  <!-- Default set of monitored resources -->
  <WatchedResource>WEB-INF/web.xml</WatchedResource>
 
  <!-- disable session persistence across Tomcat restarts -->
  <Manager pathname="" />
</Context>

Аттрибут antiJARLocking="true" опционален (можно убрать). Он нужен если web приложение не освобождает какие-то классы и не выгружается Tomcat (свой код лучше от такого чистить, но бывают такие библиотеки третьих сторон).

2011-12-02

Робот полотер

Читаю Робот-полотер Mint - обзор @ exler.ru/expromt/10-11-2011.htm и нахожусь в задумчивости.
Дома у меня нет ковров, везде ламинат т.е. пылесос не нужен, а вот полотер...

2011-12-01

Разное про Java, Web и Vaadin

1. Для качественного ускорения web разработки на Java можно использовать замечательный продукт JRebel zeroturnaround.com/jrebel (кратко, что это). Он позволяет практически полностью отказаться от длительного re-deploy процесса.
Внес исправление в код, перекомпилировал - web приложение уже обновилось (вроде PHP,Python,Ruby). Продукт платный, но есть интересный способ использовать бесплатно: social.jrebel.com.

Кроме того они сделали вкусную zip java lib: новость repo.


2. Если не использовать JRebel и разрабатывать используя Vaadin, то можно обнаружить, что при первом запуске vaadin приложения после старта Tomcat, оно висит несколько секунд (примерно 10 на моём ПК). Исследование показало, что "висит" не сам Vaadin, а вызванный в com.vaadin.terminal.gwt.server.AbstractApplicationServlet#serveStaticResourcesInVAADIN Tomcat.
vaadin.jar довольно большой и чтение ресурсов из него длительная операция.
Чтобы избавится от этой задержки достаточно скопировать папку VAADIN из vaadin.jar в web app root (там где WEB-INF, META-INF, etc).
Если Вам помог этот совет проголосуйте за мой совет на stackoverflow.com/questions/3904735.


3. JavaScript is assembly language for the web ИЛИ кто ещё не написал свой веб-Си?
GWT (Google Web Toolkit) - золотой стандарт компиляции в JS, все знают, многим хочется повторить.

Ладно Google начал страдать NIH синдромом и решил изобрести JavaScript (его придумали/сделали не они) dartlang.org

Но так, чтобы ВСЕ бросились компилировать в JS (включая больных и убогих)...
На 20ом языке начинает пробивать смех:
github.com/jashkenas/coffee-script/wiki/List-of-languages-that-compile-to-JS

Даже QBASIC не забыт!


4. Унифицированный способ запускать различные контейнеры e.g. Tomcat из своего кода
cargo.codehaus.org


5. Для копирования DTO между разными уровнями в web приложении пригодится
dozer.sf.net

2011-07-07

Интересное про память и Java

javaspecialists.eu/archive/Issue193.html

Вообще имеет смысл прочитать все его выпуски.

В частности же:

на 64-bit серверах с 64-bit java полезно попробовать опцию
-XX:+UseCompressedOops
64bit архитектура == 64bit указатели (vs 32bit = в 2 раза больше).
С этой опцией JVM указатели (не все) оптимизирует ==
- жрет меньше памяти
- меньше байт прокачивать по шинам.

В Java7 будет сексуально выглядящий Javadoc

http://download.java.net/jdk7/docs/api/


Хотя лично мне нравится chm версия: упакованная, быстрая, со сквозным индексом и поиском.