воскресенье, 15 декабря 2013 г.

Процесс загрузки java классов.

1) Системный загрузчик попытается поискать в кеше класс Student.
_1.1) Если класс найден, загрузка окончена.
_1.2) Если класс не найден, загрузка делегируется загрузчику расширений.
2) Загрузчик расширений попытается поискать в кеше класс Student.
_2.1) Если класс найден, загрузка окончена.
_2.2) Если класс не найден, загрузка делегируется базовому загрузчику.
3) Базовый загрузчик попытается поискать в кеше класс Student.
_3.1) Если класс найден, загрузка окончена.
_3.2) Если класс не найден, базовый загрузчик попытается его загрузить.
__3.2.1) Если загрузка прошла успешно, она закончена ;)
__3.2.2) Иначе управление предается загрузчику раширений.
_3.3) Загрузчик расширений пытается загрузить класс. 
__3.3.1) Если загрузка прошла успешно, она закончена ;)
__3.3.2) Иначе управление предается системному загрузчику.
_3.4) Системный загрузчик пытается загрузить класс. 
__3.4.1) Если загрузка прошла успешно, она закончена ;)
__3.4.2) Иначе генерируется исключение java.lang.ClassNotFoundException.

Как подписать java апплет?

1)В папке с апплетом(/component/applet/) в консоли выполняем команду mvn clean install assembly:assembly
2)Переходим в папку BIN нашего JDK (например, C:\Program Files\Java\jdk1.6.0_23\bin)
3)Создаем локальное хранилище нашего сертификата (keystore):
keytool -genkey -keystore .keystore -alias "Espesoft" -validity 99999
где Espesoft - название alias нашего сертификата;
99999 - срок в месяцах валидности сертификата;
.keystore - имя файла создаваемого хранилища.
keytool -genkey -keystore .keystore -alias "Espesoft" -validity 99999
4)В случае успешного запуска команды, система спросит нас пароль нашего хранилища, а также некоторую информацию о сертификате
(твои ФИО, название компании, город, страну и группу крови)
В результате будем иметь файл .keystore. Это и есть наше хранилище, которым мы будем подписывать разные апплеты.
Копируем в папку BIN нашего JDK наш JAR-файл (/component/applet/target/ecologysigningapplet-jar-with-dependencies.jar)/
Подписываем его с помощью следующей команды:
jarsigner.exe -keystore .keystore ecologysigningapplet-jar-with-dependencies.jar "Espesoft"
где Espesoft - название alias нашего сертификата;
.keystore - имя файла хранилища;
ecologysigningapplet-jar-with-dependencies.jar - название JAR-файла.
Система спросит нас пароль - вводим тот, что ввели в п. 3.
5)Затем перемещаем ecologysigningapplet-jar-with-dependencies.jar в папку webapp модулей ecologyapp и authmodule.
Переименовываем его ecologysigningapplet.jar
ecologyapp (используется для загрузок) и authmodule (используется для сброса пароля с помощью ЭЦП).

пятница, 22 ноября 2013 г.

Переход с tomcat6 на tomcat7.

В проекте при переходе с tomcat6 на tomcat7 столкнулся с проблемой запуска сервера, как оказалось в семерке в server.xml больше не используется listener:
<Listener className="org.apache.catalina.mbeans.ServerLifecycleListener"/>
Закомментировал и сервер вновь стал запускаться, как раньше.

Кстати, почему перешел на 7ой tomcat.
После долгого перерыва в работе в проекте много что поменяли мои коллеги разработчики, в результате после апдейта проекта при старте сервера в логах писалость, что сервер started, а вот в progress bare server starting, различными чистками проблему решить не удалось, поэтому решил поступить по старинке.
Скачал самую последнюю версию eclipse jee и соответственно томката, поставил, проблема решилась.

пятница, 15 ноября 2013 г.

Добавление общей папки в VirtualBox

