Прежде всего, если вы хотите получить доступ к вашему EJB с внешнего клиента, вам нужно объявить удаленное представление.
Поскольку ваш EJB имеет только аннотацию @Local
, он предлагает только локальное представление , Вы должны добавить аннотацию @Remote
.
@Local
@Remote
@Stateless
public class MyService implements IMyService {
public String getMessage() {
return "Hello!";
}
}
Глобальное имя JNDI состоит из:
java:global/[EAR module]/[EJB module]/[EJB name]
, поскольку в вашем случае EAR отсутствует, это будет:
java:global/ejb-1.0-SNAPSHOT/MyService
Этот тест должен работать:
Context ctx = new InitialContext();
IMyService myService = (IMyService) ctx.lookup("java:global/ejb-1.0-SNAPSHOT/MyService");
Assert.assertEquals(myService.getMessage(), "Hello!");
ОБНОВЛЕНИЕ
Вам также необходимо добавить клиентские библиотеки glassfi sh в classpath к запустите класс Main.
Я изначально тестировал его с помощью теста JUnit, он работал для меня, потому что проект уже объявил зависимость test
от glassfish-embeded-all
, которая включает в себя клиент glassfi sh. Но IntelliJ не добавляет библиотеки test
при запуске класса Main.
Вы можете либо изменить область действия glassfish-embeded-all
на runtime
, либо добавить новую зависимость:
<dependency>
<groupId>org.glassfish.main.appclient</groupId>
<artifactId>gf-client</artifactId>
<version>5.1.0</version>
<scope>runtime</scope>
</dependency>