Страницы

25 октября 2016 г.

Профессиональные навыки java-программиста за которые ПЛАТЯТ

На досуге сел и проанализировал вакансии компаний которые ищут java-программистов и готовы платить 200 000 - 540 000 р.

Вот summary моего анализа: 
  • Опыт: 5-8 лет
  • Технологии java: hibernate, JPA, Spring, JMS, J2EE (EJB, JPA, JTA, Servlet, JSP, JAX-WS), multithreaded/concurrent programming, In-Memory Data Grid;
  • Сторонние технологии: AWS;
  • Архитектура: Microservices, SOA (service-oriented architecture), EDA (Event-driven architecture), шаблоны проектирования.
  • NoSQL: MongoDB, Cassandra;
  • Реляционные БД: MSSQL, MySQL, Oracle, Postgres
  • Навыки: Технологии и практики разработки программного обеспечения уровня enterprise (высоконагруженные распределенные системы), развертывание виртуальных окружений (Docker), тестирование (+автоматическое), управление сетями, разговорный английский язык, TDD/BDD;
  • Методологии разработки: Agile (scrum, kanban);


Учитесь и развивайтесь!
Удачи :)

8 сентября 2016 г.

11 августа 2016 г.

Чем можно заменить JMS?

Для начала, сайт, где можно изучить варианты:
http://queues.io/


  1. Local BlockingQueue (локальная передача данных);
  2. Apache Camel (channel "seda" = blockingQueue) (локальная передача данных);
  3. Spring Integration (channels) (локальная передача данных);
  4. ZookKeeper + Curator (распределенная передача данных);
  5. Hazelcast;
  6. Redis (Jedis для Java), простой продюсер и консьюмер, (можно настроить persist, есть локальные очереди на случаи сбоев (rpoplpush)) + можно добавить кластера в для увеличения памяти. Есть репликация;
  7. ZeroMQ. Обертка над сокетом. Низкоуровневый обмен.
  8. AMQP with RabbitMQ;
  9. Amazon SQS. Просто, дорого. Есть драйвер для JMS без драйвера.
  10. Kafka - самый интересный вариант. Кластеризация с помощью ZooKeeper.

Youtube links:


Ошибка java.lang.NoSuchFieldError: WRITE_DURATIONS_AS_TIMESTAMPS.

Использую jackson-databind версии 2.8.1.. При деплое вылазит ошибка java.lang.NoSuchFieldError: WRITE_DURATIONS_AS_TIMESTAMPS.
В моем случае проблема возникала из-за того, что в WildFly 8.2 в системных модулях лежит  jackson-databind версии 2.4, и при деплое, во время создания ObjectMapper, classLoader этого класса указывал именно на модуль WildFly, а не на зависимость из pom.xml.
Лечится просто:
В boss-deployment-structure.xml просто эексклудим подсистему jaxrc (если она вам конечно не требуется). Это исключит подтягивание заисимостей из модуля при деплое.

<exclude-subsystems>
<subsystem name="jaxrs" />
</exclude-subsystems>


7 августа 2016 г.

Wildfly + HornetQ. JMS. Record is too large to store

Record is too large to store


Актуально для Wildfly 8.2. На более поздних версиях не проверялось.

Данная ошибка возникает в том случае, если входящее сообщение имеет размер более чем размер указанный в настройке journal-file-size, и менее чем указанный min-large-message-size, при включенном персисте (persistence-enabled = true). Настройки в параметрах указываются в байтах.

Вторая причина возникновения этой ошибки - разные настройки на отправителе и получаете сообщений. Дело в том, что параметризует сообщение именно отправитель, и если у него, например, выключен персист  (persistence-enabled = false), то все сообщения параметризуются как "обычные" (не large). Получатель считывает первый байт, и таким образом определяет тип сообщения установленный отправителем. Т.е. если отправитель будет помечать все сообщения как "обычные", то получатель будет их обрабатывать как обычные, не зависимо от настроек установленных на получателе. Это значит, что у вас не будет работать настройка min-large-message-size, получатель всегда будет пытаться поместить сообщение в файл журнала. Если сообщение окажется объемом больше размера файла журнала - мы получим Record is too large to store.




2 августа 2016 г.

Amazon S3 java sdk. Подключаемся локально к minio.

https://minio.io/ - это локальный аналог amazon s3.
Все инструкции по его использованию есть на сайте.

Мы имеем amazon s3 java sdk, и хотим применить его локально, без подключения к amazon.