Запускаем VirtualBox, выбираем нашу тачку, вызываем контекстное меню и выбираем свойства, далее в самой нижней вкладке есть поле "общие папки", кликаем, выбираем кликая справа по кнопке свою папку, доступ к которой мы хотим предоставить нашей машине в VirtualBox.
Сохраняем изменения, запускаем машину.
Сверху включенной машины есть панель управления, выбираем на ней устройства->установить дополнения гостевой ОС, далее далее. Перезапускаем.
Запускаем командную строку, посредством пуск-> выполнить-> cmd, в ней вводим
net use x: \\vboxsvr\имя нашей общей папки, которую выбрали изначально(обязательно пробел после x: ).
Все готово, заходим на сетевой диск vboxsvr.

четверг, 14 ноября 2013 г.

Проблемы совместимости архитектуры приложения и драйвера ODBC.

При попытки подключения к odbc у меня возникла проблема совместимости архитектуры драйвера и приложения.
Фишка оказалась в разрядности. Разрядность odbc драйвера должна совпадать с разрядностью того приложения, которое хочет воспользоваться данным драйвером.
Если у вас 64 битная ОС, а приложение 32, тогда после установки драйвера под 32 битную ось вы не увидите его в списках при создании нового системного источника данных odbc. Что бы увидеть его нужно запустить 32ух разрядную версию приложения "Источники данных (ODBC)". Сделать это можно по адресу C:\Windows\SysWOW64\odbcad32.exe.

среда, 9 октября 2013 г.

вторник, 17 сентября 2013 г.

Взятие параметров из адресной строки. JQuery.


Пример ссылки: http://localhost/adminmodule/editMessageAction?userFrom=ruser

$(document).ready(function () {
$.urlParam = function(name){
          var results = new RegExp('[\\?&]' + name + '=([^&#]*)').exec(window.location.href);
          return results[1] || 0;
        }

alert($.urlParam('userFrom'));
});

Выведет: user.

четверг, 4 июля 2013 г.

Установка jdk на ubuntu

Качаем архив с расширением .rpm с официального сайта oracle 
http://www.oracle.com/technetwork/java/javase/downloads/jdk7-downloads-1880260.html
1) Устанавливаем alien, по сути это конвертер пакетов который перепакует скачанные .rpm пакеты в
нужный нам формат .deb, со своими хитростями.
sudo apt-get install alien

2) Натравливаем «чужого» на скачанный rpm.
sudo alien jdk-7u25-linux-x64.rpm --scripts

На данном этапе, будет сгенерирован .deb пакет, в той же директории.
3) Устанавливаем
sudo dpkg -i jdk_1.7.025-1_amd64.deb

вторник, 25 июня 2013 г.

Конкатенация числового значения Int и строки в mysql


Пример конкатенации с приведением типа.

update limit_year set limit_year.end_date = concat(cast(limit_year.year_number+1 as char),'.01.01') ,
 limit_year.start_date = concat(cast(limit_year.year_number as char),'.01.01')
 where limit_year.start_date is null and limit_year.end_date is null;

Пример простой конкатенации значений int и varchar.

update limit_year set limit_year.end_date = concat(limit_year.year_number+1,'.01.01') ,
 limit_year.start_date = concat(limit_year.year_number,'.01.01')
 where limit_year.start_date is null and limit_year.end_date is null;

window.location.origin javascript example for IE

Для извлечения корневого адреса проекта посредством javascript обычно используется window.location.origin, здесь указывается и протокол и доменное имя и порт. Но Internet Explorer данную полезность не поддерживает. Приходится делать по другому, как вариант.

function goToSomewhere(){
    var loc;
    if (!window.location.origin){
//for IE
    loc = window.location.protocol+"//"+window.location.host+"/part1/mainPage";
    }else{
//for Chrome
    loc = document.location.origin+"/part1/mainPage";
    }
    $(window.location).attr('href', loc);
    }

Сложение чисел BigDecimal и округление до трех знаков после запятой

