28 июня 2018 г.

java.lang.annotation.AnnotationFormatError: Duplicate annotation for class: interface javax.validation.constraints.

Описываю сущность. Код сгенерил сам NetBeans на основании таблицы базы данных.

@Id
@Basic(optional = false)
@NotNull
@Size(min = 1, max = 100)
@Column(name = "login")
private String login;

При каждом обращении к этой сущности ловлю:
Exception: java.lang.annotation.AnnotationFormatError: Duplicate annotation for class: interface javax.validation.constraints.NotNull

Если закомментирую описание  @NotNull, получаю:
Exception: java.lang.annotation.AnnotationFormatError: Duplicate annotation for class: interface javax.validation.constraints.Size


Оказывается, описание @Column дублирует эти описания и выдает исключение.
Теперь правильно писать так:

@Id
@Basic(optional = false)
@Column(name = "login", length = 100, nullable = false)
private String login;

27 июня 2018 г.

Glassfish, я понял почему его не любят.

Я понял, почему не любят Glassfish.

Сначала я поставил версию 5. Локально работает отлично, удаленно не работает. Не возможно подключиться к админской консоли.

Времени разбираться не было. Забил на 5-ку, поставил 4-ку. Все работало до тех пор, пока не начал REST методы пилить. Оказывается встроенный XML парсер требует java определенной, старой (очень старой) версии.

Новая версия парсера, которую я подсунул глассфишу, отказывается работать с 4-кой :)

Забил на 4-ку, начал разбираться с 5-кой. Оказывается, для нормальной удаленной работы 5-ки требуется java 8 билд не более u152. Едрить твою через...

Пришлось качать нестабильную версию 5.0.1. Удаленное управление работает, парсер работает.

Но сколько на это было убито времени и нервов...

26 июня 2018 г.

Это вот оно как Михалыч.

Поставил Jira в тестовом режиме. Для нормальной работы ей требует MySQL, с mariadb она не умеет. Поэтому поставил временно на встроенной базе.
Дал распробовать это чудо коллегам. Им понравилось. Решил переехать на MySQL. Скачал 8-ю версию. Импортировал базы своих приложений. Везде пришлось переписывать вызовы драйвера и параметры подключений. Но вобщем все мои приложения заработали.
Включаю jira, и... опа опа ла бузука. Нифига не работает. Как оказалось, ей требуется версия 5.6 максимум. Пипец. Полдня потерял на это...
Сделаю для жиры контейнер, буду гонять её оттуда.

22 июня 2018 г.

GlassFish 5, standalone client

"Решил замахнуться на нашего Вильяма..." (с) Берегись автомобиля.

Появилось время на самокапание, решил попробовать сервер приложений GlassFish в связке с RMI клиентом на Java. Написал простейший ejb с методом sayHello.

@Stateless
public class MainSessionBean implements MainSessionBeanRemote {
    @Override
    public String sayHello() {
        return "Hello world!";
    }
}

Ну и в клиенте, его вызов.

try {
            props.load(new FileInputStream("jndi.properties"));
            InitialContext ctx = new InitialContext(props);
            MainSessionBeanRemote bean = 
               (MainSessionBeanRemote)ctx.lookup(
                "java:global/CorpServer/CorpServer-ejb/MainSessionBean");
            System.out.println(bean.sayHello());
        } catch ...

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

В инете готового решения проблемы не нашел. После долгой боли и мучений выработал метод получения необходимых библиотек, для стандалон клиента.
  1. В glassfish ищем батник package-appclient и запускаем его. Он создаёт файл glassfish5/glassfish/lib/appclient.jar
  2. Из этого файла из директории modules извлекаем все файлы jar и копируем к себе в проект. Почему то, если использовать сам appclient.jar ничего не работает.
  3. Но там не хватает двух файлов. Их придется ручками скопировать из glassfish5/glassfish/modules. Файлы: bean-validator-cdi.jar и bean-validator.jar
Все, клиент коннектится, методы вызываются.