Разворачиваем minio

Я делал так как описано здесь:
https://docs.minio.io/docs/minio-docker-quickstart-guide

После того как minio запущен нас интересует четыре параметра:

Endpoint:  http://172.17.0.2:9000  http://127.0.0.1:9000
AccessKey: GEUV76CPZT9W6LHD27WV
SecretKey: LFtXnspXOcUgZXbgxMb+OfjqedhXMa06zQ4xMQRT
Region:    us-east-1

Именно они понадобятся для создания соединения.

Подключение


public class AmazonS3ClientFactoryImpl implements AmazonS3ClientFactory {
    private static final String AMAZON_ACCESS_KEY = "GEUV76CPZT9W6LHD27WV";
    private static final String AMAZON_SECRET_KEY = "LFtXnspXOcUgZXbgxMb+OfjqedhXMa06zQ4xMQRT";
    public static final String REPOSITORY_ENDPOINT = "http://localhost:9000";

    public AmazonS3 getAmazonS3Client(){
        AWSCredentials credentials = new BasicAWSCredentials(AMAZON_ACCESS_KEY, AMAZON_SECRET_KEY);
        ClientConfiguration clientConfiguration = new ClientConfiguration();

        AmazonS3 amazonS3Client = new AmazonS3Client(credentials, clientConfiguration);
        Region usWest2 = Region.getRegion(Regions.US_EAST_1);
        amazonS3Client.setRegion(usWest2);
        amazonS3Client.setEndpoint(REPOSITORY_ENDPOINT);
        amazonS3Client.setS3ClientOptions(new S3ClientOptions().withPathStyleAccess(true).disableChunkedEncoding());

        return amazonS3Client;
    }
}

22 июня 2016 г.

jconsole. Wildfly 8. Remote connection failed?

Чтобы удаленный коннект в WildFly заработал, необходимо запустить jconsole в терминале (linux) со следующими параметрами:

jconsole -J-Djava.class.path=$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib/jconsole.jar:$JBOSS_HOME/bin/client/jboss-cli-client.jar

5 июня 2016 г.

Ubuntu 14.04 LTS. Netwiork manager умер... Ошибка: The overwriting error message was: Файл ключей не содержит группу «connectivity»

Если случилось (после обновления системы), делаем следующее:

1. Устройствами с доступом в интернет скачиваем пакеты:

http://ru.archive.ubuntu.com/ubuntu/pool/main/libn/libnl3/libnl-3-200_3.2.21-1_amd64.deb
http://ru.archive.ubuntu.com/ubuntu/pool/main/libn/libnl3/libnl-genl-3-200_3.2.21-1_amd64.deb
http://ru.archive.ubuntu.com/ubuntu/pool/main/libn/libnl3/libnl-route-3-200_3.2.21-1_amd64.deb


2. Копируем в любую папку в убунте;

3. В терминале переходим в папку с deb-пакетами и выполняем: sudo dpkg --force-downgrade -i *.deb;

4. Перезагружаем network manager: sudo NetworkManager restart.

Все должно работать после того как перезагрузка завершится.

25 мая 2016 г.

What is the difference between a .war and .ear file?

In J2EE application, modules are packaged as EAR, JAR and WAR based on their functionality
JAR: EJB modules which contain enterprise java beans (class files) and EJB deployment descriptor are packed as JAR files with .jar extenstion
WAR: Web modules which contain Servlet class files, JSP Files, supporting files, GIF and HTML files are packaged as JAR file with .war (web archive) extension
EAR: All above files (.jar and .war) are packaged as JAR file with .ear (enterprise archive) extension and deployed into Application Server.

Link: http://stackoverflow.com/questions/1594667/war-vs-ear-file

20 мая 2016 г.

pg_dump, ошибка!

Пытаемся стянуть дамп базы, итог:


pg_dump: [archiver (db)] connection to database "myDB" failed: FATAL:  no pg_hba.conf entry for host "ip-address", user "postgres", database "database_name", SSL on
FATAL:  no pg_hba.conf entry for host "ip-address", user "postgres", database "myDB", SSL off


Хорошая статья о том как решается проблема:
http://pgcookbook.ru/article/no_pg_hba_conf_entry_for_host.html


PostgreSql. Сколько весят базы?

select t1.datname AS db_name, 
       pg_size_pretty(pg_database_size(t1.datname)) as db_size
from pg_database t1
order by pg_database_size(t1.datname) desc;