Проблема заключается в том, что состояния Stateful beans arentances выделяются путем дифференцирования клиентов, которые их называют. Glassfish (и, возможно, другие) не распространяют эту разницу на впрыскиваемые бобы. Спецификация EJB, насколько я помню, не совсем понятна.
Итак, ваше решение заключается в реализации дифференциации самостоятельно. Как достичь этого. Я не притворяюсь, что это самое красивое решение, но оно сработало. - мы сделали это, поставив фасад (уже сам по себе EJB) (я называю его фасад, хотя и не полностью покрывает рисунок фасада) перед всей нашей EJBs, со следующим кодом:
public Object call(Object bean,
String methodName,
Object[] args,
Class[] parameterTypes,
UUID sessionId) throws Throwable {
//find the session
SessionContext sessionContext = SessionRegistry.getSession(sessionId);
//set it as current
SessionRegistry.setLocalSession(sessionContext);
.....
}
Важным параметром является sessionId
- это то, о чем знают как клиент, так и сервер, и идентифицирует текущее изображение между ними.
На клиенте мы использовали динамический прокси для вызова этого фасада. Таким образом, вызовы выглядят так: getBean(MyConcreteEJB.class).someMethod()
, метод getBean создал прокси-сервер, так что вызывающим абонентам не нужно было знать о фасонных компонентах.
SessionRegistry
был
private static ThreadLocal<SessionContext> localSessionContext = new
ThreadLocal<SessionContext>();
И SessionContext
была просто карта обеспечение set(key, value)
и get(key)
Так что теперь, вместо того, чтобы использовать @Stateful
бобов, чтобы сохранить свое состояние, вы можете использовать SessionContext
.
Каков ваш сервер приложений. – Bozho
@ Божо зачем беспокоиться? –
@Pascal, хорошо, я когда-то изучал подобную проблему и обнаружил, что этот WebLogic (если я правильно помню) обладает некоторой способностью достигать того, чего он хочет. Затем я использовал Glassfish (который не мог). Так что, если его сервер приложений - это стеклянная рыба, я мог бы посмотреть в кодовой базе и найти что-то, что вызовет его проблему :) – Bozho