Я просмотрел несколько статей и настроил следующее, но вижу некоторые проблемы с управлением транзакциями. Пожалуйста, дайте мне знать, правильно ли я использую компас в следующих конфигурациях:
в Spring-config:
<bean class="org.springframework.orm.jpa.JpaTransactionManager"
id="transactionManager">
<property name="entityManagerFactory" ref="entityManagerFactory" />
<property name="jpaDialect" ref="jpaDialect" />
</bean>
<bean class="org.compass.spring.support.CompassContextBeanPostProcessor"/>
<bean id="compass" class="org.compass.spring.LocalCompassBean">
<property name="classMappings">
<list>
<value>......</value>
<value>......</value>
<value>......</value>
</list>
</property>
<property name="compassSettings">
<props>
<prop key="compass.engine.connection">file:///usr/local/lucene</prop>
<prop key="compass.transaction.factory">
org.compass.spring.transaction.SpringSyncTransactionFactory
</prop>
</props>
</property>
<property name="transactionManager" ref="transactionManager"/>
</bean>
в коде компаса:
private CompassSession session;
@CompassContext
protected void setCompassSession(CompassSession session) {
this.session = session;
}
public void index(Coupon coupon) throws AppException{
try {
session.save(coupon);
} catch (CompassException exception) {
logger.debug("Error in coupon indexing: "+ exception.getMessage());
}
}
в слое обслуживания:
@Transactional
public void saveCoupon(Coupon coupon) throws AppException{
Coupon savedCoupon = dbCouponDAO.saveCoupon(coupon); // saves to db through eclipselink
nonDbCouponDAO.index(savedCoupon); // indexes in compass
}
Насколько я понимаю, диспетчер транзакций, сконфигурированный для весенней eclipselink, также может использоваться в качестве менеджера транзакций компаса, и операции eclipselink и компаса могут использоваться в одном модуле, как я упоминал на уровне обслуживания.
Пожалуйста, дайте мне знать, если я здесь что-то не так делаю.
Спасибо.