У меня есть приложение, которое обрабатывает IQ-строфы через smack (основанную на событиях библиотеку Java). Теперь мы переключаемся с Vanilla Tomcat на Glassfish 3.1, и я хотел бы перейти на EJB 3.1.
@Stateless
public class DispatchIQService {
private static Logger log = Logger.getLogger(DispatchIQService.class);
@PersistenceContext(unitName="hq")
private EntityManager em;
....
public void process(XMPPConnection connection, IQ rawRequest) {
log.debug("Raw Provider IQ: " + rawRequest.toXML());
RawResponse answer = null;
try{
StateWrapper state = new StateWrapper(em, connection, rawRequest);
// parsing raw xml from request
rawRequest.parse();
// processing action
answer = rawRequest.dispatchAction(state);
Из-за библиотеки событий я получаю правильный объект для каждого запроса. StateWrapper - это старая конструкция для передачи их, запроса и соединения через обработку сообщений. Я хочу удалить это как можно скорее с помощью ejbs и внедрения зависимостей.
С помощью rawRequest.dispatchAction (состояние) я передаю элемент управления объекту запроса для поиска службы фасада и начинаю с бизнес-логики.
@Override
public RawResponse dispatchAction(StateWrapper state) {
ModelFacade modelFacade = Core.lookup(ModelFacade.class);
return modelFacade.listModels(state, childElement.getIds());
}
Core.lookup просто выполняет поиск jndi для получения необходимого Бина. В этом бине я могу ввести их.
@Stateless
public class ModelFacade {
@PersistenceContext(unitName="hq")
private EntityManager em;
...
public RsModelListIQ listModels(StateWrapper state, List<Long> list) { ...
Мой вопрос: работает ли этот em под той же транзакцией, что и em из DispatchIQService?
Как я могу это проверить? Адрес их?
С наилучшими пожеланиями
м