Я планирую использовать EJBContext
, чтобы передать некоторые свойства вокруг уровня приложения (в частности, управляемый сообщениями bean) в обратный вызов жизненного цикла persistence, который нельзя напрямую вводить или передавать параметры (прослушиватель сеанса в EclipseLink, обратный вызов жизненного цикла объекта и т.д.), и этот обратный вызов получает EJBContext
через JNDI.
Это похоже на работу, но есть ли какие-либо скрытые gotchas, такие как безопасность потоков или срок службы объектов, которые мне не хватает? (Предположим, что переданное значение свойства является неизменным, как String или Long.)
Пример bean code
@MessageDriven
public class MDB implements MessageListener {
private @Resource MessageDrivenContext context;
public void onMessage(Message m) {
context.getContextData().put("property", "value");
}
}
Затем обратный вызов, который использует EJBContext
public void callback() {
InitialContext ic = new InitialContext();
EJBContext context = (EJBContext) ic.lookup("java:comp/EJBContext");
String value = (String) context.getContextData().get("property");
}
Что мне интересно, могу ли я быть уверенным, что содержимое карты contextData
отображается только для текущего вызова/потока? Другими словами, если два потока запускают метод callback
одновременно, и оба ищут EJBContext
из JNDI, они фактически получают разные содержимое карты contextData
?
И как это работает на самом деле - это EJBContext
, возвращенный из поиска JNDI, действительно, объект оболочки вокруг структуры ThreadLocal
в конце?