воскресенье, 28 декабря 2014 г.

суббота, 6 декабря 2014 г.

Java. Особенность метода Arrays.asList(...)

Не все знают, что если выполнить подобный код:
String[] array = {"1","2"};
List<String> list = Arrays.asList(array); 
list.add("3");
то мы словим UnsupportedOperationException.

среда, 3 декабря 2014 г.

JVM. Задание параметров памяти.

-Xms - установить начальный размер Heap в момент старта JVM. (по умолчанию 1/64 от ОЗУ)
-Xmx - установить максимальный размер Heap. (по умолчанию 1/4 от ОЗУ)
-Xmn - установить размер раздела Young Generation.
-Xss - установить размер стека потока.
-XX:PermSize - установить начальный размер Permanent Generation.
-XX:MaxPermSize  установить максимальный размер Permanent Generation
-Xms и -Xmx - самые часто используемые настройки. (Решают проблему OutOfMemoryError) Когда задаете размер памяти допускается использовать буквы m или M для мегабайтов и g ил G для гигобайтов.
-Xms128m or -Xms128M
-Xmx2g or -Xmx2G
Не допускается использовать дробные числа.
-Xms0.5g - так нельзя 
Можно получить сообщение об ошибки если: 1) Задать значение только для начального размера Heap (-Xms). При этом значение будет больше чем значение по умолчанию для максимального размера Heap (1/4 ОЗУ) 2) Задать -Xmx больше чем размер ОЗУ

воскресенье, 30 ноября 2014 г.

CORS в Spring Boot приложении

Для добавление поддержки CORS в Spring Boot приложение необходимо лишь добавить класс фильтра. Пример ниже:
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletResponse;

import org.springframework.stereotype.Component;

@Component
public class SimpleCORSFilter implements Filter {
    public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException,
        ServletException {
        HttpServletResponse response = (HttpServletResponse) res;
        response.setHeader("Access-Control-Allow-Origin", "*");
        response.setHeader("Access-Control-Allow-Methods", "POST, GET, OPTIONS, DELETE");
        response.setHeader("Access-Control-Max-Age", "3600");
        response.setHeader("Access-Control-Allow-Headers", "x-requested-with");
        chain.doFilter(req, res);
    }

    public void init(FilterConfig filterConfig) {
    }

    public void destroy() {
    }
}

пятница, 28 ноября 2014 г.

Сборка проекта OSB из maven.

Pom файл  и скрипт для деплоя проекта на Oracle Service Bus можно найти тут. Предварительно необходимо прописать в Pom файл свои настройки.

среда, 26 ноября 2014 г.

Кастомное событие для JQuery на изменение текстового поля

Когда-то стояла передо мной задача сделать так чтобы при изменении значения текстового поля на веб странице изменялся и другой компонент. При этом все это должно было работать в любом браузере и обрабатывать такие события как удаление, вырезание как через Ctr +C (x) так и из контекстного меню.

вторник, 25 ноября 2014 г.

TTL индексы в MongoDB. Обновление expireAfterSeconds из Java

TTL индекс это индекс который MongoDB использует для автоматического удаления документов из коллекции после истечения определенного промежутка времени.
Иногда необходимо иметь возможность прямо из Java приложения изменить expireAfterSeconds в TTL индексе. Для этого можно использовать подобный код:

import java.net.UnknownHostException;

import org.springframework.data.mongodb.core.MongoOperations;
import org.springframework.data.mongodb.core.MongoTemplate;

import com.mongodb.MongoClient;

public class ChangeTtlIndex {
    public static void main(String[] args) throws UnknownHostException {
        MongoOperations mongoOperations = new MongoTemplate( new MongoClient(), "testDb");
        String command = "{collMod: 'testCollection', index: {keyPattern: {testField:1}, expireAfterSeconds: 3000}}";       
        mongoOperations.executeCommand(command);
    }
}


testDb - имя базы
testCollection - имя коллекции
testField - имя поля по которому создан TTL индекс.