barbitoff programmer`s blog

Здесь я публикую заметки из программерской жизни: грабли, на которые мне случилось наступить, проблемы, для которых было найдено элегантное (или не очень) решение, а также все, с чем мне пришлось столкнуться и чем хотелось бы поделиться =)
PS Если хотите меня поблагодарить - на странице есть 3 места, чтобы это сделать =)

среда, 18 сентября 2013 г.

Maven local repository и свободное место на системном диске

Локальный maven-репозиторий имеет обыкновение разрастаться до внушительных размеров, а учитывая тот факт, что по-умолчанию он лежит в ${user.home}/.m2/repository, это может подпортить настроение тем, кто использует в качестве системного диска сравнительно небольшой SSD.
Решение: в settings.xml указать иной путь к локальному репозиторию с помощью соотв. тега:
<localRepository>T:\repository</localRepository>

четверг, 5 сентября 2013 г.

WSO2 ESB: получение значения Local Entry типа "Inline XML" внутри прокси-сервиса и работа с ним как с XML

Задача

Есть Local Entry типа "Inline XML", содержащая некоторый XML. Необходимо в прокси-сервисе извлечь эту XML и обработать ее, например, извлечь значение определенного узла с помощью XPath.

Решение

Для начала получаем значение Local Entry (пусть она называется 'localEntryName') как XML в свойство (пусть будет "localEntryXml"):
<property action="set" expression="get-property('localEntryName')" name="localEntryXml" scope="default" type="OM"/>
Здесь важно, что тип свойства указан "OM".
Теперь с этим свойством можно оперировать, например, выполнять на основе него фильтрацию:
<filter xpath="count($localEntryXml/*[text()='qwerty'])">
     <!-- -->
</filter>

пятница, 30 августа 2013 г.

Acegi Security на Weblogic 10: постоянный редирект на страницу логина

Проблема

В приложении используется Acegi Security 1.0.7 (приложение построено с помощью Wavemaker 6.5.3), приложение разворачивается на Weblogic 10.3.5. При попытке залогиниться пользователь постоянно редиректится на страницу входа (но без сообщения о неуспешной авторизации, т.е. ситуация отличается от таковой при неверном логине/пароле).

Причина

В браузере хранится 2 cookie с именем JSESSIONID.

Решение 

Удалить все куки с именем JSESSIONID и снова попробовать зайти.

суббота, 24 августа 2013 г.

WSO2 ESB: особенность использования FORCE_ERROR_ON_SOAP_FAULT=true

Если установить свойство FORCE_ERROR_ON_SOAP_FAULT в true:
<property action="set" name="FORCE_ERROR_ON_SOAP_FAULT"
scope="default" type="STRING" value="true"/>
то полученный от конечного сервиса SOAP Fault приведет к вызову faultSequence. Проблема такого подхода в том, что тело ответа от сервиса в таком случае будет недоступно (по крайней мере при логировании с уровнем full в лог пишется Envelope запроса, а не ответа).

четверг, 22 августа 2013 г.

Oracle + Weblogic connection pool: задание схемы по-умолчанию

Недавно писал про организацию пула соединения с БД в приложении, развертываемом на Weblogic (http://barbitoff.blogspot.ru/2013/07/weblogic-1035-connection-pooling.html). Xml-конфигурация пула позволяет задать все параметры соединения, кроме имени используемой схемы. Хардкодить имя схемы в SQL-запросах не хочется, как и изобретать велосипед с подтягиванием имени схемы из какого-то своего отдельного конфига. Выход - использовать в SQL схему по-умолчанию (т.е. не задавать имя схемы вообще) и воспользоваться таким параметром пула, как "init-sql". В этом параметре нужно указать SQL-запрос, который при инициализации соединения с БД поменяет схему по-умолчанию на необходимую нам. Этот SQL зависит от используемой СУБД, для Oracle он выглядит так:
  <jdbc-connection-pool-params>
    <max-capacity>20</max-capacity>
    <connection-reserve-timeout-seconds>25</connection-reserve-timeout-seconds>
    <test-table-name>SQL SELECT 1 FROM DUAL</test-table-name>
    <init-sql>SQL ALTER SESSION SET CURRENT_SCHEMA = USR</init-sql>  </jdbc-connection-pool-params>

четверг, 15 августа 2013 г.

dojo: преобразование даты в строку

Если нужно преобразовать дату в строку в ISO-формате, можно использовать dojo.date.stamp:
dojo.require("dojo.date.stamp");
var dateIsoStr = dojo.date.stamp.toISOString(new Date());
Вообще же, чтобы отформатировать дату в произвольном формате, нужен dojo/date/locale:
dojo.require("dojo.date.locale");    
var dateStr = dojo.date.locale.format(new Date(), {selector: "date", datePattern: "MM/dd/yyyy hh:mm a"});    

вторник, 13 августа 2013 г.

JScript Folder Object: итерация по файлам в папке

Ниже приведен пример того, как в JScript можно итерироваться по файлам в некоторой папке:
var FSO = WScript.CreateObject("Scripting.FileSystemObject");
var folder = FSO.GetFolder("C:/path/to/folder");
var filesEnumerator = new Enumerator(folder.Files);
for (; !filesEnumerator.atEnd(); filesEnumerator.moveNext()) {
var file = filesEnumerator.item();
// работа с файлом file
}