четверг, 15 марта 2018 г.

Как связать независимые таблицы через hibernate.
Пример более содержит сложный случай, когда нужно связать через подстроки полей.

Вкратце: используется Projections.sqlProjection.

Но это не рекомендуется, т.к. используются голый SQL, который может быть вендорозависим.

Criteria c = getSession().createCriteria(SWClass.class, "sw");

DetachedCriteria dc = DetachedCriteria.forClass(Di.class);
dc.setProjection(
        Projections.sqlProjection("
                     SUBSTR(upk,0,INSTR(upk,'/',1,1)-1)  as_id, 
                     SUBSTR(upk, INSTR(upk,0,INSTR(upk,'/',1,1)-1)+1, LENGTH(upk)) as mgmt_ip
         ", new String[]{"asId", "mgmtIp"}, new Type[] { new StringType(), new StringType() }
         )
);

c.add(Subqueries.propertiesIn(new String[]{"sw.asId", "sw.mgmtIp"}, dc));

четверг, 2 апреля 2015 г.

Как заставить IDEA работать быстрее

10 Tips to Increase IntelliJ IDEA Performance

I upgraded to IntelliJ IDEA 7.0 the day it came out and was, at first, let down by how poorly it performed on my machine. Since then, I tweaked a bunch of settings, and now have it performing just as fast as IDEA 5 ever did on the same box. Enjoy, and happy coding!
1. Change your Look and Feel
Change your look and feel to something other than native. On Windows, the “IDEA (4.5 Default)” look and feel performs much better than the native one. On Mac, just pick something other than the native. The new graphics will bother you for about 30 minutes and then you’ll forget all about them. This setting is in the Settings (Ctrl+Alt+S) -> Appearance (B) dialog. (Tip courtesy of Howard Lewis Ship)
2. Use Structure View Instead of Project View
In IDEA 7.0.2 on Windows, I seem to pay a heavy performance price for the Project View (Alt+1), especially with autoscrolling to and from source enabled. My alternative is to use the Structure View (Alt+2) as my default sidebar and rely on the Navigation Bar (View->Navigation Bar) for project navigation. I find I actually prefer this setup and 7.0.2 performs noticeably faster.
3. Turn off Synchronize Files
When you activate the IDEA frame, IDEA will scan the disk for file changes, giving you a nice progress bar to wait for. If you’re not editing files outside of IDEA then turn this feature off in Settings (Ctrl+Alt+S) -> General (A). Uncheck “Synchronize Files on Frame Activation”. Now you’ll have to manually synchronize the files using Ctrl+Alt+Y (File->Synchronize on the menu). (Tip courtesy of Tyler)
4. Disable Spring Model Validation on Build
I used to get a progress bar every time I ran or debugged my project, with the message “Validating Spring Model”. I don’t need this feature except when I’m working on the Spring files, so I turned it off. Settings (Ctrl+Alt+S) -> Project Settings (1) -> Modules… then click Spring, then click the Options Tab. Deselect the checkbox for “Enable Spring model validation on build”.
5. Disable Unused Plugins
Disable all of the plugins you are not currently using. For example, if you’re not using Geronimo, Commander or Jabber, then turn them off. Settings (Ctrl+Alt+S) -> Plugins (T). Uncheck anything you have installed that is unused (Tip courtesy of Carl)
6. Use Scopes to Speed Up Searches
I rarely really want to search my entire project for a string or reference. Any search dialog allows you to pick a custom scope, such as production files or test files. But “Changed Files” is a helpful option too. On large, monolithic projects you may want to define your own to only search certain packages. A little time creating new scopes will save you a lot of time in waiting for searches to complete. Define scopes in Settings (Ctrl+Alt+S) -> Scopes (5).
7. Increase Your Heap Size
Several sources include directions on increasing your heap size in IDEA. This is changed in your idea.exe.vmoptions file.
8. Always Get the Latest Version
I’ve already suggested this, so I’ll be brief. Each minor release seems tohave good performance improvements.
9. Reduce Size of Local History
Another blog recommended that you turn off or reduce Local History. I love this feature so I’ll never turn it off, but the default is to save 3 days worth of work. I typically check in to version control more often than that, so I trimmed it up to 1 day of history. Do this in Settings (Ctrl+Alt+S) -> Local History (J).
10. Optimize Your Disk?
I haven’t tried this myself, but the tip came directly from JetBrains. Beyond just defragmenting, you can also optimize the MFT tables, disk folder structure, and the paging file. Direction appear on their site. Simply upgrading to a newer hard drive is find at home, but I don’t have that much control of my work machine. It’s Friday, so I’ll try this today. If things go horribly wrong I’ll redact the entry!

There are also a few more tips available here. Please leave a comment if you have any other hints!

пятница, 27 марта 2015 г.

Как посмотреть SQL запросы, которые приходят в Oracle из вашего приложения

Сперва включаем логгирование:

alter system set events '10046 trace name context forever , level 12';


После этого в c:\programs...   \oracle\diag\rdbms\your_sid\trace\ в одном из файлов (как правило с суффиксом ora) можно увидеть трассировку запросов.

Закончили - выключаем трассировку

alter system set events '10046 trace name context off';

суббота, 17 января 2015 г.

Как выполнять действия при загрузке приложения Spring

@Component
public class StartupListener implements ApplicationListener<ContextRefreshedEvent> {

    @Override
    public void onApplicationEvent(final ContextRefreshedEvent event) {

        // Context created by  DispatcherServlet 
        if (event.getApplicationContext().getParent() != null) {
            return;
        }

         // Do your job
    }
}

