<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:blogger='http://schemas.google.com/blogger/2008' xmlns:georss='http://www.georss.org/georss' xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-4617646790887709090</id><updated>2026-08-30T01:19:58.859+03:00</updated><category term="java"/><category term="оптимизация"/><category term="CPanel"/><category term="svn"/><category term="windows xp"/><category term="ошибка"/><category term="свой сервер"/><category term="файлы и папки"/><category term="gui"/><category term="регулярные выражения"/><category term="jacoco"/><category term="redmine"/><category term="windows"/><category term="автоматизация"/><category term="защита данных"/><category term="резервное копирование"/><category term="сервер"/><category term="JavaScript"/><category term="Oracle SQL"/><category term="adsl модем"/><category term="apache maven"/><category term="apache tomcat"/><category term="coverage"/><category term="dropbox"/><category term="excel"/><category term="firewall"/><category term="netbeans"/><category term="office 2007"/><category term="samsung"/><category term="system tray (системный трей)"/><category term="xerox"/><category term="вирусы"/><category term="принтер"/><category term="сериализация"/><category term="удаленный рабочий стол"/><category term="HTML"/><category term="JFileChooser"/><category term="MySQL"/><category term="Nokia"/><category term="Ovi"/><category term="P660R-T1"/><category term="WakeOnLan"/><category term="blogger.com"/><category term="ctfmon.exe"/><category term="email"/><category term="flash память"/><category term="ftp"/><category term="integration testing"/><category term="ip"/><category term="jQuery"/><category term="jvisualWm"/><category term="log4j"/><category term="look and feel"/><category term="myBatis"/><category term="php"/><category term="serialVersionUID"/><category term="skype"/><category term="smtp"/><category term="ssh"/><category term="swing"/><category term="torrents"/><category term="unit-testing"/><category term="unix"/><category term="vpn"/><category term="windows 7"/><category term="xStarter"/><category term="zip"/><category term="безопасность"/><category term="вход в систему"/><category term="дизайн"/><category term="документация"/><category term="заправка"/><category term="интернет"/><category term="логирование"/><category term="мышь"/><category term="патч"/><category term="перенос"/><category term="печать"/><category term="плагины"/><category term="почтовые сообщения"/><category term="программирование"/><category term="процессы"/><category term="прошивка"/><category term="сеть"/><category term="сеть. ошибка"/><category term="скрытые файлы"/><category term="списки"/><category term="фильтрация"/><category term="фокус"/><category term="часовые пояса"/><category term="шифрование"/><category term="экран"/><title type='text'>Заметки программиста</title><subtitle type='html'>Блог, посвященный программированию и сисадминистрированию</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://cloud-notes.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4617646790887709090/posts/default?redirect=false'/><link rel='alternate' type='text/html' href='http://cloud-notes.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><link rel='next' type='application/atom+xml' href='http://www.blogger.com/feeds/4617646790887709090/posts/default?start-index=26&amp;max-results=25&amp;redirect=false'/><author><name>Валентин Рудницкий</name><uri>http://www.blogger.com/profile/05470148883336688808</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjBWrt82ftGCCpZbQmACEXshP_yEaufcjxxSmPpDqmFdZy1cPHo9i_GPgt_i3ZkhkOWT9rER_llk7r0mvhhQHYVMgnAys99H-gzGffrJGIV08I8krMJG-bkareQ-f-rRuU/s113/tizer_avatar_ara.png'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>69</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-4617646790887709090.post-2630324605571967415</id><published>2019-04-12T18:54:00.000+03:00</published><updated>2019-04-12T18:54:17.371+03:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="apache maven"/><category scheme="http://www.blogger.com/atom/ns#" term="coverage"/><category scheme="http://www.blogger.com/atom/ns#" term="integration testing"/><category scheme="http://www.blogger.com/atom/ns#" term="jacoco"/><category scheme="http://www.blogger.com/atom/ns#" term="java"/><title type='text'>Использование Offline инструментации JaCoCo в Web приложении на Maven</title><content type='html'>В статьях написанных ранее мной было рассмотрено использование JaCoCo Java агента различными способами (&lt;a href=&quot;https://cloud-notes.blogspot.com/2019/01/jacoco-ide-intellij-idea-cucumber.html&quot;&gt;статья 1&lt;/a&gt; и &lt;a href=&quot;https://cloud-notes.blogspot.com/2019/01/jacoco-plugin-maven.html&quot;&gt;статья 2&lt;/a&gt;)&lt;br /&gt;
Однако, может возникнуть ситуация, когда, по каким либо причинам, использование Java агента либо не возможно, либо не удобно.&lt;br /&gt;&lt;br /&gt;
Для такого случая JaCoCo предоставляет возможность выполнить офлайн инструментацию кода (offline instrumentation).&lt;br /&gt;&lt;br /&gt;

Оффлайн инструментация может быть полезна в следующих случаях:&lt;br /&gt;
 - в окружении, где невозможно передать JVM опции при запуске приложения&lt;br /&gt;
 - в окружении, где невозможно использовать JaCoco агент при запуске приложения&lt;br /&gt; 
 - при наличии конфликтов с другими Java агентами&lt;br /&gt;
 - при необходимости конвертации байткода для других VM.&lt;br /&gt;&lt;br /&gt;
&lt;a name=&#39;more&#39;&gt;&lt;/a&gt;
Выполнение offline инструментации приведет к тому, что байткод всех классов проекта будет модифицирован, чтобы выполнять подсчеты, требуемые для генерации отчета о покрытии кода. &lt;br /&gt;&lt;br /&gt; 

Для того чтобы получить отчет о покрытии кода с помощью оффлайн инструментации, необходимо выполнить 3 шага:&lt;br /&gt; 
- провести инструментацию кода&lt;br /&gt;
- добавить JaCoCo агент в classpath&lt;br /&gt;
- передать параметры конфигурации в JaCoCo агент&lt;br /&gt;
&lt;br /&gt;
Далее будет подробно рассмотрено как выполнить каждый из шагов.
&lt;br /&gt;&lt;br /&gt;
&lt;b&gt;1. Инструментация кода.&lt;/b&gt;&lt;br /&gt;
Для проведения инструментации кода при сборке проекта необходимо добавить в pom.xml jacoco-maven-plugin с выполнением цели instrument на фазе prepare-package.&lt;br /&gt;

Также дополнительно желательно добавить восстановление исходных классов проекта после фазы package при помощи цели restore-instrumented-classes. Это необязательный шаг, однако его желательно делать, т.к. наличие инструментированных классов может привести к проблемам с отображением отчетов по покрытию в IDE, также к невозможности сделать package 2 раза подряд (без выполнения фазы clean).&lt;br /&gt;

Полный код jacoco-maven-plugin для добавления оффлайн инструментации будет выглядеть следующим образом:

&lt;pre&gt;  
  &amp;lt;plugin&gt;
    &amp;lt;groupid&gt;org.jacoco&amp;lt;/groupid&gt;
    &amp;lt;artifactid&gt;jacoco-maven-plugin&amp;lt;/artifactid&gt;
    &amp;lt;version&gt;0.8.2&amp;lt;/version&gt;
    &amp;lt;executions&gt;
      &amp;lt;execution&gt;
        &amp;lt;id&gt;jacoco-instrument-package&amp;lt;/id&gt;
        &amp;lt;phase&gt;prepare-package&amp;lt;/phase&gt;
        &amp;lt;goals&gt;
          &amp;lt;goal&gt;instrument&amp;lt;/goal&gt;
        &amp;lt;/goals&gt;
      &amp;lt;/execution&gt;
      &amp;lt;execution&gt;
        &amp;lt;id&gt;jacoco-restore-package&amp;lt;/id&gt;
        &amp;lt;phase&gt;package&amp;lt;/phase&gt;
        &amp;lt;goals&gt;
          &amp;lt;goal&gt;restore-instrumented-classes&amp;lt;/goal&gt;
        &amp;lt;/goals&gt;
      &amp;lt;/execution&gt;
    &amp;lt;/executions&gt;
  &amp;lt;/plugin&gt;
&lt;/pre&gt;
&lt;br /&gt;

&lt;b&gt;2. Добавление JaCoCo агента в classpath.&lt;/b&gt;&lt;br /&gt;
Для того, чтобы инструментированный код отработал корректно, необходимо чтобы в classpath находился jar файл JaCoCo агента.&lt;br /&gt;
Чтобы файл JaCoCo агента автоматически попал в classpath, его необходимо добавить как зависимость проекта. Обратите внимание, что зависимость имеет classifier runtime.&lt;br /&gt;
Scope можно установить в runtime, т.к. использование напрямую зависимости из исходного кода не предполагается.&lt;br /&gt;
&lt;pre&gt;  
  &amp;lt;dependency&gt;
    &amp;lt;groupid&gt;org.jacoco&amp;lt;/groupid&gt;
    &amp;lt;artifactid&gt;org.jacoco.agent&amp;lt;/artifactid&gt;
    &amp;lt;classifier&gt;runtime&amp;lt;/classifier&gt;
    &amp;lt;scope&gt;runtime&amp;lt;/scope&gt;
    &amp;lt;version&gt;0.8.2&amp;lt;/version&gt;
  &amp;lt;/dependency&gt;
&lt;/pre&gt;
&lt;br /&gt;

&lt;b&gt;3. Конфигурирование JaCoCo агента.&lt;/b&gt;&lt;br /&gt;
Полный список возможных параметров JaCoCo агента доступен &lt;a href=&quot;https://www.jacoco.org/jacoco/trunk/doc/agent.html&quot;&gt;здесь&lt;/a&gt;. &lt;br /&gt;&lt;br /&gt;
Конфигурирование можно быть выполнено одним из двух способов:&lt;br /&gt;
- Передать параметры в качестве VM опций при запуске программы. В таком случае к каждому параметру надо добавить префикс &lt;b&gt;jacoco-agent.&lt;/b&gt; Например так:
&lt;br /&gt;
&lt;pre&gt;
   -Djacoco-agent.output=&quot;file&quot; -Djacoco-agent.destfile=&quot;D:/jacoco.exec&quot;
&lt;/pre&gt;&lt;br /&gt;
- Поместить файл jacoco-agent.properties с параметрами в classpath. К примеру, файл jacoco-agent.properties может выглядеть так:
&lt;br /&gt;
&lt;pre&gt;  
  output=file
  destfile=D:/jacoco.exec
&lt;/pre&gt;
&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;

После выполнения всех 3-х шагов необходимо пересобрать проект и запустить приложения. &lt;br /&gt;
При конфигурации указанной выше отчет будет сгенерирован после остановки выполнения приложения. &lt;br /&gt;&lt;br /&gt;
Также JaCoCo предоставляет возможность получать отчет по покрытию во время выполнения приложения (например, через JMX). Для этого нужно соответствующим образом сконфигурировать JaCoCO агент.
</content><link rel='replies' type='application/atom+xml' href='http://cloud-notes.blogspot.com/feeds/2630324605571967415/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://cloud-notes.blogspot.com/2019/04/offline-jacoco-web-maven.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4617646790887709090/posts/default/2630324605571967415'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4617646790887709090/posts/default/2630324605571967415'/><link rel='alternate' type='text/html' href='http://cloud-notes.blogspot.com/2019/04/offline-jacoco-web-maven.html' title='Использование Offline инструментации JaCoCo в Web приложении на Maven'/><author><name>Валентин Рудницкий</name><uri>http://www.blogger.com/profile/05470148883336688808</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjBWrt82ftGCCpZbQmACEXshP_yEaufcjxxSmPpDqmFdZy1cPHo9i_GPgt_i3ZkhkOWT9rER_llk7r0mvhhQHYVMgnAys99H-gzGffrJGIV08I8krMJG-bkareQ-f-rRuU/s113/tizer_avatar_ara.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4617646790887709090.post-3937353896829184554</id><published>2019-01-31T21:12:00.000+03:00</published><updated>2019-04-12T18:02:01.596+03:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="apache maven"/><category scheme="http://www.blogger.com/atom/ns#" term="jacoco"/><category scheme="http://www.blogger.com/atom/ns#" term="java"/><category scheme="http://www.blogger.com/atom/ns#" term="unit-testing"/><title type='text'>Настройка JaCoCo plugin в Maven проекте для анализа покрытия тестами</title><content type='html'>В этой статье я бы хотел написать, как можно настроить библиотеку JaCoCo для анализа покрытия кода (code coverage) юнит тестами в Maven проекте. &lt;br /&gt;
&lt;a name=&#39;more&#39;&gt;&lt;/a&gt;
&lt;br /&gt;
Добавить библиотеку в проект, чтобы она автоматически выполнила анализ покрытия кода при выполнении юнит тестов и сохранила результаты в бинарном формате, крайне просто. Необходимо добавить в секцию &lt;i&gt;&amp;lt;build&amp;gt; -&amp;gt; &amp;lt;plugins&amp;gt;&lt;/i&gt;
плагин jacoco-maven-plugin с целью prepare-agent.
&lt;br /&gt;
&lt;pre class=&quot;brush: xml&quot;&gt;    
   &amp;lt;plugin&amp;gt;
      &amp;lt;groupid&amp;gt;org.jacoco&amp;lt;/groupid&amp;gt;
      &amp;lt;artifactid&amp;gt;jacoco-maven-plugin&amp;lt;/artifactid&amp;gt;
      &amp;lt;version&amp;gt;0.8.2&amp;lt;/version&amp;gt;
      &amp;lt;executions&amp;gt;
        &amp;lt;execution&amp;gt;
          &amp;lt;id&amp;gt;jacoco-prepare-agent&amp;lt;/id&amp;gt;
          &amp;lt;goals&amp;gt;
           &amp;lt;goal&amp;gt;prepare-agent&amp;lt;/goal&amp;gt;
          &amp;lt;/goals&amp;gt;
        &amp;lt;/execution&amp;gt;
      &amp;lt;/executions&amp;gt;
    &amp;lt;/plugin&amp;gt;
&lt;/pre&gt;
&lt;br /&gt;
Параметры задаются в секции configuration внутри секции execution. Полный список параметров и значения их по умолчанию можно прочитать &lt;a href=&quot;https://www.eclemma.org/jacoco/trunk/doc/prepare-agent-mojo.html&quot; target=&quot;_blank&quot;&gt;здесь&amp;nbsp;&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
С параметрами по умолчанию данный плагин после завершения сборки проекта и выполнения тестов сгенерирует отчет в бинарном формате по пути ${project.build.directory}/jacoco.exec. &lt;br /&gt;
&lt;br /&gt;
Этот отчет можно открыть в IDE, например, как описано в конце этой &lt;a href=&quot;https://cloud-notes.blogspot.com/2019/01/jacoco-ide-intellij-idea-cucumber.html&quot;&gt;статьи&lt;/a&gt;. Либо использовать плагин для отображения отчета в среде где происходит автоматическое выполнение тестов (в Jenkins, например). &lt;br /&gt;
&lt;br /&gt;
Если же требуется чтобы библиотека сгенерировала отчет в читаемом для человека html формате, в конфигурацию плагина следует дополнительно добавить дополнительно execution с целью report. 

&lt;br /&gt;
&lt;pre class=&quot;brush: xml&quot;&gt;    &amp;lt;plugin&amp;gt;
      &amp;lt;groupid&amp;gt;org.jacoco&amp;lt;/groupid&amp;gt;
      &amp;lt;artifactid&amp;gt;jacoco-maven-plugin&amp;lt;/artifactid&amp;gt;
      &amp;lt;version&amp;gt;0.8.2&amp;lt;/version&amp;gt;
      &amp;lt;executions&amp;gt;
        &amp;lt;execution&amp;gt;
          &amp;lt;id&amp;gt;jacoco-prepare-agent&amp;lt;/id&amp;gt;
          &amp;lt;goals&amp;gt;
           &amp;lt;goal&amp;gt;prepare-agent&amp;lt;/goal&amp;gt;
          &amp;lt;/goals&amp;gt;
        &amp;lt;/execution&amp;gt;
        &amp;lt;execution&amp;gt;
          &amp;lt;id&amp;gt;report&amp;lt;/id&amp;gt;
          &amp;lt;phase&amp;gt;prepare-package&amp;lt;/phase&amp;gt;
          &amp;lt;goals&amp;gt;
            &amp;lt;goal&amp;gt;report&amp;lt;/goal&amp;gt;
          &amp;lt;/goals&amp;gt;
        &amp;lt;/execution&amp;gt;
      &amp;lt;/executions&amp;gt;
    &amp;lt;/plugin&amp;gt;
