<?xml version="1.0" encoding="UTF-8"?>
<!--
    Copyright 2002-2013 the original author or authors.

    Licensed under the Apache License, Version 2.0 (the "License");
    you may not use this file except in compliance with the License.
    You may obtain a copy of the License at

         http://www.apache.org/licenses/LICENSE-2.0

    Unless required by applicable law or agreed to in writing, software
    distributed under the License is distributed on an "AS IS" BASIS,
    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    See the License for the specific language governing permissions and
    limitations under the License.
-->

<!--
    Application context definition for PetClinic on JPA.
-->
<beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:aop="http://www.springframework.org/schema/aop"
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns:cache="http://www.springframework.org/schema/cache"
       xmlns="http://www.springframework.org/schema/beans"
       xsi:schemaLocation="http://www.springframework.org/schema/aop
         http://www.springframework.org/schema/aop/spring-aop.xsd
         http://www.springframework.org/schema/beans
         http://www.springframework.org/schema/beans/spring-beans.xsd
         http://www.springframework.org/schema/cache
         http://www.springframework.org/schema/cache/spring-cache.xsd
         http://www.springframework.org/schema/context
         http://www.springframework.org/schema/context/spring-context.xsd">

    <!--
        Simply defining this bean will cause requests to owner names to be saved.
        This aspect is defined in petclinic.jar's META-INF/aop.xml file.
        Note that we can dependency inject this bean like any other bean.
    -->
    <aop:aspectj-autoproxy>
        <aop:include name="callMonitor"/>
    </aop:aspectj-autoproxy>

    <!-- Call monitoring aspect that monitors call count and call invocation time -->
    <bean id="callMonitor" class="org.springframework.samples.petclinic.util.CallMonitoringAspect"/>

    <!--
        Exporter that exposes the CallMonitoringAspect via JMX,
        based on the @ManagedResource, @ManagedAttribute, and @ManagedOperation annotations.
    -->
    <context:mbean-export/>

    <!-- enables scanning for @Cacheable annotation -->
    <cache:annotation-driven/>

    <bean id="cacheManager" class="org.springframework.cache.ehcache.EhCacheCacheManager">
        <property name="cacheManager" ref="ehcache"/>
    </bean>

    <bean id="ehcache" class="org.springframework.cache.ehcache.EhCacheManagerFactoryBean">
        <property name="configLocation" value="classpath:cache/ehcache.xml"/>
    </bean>


</beans>