четверг, 27 ноября 2014 г.

Настройка автоматического тестирования web-интерфейса и сценариев javascript.

Основной материал, которым я руководствовался: http://habrahabr.ru/post/233705/

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

На текущий момент выяснил следующие виды тестирования:
  1. Unit -тестирование, при котором пишутся тесты на каждый модуль или компоненту, написанную на JavaScript. Как правило в этом случае пишется куча моков (mocks) чтобы заткнуть различные асинхронные вызовы, а также сервисы и фабрики angular.
  2. End to end или E2E-тестирование. При таком тестировании полностью эмулируется работа пользователя в приложении.

Unit тестирование

Unit-тестирование для Javascript доступно примерно в таком же ключе, что оно работает для Java.
Ниже простейший код unit-теста, который характерен практически для любого фреймворка тестирования Javascript:
describe("employee", function() {
      var employee;    // Note the scoping of this variable.
      beforeEach(function() {
          employee = new Employee;
      });
      it("has a name", function() {
          expect(employee.name).toBeDefined();
      });
      it("has a role", function() {
          expect(employee.role).toBeDefined();
      });
      afterEach(function() {
      });
  });

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

Другой способ запуска unit тестов - специальные программы. Например - Karma.

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

E2E -тестирование

Организуется как правило с помощью сервера Selenium.
Для удобства запуска E2E тестов и создания скриптов может использоваться Protractor.
После установки соответствующих модулей для node.js для запуска selenium сервера используется команда webdriver-manager start.
Затем выполняется настройка конфигурационного файла protractor, где помимо прочего указываются тестовые скрипты, после чего запускается собственно protractor.

Webstorm

Весьма удобный инструмент для веб-разрабтки от JetBrains.
Дает возможность подключения библиотек, в том числе и для тестирования.
Также дает удобную возможность отладки тестов.


Ниже список распространенных инструментов, используемых для тестирования:
  • node.js
  • Karma: Запускатор тестов от команды AngularJS.
  • Jasmine: Фреймворк тестирования.
  • Mocha: Фреймворк для тестирования.
  • Chai: Assertion библиотека которая интегрируется в Mocha, и дает доступ к подходу BDD и расширяет возможности Mocha
  • Chai-as-promised: Плагин для Chai, реально полезный при работе с функциями возвращающими promise. 
  • AngularMocks: Дает поддержку для инъекции и мока Angular сервисов в модульном тестировании.
  • Protractor: Инструмент функционального тестирования для AngularJS, который запускает ваше приложение в браузере и взаимодействует с ним через Selenium.
  • Sinon: Стаб(Stub) и Мок(Mock) библиотека. Используйте ее для создания заглушек зависимостей в ваших директивах и контроллерах, и проверяйте что был вызов функций с корректными аргументами.
  • Browserify: Позволяет легко подключать модули между файлами в проекте
  • Partialify: Позволяет подключать HTML шаблоны прямо в AngularJS директивы.
  • Lodash: Библиотека, расширяющая стандартный функционал JavaScript.

понедельник, 15 июля 2013 г.

Как быстро настроить JavaCV для использования

http://gerasimchuk.blogspot.ru/2012/07/javacv.html

Замечание: dll можно класть в любую папку, которую потом нужно будет указать в переменной PATH.

1. Идём на сайт JavaCV (на момент написания статьи он хостится на code.google.com), и внимательно смотрим абзац "Required Software", где написано, какая версия OpenCV поддерживается в настоящий момент. Сейчас это OpenCV 2.4.2.
Скачиваем OpenCV нужной версии. После этого необходимо открыть самораспаковывающийся архив и указать ему адекватный путь (чтобы вы потом сами могли найти его) для библиотек и примеров. Далее идём в "выбранная_папка/opencv/build/x86/vc10/bin/", копируем все .dll в папку Windows/System32. В случае использования 64-разрядной версии Windows (Пуск → ПКМ по "Компьютер" → Свойства, там глядим "Тип системы") .dll-ки надо класть в папку SysWOW64.


2. Скачиваем саму JavaCV. После распаковки архива будут доступны несколько   .jar-сборок основной библиотеки. Так как мы выбрали 32-битные библиотеки OpenCV, то и файл нам нужен соответствующий: javacv-windows-x86.jar. Также нам нужны файлы javacpp.jar  и javacv.jar. Не забудьте включить их в свой проект, иначе, естесственно, ничего не заработает.

Я бы рекомендовал создать где-нибудь под рукой папку навроде "JavaLibraries" (если у вас до сих пор такой нет), и скопировать туда во-первых всю скачанную библиотеку JavaCV, а во-вторых все .dll-ки, с которыми текущая версия работает. Вы избежите проблем в будущем, когда вам понадобится запустить вашу программку на другом компьютере, а вы не будете помнить с какой версией той или иной библиотеки она написана.


Теперь осталось лишь написать код. Ограничимся самым простым примером - откроем файл и покажем его на экране, используя только функционал JavaCV. Создадим исполняемый класс:


import static com.googlecode.javacv.cpp.opencv_core.*;
import static com.googlecode.javacv.cpp.opencv_imgproc.*;
import static com.googlecode.javacv.cpp.opencv_highgui.*;

public class TestClass {
    public static void open(String filename) { 
        IplImage image = cvLoadImage(filename);
        if (image != null) {
            cvShowImage(filename, image);
            cvWaitKey();
        }
    }
 
    public static void main(String[] args) {
        open("image.jpg");
    }
}

Вот и все. Нажимаем Shift+F6 (или в диспетчере: ПКМ → Выполнить файл). Результат тут же высветится.