2014-09-29 3 views
2

У меня есть прецедент, который теоретически мне кажется, так как это будет проблема. Но я не могу найти верную реализацию.Отдельный экземпляр объекта за транзакцию

  1. Я создал RESTful API, используя Apache CXF, Spring и Hibernate
  2. Это приложение включает в себя стандартный сервис-Proxy-DAO слоистую структуру
  3. Мне нужно создать экземпляр пользовательского объекта регистратора в моей службы (или предварительный сервис) и инициализировать кучу параметров, которые будут оставаться постоянными, по большей части, через каждый вызов, который проходит через мои уровни приложений и обратно.
  4. Как я могу для каждого индивидуального вызова службы инициализировать этот объект журнала один раз и использовать его во всех моих слоях без необходимости его экземпляра каждый раз. Либо я вставляю инициализированный объект в каждый класс, который мне нужен, или что-то в этих строках.
  5. Я не хочу использовать статические блоки или передавать объект в подписи метода.

Есть ли что-нибудь, что я могу использовать как часть Spring, CXF или другой рамки java, которая позволяет мне реализовать этот прецедент.

EDIT: Я бы определил транзакцию как единый вызов конечной точки веб-службы, от вызова до ответа.

+0

Вы когда-нибудь слышали об АОП? Если нет, прочитайте это http://docs.spring.io/spring-framework/docs/current/spring-framework-reference/html/aop.html, и вы будете в пути - но это, вероятно, займет некоторое время чтобы все было в порядке. – blagae

ответ

4

ThreadLocal был бы идеальным кандидатом для решения вашей проблемы.

UPDATE:

Создание потока локального, который доступен во всех местах, где это «общий» ссылка требуется даст все эти контексты доступ к этому ресурсу, не передать ссылку вокруг.

см. http://www.appneta.com/blog/introduction-to-javas-threadlocal-storage/ - выглядит как хорошее объяснение того, как использовать поток локально, а также имеет дело с вашим проблемным пространством.

+1

Возможно, вы хотите расширить свой ответ. – kolossus

+0

расширил мой ответ –