&lt;/pre&gt;
&lt;br /&gt;
Список возможных параметров для цели report можно посмотреть &lt;a href=&quot;https://www.eclemma.org/jacoco/trunk/doc/report-mojo.html&quot; target=&quot;_blank&quot;&gt;здесь&lt;/a&gt; &lt;br /&gt;
&lt;br /&gt;
На этом все, как видно добавление анализа покрытия с использованием библотеки JaCoCo для юнит тестов выполняется крайне просто и требует минимум усилий.</content><link rel='replies' type='application/atom+xml' href='http://cloud-notes.blogspot.com/feeds/3937353896829184554/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://cloud-notes.blogspot.com/2019/01/jacoco-plugin-maven.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4617646790887709090/posts/default/3937353896829184554'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4617646790887709090/posts/default/3937353896829184554'/><link rel='alternate' type='text/html' href='http://cloud-notes.blogspot.com/2019/01/jacoco-plugin-maven.html' title='Настройка JaCoCo plugin в Maven проекте для анализа покрытия тестами'/><author><name>Валентин Рудницкий</name><uri>http://www.blogger.com/profile/05470148883336688808</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjBWrt82ftGCCpZbQmACEXshP_yEaufcjxxSmPpDqmFdZy1cPHo9i_GPgt_i3ZkhkOWT9rER_llk7r0mvhhQHYVMgnAys99H-gzGffrJGIV08I8krMJG-bkareQ-f-rRuU/s113/tizer_avatar_ara.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4617646790887709090.post-8401363256611519998</id><published>2019-01-23T21:20:00.000+03:00</published><updated>2019-04-12T18:00:03.070+03:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="coverage"/><category scheme="http://www.blogger.com/atom/ns#" term="jacoco"/><category scheme="http://www.blogger.com/atom/ns#" term="java"/><title type='text'>Простой пример использования JaCoCo через IDE IntelliJ IDEA для анализа покрытия кода интеграционными Cucumber тестами </title><content type='html'>JaCoCo это распространенная библиотека для анализа покрытия кода. &lt;br /&gt;
В этой статье будет приведен простой пример использования JaCoCo агента через IDE IntelliJ IDEA.
Этот пример подойдет для случая если нам требуется узнать покрытие внешними интеграфионными тестами, которые работают с запущенным или развернутым приложением. &lt;br /&gt;
Описаный ниже способ НЕ подойдет для анализа покрытия Unit тестами, т.к. юнит тесты выполняются при сборке проекта, а не на запущенном приложении.&lt;br /&gt;
Запуск или развертывание приложения будет производится через IDE IntelliJ IDEA IDE 2018.1, при желании подобным образом можно также написать скрипт для запуска приложения.&lt;br /&gt;
&lt;a name=&#39;more&#39;&gt;&lt;/a&gt;
&lt;br /&gt;
1. Для начала скачиваем архив с JaCoCo с сайта https://www.jacoco.org/jacoco/. На момент написания статьи последняя версия JaCoCo - 0.8.2.&lt;br /&gt;
Мы будем использовать для анализа покрытия JaCoCo Java Agent. Файл JaCoCo Java Agent находится в архиве с библиотекой по пути &lt;i&gt;\lib\jacocoagent.jar&lt;/i&gt;&lt;br /&gt;
&lt;br /&gt;
2. Распаковываем jacoco-0.8.2.zip в любое удобное место, например в D:/jacoco-0.8.2.&lt;br /&gt;
&lt;br /&gt;
3. В IDEA открываем наш проект, заходим в Run -&amp;gt; Edit Configurations. &lt;br /&gt;
&lt;br /&gt;
4. Если мы используем конфигурацию Tomcat Server, то ищем параметр VM options. Для других конфигураций ищем похожий по смылу (в зависимости от типа выбранной конфигурации запуска название параметра может отличаться).&lt;br /&gt;
Устанавливаем значение этого параметра, например, как показано ниже.&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjPs96UZFP_IHfopKXgG0WkjW6xL00suPhr3HcU3V6pxGwVvraPYKZ_J8n_PvnIhKlJZqzTmPwynAhynbpTX6gs3xVqVeExMvH9mr7s8tYX4j3krROAPfyZL-CqdaQx16MxL8bWEFRuwq50/s1600/2019-01-15_18-25-48.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;297&quot; data-original-width=&quot;723&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjPs96UZFP_IHfopKXgG0WkjW6xL00suPhr3HcU3V6pxGwVvraPYKZ_J8n_PvnIhKlJZqzTmPwynAhynbpTX6gs3xVqVeExMvH9mr7s8tYX4j3krROAPfyZL-CqdaQx16MxL8bWEFRuwq50/s1600/2019-01-15_18-25-48.jpg&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;pre&gt;-javaagent:D:\jacoco-0.8.2\lib\jacocoagent.jar=destfile=D:/jacoco.exec,output=file,append=false,includes=my.company.*
&lt;/pre&gt;
&lt;br /&gt;
Сразу после &lt;b&gt;javaagent:&lt;/b&gt; указан на путь к JaCoCo java агенту.&lt;br /&gt;
Параметр &lt;b&gt;destfile &lt;/b&gt;указывает на путь куда будет записан отчет о покрытии (coverage report). Здесь мы указали destfile=D:/jacoco.exec.&lt;br /&gt;
Параметр &lt;b&gt;output &lt;/b&gt;- тип вывода. Может быть file, tcpserver, tcpclient, none &lt;br /&gt;
Параметр &lt;b&gt;includes &lt;/b&gt;- позволяет ограничить список классов для анализа покрытия. Нас интересует только покрытие классов в проекте, и не интересует покрытие в классах подключенных библиотек, поэтому нужно добавить ограничение по пакету my.company.* (здесь нужно указать свои пакеты). Такое ограничение не обязательно, но его желательно добавлять, т.к. обычно оно очень существенно уменьшает размер файла отчета.&lt;br /&gt;
Более подробно про параметры JaCoCo агента можно почитать &lt;a href=&quot;https://www.jacoco.org/jacoco/trunk/doc/agent.html&quot;&gt;здесь&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
5. Применяем нашу конфигурацию и запускаем её используя команду Run.&lt;br /&gt;
&lt;br /&gt;
6. Теперь мы можем запустить внешние тесты для которых мы хотим проверить покрытие. Это могут быть тесты на основе BDD фремворка Cucumber. По окончании работы тестов необходимо будет остановить приложение. Отчет по покрытию будет создан в момент остановки приложения по пути указанному в параметре destfile.&lt;br /&gt;
&lt;br /&gt;
7. После создания отчета его можно импортировать и IDE чтобы посмотреть покрытие по классам и строкам. Это можно сделать используя меню Analyze -&amp;gt; Show Coverage Data, и выбрав там соответствующий .exec файл отчета.&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiAQedZDIIc6jLwnxAILEJ_24k5HbaBfFLOymNL6FB8Xyp32RK0Xe4D3Qt-yjUDeQ_UDehDLcywqCxBDLexbBHlUa7ecs_4_7OX2fOEAxUDsqjM3IjIyxzBytHhqKFVEahklVLkxHenzRVC/s1600/2019-01-15_1828.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;249&quot; data-original-width=&quot;332&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiAQedZDIIc6jLwnxAILEJ_24k5HbaBfFLOymNL6FB8Xyp32RK0Xe4D3Qt-yjUDeQ_UDehDLcywqCxBDLexbBHlUa7ecs_4_7OX2fOEAxUDsqjM3IjIyxzBytHhqKFVEahklVLkxHenzRVC/s1600/2019-01-15_1828.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://cloud-notes.blogspot.com/feeds/8401363256611519998/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://cloud-notes.blogspot.com/2019/01/jacoco-ide-intellij-idea-cucumber.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4617646790887709090/posts/default/8401363256611519998'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4617646790887709090/posts/default/8401363256611519998'/><link rel='alternate' type='text/html' href='http://cloud-notes.blogspot.com/2019/01/jacoco-ide-intellij-idea-cucumber.html' title='Простой пример использования JaCoCo через IDE IntelliJ IDEA для анализа покрытия кода интеграционными Cucumber тестами '/><author><name>Валентин Рудницкий</name><uri>http://www.blogger.com/profile/05470148883336688808</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjBWrt82ftGCCpZbQmACEXshP_yEaufcjxxSmPpDqmFdZy1cPHo9i_GPgt_i3ZkhkOWT9rER_llk7r0mvhhQHYVMgnAys99H-gzGffrJGIV08I8krMJG-bkareQ-f-rRuU/s113/tizer_avatar_ara.png'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjPs96UZFP_IHfopKXgG0WkjW6xL00suPhr3HcU3V6pxGwVvraPYKZ_J8n_PvnIhKlJZqzTmPwynAhynbpTX6gs3xVqVeExMvH9mr7s8tYX4j3krROAPfyZL-CqdaQx16MxL8bWEFRuwq50/s72-c/2019-01-15_18-25-48.jpg" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4617646790887709090.post-7534635315442988891</id><published>2016-10-01T18:47:00.000+03:00</published><updated>2016-10-07T15:59:29.337+03:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="email"/><category scheme="http://www.blogger.com/atom/ns#" term="java"/><category scheme="http://www.blogger.com/atom/ns#" term="smtp"/><category scheme="http://www.blogger.com/atom/ns#" term="почтовые сообщения"/><title type='text'>Отправка почтовых (email) сообщений на Java</title><content type='html'>В Java существует специальный пакет для работы с почтовыми сообщениями - javax.mail. С использованием классов этого пакета можно создавать email сообщения и отправлять их через SMTP сервер. В данной статье будут рассмотрены основные классы этого пакета и их методы, а также приведен пример простого класса, который можно использовать для отправки email сообщений в HTML формате.
&lt;br /&gt;
&lt;a name=&#39;more&#39;&gt;&lt;/a&gt;
&lt;b&gt;Подключение библиотеки java.mail&lt;/b&gt;&lt;br/&gt;
Пакет java.mail не является стандартным пакетом java. Поэтому, чтобы начать с ним работать, прежде всего необходимо подключить его к проекту. Делается это по разному в зависимости от типа проекта. К примеру, для проекта на maven нужно добавить следующую зависимость
&lt;pre class=&quot;brush: xml&quot;&gt;  
   &amp;lt;dependency&amp;gt;
      &amp;lt;groupId&amp;gt;javax.mail&amp;lt;/groupId&amp;gt;
      &amp;lt;artifactId&amp;gt;mail&amp;lt;/artifactId&amp;gt;
      &amp;lt;version&amp;gt;1.4&amp;lt;/version&amp;gt;
   &amp;lt;/dependency&amp;gt;
&lt;/pre&gt;  
&lt;br /&gt;
&lt;b&gt;Создание сессии&lt;/b&gt;&lt;br /&gt;
Прежде чем приступить к отправке сообщений необходимо создать объект класса &lt;i&gt;javax.mail.Session&lt;/i&gt;. Создать сессию можно статическими методами &lt;i&gt;Session.getInstance&lt;/i&gt; и &lt;i&gt;Session.getDefaultInstance&lt;/i&gt;. Эти методы принимают в качестве параметра настройки SMTP клиента в виде объекта класса &lt;i&gt;java.util.Properties&lt;/i&gt;.&lt;br /&gt;
При первом вызове метода &lt;i&gt;Session.getDefaultInstance&lt;/i&gt; будет создан синглтон-экземпляр сессии с Properties, которые были переданы в качестве параметра. При дальнейших вызовах этого метода параметр Properties не будет оказывать никакого влияния на возвращаемый экземпляр сессии, а возвращаться будет всегда экземпляр, созданный при первом вызове. Если в вашем приложении предполагается оперировать с одним SMTP сервером с одинаковыми настройками для отправки всех сообщений - то можно использовать метод &lt;i&gt;Session.getDefaultInstance&lt;/i&gt;, если будут производиться операции с несколькими SMTP серверами с разными настройками Properties - то следует использовать &lt;i&gt;Session.getInstance&lt;/i&gt;.&lt;br /&gt;
Значения Properties обычно выставляются в зависимости от используемого SMTP сервера и типа соединения (SSL, TLS).&lt;br /&gt;
Например, для SMTP сервера Amazon можно использовать следующие параметры:&lt;br /&gt;
&lt;pre class=&quot;brush: java&quot;&gt;  
    Properties emailProperties = new Properties();      
    emailProperties.put(&quot;mail.transport.protocol&quot;, &quot;smtp&quot;);
    emailProperties.put(&quot;mail.smtp.auth&quot;, &quot;true&quot;);
    emailProperties.put(&quot;mail.smtp.starttls.enable&quot;, &quot;true&quot;);
    emailProperties.put(&quot;mail.smtp.starttls.required&quot;, &quot;true&quot;);
&lt;/pre&gt;
&lt;br /&gt;
Также, используя Properties, можно включить режим отладки почтового клиента.&lt;br /&gt;
&lt;br /&gt;
&lt;pre class=&quot;brush: java&quot;&gt;    
    emailProperties.put(&quot;mail.debug&quot;, &quot;true&quot;);
&lt;/pre&gt;
&lt;br /&gt;
В этом случае, при отправке email, в System.out будет дополнительно записываться отладочная информация.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Создание и инициализация сообщения&lt;/b&gt;&lt;br /&gt;
В java для представления email сообщения используется класс MimeMessage. При создании его можно связать с сессией (&lt;i&gt;javax.mail.Session&lt;/i&gt;), передав её экземпляр в качестве параметра. &lt;br /&gt;
&lt;pre class=&quot;brush: java&quot;&gt;  
    MimeMessage message = new MimeMessage(mailSession);
&lt;/pre&gt;
&lt;br /&gt;
Основные методы этого класса следующие:&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;&lt;b&gt;setSubject&lt;/b&gt; - задает тему сообщения&lt;/li&gt;
&lt;li&gt;&lt;b&gt;setContent&lt;/b&gt; - задает контент сообщения. Имеется 2 перегруженных метода: &lt;i&gt;setContent(Object o, String type)&lt;/i&gt; и &lt;i&gt;setContent(Multipart mp)&lt;/i&gt;. В общем случае, метод setContent(Object o, String type) позволяет передавать контент, помещенный в объект DataHandler. &lt;br /&gt; Проще всего задать контент сообщения передав его в виде HTML строки, например: &lt;/li&gt;
&lt;pre class=&quot;brush: java&quot;&gt;        
        String messageBody = &quot;&lt;html&gt;This is the body of message&lt;/html&gt;&quot;;
        message.setContent(messageBody, &quot;text/html;charset=\&quot;UTF-8\&quot;&quot;);
&lt;/pre&gt;
&lt;br /&gt;
Однако, следует иметь ввиду, что чаще всего спам-фильтры снижают Spam Score сообщениям, у которых отсутствует альтернативная текстовая (text/plain) часть сообщения. Поэтому сообщения с контентом, представленным выше, будут иметь невысокий Spam Score, и, соответственно, с высокой вероятностью попадать в папку Спам получателя. Для увеличения Spam Score требуется, чтобы письма с контентом типа HTML содержали также текстовый вариант контента.&lt;br /&gt;
Письмо с несколькими альтернативными контентами можно создать, используя класс MimeMultipart, передав в его конструктор строку &quot;alternative&quot;.
&lt;pre class=&quot;brush: java&quot;&gt;        
        Multipart messageBody = new MimeMultipart(&quot;alternative&quot;);

        MimeBodyPart textPart = new MimeBodyPart();
        textPart.setContent(messageTextBody, &quot;text/plain&quot;);
        messageBody.addBodyPart(textPart);

        MimeBodyPart htmlPart = new MimeBodyPart();
        htmlPart.setContent(messageHtmlBody, &quot;text/html;charset=\&quot;UTF-8\&quot;&quot;);
        messageBody.addBodyPart(htmlPart);
        message.setContent(messageBody);
