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

Все, клиент коннектится, методы вызываются.