Разница в Ajax и REST - PullRequest
       1

Разница в Ajax и REST

0 голосов
/ 01 февраля 2019

Я пытаюсь понять небольшую проблему, с которой я сталкиваюсь в проекте, над которым я сейчас работаю.

В своем проекте я - бэкэнд-разработчик, и я выполняю некоторые функциивызываться внешним интерфейсом с некоторыми функциями Ajax.Сегодня я сталкиваюсь со странной и случайной проблемой.

Всякий раз, когда я использую клиент RESTful для вызова своих конечных точек, он работает довольно хорошо, без единой ошибки в любой из отдельных конечных точек.Но когда клиент вызывает их с помощью ajax, иногда появляется сообщение «Не удается работать с закрытым соединением!»или «Не могу работать с закрытым оператором!», довольно случайно, какой из них появляется.

Я использую следующую структуру:

@Repository
public class RandomRepository {

    @Autowired
    private BasePersistence dao;

    EntityManager em;

    Session session;

    public UserDTO getUserById(Long userId) {

        if (userId == null)
            return null;

        em = BasePersistence.entityManagerFactory.createEntityManager();
        em.getTransaction().begin();

        session = em.unwrap(Session.class);
        User user = session.doReturningWork(new ReturningWork<User>() {

            @Override
            public User execute(Connection con) throws SQLException {
                try (PreparedStatement stmt = con.prepareStatement("SELECT * FROM tbl_users AS u WHERE id = "+ userId +";")) {
                    ResultSet rs = stmt.executeQuery();
                    User u = null;
                    while(rs.next()) {
                        u = new User(rs.getLong(1),rs.getString(2));
                    }

                    return u;
                }
            }

        });

        em.getTransaction().commit();
        em.close();

        return user != null ? new UserDTO(user) : null;
    }
}

Я использую эту же структурусделать все мои операции с базой данных.Я создаю EntityManager> Я начинаю транзакцию> Я разворачиваю сеанс> Я выполняю doWork или doReturningWork (в зависимости от типа запроса)> Я фиксирую> Я закрываю EntityManager.

Мой вопрос, дажесоздавая EntityManager внутри метода, может ли он быть закрыт другим EntityManager, созданным в другом методе, подобном этому, с помощью Ajax для вызова конечных точек?

Если это так, как я могу предотвратить эту проблему?

Действительно ли это разница между вызовом REST и вызовом AJAX?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...