&lt;/pre&gt;
&lt;br /&gt;
При создании таких сообщений важно, чтобы тестовая часть сообщения была осмысленной, т.к. предполагается, что она будет показана пользователю в случае, если по каким либо причинам отобразить HTML часть сообщения окажется невозможно.
&lt;br /&gt;&lt;br /&gt;
&lt;li&gt;&lt;b&gt;setFrom&lt;/b&gt; - задает имя и адрес отправителя. В качестве параметра может принимать объект класса расширяющего абстрактный класс Address. Можно создать свой подкласс определив все абстрактные методы, а можно использовать существующую имплементацию &lt;i&gt;javax.mail.internet.InternetAddress&lt;/i&gt;. Конструктор класса &lt;i&gt;InternetAddress &lt;/i&gt;в качестве первого параметра принимает email адрес отправителя, в качестве второго - имя отправителя, например &lt;i&gt;new InternetAddress(&quot;vasiapupkin@gmail.com&quot;, &quot;Vasia Pupkin&quot;)&lt;/i&gt;. Если вызвать метод без параметров, то в качестве адреса и имени отправителя будет использоваться адрес и имя локальной машины.&lt;br /&gt;&lt;br /&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;addRecipient&lt;/b&gt; - позволяет добавлять получателей сообщения. В качестве первого параметра принимает объект класса &lt;i&gt;Message.RecipientType&lt;/i&gt;. В качестве второго - объект класса &lt;i&gt;InternetAddress&lt;/i&gt;. Существуют следующие стандартные объекты класса &lt;i&gt;Message.RecipientType&lt;/i&gt;: &lt;i&gt;Message.RecipientType.TO&lt;/i&gt; - основной (первичный) получатель или получатели письма, &lt;i&gt;Message.RecipientType.СС&lt;/i&gt; - вторичные получатели письма, &lt;i&gt;Message.RecipientType.BСС&lt;/i&gt; - вторичные получатели письма, которые не будут видны другим получателям письма.&lt;br /&gt;&lt;br /&gt; &lt;/li&gt;
&lt;li&gt;&lt;b&gt;addHeader&lt;/b&gt; - позволяет добавлять заголовки письма. Используя заголовок, можно пометить email сообщение, как сообщение с высокой важностью: &lt;i&gt;message.addHeader(&quot;Importance&quot;, &quot;High&quot;);&lt;/i&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;br /&gt;
&lt;br /&gt;
Отправка сообщения происходит с использованием класса Transport.
Чтобы создать объект класса Transport, использующий значения Properties заданные в Session, используется метод &lt;i&gt;mailSession.getTransport.&lt;/i&gt;
Подключение к серверу происходит c использованием метода &lt;i&gt;Transport.connect&lt;/i&gt;. Отправка сообщения производится после подключения методом &lt;i&gt;Transport.sendMessage.&lt;/i&gt;
После окончания работы с объектом класса Transport важно всегда освобожать ресурсы используя метод &lt;i&gt;Transport.close.&lt;/i&gt;&lt;br /&gt;
&lt;br /&gt;
Ниже приведен пример класса, который осуществляет отправку email сообщения на указанный адрес, с указанными текстовым и html вариантами тела сообщения. 
&lt;br /&gt;
&lt;br /&gt;
&lt;pre class=&quot;brush: java&quot;&gt;import javax.mail.*;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeBodyPart;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.MimeMultipart;
import java.io.UnsupportedEncodingException;
import java.nio.charset.StandardCharsets;
import java.util.Properties;
/**
 * Простой класс для отправки email сообщений
 * @author Cloud
 */
public class EmailMessageSender {
    private String mailServerHostName;
    private int mailServerPort;
    private String mailServerUsername;
    private String mailServerPassword;
    private String senderName;
    private String senderEmail;

    public EmailMessageSender(String mailServerHostName, int mailServerPort, String mailServerUsername,
                              String mailServerPassword, String senderName, String senderEmail) {
        this.mailServerHostName = mailServerHostName;
        this.mailServerPort = mailServerPort;
        this.mailServerUsername = mailServerUsername;
        this.mailServerPassword = mailServerPassword;
        this.senderName = senderName;
        this.senderEmail = senderEmail;
    }

    private Properties emailProperties = new Properties();
    {
        //emailProperties нужно выставить в соответствии с требованиями используемого SMTP сервера
        emailProperties.put(&quot;mail.transport.protocol&quot;, &quot;smtp&quot;);
        emailProperties.put(&quot;mail.smtp.auth&quot;, &quot;true&quot;);
        emailProperties.put(&quot;mail.smtp.starttls.enable&quot;, &quot;true&quot;);
        emailProperties.put(&quot;mail.smtp.starttls.required&quot;, &quot;true&quot;);
    }

    public void sendEmail(String recipientEmail, String subject,
                           String messageTextBody, String messageHtmlBody) throws MessagingException, UnsupportedEncodingException {
        Session mailSession = Session.getInstance(emailProperties);
        Transport transport = null;
        
        try {
            //region Создание multipart контента
            Multipart content = new MimeMultipart(&quot;alternative&quot;);
            MimeBodyPart textPart = new MimeBodyPart();
            textPart.setContent(messageTextBody, &quot;text/plain&quot;);
            content.addBodyPart(textPart);
            MimeBodyPart htmlPart = new MimeBodyPart();
            htmlPart.setContent(messageHtmlBody, &quot;text/html;charset=\&quot;UTF-8\&quot;&quot;);
            //endregion
            //region Инициализация MimeMessage
            MimeMessage message = new MimeMessage(mailSession);
            message.setSubject(subject, StandardCharsets.UTF_8.name());
            content.addBodyPart(htmlPart);
            message.setContent(content);
            message.setFrom(new InternetAddress(senderName, senderEmail));
            message.addRecipient(Message.RecipientType.TO, new InternetAddress(recipientEmail));
            //endregion
            transport = mailSession.getTransport();
            transport.connect(mailServerHostName, mailServerPort, mailServerUsername, mailServerPassword);
            transport.sendMessage(message, message.getRecipients(Message.RecipientType.TO));
        } finally {
            if (transport != null) {
                try {
                    transport.close();
                } catch (MessagingException e) {
                    System.out.println(&quot;Ошибка при закрытии transport &quot; + e.toString());
                }
            }
        }
    }

