У меня есть база данных с таблицей 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.При попытке загрузить пользователей из базы данных, но получать только старых пользователей.Новые пользователи появляются только после перезапуска приложения