ClassBridge, вызываемый MassIndexer, и доступ к сервису spring

Интересно, можно ли использовать какие-либо весенние сервисы из спящего режима поиска ClassBridge.

Аннотация:

В моем объекте нет всей информации, которую я хотел бы поместить в проиндексированный документ. Я не могу получить его с помощью @IndexedEmbeded тоже. Эти данные поступают из внешнего источника данных, и у меня есть сервис для их предоставления. Это необходимо только при переиндексации. При индексировании службы сохранения одного объекта укажите эту информацию в поле переходной сущности. Для переиндексации я использую MassIndexer.

Мое приложение работает в среде Spring MVC. Я использую конфигурацию, управляемую аннотациями. Поэтому для доступа к моему сервису мне нужно только использовать аннотацию @Autowired, и сервис готов к использованию.

Решение?

При использовании Hibernate Search жизнь не так проста (или я понятия не имею, как это может быть).

Чтобы получить дополнительную информацию, я решил использовать ClassBridge. Я также реализую простой MassIndexer процедура, вызываемая из моей весенней службы.

В моей весне ClassBridge не работает автопроводка. Когда я пытаюсь сделать быстрое обходное решение и использовать статическое поле в ClassBridge и передать ссылку на службу от вызывающей стороны MassIndexer, возникла другая проблема. Служба сообщает об исключении «нет сеанса» (sessionFactory.getCurrentSession() выдает исключение)... Я понятия не имею, куда идти дальше.

Каков рекомендуемый способ доступа к службе Spring из кода ClassBridge?

Как я могу получить активную сессию гибернации (или SessionFactory) из ClassBridge?

Спасибо за ваше время и надеюсь на вашу помощь.


person Saram    schedule 05.06.2013    source источник


Ответы (2)


Рекомендуемый способ — это переплетение времени компиляции и @Configurable.

person Marc    schedule 02.07.2013
comment
Можете ли вы объяснить это больше? Я не могу представить окончательное решение :( - person Saram; 03.07.2013

Комментарий на этой странице (http://guylabs.ch/2014/02/22/autowiring-pring-beans-in-hibernate-jpa-entity-listeners/) предоставляет гораздо более простой способ справиться с этим, который может оказаться полезным. Вы можете сделать так, чтобы Spring автоматически связывал объект для вас, более явно, вызвав:

SpringBeanAutowiringSupport.processInjectionBasedOnCurrentContext(this);

Документ: http://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/web/context/support/SpringBeanAutowiringSupport.html

person adam    schedule 03.09.2015