    public static void main(String[] args) {
        EmailMessageSender emailMessageSender = new EmailMessageSender(&quot;mailServerHostName&quot;, 587,
                &quot;mailServerUsername&quot;, &quot;mailServerPassword&quot;, &quot;senderName@gmail.com&quot;, &quot;Sender Name&quot;);
        try {
            emailMessageSender.sendEmail(&quot;recipientEmail@gmail.com&quot;, &quot;test subject&quot;, &quot;test body&quot;,
                    &quot;&lt;html&gt;html body&lt;/html&gt;&quot;);
        } catch (MessagingException | UnsupportedEncodingException e) {
            e.printStackTrace();
        }
    }
}
&lt;/pre&gt;
</content><link rel='replies' type='application/atom+xml' href='http://cloud-notes.blogspot.com/feeds/7534635315442988891/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://cloud-notes.blogspot.com/2016/10/email-java.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4617646790887709090/posts/default/7534635315442988891'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4617646790887709090/posts/default/7534635315442988891'/><link rel='alternate' type='text/html' href='http://cloud-notes.blogspot.com/2016/10/email-java.html' title='Отправка почтовых (email) сообщений на Java'/><author><name>Валентин Рудницкий</name><uri>http://www.blogger.com/profile/05470148883336688808</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjBWrt82ftGCCpZbQmACEXshP_yEaufcjxxSmPpDqmFdZy1cPHo9i_GPgt_i3ZkhkOWT9rER_llk7r0mvhhQHYVMgnAys99H-gzGffrJGIV08I8krMJG-bkareQ-f-rRuU/s113/tizer_avatar_ara.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4617646790887709090.post-6454191854711181650</id><published>2015-09-07T17:44:00.000+03:00</published><updated>2016-09-30T15:08:50.967+03:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Oracle SQL"/><category scheme="http://www.blogger.com/atom/ns#" term="часовые пояса"/><title type='text'>Текущее время и часовые пояса (time zones) в базе данных Oracle</title><content type='html'>Oracle предоставляет пользователю возможность работать с данными в различных часовых поясах. Выбор функций или переменных для совершения таких операций в каждом конкретном случае может быть не всегда очевиден.&lt;br /&gt;
В данной статье приведена информация по теме работы с текущим временем и датами в различных временных зонах.
&lt;a name=&#39;more&#39;&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;
В базе данных Oracle имеются встроенные функции работы со временем в следующих часовых поясах. 
&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;1. Часовой пояс сессии/клиента&lt;/b&gt;&lt;br /&gt;
Текущее значение часового пояса сессии/клиента содержится в SESSIONTIMEZONE.&lt;br /&gt;
&lt;pre class=&quot;brush:sql&quot;&gt;select SESSIONTIMEZONE from dual;
&lt;/pre&gt;
&lt;br /&gt;
Это значение может быть изменено командой ниже.&lt;br /&gt;
&lt;pre class=&quot;brush:sql&quot;&gt;ALTER SESSION SET TIME_ZONE=&#39;Europe/Paris&#39;;
&lt;/pre&gt;
&lt;br /&gt;
В качестве SESSIONTIMEZONE может быть установлено одно из следующих значений:&lt;br /&gt;
- Значение временной зоны ОС (&#39;OS_TZ&#39;)&lt;br /&gt;
- Значение временной зоны базы данных (&#39;DB_TZ&#39;)&lt;br /&gt;
- Смещение временной зоны от UTC (например, &#39;-05:00&#39;)&lt;br /&gt;
- Имя временной зоны (например, &#39;Europe/Minsk&#39;)&lt;br /&gt;
&lt;br /&gt;
Для получения текущего времени в часовом поясе сессии используются переменные CURRENT_DATE, LOCALTIMESTAMP, CURRENT_TIMESTAMP.
&lt;br /&gt;
&lt;pre class=&quot;brush:sql&quot;&gt;select CURRENT_DATE from dual;
select LOCALTIMESTAMP from dual;
select CURRENT_TIMESTAMP from dual;
&lt;/pre&gt;
&lt;br /&gt;
Они отличаются друг от друга возвращаемым типом:&lt;br /&gt;
CURRENT_DATE возвращает DATE, LOCALTIMESTAMP - TIMESTAMP и CURRENT_TIMESTAMP - TIMESTAMP WITH TIME ZONE&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;2. Часовой пояс базы данных&lt;/b&gt;&lt;br /&gt;
Текущее значение часового пояса базы данных содержится в DBTIMEZONE.&lt;br /&gt;
&lt;pre class=&quot;brush:sql&quot;&gt;select DBTIMEZONE from dual;
&lt;/pre&gt;
&lt;br /&gt;
Это значение используется для внутреннего хранения полей типа TIMESTAMP WITH LOCAL TIME ZONE. Такие поля преобразуются в/из часового пояса сессии при select/insert действиях, поэтому на самом деле значение DBTIMEZONE не имеет большой важности.&lt;br /&gt;
&lt;b&gt;Это не часовой пояс переменных SYSDATE и SYSTIMESTAMP.&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;3. Часовой пояс операционной системы базы данных&lt;/b&gt;&lt;br /&gt;
Можно посмотреть используя переменную TZR.&lt;br /&gt;
&lt;pre class=&quot;brush:sql&quot;&gt;select TO_CHAR(SYSTIMESTAMP, &#39;YYYY-MM-DD HH24:MI TZR&#39;) from dual;
&lt;/pre&gt;
&lt;br /&gt;
Для получения текущего времени в этом часовом поясе используются переменные SYSDATE и SYSTIMESTAMP.&lt;br /&gt;
&lt;pre class=&quot;brush:sql&quot;&gt;select SYSDATE from dual;
select SYSTIMESTAMP from dual;
&lt;/pre&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;4. Часовой пояс UTC&lt;/b&gt;&lt;br /&gt;
В Oracle существет специальная функция sys_extract_utc для преобразования любого значения таймстампа в часовой пояс UTC. Ниже приведены разные варианты её использования.
&lt;br /&gt;
&lt;pre class=&quot;brush:sql&quot;&gt;select sys_extract_utc(systimestamp) from dual;
select cast(sys_extract_utc(systimestamp) as date) from dual;
select sys_extract_utc(timestamp &#39;2000-03-28 11:30:00.00 -08:00&#39;) from dual;
&lt;/pre&gt;
&lt;br /&gt;</content><link rel='replies' type='application/atom+xml' href='http://cloud-notes.blogspot.com/feeds/6454191854711181650/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://cloud-notes.blogspot.com/2015/09/time-zones-oracle.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4617646790887709090/posts/default/6454191854711181650'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4617646790887709090/posts/default/6454191854711181650'/><link rel='alternate' type='text/html' href='http://cloud-notes.blogspot.com/2015/09/time-zones-oracle.html' title='Текущее время и часовые пояса (time zones) в базе данных Oracle'/><author><name>Валентин Рудницкий</name><uri>http://www.blogger.com/profile/05470148883336688808</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjBWrt82ftGCCpZbQmACEXshP_yEaufcjxxSmPpDqmFdZy1cPHo9i_GPgt_i3ZkhkOWT9rER_llk7r0mvhhQHYVMgnAys99H-gzGffrJGIV08I8krMJG-bkareQ-f-rRuU/s113/tizer_avatar_ara.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4617646790887709090.post-1674389283192236916</id><published>2015-03-09T13:29:00.000+03:00</published><updated>2016-09-30T15:07:54.802+03:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="java"/><category scheme="http://www.blogger.com/atom/ns#" term="myBatis"/><category scheme="http://www.blogger.com/atom/ns#" term="Oracle SQL"/><title type='text'>Некоторые малоизвестные возможности MyBatis 3</title><content type='html'>MyBatis (ранее iBatis) - фреймворк для java приложений для работы с базами данных. Он менее популярен чем Hibernate, однако все же используется в достаточно большом количестве проектов и имеет свои области применения.
Туториал достаточно полно описывающий основной функционал MyBatis доступен по ссылке https://mybatis.github.io/mybatis-3/.&lt;br /&gt;
В данной статье я хочу описать возможности которых нет в туториале, но которые могут оказаться полезны в реальных приложениях.&lt;br /&gt;
Все описанные примеры проверены с использованием базы данных Oracle. 
&lt;br /&gt;
&lt;a name=&#39;more&#39;&gt;&lt;/a&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;1. Возвращение значения id вставленной записи для insert запросов.&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
В случае если генерация id для вставляемой записи производится триггером может быть использован insert следующего вида&lt;br /&gt;
&lt;br /&gt;
&lt;pre class=&quot;brush:sql;plain&quot;&gt;    
&amp;lt;insert id=&quot;createEmployee&quot; keycolumn=&quot;ID&quot; keyproperty=&quot;idWrapper.id&quot; usegeneratedkeys=&quot;true&quot;&amp;gt;
   insert into employee(first_name, last_name) values (#{firstName}, #{lastName})
&amp;lt;/insert&amp;gt;
&lt;/pre&gt;
Здесь значение атрибута keyColumn равно названию колонки содержащей id, keyProperty - названию поля куда будет записан id. &lt;br /&gt;
Сигнатура метода в интерфейсе DAO. &lt;br /&gt;
&lt;br /&gt;
&lt;pre class=&quot;brush:java&quot;&gt;public void createEmployee(@Param(&quot;senderAccountId&quot;) int senderAccountId,@Param(&quot;messageSubject&quot;) String messageSubject, @Param(&quot;idWrapper&quot;)IdWrapper idWrapper);
&lt;/pre&gt;
Класс IdWrapper это класс с единственным полем Integer id, в которое будет записан id вставленной записи после выполнения запроса.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;2. Определение и использование процедур внутри запросов myBatis.&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
Внутри myBatis запросов возможно определять и использовать свои процедуры. Ниже приведен пример такой процедуры для БД Oracle.


&lt;br /&gt;
&lt;pre class=&quot;brush:sql&quot;&gt;    
&amp;lt;insert id=&quot;deleteCTSession&quot;&amp;gt;
{call
    declare
      --declaration block
    begin
      --procedure code
      insert into employee(first_name, last_name) values (#{firstName}, #{lastName});
    end
}        
&amp;lt;/insert&amp;gt;
&lt;/pre&gt;
В процедурах в MyBatis разрешен и должен использоваться символ ; для завершения sql предложения, в то время как в обычных MyBatis блоках использование данного символа приведет к ошибке выполнения запроса.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;3. Возвращение значений из процедур myBatis в Oracle&lt;/b&gt;&lt;br /&gt;
&lt;pre class=&quot;brush: sql&quot;&gt;&amp;lt;insert id=&quot;createEmployee&quot; statementType=&quot;CALLABLE&quot;&amp;gt;
   {call
   declare
      n_employee_id employee.id%type := null;
   begin
      insert into employee(first_name, last_name) values (#{firstName}, #{lastName}) 
      returning id into n_employee_id;

      #{idWrapper.id, javaType=Integer, jdbcType=NUMERIC, mode=OUT} := n_employee_id;
   end}
&amp;lt;/insert&amp;gt;
&lt;/pre&gt;
Здесь обязательно следует использовать атрибут statementType=&quot;CALLABLE&quot;.&lt;br /&gt;
Также для возвращаемого значение должно быть указано mode=OUT.&lt;br /&gt;
&lt;br /&gt;
Сигнатура метода в интерфейсе DAO точно такая же как в п.1.&lt;br /&gt;
После выполнения метода id вставленной записи будет записан в idWrapper.id.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;4. Возможность использования sql фрагментов глобально.&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
В MyBatis имеется возможность использовать sql фрагменты объявленные в каком либо файле DAO в любых других файлах DAO.&lt;br /&gt;
Например, пусть у нас имеется фрагмент getUTCSysDateFragment объявленный в файле CommonFragmentsDAO.xml c namespace=&quot;CommonFragmentsDAO&quot;.&lt;br /&gt;
&lt;pre class=&quot;brush: sql&quot;&gt;&amp;lt;mapper namespace=&quot;CommonFragmentsDAO&quot;&amp;gt;
    &amp;lt;sql id=&quot;getUTCSysDate&quot;&amp;gt;
        CAST(sys_extract_utc(SYSTIMESTAMP) AS DATE)
    &amp;lt;/sql&amp;gt;
&amp;lt;/mapper&amp;gt;
&lt;/pre&gt;
&lt;br /&gt;
Мы можем воспользоваться этим фрагментом в любом другом DAO сославшись на него с указанием namespace.
&lt;br /&gt;
&lt;pre class=&quot;brush: sql&quot;&gt;    
&amp;lt;insert id=&quot;createEmployee&quot; keycolumn=&quot;ID&quot; keyproperty=&quot;idWrapper.id&quot; usegeneratedkeys=&quot;true&quot;&amp;gt;
   insert into employee(first_name, last_name, utc_create_date) 
   values (#{firstName}, #{lastName}, &amp;lt;include refid=&quot;CommonFragmentsDAO.getUTCSysDate&quot;/&amp;gt; )
&amp;lt;/insert&amp;gt;
&lt;/pre&gt;
&lt;br /&gt;
&lt;br /&gt;
В данной статье я описал некоторые не очевидные возможности MyBatis, которые я использовал на своих проектах. По мере обнаружения других подобных возможностей статья будет дополняться. 
</content><link rel='replies' type='application/atom+xml' href='http://cloud-notes.blogspot.com/feeds/1674389283192236916/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://cloud-notes.blogspot.com/2015/03/mybatis-3.html#comment-form' title='Комментарии: 1'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4617646790887709090/posts/default/1674389283192236916'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4617646790887709090/posts/default/1674389283192236916'/><link rel='alternate' type='text/html' href='http://cloud-notes.blogspot.com/2015/03/mybatis-3.html' title='Некоторые малоизвестные возможности MyBatis 3'/><author><name>Валентин Рудницкий</name><uri>http://www.blogger.com/profile/05470148883336688808</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjBWrt82ftGCCpZbQmACEXshP_yEaufcjxxSmPpDqmFdZy1cPHo9i_GPgt_i3ZkhkOWT9rER_llk7r0mvhhQHYVMgnAys99H-gzGffrJGIV08I8krMJG-bkareQ-f-rRuU/s113/tizer_avatar_ara.png'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4617646790887709090.post-5714691316003853946</id><published>2013-12-06T15:47:00.000+03:00</published><updated>2013-12-06T15:47:33.613+03:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="system tray (системный трей)"/><category scheme="http://www.blogger.com/atom/ns#" term="windows xp"/><title type='text'>Что делать если пропадает иконка в трее в Windows XP?</title><content type='html'>В Windows XP часто бывает, что вроде бы без видимых причин пропадают иконке в трее. Лечится это одним из следующих способов (если не работает один, используем другой).
&lt;br/&gt;&lt;br/&gt;
1. Проверить чтобы в автозагрузке обязательно присутствовал файл &lt;i&gt;C:\WINDOWS\system32\systray.exe&lt;/i&gt;. Если его там нету - добавить.
&lt;br/&gt;&lt;br/&gt;
2. При пропадании иконок из трея - можно производить перезапуск windows explorer (этот способ самый действенный, должен работать в 90% случаев). Это можно делать вручную через диспетчер задач, завершая процесс explorer.exe и вновь запуская его, либо создать скриптовый  bat-файл

&lt;pre class=&quot;brush:plain&quot;&gt;@echo off
taskkill /f /im explorer.exe
explorer.exe
&lt;/pre&gt;

и производить перезапуск им (скачать уже созданный файл для этого можно &lt;a href=&quot;https://docs.google.com/file/d/0B2F_gGyxc-DDNG9lVzZJRFZTcVU/edit&quot;&gt;здесь&lt;/a&gt;).
&lt;br/&gt;&lt;br/&gt;
3. Иногда бывает, что иконки пропадают во время загрузки Windows. Обычно это связано с тем, что в автозапуске находится слишком много приложений, и windows explorer &quot;не успевает&quot; добавить иконки всех приложений в трей. В этом случае следует либо поудалять часть приложений из автозапуска, либо же воспользоваться какой нибудь программой позволяющей замедлить запуск приложений при загрузке, например, Startup Delayer.</content><link rel='replies' type='application/atom+xml' href='http://cloud-notes.blogspot.com/feeds/5714691316003853946/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://cloud-notes.blogspot.com/2013/12/windows-xp.html#comment-form' title='Комментарии: 1'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4617646790887709090/posts/default/5714691316003853946'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4617646790887709090/posts/default/5714691316003853946'/><link rel='alternate' type='text/html' href='http://cloud-notes.blogspot.com/2013/12/windows-xp.html' title='Что делать если пропадает иконка в трее в Windows XP?'/><author><name>Валентин Рудницкий</name><uri>http://www.blogger.com/profile/05470148883336688808</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjBWrt82ftGCCpZbQmACEXshP_yEaufcjxxSmPpDqmFdZy1cPHo9i_GPgt_i3ZkhkOWT9rER_llk7r0mvhhQHYVMgnAys99H-gzGffrJGIV08I8krMJG-bkareQ-f-rRuU/s113/tizer_avatar_ara.png'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4617646790887709090.post-1218311331732499193</id><published>2013-04-08T15:18:00.000+03:00</published><updated>2016-09-30T15:10:30.174+03:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="gui"/><category scheme="http://www.blogger.com/atom/ns#" term="java"/><category scheme="http://www.blogger.com/atom/ns#" term="мышь"/><title type='text'>Контекстное меню с командами вырезать, копировать, вставить, выделить всё для JTextComponent на java</title><content type='html'>В этой статье я хочу привести пример всплывающего по щелчку правой клавишей мыши меню с командами &lt;b&gt;&lt;i&gt;вырезать, копировать, вставить, выделить всё&lt;/i&gt;&lt;/b&gt;. Данное меню выполнено в виде класса, реализующего интерфейс &lt;i&gt;MouseListener&lt;/i&gt;, для использования его следует просто добавить к компоненту расширяющему &lt;i&gt;JTextComponent &lt;/i&gt;(&lt;i&gt;JTextField&lt;/i&gt;, &lt;i&gt;JEditorPane&lt;/i&gt; и т.д.) методом &lt;i&gt;addMouseListener()&lt;/i&gt;.
Ненужные команды меню автоматически скрываются, отображаются только те, выполнение которых возможно с текущим компонентом в текущем состоянии. Если никакие команды не могут быть выполнены, меню попросту не отображается. 

&lt;br /&gt;
&lt;a name=&#39;more&#39;&gt;&lt;/a&gt;&lt;br /&gt;
&lt;pre class=&quot;brush:java&quot;&gt;package rva.common.gui.mouse;

import java.awt.Toolkit;
import java.awt.datatransfer.DataFlavor;
import java.awt.event.InputEvent;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.util.ArrayList;
import java.util.List;
import javax.swing.Action;
import javax.swing.JPopupMenu;
import javax.swing.text.JTextComponent;

/**
 * MouseListener c командами копировать, вырезать, вставить, выделить все - для JTextComponent
 * @author Cloud
 */
public class ContextMenuMouseListener extends MouseAdapter {

    private final static String CUTTEXT = &quot;Вырезать&quot;;
    private final static String SELECTAllTEXT = &quot;Выделить все&quot;;
    private final static String COPYTEXT = &quot;Копировать&quot;;
    private final static String PASTETEXT = &quot;Вставить&quot;;

    @Override
    public void mouseClicked(MouseEvent e) {
        if (e.getModifiers() == InputEvent.BUTTON3_MASK) {
            if (!(e.getSource() instanceof JTextComponent)) {
                return;
            }

            JTextComponent textComponent = (JTextComponent) e.getSource();
            textComponent.requestFocus();
            boolean enabled = textComponent.isEnabled();
            boolean editable = textComponent.isEditable();
            boolean nonempty = !(textComponent.getText() == null || textComponent.getText().equals(&quot;&quot;));
            boolean marked = textComponent.getSelectedText() != null;

            boolean pasteAvailable =
                    Toolkit.getDefaultToolkit().getSystemClipboard().
                    getContents(null).isDataFlavorSupported(
                    DataFlavor.stringFlavor);

            JPopupMenu popup = new JPopupMenu();

            if (enabled &amp;amp;&amp;amp; editable &amp;amp;&amp;amp; marked) {
                Action cutAction = textComponent.getActionMap().get(DefaultEditorKit.cutAction);
                if (cutAction == null) {
                    cutAction = textComponent.getActionMap().get(&quot;cut&quot;);
                }
                if (cutAction != null) {
                    popup.add(cutAction).setText(CUTTEXT);
                }
            }
            if (enabled &amp;amp;&amp;amp; marked) {
                Action copyAction = textComponent.getActionMap().get(DefaultEditorKit.copyAction);
                if (copyAction == null) {
                    copyAction = textComponent.getActionMap().get(&quot;copy&quot;);
                }
                if (copyAction != null) {
                    popup.add(copyAction).setText(COPYTEXT);
                }
            }
            if (enabled &amp;amp;&amp;amp; editable &amp;amp;&amp;amp; pasteAvailable) {
                Action pasteAction = textComponent.getActionMap().get(DefaultEditorKit.pasteAction);
                if (pasteAction == null) {
                    pasteAction = textComponent.getActionMap().get(&quot;paste&quot;);
                }
                if (pasteAction != null) {
                    popup.add(pasteAction).setText(PASTETEXT);
                }
            }

            if (enabled &amp;amp;&amp;amp; nonempty) {
                Action selectAllAction = textComponent.getActionMap().get(DefaultEditorKit.selectAllAction);
                if (selectAllAction == null) {
                    selectAllAction = textComponent.getActionMap().get(&quot;selectAll&quot;);
                }
                if (selectAllAction != null) {
                    if (popup.getComponentCount() &amp;gt; 0) {
                        if (!(popup.getComponent(popup.getComponentCount() - 1) instanceof JPopupMenu.Separator)) {
                            popup.addSeparator();
                        }
                    }
                    popup.add(selectAllAction).setText(SELECTAllTEXT);
                }

            }

            if (popup.getComponentCount() &amp;gt; 0) {
                if (popup.getComponent(0) instanceof JPopupMenu.Separator) {
                    popup.remove(0);
                }
                if (popup.getComponent(popup.getComponentCount() - 1) instanceof JPopupMenu.Separator) {
                    popup.remove(popup.getComponentCount() - 1);
                }
               

                popup.show(e.getComponent(), e.getX(), e.getY() - popup.getSize().height);
            }
        }
    }
}
&lt;/pre&gt;
&lt;br /&gt;
Вышепреведенное меню обычно имеет смысл добавить ко всем текстовым компонентам приложения. Сделать это можно следующим рекурсивным методом (после инициализации всех компонентов).
&lt;br /&gt;
&lt;pre class=&quot;brush:java&quot;&gt;private static void iterateAllInterfaceComponentsAndAddContextMenuMouseListener(
       Component component) {
    if (component instanceof JTextComponent) {
       ((JTextComponent)component).addMouseListener(new ContextMenuMouseListener());
    }
    if (component instanceof Container) {
        for (Component c : ((Container) component).getComponents()) {
            iterateAllInterfaceComponentsAndAddContextMenuMouseListener(c);
        }
    }
}
&lt;/pre&gt;
</content><link rel='replies' type='application/atom+xml' href='http://cloud-notes.blogspot.com/feeds/1218311331732499193/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://cloud-notes.blogspot.com/2013/04/jtextcomponent-java.html#comment-form' title='Комментарии: 6'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4617646790887709090/posts/default/1218311331732499193'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4617646790887709090/posts/default/1218311331732499193'/><link rel='alternate' type='text/html' href='http://cloud-notes.blogspot.com/2013/04/jtextcomponent-java.html' title='Контекстное меню с командами вырезать, копировать, вставить, выделить всё для JTextComponent на java'/><author><name>Валентин Рудницкий</name><uri>http://www.blogger.com/profile/05470148883336688808</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjBWrt82ftGCCpZbQmACEXshP_yEaufcjxxSmPpDqmFdZy1cPHo9i_GPgt_i3ZkhkOWT9rER_llk7r0mvhhQHYVMgnAys99H-gzGffrJGIV08I8krMJG-bkareQ-f-rRuU/s113/tizer_avatar_ara.png'/></author><thr:total>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4617646790887709090.post-3730116514029281785</id><published>2012-12-11T12:54:00.000+03:00</published><updated>2016-09-30T15:11:52.942+03:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="gui"/><category scheme="http://www.blogger.com/atom/ns#" term="java"/><category scheme="http://www.blogger.com/atom/ns#" term="look and feel"/><title type='text'>Использование Look And Feel в приложениях на java</title><content type='html'>Поддержка Look And Feel - очень важная и достаточно необычная особенность языка программирования java. С использованием Look And Feel можно одной командой изменить стиль всех окон и диалогов в приложении. Существует около десятка стандартных Look And Feel встроенных в java, а помимо этого возможна установка сторонних Look And Feel и самостоятельное создание их. LookAndFeel крайне удобны тем, что с их помощью можно стандартизировать оформление всего приложения, и затем, при необходимости, легко изменять стили оформления одновременно для всех элементов приложения.&lt;br /&gt;
&lt;a name=&#39;more&#39;&gt;&lt;/a&gt;&lt;br /&gt;
Большинство операций, связанных с Look And Feel, могут быть осуществлены с использованием статических методов класса UIManager. &lt;br /&gt;
Получить список установленных Look And Feel можно командой &lt;i&gt;UIManager.getInstalledLookAndFeels()&lt;/i&gt;.&lt;br /&gt;
Задать используемый Look And Feel возможно командой &lt;i&gt;UIManager.setLookAndFeel(LookAndFeel newLookAndFeel)&lt;/i&gt;.
Ниже приведен пример задания стандартного MetalLookAndFeel с установкой темы оформления.&lt;br /&gt;
&lt;pre class=&quot;brush:java&quot;&gt;  public void initMetalLookAndFeel() {
        try {
            // устанавливаем используемую тему оформления. Возможные варианты
            // OceanTheme, DefaultMetalTheme
            MetalLookAndFeel.setCurrentTheme(new DefaultMetalTheme());
            // устанавливаем Look And Feel
            UIManager.setLookAndFeel(new MetalLookAndFeel());
        } catch (UnsupportedLookAndFeelException e) {
            System.err.println(&quot;Can&#39;t use the specified look and feel on this platform.&quot;);
        } catch (Exception e) {
            System.err.println(&quot;Couldn&#39;t get specified look and feel, for some reason.&quot;);
        }
  }
&lt;/pre&gt;
&lt;br /&gt;
Однако, как можно заметить, стандартные Look And Feel далеко не всегда сочетаются с темой оформления других окон используемой операционной системы. Существует возможность получить наиболее подходящий Look And Feel операционной системы, в которой выполняется программа java - команда &lt;i&gt;UIManager.getSystemLookAndFeelClassName()&lt;/i&gt;. Для Windows XP, на мой взгляд, данная функция действительно возвращает наиболее сочетающийся с интерфейсом Windows из стандартных Look And Feel  -  &lt;i&gt;com.sun.java.swing.plaf.windows.WindowsLookAndFeel.&lt;/i&gt; &lt;br /&gt;
Пример с методом &lt;i&gt;UIManager.getSystemLookAndFeelClassName()&lt;/i&gt; показан ниже &lt;br /&gt;
&lt;pre class=&quot;brush:java&quot;&gt;  public void initSystemLookAndFeel() {
        try {
            String systemLookAndFeelClassName = UIManager.getSystemLookAndFeelClassName();
            // устанавливаем LookAndFeel
            UIManager.setLookAndFeel(systemLookAndFeelClassName);
        } catch (UnsupportedLookAndFeelException e) {
            System.err.println(&quot;Can&#39;t use the specified look and feel on this platform.&quot;);
        } catch (Exception e) {
            System.err.println(&quot;Couldn&#39;t get specified look and feel, for some reason.&quot;);
        }
  }
&lt;/pre&gt;
&lt;br /&gt;
Обычно, предпочтительный Look And Feel задается при инициализации приложения, &lt;b&gt;до создания каких-либо графических окон и форм&lt;/b&gt;. 
Если же есть необходимость установить Look And Feel после инициализации форм, то, следует, после установки требуемого Look And Feel, вызвать метод для обновления графического вида компонента и всех дочерних компонентов &lt;i&gt;SwingUtilities.updateComponentTreeUI(Component component)&lt;/i&gt;, чтобы новый Look And Feel применился.</content><link rel='replies' type='application/atom+xml' href='http://cloud-notes.blogspot.com/feeds/3730116514029281785/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://cloud-notes.blogspot.com/2012/12/look-and-feel-java.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4617646790887709090/posts/default/3730116514029281785'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4617646790887709090/posts/default/3730116514029281785'/><link rel='alternate' type='text/html' href='http://cloud-notes.blogspot.com/2012/12/look-and-feel-java.html' title='Использование Look And Feel в приложениях на java'/><author><name>Валентин Рудницкий</name><uri>http://www.blogger.com/profile/05470148883336688808</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjBWrt82ftGCCpZbQmACEXshP_yEaufcjxxSmPpDqmFdZy1cPHo9i_GPgt_i3ZkhkOWT9rER_llk7r0mvhhQHYVMgnAys99H-gzGffrJGIV08I8krMJG-bkareQ-f-rRuU/s113/tizer_avatar_ara.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4617646790887709090.post-2533336653870978999</id><published>2012-09-14T10:22:00.000+03:00</published><updated>2016-09-30T15:13:13.897+03:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="java"/><category scheme="http://www.blogger.com/atom/ns#" term="log4j"/><category scheme="http://www.blogger.com/atom/ns#" term="логирование"/><title type='text'>Перенаправление сообщений со стандартного потока вывода system.out в логгер log4j на java</title><content type='html'>В коде своих приложений для логирования я везде стараюсь использовать библиотеку log4j, однако во многих сторонних библиотеках часто используются другие средства логирования, в частности стандартные потоки вывода System.out и System.err (методы System.out.println() и т.д.). При работе приложения такие сообщения и информация которую они несут, могут попросту потеряться, если их не перехватывать. Для перехвата таких сообщений и был написан класс, приведенный ниже.&lt;br /&gt;
&lt;a name=&#39;more&#39;&gt;&lt;/a&gt;Все сообщения выводятся в логгер с именем &quot;#SYSTEM_OUT&quot;. Для активации перенаправления необходимо один раз в начале работы приложения вызвать статический метод SystemOutAndErrToLog4jRedirecter.bindSystemOutAndErrToLog4j().&lt;br /&gt;
&lt;br /&gt;
&lt;pre class=&quot;brush:java&quot;&gt;package logging;

import java.io.PrintStream;
import org.apache.log4j.Logger;
/**
 *
 * @author Cloud
 */
public class SystemOutAndErrToLog4jRedirecter  {

    private static final Logger logger = Logger.getLogger(&quot;#SYSTEM_OUT&quot;);

    public static Logger getLogger() {
        return logger;
    }

    public static void bindSystemOutAndErrToLog4j() {
        System.setOut(createLoggingProxy(System.out));
        System.setErr(createLoggingProxy(System.err));
    }

    private static PrintStream createLoggingProxy(final PrintStream realPrintStream) {
        return new PrintStream(realPrintStream) {
            @Override
            public void print(final String str) {
                realPrintStream.print(str);
                logger.info(str);
            }
        };
    }
}
&lt;/pre&gt;
&lt;br /&gt;</content><link rel='replies' type='application/atom+xml' href='http://cloud-notes.blogspot.com/feeds/2533336653870978999/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://cloud-notes.blogspot.com/2012/09/systemout-log4j-java.html#comment-form' title='Комментарии: 2'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4617646790887709090/posts/default/2533336653870978999'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4617646790887709090/posts/default/2533336653870978999'/><link rel='alternate' type='text/html' href='http://cloud-notes.blogspot.com/2012/09/systemout-log4j-java.html' title='Перенаправление сообщений со стандартного потока вывода system.out в логгер log4j на java'/><author><name>Валентин Рудницкий</name><uri>http://www.blogger.com/profile/05470148883336688808</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjBWrt82ftGCCpZbQmACEXshP_yEaufcjxxSmPpDqmFdZy1cPHo9i_GPgt_i3ZkhkOWT9rER_llk7r0mvhhQHYVMgnAys99H-gzGffrJGIV08I8krMJG-bkareQ-f-rRuU/s113/tizer_avatar_ara.png'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4617646790887709090.post-8364522130311209233</id><published>2012-08-03T12:30:00.000+03:00</published><updated>2016-09-30T15:14:50.766+03:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="netbeans"/><category scheme="http://www.blogger.com/atom/ns#" term="serialVersionUID"/><category scheme="http://www.blogger.com/atom/ns#" term="плагины"/><category scheme="http://www.blogger.com/atom/ns#" term="сериализация"/><title type='text'>Удобная генерация serialVersionUID в NetBeans</title><content type='html'>Очень важно, чтобы для классов, реализующих интерфейс Serializable был определен serialVersionUID, почему, можно прочитать &lt;a href=&quot;http://cloud-notes.blogspot.com/2011/02/java_04.html&quot;&gt;здесь&lt;/a&gt;.&lt;br /&gt;
Как известно большинству разработчиков, работающих в NetBeans - по умолчанию  в NetBeans отсутствует возможность сгенерировать щелчком мыши serialVersionUID для класса реализующего интерфейс Serializable. Поэтому чтобы избежать повторения uid-ов приходится либо каким-то образом запоминать создаваемые uid-ы, либо писать случайные цифры и надеяться на удачу. Можно конечно использовать утилиту serialver, однако это очень неудобно. &lt;br /&gt;
&lt;a name=&#39;more&#39;&gt;&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
Существует стороннее решение этой проблемы в виде плагина - &lt;a href=&quot;http://kenai.com/projects/nb-svuid-generator/downloads/directory/nbms/&quot;&gt;nb-svuid-generator&lt;/a&gt;. Проект регулярно обновляется, последняя выпущеная версия поддерживает последнюю версию среды на данный момент NetBeans 7.2. &lt;br /&gt;
Для Netbeans 7.1 плагин можно скачать &lt;a href=&quot;http://kenai.com/projects/nb-svuid-generator/downloads/directory/nbms/nb7.1&quot;&gt;отсюда&lt;/a&gt;. Для NetBeans 7.2 - &lt;a href=&quot;http://kenai.com/projects/nb-svuid-generator/downloads/directory/nbms/nb7.2&quot;&gt;отсюда&lt;/a&gt;. &lt;br /&gt;
&lt;br /&gt;
После скачивания версии плагина для вашей среды необходимо сохранить его в любую папку. Затем в NetBeans в меню Сервис -&amp;gt; Подключаемые модули -&amp;gt; Загружено нажать кнопку &quot;Добавить подключаемый модуль&quot; и выбрать скачанный файл (если файла в диалоге не видно, нужно изменить расширение файла с .zip на .nbm). Плагин будет автоматически установлен, и после перезапуска среды, для классов реализующих интерфейс Serializable и не имеющих поля serialVersionUID, начнет появлятся предупреждение с предложением сгенерировать или создать serialVersionUID, как показано ниже.&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhpdgghxgqeSvujYgZBfCFlMTaYwO8Tl5pUGIm_RA3zW04ek_nOYjM82GnIyihSbyq2pg1RR0773eAbP_Jh9xLSbvxug3TpXfElJayetykcr2_eLHDhUhJ2rCc42gZtgOI-Yv2c_wg-k3wj/s1600/%25D0%2591%25D0%25B5%25D0%25B7%25D1%258B%25D0%25BC%25D1%258F%25D0%25BD%25D0%25BD%25D1%258B%25D0%25B9.PNG&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;152&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhpdgghxgqeSvujYgZBfCFlMTaYwO8Tl5pUGIm_RA3zW04ek_nOYjM82GnIyihSbyq2pg1RR0773eAbP_Jh9xLSbvxug3TpXfElJayetykcr2_eLHDhUhJ2rCc42gZtgOI-Yv2c_wg-k3wj/s400/%25D0%2591%25D0%25B5%25D0%25B7%25D1%258B%25D0%25BC%25D1%258F%25D0%25BD%25D0%25BD%25D1%258B%25D0%25B9.PNG&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://cloud-notes.blogspot.com/feeds/8364522130311209233/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://cloud-notes.blogspot.com/2012/08/serialversionuid-netbeans.html#comment-form' title='Комментарии: 2'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4617646790887709090/posts/default/8364522130311209233'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4617646790887709090/posts/default/8364522130311209233'/><link rel='alternate' type='text/html' href='http://cloud-notes.blogspot.com/2012/08/serialversionuid-netbeans.html' title='Удобная генерация serialVersionUID в NetBeans'/><author><name>Валентин Рудницкий</name><uri>http://www.blogger.com/profile/05470148883336688808</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjBWrt82ftGCCpZbQmACEXshP_yEaufcjxxSmPpDqmFdZy1cPHo9i_GPgt_i3ZkhkOWT9rER_llk7r0mvhhQHYVMgnAys99H-gzGffrJGIV08I8krMJG-bkareQ-f-rRuU/s113/tizer_avatar_ara.png'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhpdgghxgqeSvujYgZBfCFlMTaYwO8Tl5pUGIm_RA3zW04ek_nOYjM82GnIyihSbyq2pg1RR0773eAbP_Jh9xLSbvxug3TpXfElJayetykcr2_eLHDhUhJ2rCc42gZtgOI-Yv2c_wg-k3wj/s72-c/%25D0%2591%25D0%25B5%25D0%25B7%25D1%258B%25D0%25BC%25D1%258F%25D0%25BD%25D0%25BD%25D1%258B%25D0%25B9.PNG" height="72" width="72"/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4617646790887709090.post-6552546815848804494</id><published>2012-06-30T10:58:00.001+03:00</published><updated>2012-06-30T11:14:10.769+03:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="java"/><category scheme="http://www.blogger.com/atom/ns#" term="system tray (системный трей)"/><title type='text'>Работа с системном треем (system tray) на java</title><content type='html'>Для размещения иконки в трее можно воспользоваться стандартным классом java.awt.SystemTray, который стал доступен начиная с 6-й версии java. Данный класс воплощает собой системный трей среды в которой запущена виртуальная машина java. Перед началом работы с треем необходимо обязательно проверить его доступность с помощью метода SystemTray.isSupported(), далее следует получить текущий экземпляр SystemTray методом SystemTray.getSystemTray(). Вполне логично, что класс SystemTray является синглтоном, т.е. любое java приложение может иметь только один экземпляр SystemTray. &lt;br /&gt;
Системный трей может содержать некоторое количество иконок. Добавление иконок в системый трей производится с использованием команды add(java.awt.TrayIcon), а удаление командой remove(java.awt.TrayIcon).&lt;br /&gt;
Ниже привожу пример с официального сайта Oracle, в котором демонстрируется использование системного трея&lt;br /&gt;
&lt;br /&gt;
&lt;pre class=&quot;brush:java&quot;&gt;final TrayIcon trayIcon;

if (SystemTray.isSupported()) {

    SystemTray tray = SystemTray.getSystemTray();
    Image image = Toolkit.getDefaultToolkit().getImage(&quot;tray.gif&quot;);

    MouseListener mouseListener = new MouseListener() {
                
        public void mouseClicked(MouseEvent e) {
            System.out.println(&quot;Tray Icon - Mouse clicked!&quot;);                 
        }

        public void mouseEntered(MouseEvent e) {
            System.out.println(&quot;Tray Icon - Mouse entered!&quot;);                 
        }

        public void mouseExited(MouseEvent e) {
            System.out.println(&quot;Tray Icon - Mouse exited!&quot;);                 
        }

        public void mousePressed(MouseEvent e) {
            System.out.println(&quot;Tray Icon - Mouse pressed!&quot;);                 
        }

        public void mouseReleased(MouseEvent e) {
            System.out.println(&quot;Tray Icon - Mouse released!&quot;);                 
        }
    };

    ActionListener exitListener = new ActionListener() {
        public void actionPerformed(ActionEvent e) {
            System.out.println(&quot;Exiting...&quot;);
            System.exit(0);
        }
    };
            
    PopupMenu popup = new PopupMenu();
    MenuItem defaultItem = new MenuItem(&quot;Exit&quot;);
    defaultItem.addActionListener(exitListener);
    popup.add(defaultItem);

    trayIcon = new TrayIcon(image, &quot;Tray Demo&quot;, popup);

    ActionListener actionListener = new ActionListener() {
        public void actionPerformed(ActionEvent e) {
            trayIcon.displayMessage(&quot;Action Event&quot;, 
                &quot;An Action Event Has Been Performed!&quot;,
                TrayIcon.MessageType.INFO);
        }
    };
            
    trayIcon.setImageAutoSize(true);
    trayIcon.addActionListener(actionListener);
    trayIcon.addMouseListener(mouseListener);

    try {
        tray.add(trayIcon);
    } catch (AWTException e) {
        System.err.println(&quot;TrayIcon could not be added.&quot;);
    }

} else {

    //  System Tray is not supported

}
&lt;/pre&gt;&lt;br /&gt;
В вышеприведенном примере есть один существенный недочет - для всплывающего меню там используется тяжеловесный устарелый компонент java.awt.PopupMenu, одним из недостатков которого является невозможность установки иконок для его MenuItem&#39;ов. Несмотря на то, что TrayIcon по умолчанию принимает в своем конструкторе только java.awt.PopupMenu, возможность использовать более продвинутый javax.swing.JPopupMenu все же существует. Необходимо добавить к TrayIcon MouseListener, который будет создавать JPopupMenu при своем срабатывании. Ниже приведен пример такой реализации.&lt;br /&gt;
&lt;br /&gt;
&lt;pre class=&quot;brush:java&quot;&gt;final TrayIcon trayIcon;

        if (SystemTray.isSupported()) {

            SystemTray tray = SystemTray.getSystemTray();
            Image image = Toolkit.getDefaultToolkit().getImage(&quot;tray.gif&quot;);



            ActionListener exitListener = new ActionListener() {

                public void actionPerformed(ActionEvent e) {
                    System.out.println(&quot;Exiting...&quot;);
                    System.exit(0);
                }
            };

            final JPopupMenu popup = new JPopupMenu();
            JMenuItem defaultItem = new JMenuItem(&quot;Exit&quot;);
            defaultItem.addActionListener(exitListener);
            popup.add(defaultItem);

            trayIcon = new TrayIcon(image, &quot;Tray Demo&quot;);

            ActionListener actionListener = new ActionListener() {

                public void actionPerformed(ActionEvent e) {
                    trayIcon.displayMessage(&quot;Action Event&quot;,
                            &quot;An Action Event Has Been Performed!&quot;,
                            TrayIcon.MessageType.INFO);
                }
            };

            trayIcon.setImageAutoSize(true);
            trayIcon.addActionListener(actionListener);
            trayIcon.addMouseListener(new MouseAdapter() {

                @Override
                public void mouseReleased(MouseEvent e) {
                    if (e.isPopupTrigger()) {
                        popup.setLocation(e.getX(), e.getY());
                        popup.setInvoker(popup);
                        popup.setVisible(true);
                    }
                }
            });

            try {
                tray.add(trayIcon);
            } catch (AWTException e) {
                System.err.println(&quot;TrayIcon could not be added.&quot;);
            }

        } else {
            //  System Tray is not supported
        }
&lt;/pre&gt;</content><link rel='replies' type='application/atom+xml' href='http://cloud-notes.blogspot.com/feeds/6552546815848804494/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://cloud-notes.blogspot.com/2012/06/system-tray-java.html#comment-form' title='Комментарии: 7'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4617646790887709090/posts/default/6552546815848804494'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4617646790887709090/posts/default/6552546815848804494'/><link rel='alternate' type='text/html' href='http://cloud-notes.blogspot.com/2012/06/system-tray-java.html' title='Работа с системном треем (system tray) на java'/><author><name>Валентин Рудницкий</name><uri>http://www.blogger.com/profile/05470148883336688808</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjBWrt82ftGCCpZbQmACEXshP_yEaufcjxxSmPpDqmFdZy1cPHo9i_GPgt_i3ZkhkOWT9rER_llk7r0mvhhQHYVMgnAys99H-gzGffrJGIV08I8krMJG-bkareQ-f-rRuU/s113/tizer_avatar_ara.png'/></author><thr:total>7</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4617646790887709090.post-5466624077140223202</id><published>2012-05-30T22:53:00.000+03:00</published><updated>2012-05-30T22:53:28.331+03:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="apache tomcat"/><category scheme="http://www.blogger.com/atom/ns#" term="java"/><title type='text'>Как остановить веб приложение java на Apache Tomcat непосредственно из програмного кода</title><content type='html'>Остановку веб приложения java на Tomcat из программного кода можно выполнить путем посылки команды выключения на специальный порт, который может быть настроен в корневом элементе файла server.xml Томката. &lt;br /&gt;
&lt;br /&gt;
Итак, алгоритм действий по шагам:&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;1.&lt;/b&gt; Добавить в корневой элемент файла CATALINA_HOME/conf/server.xml код, приведенный ниже:&lt;br /&gt;
&lt;br /&gt;
&lt;pre class=&quot;brush:xml&quot;&gt;&amp;lt;server port=&quot;8005&quot; shutdown=&quot;myShutDownCommand&quot;&amp;gt;
&lt;/pre&gt;&lt;br /&gt;
Аттрибут port не обязателен. Если он пропущен - то будет использован порт по умолчанию - 8005. Значением аттрибута shutdown может быть все что угодно. Это значение не должно быть известно никому кроме вас.&lt;br /&gt;
&lt;br /&gt;
Может возникнуть сложность в нахождении файла server.xml. Он может оказаться в различных местах. У меня при использовании Netbeans 7.1.2 он оказался в директории вида &lt;i&gt;C:\Documents and Settings\&amp;lt;UserName&amp;gt;\.netbeans\7.1.2\apache-tomcat-7.0.22.0_base\conf&lt;/i&gt;. Файл server.xml есть также по пути вида &lt;i&gt;C:\Program Files\Apache Software Foundation\Apache Tomcat 7.0.22\conf&lt;/i&gt; - путь к нужному файлу будет зависеть от того, с какими параметрами был запущен томкат.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;2.&lt;/b&gt; Создать код в java программе, который будет посылать команду остановки используя java.net.Socket на порт остановки tomcat.&lt;br /&gt;
&lt;br /&gt;
&lt;pre class=&quot;brush:java&quot;&gt;try { 
    Socket socket = new Socket(&quot;localhost&quot;, 8005); 
    if (socket.isConnected()) { 
        PrintWriter pw = new PrintWriter(socket.getOutputStream(), true); 
        pw.println(&quot;myShutDownCommand&quot;);//send shut down command 
        pw.close(); 
        socket.close(); 
    } 
} catch (Exception e) { 
    e.printStackTrace(); 
}
&lt;/pre&gt;</content><link rel='replies' type='application/atom+xml' href='http://cloud-notes.blogspot.com/feeds/5466624077140223202/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://cloud-notes.blogspot.com/2012/05/java-apache-tomcat.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4617646790887709090/posts/default/5466624077140223202'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4617646790887709090/posts/default/5466624077140223202'/><link rel='alternate' type='text/html' href='http://cloud-notes.blogspot.com/2012/05/java-apache-tomcat.html' title='Как остановить веб приложение java на Apache Tomcat непосредственно из програмного кода'/><author><name>Валентин Рудницкий</name><uri>http://www.blogger.com/profile/05470148883336688808</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjBWrt82ftGCCpZbQmACEXshP_yEaufcjxxSmPpDqmFdZy1cPHo9i_GPgt_i3ZkhkOWT9rER_llk7r0mvhhQHYVMgnAys99H-gzGffrJGIV08I8krMJG-bkareQ-f-rRuU/s113/tizer_avatar_ara.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4617646790887709090.post-2103765587834131247</id><published>2012-05-18T16:51:00.001+03:00</published><updated>2012-05-18T16:52:24.653+03:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="apache tomcat"/><category scheme="http://www.blogger.com/atom/ns#" term="java"/><title type='text'>Как единоразово выполнить некоторый код в java при запуске web приложения на Apache Tomcat</title><content type='html'>Чтобы выполнить некоторый код единоразово при запуске веб приложения на Apache Tomcat (например создать иконку в трее и т.д.) следует сконфигурировать listener в файле web.xml&lt;br /&gt;
&lt;br /&gt;
Итак, по шагам:&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;1.&lt;/b&gt; Добавляем в раздел &amp;lt;web-app&amp;gt; код листенера со ссылкой на наш класс.&lt;br /&gt;
&lt;br /&gt;
&lt;pre class=&quot;brush:xml&quot;&gt;&amp;lt;listener&amp;gt;
    &amp;lt;listener-class&amp;gt;mypackage.StartListener&amp;lt;/listener-class&amp;gt;
&amp;lt;/listener&amp;gt;
&lt;/pre&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;2.&lt;/b&gt; Создаем класс своего листенера наследуясь от javax.servlet.ServletContextListener.&lt;br /&gt;
&lt;br /&gt;
&lt;pre class=&quot;brush:java&quot;&gt;package mypackage;

import javax.servlet.ServletContextEvent;

/**
 *
 * @author Cloud
 */
public class StartListener implements javax.servlet.ServletContextListener {

    @Override
    public void contextDestroyed(ServletContextEvent sce) {
         // код выполняющийся при уничтожении контейнера
    }

    @Override
    public void contextInitialized(ServletContextEvent sce) {
        // код выполняющийся при инициализации контейнера
    }
}
&lt;/pre&gt;</content><link rel='replies' type='application/atom+xml' href='http://cloud-notes.blogspot.com/feeds/2103765587834131247/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://cloud-notes.blogspot.com/2012/05/java-web-apache-tomcat.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4617646790887709090/posts/default/2103765587834131247'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4617646790887709090/posts/default/2103765587834131247'/><link rel='alternate' type='text/html' href='http://cloud-notes.blogspot.com/2012/05/java-web-apache-tomcat.html' title='Как единоразово выполнить некоторый код в java при запуске web приложения на Apache Tomcat'/><author><name>Валентин Рудницкий</name><uri>http://www.blogger.com/profile/05470148883336688808</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjBWrt82ftGCCpZbQmACEXshP_yEaufcjxxSmPpDqmFdZy1cPHo9i_GPgt_i3ZkhkOWT9rER_llk7r0mvhhQHYVMgnAys99H-gzGffrJGIV08I8krMJG-bkareQ-f-rRuU/s113/tizer_avatar_ara.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4617646790887709090.post-4501069278869898106</id><published>2012-05-15T11:17:00.000+03:00</published><updated>2012-05-15T11:17:20.761+03:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="ip"/><category scheme="http://www.blogger.com/atom/ns#" term="java"/><title type='text'>Как в java определить свой внешний IP адрес</title><content type='html'>Программно определить внешний IP не так уж и просто как может показаться на первый взгляд. В java нет да и не может быть стандартной функции для получения IP адреса своего компьютера в интернете. При этом ip адрес компьютера в локальной сети получить достаточно просто, для этого можно воспользоваться классом InetAddress.&lt;br /&gt;
&lt;pre class=&quot;brush:java&quot;&gt;InetAddress addr = InetAddress.getLocalHost();         
String myLANIP = addr.getHostAddress();
&lt;/pre&gt;Для получения внешнего IP необходимо подключиться к какому-нибудь серверу в интернете, который вернет IP под которым он видит данный компьютер. В общем случае необходимо подключится к серверу (сайту) предоставляющему услугу определения IP, получить ответ в виде html кода и выделить из этого кода IP адрес. Ниже приведен пример с использованием сервиса http://myip.by/ - он удобен тем, что возвращает минимум лишней информации.&lt;br /&gt;
&lt;br /&gt;
&lt;pre class=&quot;brush:java&quot;&gt;private static String getCurrentIP() {
        String result = null;
        try {
            BufferedReader reader = null;
            try {
                URL url = new URL(&quot;http:&amp;#47;&amp;#47;myip.by&amp;#47;&quot;);
                InputStream inputStream = null;
                inputStream = url.openStream();
                reader = new BufferedReader(new InputStreamReader(inputStream));
                StringBuilder allText = new StringBuilder();
                char[] buff = new char[1024];

                int count = 0;
                while ((count = reader.read(buff)) != -1) {
                    allText.append(buff, 0, count);
                }
// Строка содержащая IP имеет следующий вид 
// &amp;lt;a href=&quot;whois.php?127.0.0.1&quot;&amp;gt;whois 127.0.0.1&amp;lt;/a&amp;gt; 
                Integer indStart = allText.indexOf(&quot;\&quot;&gt;whois &quot;);
                Integer indEnd = allText.indexOf(&quot;&amp;lt;/a&amp;gt;&quot;, indStart);

                String ipAddress = new String(allText.substring(indStart + 8, indEnd));
                if (ipAddress.split(&quot;\\.&quot;).length == 4) { // минимальная (неполная) 
                //проверка что выбранный текст является ip адресом.
                    result = ipAddress;
                }
            } catch (MalformedURLException ex) {
                 ex.printStackTrace();
            } catch (IOException ex) {
                 ex.printStackTrace();
            } finally {
                if (reader != null) {
                    try {
                        reader.close();
                    } catch (Exception ex) {
                        ex.printStackTrace();
                    }
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
       
        return result;
    }
&lt;/pre&gt;</content><link rel='replies' type='application/atom+xml' href='http://cloud-notes.blogspot.com/feeds/4501069278869898106/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://cloud-notes.blogspot.com/2012/05/java-ip.html#comment-form' title='Комментарии: 6'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4617646790887709090/posts/default/4501069278869898106'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4617646790887709090/posts/default/4501069278869898106'/><link rel='alternate' type='text/html' href='http://cloud-notes.blogspot.com/2012/05/java-ip.html' title='Как в java определить свой внешний IP адрес'/><author><name>Валентин Рудницкий</name><uri>http://www.blogger.com/profile/05470148883336688808</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjBWrt82ftGCCpZbQmACEXshP_yEaufcjxxSmPpDqmFdZy1cPHo9i_GPgt_i3ZkhkOWT9rER_llk7r0mvhhQHYVMgnAys99H-gzGffrJGIV08I8krMJG-bkareQ-f-rRuU/s113/tizer_avatar_ara.png'/></author><thr:total>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4617646790887709090.post-3556437151893188180</id><published>2012-05-13T11:55:00.001+03:00</published><updated>2012-12-02T15:31:09.816+03:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="gui"/><category scheme="http://www.blogger.com/atom/ns#" term="java"/><category scheme="http://www.blogger.com/atom/ns#" term="экран"/><title type='text'>Как в java поместить фрейм (JFrame) в центре экрана</title><content type='html'>Основной сложностью при помещении фрейма в центр экрана является получение значения текущего разрешения экрана. Получить разрешение экрана в java можно используя класс java.awt.Toolkit вызвав метод java.awt.Toolkit.getDefaultToolkit().getScreenSize().&lt;br /&gt;
Он возвратит значение разрешения экрана в виде объекта класса Dimension. &lt;br /&gt;
Дальше необходимо просто вычислить координаты, куда следует поместить фрейм.&lt;br /&gt;
Пример:&lt;br /&gt;
&lt;br /&gt;
&lt;pre class=&quot;brush:java&quot;&gt;
    /**
    * Puts any Window or Frame to the centre of the screen.
    * 
    * @author Cloud
    */
    public static void centerFrame(Window frame) {
        Dimension screenSize = java.awt.Toolkit.getDefaultToolkit().getScreenSize();
        int x = (int) ((screenSize.getWidth() - frame.getWidth()) / 2);
        if (x &lt; 0) {
            x = 0;
        }
        int y = (int) ((screenSize.getHeight() - frame.getHeight()) / 2);
        if (y &lt; 0) {
            y = 0;
        }
        frame.setBounds(x, y, frame.getWidth(), frame.getHeight());
    }
&lt;/pre&gt;
&lt;br /&gt;
&lt;b&gt;UPD (из комментария Tom-Trix):&lt;/b&gt;
Есть более простой способ помещения фрейма в центр экрана - использование метода &lt;b&gt;frame.setLocationRelativeTo(null)&lt;/b&gt;. Однако следует учитывать, что данный метод будет работать только при использовании java версии выше 1.4 (первый способ работает и на более ранних версиях java). Пример :
&lt;pre class=&quot;brush:java&quot;&gt;
    /**
    * Puts any Window or Frame to the centre of the screen.
    * 
    */
    public static void centerFrame(Window frame) {
        frame.setLocationRelativeTo(null);
    }
&lt;/pre&gt;
&lt;br /&gt;
&lt;b&gt;Важно:&lt;/b&gt; вышеописанные методы следует вызывать &lt;b&gt;после&lt;/b&gt; установки размера фрейма (вызова методов setSize(), setPrefferedSize() и т.д.), а также желательно после добавления всех необходимых компонентов на фрейм, иначе эти методы просто не сработают или сработают не так, как ожидалось. Также скорее всего они могут не совсем корректно работать для среды с несколькими мониторами (не проверял).</content><link rel='replies' type='application/atom+xml' href='http://cloud-notes.blogspot.com/feeds/3556437151893188180/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://cloud-notes.blogspot.com/2012/05/java-jframe.html#comment-form' title='Комментарии: 5'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4617646790887709090/posts/default/3556437151893188180'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4617646790887709090/posts/default/3556437151893188180'/><link rel='alternate' type='text/html' href='http://cloud-notes.blogspot.com/2012/05/java-jframe.html' title='Как в java поместить фрейм (JFrame) в центре экрана'/><author><name>Валентин Рудницкий</name><uri>http://www.blogger.com/profile/05470148883336688808</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjBWrt82ftGCCpZbQmACEXshP_yEaufcjxxSmPpDqmFdZy1cPHo9i_GPgt_i3ZkhkOWT9rER_llk7r0mvhhQHYVMgnAys99H-gzGffrJGIV08I8krMJG-bkareQ-f-rRuU/s113/tizer_avatar_ara.png'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4617646790887709090.post-6296879977903803478</id><published>2012-05-12T21:36:00.002+03:00</published><updated>2012-12-26T14:15:15.048+03:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="java"/><category scheme="http://www.blogger.com/atom/ns#" term="регулярные выражения"/><title type='text'>Часто используемые регулярные выражения в java</title><content type='html'>Регулярные выражения могут являться крайне удобным средством для решения самых различных задач. Обычно, главная сложность состоит в составлении выражения для конкретной задачи. В данной статье приведены примеры регулярных выражений в java для решения наиболее часто встречающихся случаев.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;1. Выделение IP-адреса из произвольной строки.&lt;/b&gt;&lt;br /&gt;
Например, для строки &quot;Ваш IP: 178.124.248.231&quot; регулярное выражение имеет вид&lt;br /&gt;
&lt;pre class=&quot;brush:java&quot;&gt;Pattern ipPattern =
            Pattern.compile(&quot;Ваш IP: ([[\\d]+[\\.]+]+[\\d])[\\.]+&quot;, 
 Pattern.DOTALL | Pattern.CASE_INSENSITIVE | Pattern.MULTILINE); 
&lt;/pre&gt;&lt;br /&gt;
&lt;b&gt;2. Выделение времени в минутах и секундах.&lt;/b&gt;&lt;br /&gt;
Для строки &quot;Время : 02:00&quot;&lt;br /&gt;
&lt;pre class=&quot;brush:java&quot;&gt;Pattern remainedTimePattern =
            Pattern.compile(&quot;Время : ([[\\d]+[:]]+[\\d])&quot;,
 Pattern.DOTALL | Pattern.CASE_INSENSITIVE | Pattern.MULTILINE);
&lt;/pre&gt;&lt;br /&gt;
&lt;b&gt;3. Проверка строки времени в 12-ти часовом формате.&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;pre class=&quot;brush:java&quot;&gt;Pattern timeAMPMPattern =
            Pattern.compile(&quot;(1[012]|[1-9]):[0-5][0-9](\\s)?(?i)(am|pm)&quot;, 
Pattern.DOTALL | Pattern.CASE_INSENSITIVE | Pattern.MULTILINE);
&lt;/pre&gt;&lt;br /&gt;
&lt;b&gt;4. Проверка строки времени в 24-x часовом формате.&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;pre class=&quot;brush:java&quot;&gt;Pattern time24Pattern =
            Pattern.compile(&quot;([01]?[0-9]|2[0-3]):[0-5][0-9]&quot;, 
Pattern.DOTALL | Pattern.CASE_INSENSITIVE | Pattern.MULTILINE);
&lt;/pre&gt;&lt;br /&gt;
&lt;b&gt;5. Проверка даты в формате dd/mm/yyyy.&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;pre class=&quot;brush:java&quot;&gt;Pattern datePattern =
            Pattern.compile(
&quot;(0?[1-9]|[12][0-9]|3[01])/(0?[1-9]|1[012])/((19|20)\\d\\d)&quot;, 
Pattern.DOTALL | Pattern.CASE_INSENSITIVE | Pattern.MULTILINE);
&lt;/pre&gt;&lt;br /&gt;
&lt;b&gt;6. Проверка правильности email адреса &lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;pre class=&quot;brush:java&quot;&gt;Pattern emailPattern =
            Pattern.compile(
&quot;^[_A-Za-z0-9-]+(\\.[_A-Za-z0-9-]+)*@[A-Za-z0-9]+(\\.[A-Za-z0-9]+)*(\\.[A-Za-z]{2,})$&quot;, 
Pattern.DOTALL | Pattern.CASE_INSENSITIVE | Pattern.MULTILINE);

&lt;/pre&gt;&lt;br /&gt;
&lt;b&gt;7. Проверка IP&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;pre class=&quot;brush:java&quot;&gt;Pattern checkIPattern = Pattern.compile(
        &quot;^([01]?\\d\\d?|2[0-4]\\d|25[0-5])\\.&quot; +
        &quot;([01]?\\d\\d?|2[0-4]\\d|25[0-5])\\.&quot; +
        &quot;([01]?\\d\\d?|2[0-4]\\d|25[0-5])\\.&quot; +
        &quot;([01]?\\d\\d?|2[0-4]\\d|25[0-5])$&quot;);
&lt;/pre&gt;&lt;br /&gt;
&lt;b&gt;8. Проверка имени пользователя&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;pre class=&quot;brush:java&quot;&gt;Pattern userNamePattern = Pattern.compile(&quot;^[a-z0-9_-]{3,15}$&quot;);
&lt;/pre&gt;&lt;br /&gt;
&lt;b&gt;9. Паттерн HTML тэга&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;pre class=&quot;brush:java&quot;&gt;Pattern htmlTagPattern = Pattern.compile(&quot;&lt;(&quot;[^&quot;]*&quot;|&#39;[^&#39;]*&#39;|[^&#39;&quot;&gt;])*&gt;&quot;);
&lt;/pre&gt;</content><link rel='replies' type='application/atom+xml' href='http://cloud-notes.blogspot.com/feeds/6296879977903803478/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://cloud-notes.blogspot.com/2012/05/java.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4617646790887709090/posts/default/6296879977903803478'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4617646790887709090/posts/default/6296879977903803478'/><link rel='alternate' type='text/html' href='http://cloud-notes.blogspot.com/2012/05/java.html' title='Часто используемые регулярные выражения в java'/><author><name>Валентин Рудницкий</name><uri>http://www.blogger.com/profile/05470148883336688808</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjBWrt82ftGCCpZbQmACEXshP_yEaufcjxxSmPpDqmFdZy1cPHo9i_GPgt_i3ZkhkOWT9rER_llk7r0mvhhQHYVMgnAys99H-gzGffrJGIV08I8krMJG-bkareQ-f-rRuU/s113/tizer_avatar_ara.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4617646790887709090.post-3994344126280839225</id><published>2012-03-30T12:11:00.003+03:00</published><updated>2012-05-13T00:53:08.972+03:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="windows"/><category scheme="http://www.blogger.com/atom/ns#" term="ошибка"/><category scheme="http://www.blogger.com/atom/ns#" term="сеть"/><title type='text'>Что делать если не открывается сетевое окружение ни на одном из компьютеров рабочей группы сети?</title><content type='html'>Сегодня столкнулся со следующей проблемой - не открывалось сетевое окружение ни на одном из компьютеров рабочей группы. При этом сеть работала - то есть все компьютеры нормально пинговались, доступ к каждому компьютеру через ip тоже работал. &lt;br /&gt;
При выполнении команды &lt;b&gt;net view&lt;/b&gt; из командной строки выдавало ошибку &lt;i&gt;&quot;Системная ошибка 6118. Недоступен список серверов для этой рабочей группы.&quot;&lt;/i&gt;&lt;br /&gt;
&lt;br /&gt;
Для понимания почему такие ошибки иногда происходят необходимо понимать теорию работы общего сетевого доступа. Вкратце - для работы сетевого окружения необходимо наличие компьютера мастер-браузера (&lt;i&gt;master browser&lt;/i&gt;). Этот компьютер назначается автоматически при включении компьютеров в сеть из имеющихся подключенных компьютеров путем выборов (&lt;i&gt;elections&lt;/i&gt;). Правильная работа данного компьютера необходима для корректного разрешения имен в netbios-сети, т.е. такие ошибки обычно происходят именно из-за проблем в работе мастер-браузера. &lt;br /&gt;
&lt;br /&gt;
Если сеть небольшая, из 3-5 компьютеров, то, наверное, наиболее простым решением будет просто выключить сразу все компьютеры, а потом их включить. Скорее всего автоматически будет назначен новый мастер браузер.&lt;br /&gt;
&lt;br /&gt;
Для сети больших размеров для решения (и предотвращения появления в будущем) такой проблемы необходимо узнать имя текущего мастер браузера. Сделать это можно с помощью утилиты командной строки &lt;b&gt;&lt;a href=&quot;https://docs.google.com/open?id=0B2F_gGyxc-DDRXBMaUw4M1NTcmVpMFZzd3RZNVc1UQ&quot;&gt;browstat.exe&lt;/a&gt;&lt;/b&gt; выполнив команду &lt;i&gt;browstat sta&lt;/i&gt;.  Зная имя компьютера идем (физически) к этому компьютеру. Если оказывается что компьютер просто завис - перезагружаем его. Если нет - проверяем чтобы &lt;i&gt;службы обозpеватель компьютеров&lt;/i&gt; и &lt;i&gt;сервер&lt;/i&gt; корректно работали. Далее в свойствах сетевого подключения смотрим чтобы компонент &lt;i&gt;&quot;клиент для сетей майкрософт&quot;&lt;/i&gt; был включен.&lt;br /&gt;
&lt;br /&gt;
Также проблема может возникнуть из-за того, что компьютер назначенный мастером имеет 2 сетевые карты. Для всех таких компьютеров -  очень желательно запретить их использование в качестве мастер браузеров. Сделать это можно установив в реестре &lt;i&gt;HKLM\System\CurrentControlSet\Services\Browser\Paramters&lt;/i&gt; ключ &lt;i&gt;MaintainServerList&lt;/i&gt; в значение No. &lt;br /&gt;
&lt;br /&gt;
После перезагрузки компьютера теоретически мастер браузер для сети должен переназначиться, но чтобы это произошло наверняка следует выполнить команду &lt;i&gt;browstat elect&lt;/i&gt; - для запуска перевыборов мастер браузера.&lt;br /&gt;
&lt;br /&gt;
В моем случае оказалось что компьютер назначенный мастер-браузером просто завис, после его перезагрузки сетевое окружение сразу стало нормально открываться.</content><link rel='replies' type='application/atom+xml' href='http://cloud-notes.blogspot.com/feeds/3994344126280839225/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://cloud-notes.blogspot.com/2012/03/blog-post.html#comment-form' title='Комментарии: 13'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4617646790887709090/posts/default/3994344126280839225'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4617646790887709090/posts/default/3994344126280839225'/><link rel='alternate' type='text/html' href='http://cloud-notes.blogspot.com/2012/03/blog-post.html' title='Что делать если не открывается сетевое окружение ни на одном из компьютеров рабочей группы сети?'/><author><name>Валентин Рудницкий</name><uri>http://www.blogger.com/profile/05470148883336688808</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjBWrt82ftGCCpZbQmACEXshP_yEaufcjxxSmPpDqmFdZy1cPHo9i_GPgt_i3ZkhkOWT9rER_llk7r0mvhhQHYVMgnAys99H-gzGffrJGIV08I8krMJG-bkareQ-f-rRuU/s113/tizer_avatar_ara.png'/></author><thr:total>13</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4617646790887709090.post-2405917936202728627</id><published>2012-03-13T12:12:00.000+03:00</published><updated>2012-03-13T12:12:09.176+03:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="netbeans"/><category scheme="http://www.blogger.com/atom/ns#" term="ошибка"/><title type='text'>Глюк в Netbeans 7.1</title><content type='html'>При обновлении netbeans до новой версии 7.1.1 при попытке скомпилировать один из старых проектов стало выдавать ошибку &quot;copylibs doesn&#39;t support the &quot;rebase&quot; attribute when trying to perform an ant build of the project.&quot;. Об этой ошибке можно прочитать на официальном сайте netbeans перейдя по следующей &lt;a href=&quot;http://netbeans.org/bugzilla/show_bug.cgi?id=205380&quot;&gt;ссылке&lt;/a&gt;. Для избавления от этой проблемы следует заменить файл lib/CopyLibs/org-netbeans-modules-java-j2seproject-copylibstask.jar в папке проекта аналогичной библиотекой из любого созданного в netbeans 7.1.1 проекта (кому лень создавать пустой проект библиотеку можно скачать &lt;a href=&quot;https://docs.google.com/open?id=0B2F_gGyxc-DDeXEzY05vLVRRMTZtNlByd05XRXJUUQ&quot;&gt;здесь&lt;/a&gt;).</content><link rel='enclosure' type='' href='https://docs.google.com/open?id=0B2F_gGyxc-DDeXEzY05vLVRRMTZtNlByd05XRXJUUQ' length='0'/><link rel='replies' type='application/atom+xml' href='http://cloud-notes.blogspot.com/feeds/2405917936202728627/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://cloud-notes.blogspot.com/2012/03/netbeans-71.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4617646790887709090/posts/default/2405917936202728627'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4617646790887709090/posts/default/2405917936202728627'/><link rel='alternate' type='text/html' href='http://cloud-notes.blogspot.com/2012/03/netbeans-71.html' title='Глюк в Netbeans 7.1'/><author><name>Валентин Рудницкий</name><uri>http://www.blogger.com/profile/05470148883336688808</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjBWrt82ftGCCpZbQmACEXshP_yEaufcjxxSmPpDqmFdZy1cPHo9i_GPgt_i3ZkhkOWT9rER_llk7r0mvhhQHYVMgnAys99H-gzGffrJGIV08I8krMJG-bkareQ-f-rRuU/s113/tizer_avatar_ara.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4617646790887709090.post-238588315100873795</id><published>2012-03-01T13:11:00.000+03:00</published><updated>2012-03-01T13:11:58.906+03:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="java"/><category scheme="http://www.blogger.com/atom/ns#" term="windows"/><category scheme="http://www.blogger.com/atom/ns#" term="файлы и папки"/><title type='text'>Открытие в Windows файла или папки на java</title><content type='html'>Часто при проектировании приложений возникает необходимость просто открыть папку в проводнике или файл в связанном с расширением файла приложении, чтобы пользователь мог просмотреть его. &lt;br /&gt;
Решение этой задачи мной было найдено, однако оно является платформо-зависимым и точно подходит для систем ОС Windows версии ниже Windows XP (возможно и для других версий ОС Windows - не проверял, кто проверит, пожалуйста, отпишитесь). Платформо-независимого решения не нашел (кроме как анализировать версию ос и самому выбирать нужный способ запуска), если кто знает - поделитесь в комментариях.&lt;br /&gt;
Открытие файла происходит с помощью командной строки Windows, имя файла передается как параметр командной строки. &lt;br /&gt;
Открытие папки происходит с использованием проводника Windows explorer, имя папки передается как параметр запуска файла explorer.exe. &lt;br /&gt;
&lt;br /&gt;
&lt;pre class=&quot;brush:java&quot;&gt;    /**
     * Opens Windows file in associated application
     * @param file File to open
     * @author Cloud
     */
    public static void openFile(File file) {
        try {
            String osName = System.getProperty(&quot;os.name&quot;);
            String[] cmd = new String[3];

            if (osName.equals(&quot;Windows 95&quot;)) {
                cmd[0] = &quot;command.com&quot;;
            } else {
                cmd[0] = &quot;cmd.exe&quot;;
            }
            cmd[1] = &quot;/C&quot;;
            cmd[2] = file.getAbsolutePath();
            Runtime rt = Runtime.getRuntime();
            rt.exec(cmd);
        } catch (IOException ex) {
            ex.printStackTrace();
        }
    }

    /**
     * Opens windows directory in explorer
     * @param dir Directory to open
     * @author Cloud
     */
    public static void openDir(File dir) {
        try {
            String[] cmd = new String[2];
            cmd[0] = &quot;explorer.exe&quot;;
            cmd[1] = dir.getAbsolutePath();
            Runtime rt = Runtime.getRuntime();
            rt.exec(cmd);

        } catch (IOException ex) {
            ex.printStackTrace();
        }
    }
&lt;/pre&gt;</content><link rel='replies' type='application/atom+xml' href='http://cloud-notes.blogspot.com/feeds/238588315100873795/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://cloud-notes.blogspot.com/2012/03/windows-java.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4617646790887709090/posts/default/238588315100873795'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4617646790887709090/posts/default/238588315100873795'/><link rel='alternate' type='text/html' href='http://cloud-notes.blogspot.com/2012/03/windows-java.html' title='Открытие в Windows файла или папки на java'/><author><name>Валентин Рудницкий</name><uri>http://www.blogger.com/profile/05470148883336688808</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjBWrt82ftGCCpZbQmACEXshP_yEaufcjxxSmPpDqmFdZy1cPHo9i_GPgt_i3ZkhkOWT9rER_llk7r0mvhhQHYVMgnAys99H-gzGffrJGIV08I8krMJG-bkareQ-f-rRuU/s113/tizer_avatar_ara.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4617646790887709090.post-7822437688802822856</id><published>2012-01-30T09:15:00.003+03:00</published><updated>2012-01-30T09:23:26.874+03:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="java"/><category scheme="http://www.blogger.com/atom/ns#" term="списки"/><title type='text'>Удаление элементов из списка List в цикле на Java</title><content type='html'>Как известно, в java в упрошенном цикле for для обхода списка (любого, наследуемого от List) удалять элементы нельзя, так как при этом могут возникать различные ошибки. Если же все таки необходимость удалить элементы из такого списка существует, то следует воспользоваться классом ListIterator для перебора элементов. Пример кода, использующего ListIterator, приведен ниже. &lt;br /&gt;
&lt;br /&gt;
&lt;pre class=&quot;brush:java&quot;&gt;List&lt; Integer&gt; list = new ArrayList&lt; Integer&gt;();
for (ListIterator&lt; Integer&gt; i = list.listIterator(); i.hasNext(); ) {
   Integer el = i.next();
   if(el == 1) {
      i.remove();
   }
}   
&lt;/pre&gt;</content><link rel='replies' type='application/atom+xml' href='http://cloud-notes.blogspot.com/feeds/7822437688802822856/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://cloud-notes.blogspot.com/2012/01/list-java.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4617646790887709090/posts/default/7822437688802822856'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4617646790887709090/posts/default/7822437688802822856'/><link rel='alternate' type='text/html' href='http://cloud-notes.blogspot.com/2012/01/list-java.html' title='Удаление элементов из списка List в цикле на Java'/><author><name>Валентин Рудницкий</name><uri>http://www.blogger.com/profile/05470148883336688808</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjBWrt82ftGCCpZbQmACEXshP_yEaufcjxxSmPpDqmFdZy1cPHo9i_GPgt_i3ZkhkOWT9rER_llk7r0mvhhQHYVMgnAys99H-gzGffrJGIV08I8krMJG-bkareQ-f-rRuU/s113/tizer_avatar_ara.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4617646790887709090.post-1337135671063730650</id><published>2012-01-06T22:14:00.000+03:00</published><updated>2012-01-06T22:14:39.066+03:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="dropbox"/><category scheme="http://www.blogger.com/atom/ns#" term="автоматизация"/><category scheme="http://www.blogger.com/atom/ns#" term="оптимизация"/><title type='text'>DropBox - программа для синхронизации файлов между компьютерами</title><content type='html'>В этой статье я хочу рассказать об одном замечательном сервисе - &lt;a href=&quot;http://db.tt/hfnvUUx&quot;&gt;DropBox.com.&lt;/a&gt; &lt;br /&gt;
&lt;br /&gt;
DropBox - сервис, позволяющий синхронизировать данные между компьютерами, просто путем копирования файлов в определенную папку. Сразу после попадания в эту папку файлы автоматически закачиваются на сервер, и затем уже с сервера - на синхронизированные ПК.&lt;br /&gt;
Даже если у вас один компьютер - вы можете использовать dropbox просто для автоматического создания резервных копий важной информации, фотографий, музыки.&lt;br /&gt;
С помощью dropbox можно легко делиться фотографиями с вашими друзьями и родственниками, простым копированием этих файлов в специальную папку. Для этого нужно лишь создать какую-нибудь подпапку в dropbox, напримен photos, открыть доступ к ней вашим друзьям и родственникам (в настройках), после чего она появится у них на компьютере.&lt;br /&gt;
Чтобы начать пользоваться сервисом - следует зарегистрироваться на сайте &lt;a href=&quot;http://db.tt/hfnvUUx&quot;&gt;dropbox.com&lt;/a&gt; и скачать специальную программку, которая будет висеть в трее и синхронизировать файлы.&lt;br /&gt;
 Для бесплатного аккаунта дается возможность хранить в dropbox до 2 Гб файлов. Лично мне, например, этого места хватает с лихвой.</content><link rel='replies' type='application/atom+xml' href='http://cloud-notes.blogspot.com/feeds/1337135671063730650/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://cloud-notes.blogspot.com/2012/01/dropbox.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4617646790887709090/posts/default/1337135671063730650'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4617646790887709090/posts/default/1337135671063730650'/><link rel='alternate' type='text/html' href='http://cloud-notes.blogspot.com/2012/01/dropbox.html' title='DropBox - программа для синхронизации файлов между компьютерами'/><author><name>Валентин Рудницкий</name><uri>http://www.blogger.com/profile/05470148883336688808</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjBWrt82ftGCCpZbQmACEXshP_yEaufcjxxSmPpDqmFdZy1cPHo9i_GPgt_i3ZkhkOWT9rER_llk7r0mvhhQHYVMgnAys99H-gzGffrJGIV08I8krMJG-bkareQ-f-rRuU/s113/tizer_avatar_ara.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4617646790887709090.post-6981655022282258562</id><published>2011-12-08T10:35:00.000+03:00</published><updated>2011-12-08T10:35:24.984+03:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="windows xp"/><category scheme="http://www.blogger.com/atom/ns#" term="вход в систему"/><title type='text'>Как настроить автоввод логина и пароля для входа в систему при загрузке компьютера</title><content type='html'>Для того чтобы настроить автоввод логина и пароля для входа в систему при загрузке компьютера, заходим в Пуск -&gt; Выполнить -&gt; control userpasswords2. Откроется следующее окно.&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgG9qS9dd3bOf9gWRB0Ud26kpuafJGAPjuNnMoDOa2PkXq1F_ZLCXk8kOAVxz3kqx6Maer3K3J79hlWoDirzOvir5HyVyQxUheVZ-YKTCAnxzuv9hTl_x6tpDo222z4y_OLpy4zABWTAaoW/s1600/%25D0%2591%25D0%25B5%25D0%25B7%25D1%258B%25D0%25BC%25D1%258F%25D0%25BD%25D0%25BD%25D1%258B%25D0%25B9.PNG&quot; imageanchor=&quot;1&quot; style=&quot;margin-left:1em; margin-right:1em&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;400&quot; width=&quot;361&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgG9qS9dd3bOf9gWRB0Ud26kpuafJGAPjuNnMoDOa2PkXq1F_ZLCXk8kOAVxz3kqx6Maer3K3J79hlWoDirzOvir5HyVyQxUheVZ-YKTCAnxzuv9hTl_x6tpDo222z4y_OLpy4zABWTAaoW/s400/%25D0%2591%25D0%25B5%25D0%25B7%25D1%258B%25D0%25BC%25D1%258F%25D0%25BD%25D0%25BD%25D1%258B%25D0%25B9.PNG&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
В нем &lt;b&gt;УБИРАЕМ&lt;/b&gt; галочку &quot;Требовать ввод имени пользователя и пароля&quot;, жмем применить. Появится окно с предложением ввести имя и пароль для учетной записи, которая будет использоваться по умолчанию (в которую и будет осуществляться автовход). Вводим все что необходимо, нажимаем ок. Все настроено, теперь при загрузке компьютера окно ввода логина и пароля не будет появлятся, а будет сразу производиться вход в систему с указанными учетными данными.</content><link rel='replies' type='application/atom+xml' href='http://cloud-notes.blogspot.com/feeds/6981655022282258562/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://cloud-notes.blogspot.com/2011/12/blog-post.html#comment-form' title='Комментарии: 1'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4617646790887709090/posts/default/6981655022282258562'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4617646790887709090/posts/default/6981655022282258562'/><link rel='alternate' type='text/html' href='http://cloud-notes.blogspot.com/2011/12/blog-post.html' title='Как настроить автоввод логина и пароля для входа в систему при загрузке компьютера'/><author><name>Валентин Рудницкий</name><uri>http://www.blogger.com/profile/05470148883336688808</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjBWrt82ftGCCpZbQmACEXshP_yEaufcjxxSmPpDqmFdZy1cPHo9i_GPgt_i3ZkhkOWT9rER_llk7r0mvhhQHYVMgnAys99H-gzGffrJGIV08I8krMJG-bkareQ-f-rRuU/s113/tizer_avatar_ara.png'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgG9qS9dd3bOf9gWRB0Ud26kpuafJGAPjuNnMoDOa2PkXq1F_ZLCXk8kOAVxz3kqx6Maer3K3J79hlWoDirzOvir5HyVyQxUheVZ-YKTCAnxzuv9hTl_x6tpDo222z4y_OLpy4zABWTAaoW/s72-c/%25D0%2591%25D0%25B5%25D0%25B7%25D1%258B%25D0%25BC%25D1%258F%25D0%25BD%25D0%25BD%25D1%258B%25D0%25B9.PNG" height="72" width="72"/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4617646790887709090.post-3081161293834321838</id><published>2011-12-08T10:20:00.004+03:00</published><updated>2012-03-29T21:31:05.720+03:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="windows xp"/><category scheme="http://www.blogger.com/atom/ns#" term="удаленный рабочий стол"/><title type='text'>Как настроить удаленный рабочий стол в Windows XP</title><content type='html'>Настройка удаленного рабочего стола (через RDP) в Windows XP на удивление проста. Для начала заходим в свойства системы (Панель управления -&gt; Система), там выбираем вкладку &quot;Удаленные сеансы&quot; и ставим галочку &quot;Разрешить удаленной доступ к этому компьютеру&quot; (см. рис ниже).&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgzAFxoC2GsbK5_tbpfzhnb-VdD8p9TBSc8AZUIXG6PEOe1aadNGEPDatOm4fmSY8cQ3_n39o2GySSxnMLsl0k43PDxnB5M7yhbklcfwaMTX2aYxuXhc2v8zNSBcMbcYBAH9czjunD3gOIT/s1600/%25D0%2591%25D0%25B5%25D0%25B7%25D1%258B%25D0%25BC%25D1%258F%25D0%25BD%25D0%25BD%25D1%258B%25D0%25B9.PNG&quot; imageanchor=&quot;1&quot; style=&quot;margin-left:1em; margin-right:1em&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;400&quot; width=&quot;333&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgzAFxoC2GsbK5_tbpfzhnb-VdD8p9TBSc8AZUIXG6PEOe1aadNGEPDatOm4fmSY8cQ3_n39o2GySSxnMLsl0k43PDxnB5M7yhbklcfwaMTX2aYxuXhc2v8zNSBcMbcYBAH9czjunD3gOIT/s400/%25D0%2591%25D0%25B5%25D0%25B7%25D1%258B%25D0%25BC%25D1%258F%25D0%25BD%25D0%25BD%25D1%258B%25D0%25B9.PNG&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
Нажимаем на кнопку &quot;Выбрать удаленных пользователей&quot; и там среди учетных записей компьютера выбираем и добавляем в список те, которые должны использоваться для подключения к удаленному рабочему столу. Для того, чтобы вход с использованием учетной записи мог быть осуществлен, она обязательно должна иметь пароль. &lt;br /&gt;
&lt;br /&gt;
Помимо прочего необходимо проверить что служба &quot;Служба теминалов&quot; разрешена и работает (Панель управления -&gt; Администрирование -&gt; Службы).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Теперь чтобы подключиться, на другом компьютере в локальной сети запускаем подключение к удаленному рабочему столу (пуск -&gt; выполнить -&gt; mstsc), указываем ip адрес компьютера к которому нужно подключиться (первого компьютера) и жмем подключить (см. рисунок).&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjAybceOKnOWdwaCdyWBCRB3b_IHkVEKlWqxjn_KjcD2DKwKTDPuN-D4wLbIfBno7sTIvcGum1sMGlbyJ9-zIWfO4gmohETg0TsXFa8bVzDdCyDqm8hZ_BV55owp9f6jQyC96CElZCfyX1l/s1600/%25D0%2591%25D0%25B5%25D0%25B7%25D1%258B%25D0%25BC%25D1%258F%25D0%25BD%25D0%25BD%25D1%258B%25D0%25B9.PNG&quot; imageanchor=&quot;1&quot; style=&quot;margin-left:1em; margin-right:1em&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;246&quot; width=&quot;400&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjAybceOKnOWdwaCdyWBCRB3b_IHkVEKlWqxjn_KjcD2DKwKTDPuN-D4wLbIfBno7sTIvcGum1sMGlbyJ9-zIWfO4gmohETg0TsXFa8bVzDdCyDqm8hZ_BV55owp9f6jQyC96CElZCfyX1l/s400/%25D0%2591%25D0%25B5%25D0%25B7%25D1%258B%25D0%25BC%25D1%258F%25D0%25BD%25D0%25BD%25D1%258B%25D0%25B9.PNG&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
Пояляется окно авторизации в систему, в нем вводим логин и пароль (учетной записи на удаленном компьютере, для которой мы разрешили вход через удаленный рабочий стол) и выполняем вход в систему.&lt;br /&gt;
&lt;br /&gt;
P.S. &lt;br /&gt;
Если необходимость установки пароля для учетной записи связана только с неоходимостью использовать рабочий стол, то можно настроить автоввод пароля при загрузке ПК (как описано &lt;a href=&quot;http://cloud-notes.blogspot.com/2011/12/blog-post.html&quot;&gt;здесь&lt;/a&gt;), чтобы не вводить его каждый раз.</content><link rel='replies' type='application/atom+xml' href='http://cloud-notes.blogspot.com/feeds/3081161293834321838/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://cloud-notes.blogspot.com/2011/12/windows-xp.html#comment-form' title='Комментарии: 15'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4617646790887709090/posts/default/3081161293834321838'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4617646790887709090/posts/default/3081161293834321838'/><link rel='alternate' type='text/html' href='http://cloud-notes.blogspot.com/2011/12/windows-xp.html' title='Как настроить удаленный рабочий стол в Windows XP'/><author><name>Валентин Рудницкий</name><uri>http://www.blogger.com/profile/05470148883336688808</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjBWrt82ftGCCpZbQmACEXshP_yEaufcjxxSmPpDqmFdZy1cPHo9i_GPgt_i3ZkhkOWT9rER_llk7r0mvhhQHYVMgnAys99H-gzGffrJGIV08I8krMJG-bkareQ-f-rRuU/s113/tizer_avatar_ara.png'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgzAFxoC2GsbK5_tbpfzhnb-VdD8p9TBSc8AZUIXG6PEOe1aadNGEPDatOm4fmSY8cQ3_n39o2GySSxnMLsl0k43PDxnB5M7yhbklcfwaMTX2aYxuXhc2v8zNSBcMbcYBAH9czjunD3gOIT/s72-c/%25D0%2591%25D0%25B5%25D0%25B7%25D1%258B%25D0%25BC%25D1%258F%25D0%25BD%25D0%25BD%25D1%258B%25D0%25B9.PNG" height="72" width="72"/><thr:total>15</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4617646790887709090.post-7151364182649774489</id><published>2011-12-08T09:20:00.003+03:00</published><updated>2012-01-31T17:49:35.069+03:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="skype"/><category scheme="http://www.blogger.com/atom/ns#" term="windows 7"/><category scheme="http://www.blogger.com/atom/ns#" term="ошибка"/><title type='text'>Ошибка при запуске Skype в модуле Flash.ocx</title><content type='html'>Недавно столкнулся с тем, что Skype перестал запускаться. При запуске выдавало сообщение об ошибке в модуле Flash.ocx.&lt;br /&gt;
В журнале событий (Windows 7) записывало следующую информацию&lt;br /&gt;
Имя сбойного приложения: Skype.exe, версия: 5.5.0.124, отметка времени: 0x4e96a02b&lt;br /&gt;
Имя сбойного модуля: Flash.ocx, версия: 6.0.22.0, отметка времени 0x3c884ffe&lt;br /&gt;
Код исключения: 0xc0000005&lt;br /&gt;
Смещение ошибки: 0x000542fc&lt;br /&gt;
Идентификатор сбойного процесса: ---&lt;br /&gt;
Время запуска сбойного приложения: -----&lt;br /&gt;
Путь сбойного приложения: C:\Program Files\Skype\Phone\Skype.exe&lt;br /&gt;
Путь сбойного модуля: C:\Windows\system32\macromed\flash\Flash.ocx&lt;br /&gt;
&lt;br /&gt;
При простом удалении сбойного файла - C:\Windows\system32\macromed\flash\Flash.ocx, скайп переставал выдавать ошибки и запускался нормально, однако также переставала работать flash анимация в браузерах.&lt;br /&gt;
&lt;br /&gt;
Проблему удалось решить путем полной переустановки FlashPlayera (удаления flashPlayera с помощью &lt;a href=&quot;http://kb2.adobe.com/cps/141/tn_14157.html&quot;&gt;утилиты удаления flashPlayer&lt;/a&gt;, перезагрузки ПК, и затем установки его). &lt;br /&gt;
Кстати, у меня после переустановки файл C:\Windows\system32\macromed\flash\Flash.ocx пропал, вместо него появилось несколько других файлов.</content><link rel='replies' type='application/atom+xml' href='http://cloud-notes.blogspot.com/feeds/7151364182649774489/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://cloud-notes.blogspot.com/2011/12/skype-flashocx.html#comment-form' title='Комментарии: 4'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4617646790887709090/posts/default/7151364182649774489'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4617646790887709090/posts/default/7151364182649774489'/><link rel='alternate' type='text/html' href='http://cloud-notes.blogspot.com/2011/12/skype-flashocx.html' title='Ошибка при запуске Skype в модуле Flash.ocx'/><author><name>Валентин Рудницкий</name><uri>http://www.blogger.com/profile/05470148883336688808</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjBWrt82ftGCCpZbQmACEXshP_yEaufcjxxSmPpDqmFdZy1cPHo9i_GPgt_i3ZkhkOWT9rER_llk7r0mvhhQHYVMgnAys99H-gzGffrJGIV08I8krMJG-bkareQ-f-rRuU/s113/tizer_avatar_ara.png'/></author><thr:total>4</thr:total></entry></feed>