Spring, eclipselink, компасная интеграция - PullRequest
0 голосов
/ 31 октября 2011

Я просмотрел несколько статей и настроил следующее, но вижу некоторые проблемы с управлением транзакциями. Пожалуйста, дайте мне знать, правильно ли я использую компас в следующих конфигурациях:

в 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 и компаса могут использоваться в одном модуле, как я упоминал на уровне обслуживания.

Пожалуйста, дайте мне знать, если я здесь что-то не так делаю.

Спасибо.

1 Ответ

1 голос
/ 14 июля 2012

Попробуйте добавить это,

<!-- Search Manager using Comass abstractions. -->
<bean class="org.compass.spring.support.CompassContextBeanPostProcessor"/>

<bean id="compass" class="org.compass.spring.LocalCompassBean">
    <property name="compassSettings">
        <props>
            <prop key="compass.engine.connection">file://${user.home}/indexes</prop>
            <prop key="compass.transaction.factory">org.compass.spring.transaction.SpringSyncTransactionFactory</prop>
        </props>
    </property>
    <property name="classMappings">
        <list>
            <value>MyEntity</value>
        </list>
    </property>
    <property name="transactionManager">
        <ref local="transactionManager" />
    </property>
</bean>
<bean id="jpaGpsDevice" class="org.compass.gps.device.jpa.JpaGpsDevice">
    <property name="name">
        <value>jpaDevice</value>
    </property>
    <property name="entityManagerFactory">
        <ref local="entityManagerFactory" />
    </property>
    <property name="nativeExtractor">
        <bean class="org.compass.gps.device.jpa.extractor.SpringNativeJpaExtractor" />
    </property>
</bean>
<bean id="compassGps" class="org.compass.gps.impl.SingleCompassGps" init-method="start" destroy-method="stop">
    <property name="compass">
        <ref bean="compass" />
    </property>
    <property name="gpsDevices">
        <list>
            <ref bean="jpaGpsDevice" />
        </list>
    </property>
</bean>
<!-- COMPASS END -->

Дайте мне знать, если это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...