BigDecimal one = new BigDecimal("3.123123)";
BigDecimal two = new BigDecimal("2.123123");
one = one.add(two); // сложение
System.out.println(one.setScale(3).toString()); //округление до сотых

четверг, 13 июня 2013 г.

Эффективное выполнение поставленных задач. 7 принципов.

Как доводить начатое до конца?

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

2. Далее, вычеркиваем все ненужное. Прочитайте список еще раз. Подумайте, что действительно из этих дел важно, что поможет в дальнейшей жизни, что крайне важно сделать сейчас? Другими словами расставляем приоритет. Дела, которые не целесообразны, вычеркните из списка. Лучше потратьте время на действительно что-то важное.

3. Существует одно правило и название ему "Правило 2ух минут", все те дела, которые занимают от 2ух до 10ти минут мы берем и делаем вот прямо сейчас, встали->пошли->сделали! Прошло 30ть минут, а у нас готово около 10ти мелких дел, хорошая мотивация для продолжения эффективного дня! Сразу видны результаты, та-дам!

4. Еще одна причуда тайм-менеджмента - лягушки! С самого утра необходимо съесть пару лягушек! А теперь объясню, лягушками мы называем те дела, которые мы на дух не переносим, противные скользкие все в бородавках, именно так мы себе их представляем и затягиваем с ними , оставляя на самый конец, не тут то было, теперь мы едим лягушек первым делом! Верно?

5. Далее мы делим слона! А на сколько кусков и как это уже решать нам. И так берем одну огромную задачу, которую мы не в состоянии решить в один присест. В программировании это называется рефакторинг, а в простонародье разбиение. И так делим задачу на подзадачи, а подзадачи можно разделить еще на несколько подзадач. Для чего мы это делаем? Что бы можно было выполнять задачу в разное время понемногу. И в результате сложа все выполненные задачи в одну, увидим, что  мы выполнили того самого нашего изначального "слона" ! Замечательно!

6. Себя ведь мы любим, ооочень любим, так ведь? Так вот, после выполнения той или иной задачи обязательно не забываем хвалить себя, баловать чем-нибудь!Можно купить себе ту самую вредную пачку чипсов, которую так давно хотелось!
Она же вредная и нельзя было ее покупать, а тут такой повод представился, почему бы и не побаловать свои вкусовые рецепторы?! За трудностями обязательно должно быть вознаграждение, иначе мы быстро стухнем, стимул должен присутствовать всегда!

7. Каждый вечер необходимо подводить итоги прошедшего дня, самое главное это выносить уроки для себя, что можно было сделать лучше, чего не следовало делать вообще. Каждые выходные мы пробегаемся по нашему списку дел , дополняем его, вычеркиваем уже выполненные дела, описываем прогресс по слонам, узнаем сколько мы уже съели лягушек! Удивляемся! =)

Удаление элементов в цикле из коллекции List

Итератор ListIterator позволяет сделать подобные операции, в то время как пройдя по листу стандартным методом for как foreach и попытаясь удалить элемент, в последующем шаге итерации повалятся конкаренси эксепшны.

List<String> list3 = new ArrayList<String>();
for (ListIterator<String> i = list3.listIterator(); i.hasNext();){
String elList3 = i.next();
if(elList3.equals("error")){
i.remove();
}
}

вторник, 4 июня 2013 г.

Удаление настроек пользователя chromium с ubuntu 12.04


  1. Заходим через консоль в домашнюю папку  cd /home/akamalov/
  2. Далее заходим в папку конфигураций пользователя cd /.config
  3. Смотрим все имеющиеся папки ls
  4. Удаляем папку chromium  rm -R chromium

Столкнулся с проблемой зависания браузера, т.е. при открытии браузера он напрочь зависал. Необходимо было скинуть настройки пользователя.
Этот способ вполне помог.
Браузер снова исправен.

пятница, 24 мая 2013 г.

Добавление change функции для select объекта через jQuery


$("#region").on("change", function() {
                 что-то делаем
          });

#region - id объекта select формы

Обычно это прописывается в
document.ready(function(){

});

document.ready срабатывает, после загрузки всех элементов страницы.

Отключение второго элемента формы после проверки первого jQuery


if($('#cityId').attr('disabled')){
    $('#cityAreaId').attr('disabled', true);}

Здесь #cityId и #cityAreaId - это  айди элементов
.attr()  - функция, работающая с аттрибутами объектов
'disabled' - свойство
true - установка значения свойства.

воскресенье, 19 мая 2013 г.

