2013-06-19 3 views
0

Я пишу приложение Java EE («UserServices»), которое предоставляет некоторые услуги, такие как ведение журнала пользователей, управление пользователями и т. Д. EJB или веб-сервисы REST. EJB предназначен для использования приложением или клиентскими приложениями. Клиентские приложения используют безфакторные удаленные (или локальные) бобы, предоставляемые приложением.Stateful EJB и несколько клиентских приложений

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

И я не знаю, как это сделать.

Данные должны храниться в приложении «UserServices», потому что это его данные. Поэтому я думаю, что я буду использовать бранды состояния с локальными и удаленными интерфейсами для их сохранения. Но каждое клиентское приложение должно вызывать изменение данных при вызове службы, например, «войти в систему» ​​или «выйти из системы».

Итак, как изменить состояние данных, которые «живут» в приложении «UserServices» изнутри клиентского приложения, которое использует удаленный (или локальный) компонент без состояния?

Или, другими словами, как изменить состояние бланка состояния, существующего в приложении из другого (возможно удаленного) приложения?

Я использую Java EE 6 и EJB 3.1 и JBoss 7.1.

+0

Я думаю, что singleton ejb может быть полезен для подсчета количества зарегистрированных пользователей. –

ответ

0

Как я понимаю, вы хотели бы поделиться некоторыми данными между вызовами beans от разных клиентов. Попытка получить доступ к состоянию сеансового компонента состояния из другого не является хорошей идеей, так как всегда создается один экземпляр для каждого клиента. Если постоянство данных не требуется, вы можете использовать EJB Singleton Bean или CDI bean с singleton-scope (я предпочитаю EJB Singleton). Чтобы контролировать активность пользователей (вызовы бобов), могут быть полезны перехватчики, вы можете перехватывать вызовы SFSB и кормить синглтон таким образом.

0

Чтобы подсчитать количество зарегистрированных пользователей, вы должны указать свой bean-компонент как @Singleton. @Singlton сохраняет данные в начале контейнера до конца.

import javax.ejb.Singleton; 
@Singleton 

public class CounterBean { 
private int loginUser = 1; 

// Increment and return the number of users 
public int countLoggedInUsers() { 
    return loginUser++; 
} 
} 

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

Смежные вопросы