Как вы наверняка заметите, я новичок в EJB и Wildfly, но я стараюсь изо всех сил понять, проводя некоторые эксперименты.Проблема в том, что я хочу запустить простой EJB (счетчик с отслеживанием состояния), развернутый в Wildfly (из jar), с другого клиентского узла.Для этого я создал 2 виртуальные машины с использованием Vagrant, первая из которых содержит Wildfly, Java и т. Д., И развертывает jar, а вторая содержит только java (и, вероятно, должна содержать что-то еще) и имеет другой jar, содержащий клиент,
Эта машина должна иметь возможность вызывать метод внутри развернутого ejb.Я успешно вызвал простую войну, развернутую таким же образом, но мне нужно понять, как я могу вызвать этот метод, и информация, которую я нашел, сбивает с толку, с моей точки зрения.
Это класс клиентаи этот класс находится в банке, содержащейся в клиенте:
package ejb.counter.client;
import ejb.counter.SessionCounter;
import javax.ejb.EJB;
public class SessionCounterClient {
@EJB(lookup = "ejb/asw/SessionCounter")
private static SessionCounter counter;
public SessionCounterClient() { }
public static void main(String[] args) {
SessionCounterClient client = new SessionCounterClient();
client.run();
}
public void run() {
for (int i=1; i<=50; i++) {
System.out.println( counter.getCounter() );
}
counter.close();
}
}
Итак, очевидно, что метод, который мне нужно вызвать, это getCounter ().Другой EJB содержит интерфейс и его реализацию, вот реализация:
package ejb.counter.impl;
import ejb.counter.SessionCounter;
import javax.ejb.Stateful;
import javax.ejb.Remove;
import javax.annotation.PostConstruct;
@Stateful(mappedName = "ejb/asw/SessionCounter")
public class SessionCounterImpl implements SessionCounter {
private int counter;
@PostConstruct
public void initialize() {
this.counter = 0;
}
public int getCounter() {
counter++;
return counter;
}
@Remove
public void close() {}
}
Возможно, мне следует использовать эту информацию, но я не могу понять, как:
WFLYEJB0473: JNDI bindings for session bean named 'SessionCounterImpl' in deployment unit 'deployment "CounterEJB.jar"' are as follows:
java:global/CounterEJB/SessionCounterImpl!ejb.counter.SessionCounter
java:app/CounterEJB/SessionCounterImpl!ejb.counter.SessionCounter
java:module/SessionCounterImpl!ejb.counter.SessionCounter
java:jboss/exported/CounterEJB/SessionCounterImpl!ejb.counter.SessionCounter
ejb:CounterEJB/SessionCounterImpl!ejb.counter.SessionCounter?stateful
java:global/CounterEJB/SessionCounterImpl
java:app/CounterEJB/SessionCounterImpl
java:module/SessionCounterImpl
Результат iНадеемся достичь следующего: я запускаю 2 виртуальные машины, на первом из них развертываю jar в Wildfly, подключаю (используя другую командную строку) ко второму клиентскому компьютеру и, используя скрипт, вызываю EJB (выполняя методв клиентском jar), который отображает свой результат через командную строку.Я могу воссоздать это в среде Glassfish-Payara, но насколько я знаю, это работает по-другому.