Установка maven на windows7

  1. Скачиваем и устанавливаем jdk
    http://www.oracle.com/technetwork/java/javase/downloads/jdk7-downloads-1880260.html
    два варианта windows x64 и windows x32, выбор варианта зависит от типа вашей операционной системы. Устанавливаем.
    Тип можно посмотреть в система и безопасность->система.
  2. Скачиваем maven 2 или 3 по ссылке http://maven.apache.org/download.cgi , файл (Binary zip)
  3. Распаковываем , к примеру в пространство D:\maven
  4. Заходим в панель управления, заходим в система и безопасность->система, слева на панели есть "Дополнительные параметры",  далее в окне практически в самом низу есть "Переменные среды".
  5. В системных переменных создаем переменную JAVA_HOME, значением которой будет являться путь до установленных нами jdk библиотек.
    Например: C:\Program Files\Java\jdk1.7.0_21
  6. Создаем еще одну системную переменную MAVEN_HOME, значением которой будет являться место распаковки maven'а , в текущем примере это D:\maven
  7. Что бы мы могли общаться с мавеном из консоли добавляем ее в PATH, а именно находим в списке системных переменных переменную path, нажимаем изменить и дописываем строчку  ;%MAVEN_HOME%\bin
    ;  это что бы отделиться от предыдущей переменной, а  %что-то%  выдает нам значение созданной переменной. Везде нажимаем Ok.
  8. В командной строке прописываем mvn -version, если появилась информация о ваших jdk и maven, значит все работает исправно.
    По другому и не могло случится)

суббота, 11 мая 2013 г.

Пример простой транзакции hibernate


Session session = factory.openSession();
Transaction tx = null;
try {
   tx = session.beginTransaction();
   // do some work
   ...
   tx.commit();
}
catch (Exception e) {
   if (tx!=null) tx.rollback();
   e.printStackTrace(); 
}finally {
   session.close();
}

понедельник, 6 мая 2013 г.

Эффективность человеческих часов дня

9 фактов о работоспособности человека в течении дня:

1. С 6 до 7 утра – «окно», когда лучше всего работает долговременная память, вся полученная информация в этот промежуток усваивается легко.
2. С 8 до 9 включается логическое мышление, это наиболее подходящее время для любой деятельности, связанной - одновременно - с запоминанием и аналитикой.
3. С 9 до 10 утра – оптимальные часы для работы с информацией и статистикой.
4. С 11 до 12 дня эффективность интеллектуальных функций снижается, стало быть, можно переключить внимание на что-нибудь отвлеченное. Например, послушать музыку.
5. С 11 до 14.00 – самое подходящее время для обеда. На эти часы приходится пик, как говорят на Востоке, «огня пищеварения», когда принятая еда переваривается и усваивается наилучшим образом.
6. С 12.00 до 18.00 – идеальное время для активного труда. Труд в более поздние часы вынуждает мозг работать на износ. Первые признаки такого перенапряжения – сложности с засыпанием.
7. С 21.00 до 23.00 происходит наиболее полный отдых ума и нервной системы.
8. С 23.00 до 1 часа ночи, во сне, идет активное восстановление тонкой энергии. В китайской медицине ее именуют «ци», индийские йоги называют ее «праной», современная наука величает нервной и мышечной силой.
9. С 1 до 3 часов, во сне, человек восстанавливает эмоциональную энергию.

Вывод, если спать, то с 21 до 3, если работать то с 12 до 18, если учиться то с 6ти до 12ти.
Хм, так вот почему большинство времени своих школьных лет я ходил учиться в школу к 8 и оставался в ней максимум до 13.
Вторая смена это уже смена работяг, в классах постарше "дети" якобы работают уже в школе, а не учатся.
И все же надо потестить и остается вопрос, что же делать с временем между 3 - 6 утра ?
Спорт, скорей всего именно уделить внимание спорту.

среда, 10 апреля 2013 г.

Экспорт данных в Excel(библиотека jxl)


Задача по экспорту данных в Excel достаточно востребована.
В быту офисных работников зачастую документы представленные в табличном виде хранят именно в формате xls. А потому всю экспортируемую информацию, каких-то статистических данных отчетности необходимо сохранять в виде электронной таблицы.
Опишу пару главных объектов библиотеки jxl, а так же основных методов.

