Веб-приложение не получает фактические данные из базы данных, используя EclipseLink - PullRequest
0 голосов
/ 28 мая 2018

У меня есть база данных с таблицей User

-------------------------------------------------------------------------------
|   id (pk)             |   name                      |      role              |
-------------------------------------------------------------------------------
|   1                   |   Adam                      |           1            |
--------------------------------------------------------------------------------
|   2                   |   Jack                      |           2            |

Я получил всех пользователей, используя EclipseLink из базы данных и отображал их в веб-приложении, используя JSF и Facelets.Я могу отредактировать их, добавить нового пользователя, все отлично работает.

Backend:

public void getAvialableUsers() {
    List<DctInternalUsers> activeInternalUsersList = new ArrayList<>();
    activeInternalUsersList = crossInterfaceJSFBean.getSettingsBean().getAllUsers();
}

Frontend:

 <p:dataTable id="usersDataTable"
                                 emptyMessage="Пользователи отсутсвуют"
                                 selectionMode="single"
                                 value="#{usersJSFBean.avialableInternalUsersList}"
                                 var="user"
                                 rows="15"
                                 paginator="true"
                                 paginatorAlwaysVisible="false"
                                 paginatorPosition="bottom"
                                 rowKey="#{user.login}"
                                 selection="#{usersJSFBean.selectedInternalUser}"
                                 style="text-align: center;"
                                 class="commonGrid">

                        <p:column headerText="Login">
                            <p:outputLabel value="#{user.login}"/>
                        </p:column>

                        <p:column headerText="Name">
                            <p:outputLabel value="#{user.name}"/>
                        </p:column>

                        <p:column headerText="Role">
                            <p:outputLabel value="#{user.role}"/>
                        </p:column>


   </p:dataTable>

А также я могу добавить их с помощью JAX-Услуги RS с JSON;Когда я делаю это, я отправляю сообщение своему веб-интерфейсу, используя WebSockets, о добавлении нового пользователя.

@Path("/addUser")
@POST
@Consumes("application/json; charset=UTF-8")
public String getUserInfo(String json) {
    try {
        JSONObject json = new JSONObject(json);

        User user = new User();
        user.setName(json.getString("name"));
        user.setRole(json.getInt("role"));

        entityManager.merge(user);

        for(Session session : sessions) {
        RemoteEndpoint.Basic endpoint = session.getBasicRemote();
        try {
            endpoint.sendText(message);
        }
        catch(IOException ioe) {
            LOG.warn("Unable to send message to session\n Message:" + 
            ioe.getMessage());
        }
    }
}

Здесь все работает нормально, данные успешно добавлены в базу данных.После этого, когда я получаю сообщение от веб-сокетов, я захожу в базу данных и пытаюсь снова получить всех пользователей:

public void updateUsers() {
    activeInternalUsersList = crossInterfaceJSFBean.getSettingsBean().getAllUsers();
}

И вот проблема.Я получаю только тех пользователей, которых я получаю при первом выборе.Новые добавленные пользователи не загружают в веб-приложение.Вопрос в том, как получить новых пользователей из базы данных, когда они были добавлены с веб-сервисов?Запрос:

@NamedQuery(name = "Users.findAll", query = "SELECT d FROM Users d")

public List<Users> getAllUsers() {
    TypedQuery query = em.createNamedQuery("Users.findAll", Users.class);
    return query.getResultList();
}

Описание: Пользователь может быть добавлен из веб-приложения и веб-службы через eclipselink.WS отправляет сообщение в веб-приложение через WebSockets.При попытке загрузить пользователей из базы данных, но получать только старых пользователей.Новые пользователи появляются только после перезапуска приложения

...