<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:aop="http://www.springframework.org/schema/aop"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd">

    <aop:aspectj-autoproxy proxy-target-class="true"/>

    <bean class="com.armedia.acm.service.objectlock.annotation.AcmAcquireObjectLockAspect">
        <property name="objectLockingManager" ref="acmObjectLockingManager"/>
    </bean>

    <bean class="com.armedia.acm.service.objectlock.annotation.AcmReleaseObjectLockAspect">
        <property name="objectLockingManager" ref="acmObjectLockingManager"/>
    </bean>

    <bean class="com.armedia.acm.service.objectlock.annotation.AcmAcquireAndReleaseObjectLockAspect">
        <property name="objectLockingManager" ref="acmObjectLockingManager"/>
        <property name="objectLockService" ref="objectLockService"/>
    </bean>

    <bean id="defaultObjectLockingProvider" class="com.armedia.acm.service.objectlock.service.DefaultObjectLockingProvider">
        <property name="objectLockService" ref="objectLockService"/>
        <property name="expiryTimeInMilliseconds" value="600000"/>
    </bean>

    <bean id="objectLockDao" class="com.armedia.acm.service.objectlock.dao.AcmObjectLockDao"/>

    <bean id="objectLockService" class="com.armedia.acm.service.objectlock.service.AcmObjectLockServiceImpl">
        <property name="acmObjectLockDao" ref="objectLockDao"/>
        <property name="executeSolrQuery" ref="executeSolrQuery"/>
    </bean>

    <bean id="acmObjectLockToSolrTransformer" class="com.armedia.acm.service.objectlock.transformer.AcmObjectLockToSolrTransformer">
        <property name="dao" ref="objectLockDao"/>
        <property name="userDao" ref="userJpaDao"/>
    </bean>

    <bean id="acmObjectLockingManager" class="com.armedia.acm.service.objectlock.service.AcmObjectLockingManager">
        <property name="defaultObjectLockingProvider" ref="defaultObjectLockingProvider"/>
        <property name="springContextHolder" ref="acmContextHolder"/>
    </bean>

    <bean id="releaseExpiredLocksJobDescriptor"
          class="com.armedia.acm.service.objectlock.service.ReleaseExpiredLocksJobDescriptor" parent="acmJobDescriptor">
        <property name="objectLockService" ref="objectLockService"/>
    </bean>
</beans>
