Я новичок в EJBS. Я написал сессионный компонент с отслеживанием состояния @SessionScoped. Затем я внедрил ejb в свой сервлет.
@Local
@SessionScoped
@Statueful
public class CartServiceImpl implements CartService {
private int i = 0;
public int getI() {
return i++;
}
}
В моем сервлете
@Inject
private CartService cartService;
.
.
.
out.print(cartService.getI());
Затем я открыл два браузера (IE, FF) и нажал на сервлет. В IE я вижу вывод от 0 до n. В firefox я также вижу вывод, начиная с 0 до n.
Затем я создал ухо, в котором есть сосуд и война. Баночка содержит все файлы EJB. war содержит сервлеты.
Вот как я ввел ejb в сервлет
@Resource(lookup = "java:app/ejb-beginner-ejb/CartServiceImpl")
private CartService cartService;
Затем я попытался запросить тот же сервлет из IE и FF и получил неожиданный результат.
Результат выглядит следующим образом
В IE я запросил первый раз и получил 0 на выходе. Затем я обновил страницу и на выходе получил 1. Затем я перехожу к FF, отправляю запрос в первый раз и получаю 2 в качестве вывода вместо 0. Затем я перехожу в IE, обновляю страницу и получаю 3 в качестве вывода вместо 2.
Я понял, что сервер приложений создает только один экземпляр ejb с отслеживанием состояния. Как я могу это исправить?
В чем разница между упаковкой ejbs в war и упаковкой их отдельно в jar module?