1)Создание файла, объекта книги и листа в данной книги
File myExcelFile = new File("myExcelFile.xls");
WritableWorkbook workbook = Workbook.createWorkbook(myExcelFile);
WritableSheet sheet = workbook.createSheet("export", 0);

2)Форматирование ячейки таблицы
WritableFont fontBig = new WritableFont(WritableFont.ARIAL, 16);
WritableCellFormat cellFormat = new WritableCellFormat(fontBig);
try {
//установка бордера
cellFormat.setBorder(Border.ALL, BorderLineStyle.THIN, Colour.BLACK);
//выравнивание текста внутри ячейки по горизонтали
cellFormat.setAlignment(Alignment.CENTRE);
//выравнивание текста внутри ячейки по вертикали
cellFormat.setVerticalAlignment(VerticalAlignment.CENTRE);
//перенос текста по словам, когда достигнута максимальная длина ячейки.
cellFormat.setWrap(true);

} catch (WriteException e) {
e.printStackTrace();
}

/*отсчет строк и колонок начинается с нуля, как принято в программировании, т.е. координатой ячейки A1 является точка(0,0); */
Label cell = new Label(column, row, "text", cellFormat);
sheet.addCell(cell);

3) Форматирование ЦЕЛИКОМ колонки 
Установка размера колонки, 17ть - это количество символов, а 256 это средняя длина одного символа, в результате чего получается нужная нам длина ячейки(колонки в нашем случае).
CellView thisView = new CellView();
thisView.setSize(17*256);
sheet.setColumnView(column, thisView);

4)Слияние ячеек. 
sheet.mergeCells(0, 9, 4, 12);
Что бы заполнить текстом ячейку после слияния, координата должна соответствовать координате первой ячейке в слиянии. т.е. в данном случае (0,9).

5)Для переноса текста внутри ячейки можно использовать последовательность "/012".
Label lb = new Label(0, 1, "asdasd" + \012);
sheet.addCell(lb);




понедельник, 8 апреля 2013 г.

Временные файлы java

В процессе разработки часто сталкиваюсь с необходимостью создания временного файла. И я вовремя узнал, что в JDK есть стандартный метод для создания временных файлов.
File tempFile = File.createTempFile("abc", "");
Этот метод создаёт временный файл в папке, специально предназначенной для временных файлов в данной операционной системе. Эта папка в разных ОС может называться по-разному, но для временного файла не очень важно, где он будет создан и как он будет называться. Важнее факт наличия специального каталога. После создания вы сразу получаете указатель на этот файл для дальнейшего манипулирования с ним.

Метод принимает два строковых параметра: префикс и суффикс. Префикс должен обязательно содержать не менее трёх символов. Префикс определяет начало имени временного файла. Суффикс определяет его конец, но он не обязателен. Если в качестве суффикса передать null, то временный файл получит расширение .tmp. Но ведь расширение ни на что не влияет, так что можно передать в качестве суффикса пустую строку, чтобы в конец имени временного файла ничего не добавлялось. Серединой же имени временного файла будет набор цифр.

Итак, для значений параметров, приведённых выше, метод создаст, например, такой файл:

/tmp/abc8859980780322653785
А вот этот файл может получиться, если в качестве суффикса передать null:
/tmp/abc7890857977307054209.tmp
Ну а если хотим заменить расширение tmp на что-нибудь другое, достаточно в качестве суффикса передать, например, ".temporary":
/tmp/abc7751462332148781358.temporary

MySql Like

Поиск по шаблону (LIKE и NOT LIKE) 
СУБД MySQL позволяет осуществлять запросы, которые отвечают определенным шаблонам. 

Для этого используются специальные операторы — LIKE и NOT LIKE, которым передается строка с символами — заместителями. 

Символ _ соответствует любому одному символу, а символ % соответствует любой последовательности символов или их отсутствию и является аналогом символа * в регулярных выражениях. 

Ниже приведен пример MySQL, который делает выборку 

всех значений из таблицы auto, где в поле label есть буква S: 

SELECT * FROM auto WHERE label LIKE `%S%`; 

Для поиска текста, где не встречается слово "программирование" можно воспользоваться следующим запросом: 

SELECT * FROM articles WHERE text_of_article NOT LIKE `%программирование %`;

'_' обозначает любой символ в строке
LIKE "_234567";