Вызов клиента EJB из узла - PullRequest
0 голосов
/ 24 июня 2018

Как вы наверняка заметите, я новичок в 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, но насколько я знаю, это работает по-другому.

1 Ответ

0 голосов
/ 28 июня 2018

Полагаю, SessionCounterClient - это ваш EJB-клиент.В идеале клиент EJB будет вызывать метод из EJB, развернутого на сервере.В методе main вашего клиентского кода вы вызываете метод run.Реализация метода run будет в EJB.

...