<?xml version="1.0" encoding="UTF-8"?>
<blueprint default-activation="lazy"
           xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0"
           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
           xmlns:cm="http://aries.apache.org/blueprint/xmlns/blueprint-cm/v1.0.0"
           xmlns:jpa="http://aries.apache.org/xmlns/jpa/v1.0.0"

           xmlns:tx="http://aries.apache.org/xmlns/transactions/v1.1.0"
           xsi:schemaLocation="http://www.osgi.org/xmlns/blueprint/v1.0.0 http://www.osgi.org/xmlns/blueprint/v1.0.0/blueprint.xsd">

  <!-- DAOs -->
  <bean id="PROPAGATION_REQUIRED"
        class="org.apache.camel.spring.spi.SpringTransactionPolicy">
    <property name="transactionManager">
      <reference
        interface="org.springframework.transaction.PlatformTransactionManager"/>
    </property>
    <property name="propagationBehaviorName" value="PROPAGATION_REQUIRED"/>
  </bean>

  <!-- Subscription -->
  <bean id="subscriptionDAO" class="edu.ucar.ral.wcsri.pubsub.persistence.dao.jpa.SubscriptionJPADAO">
    <jpa:context property="entityManager" unitname="wcsri-jpa"/>
    <tx:transaction method="*" value="Required"/>
 </bean>

  <!-- Subscription Streaming-->
  <bean id="streamingFactory" class="edu.ucar.ral.wcsri.pubsub.persistence.dao.streaming.StreamingFactoryImpl">
    <property name="dataSource" ref="jta"/>
    <tx:transaction method="*" value="Required"/>
  </bean>

  <!-- Message -->
  <bean id="messageDAO" class="edu.ucar.ral.wcsri.pubsub.persistence.dao.jpa.MessageJPADAO">
    <jpa:context property="entityManager" unitname="wcsri-jpa"/>
    <tx:transaction method="*" value="Required"/>
  </bean>

  <!-- EventProducer -->
  <bean id="eventProducerDAO" class="edu.ucar.ral.wcsri.pubsub.persistence.dao.jpa.EventProducerJPADAO">
    <jpa:context property="entityManager" unitname="wcsri-jpa"/>
    <tx:transaction method="*" value="Required"/>
  </bean>

  <!-- Idempotent -->
  <bean id="idempotentDAO" class="edu.ucar.ral.wcsri.pubsub.persistence.dao.jpa.IdempotentJPADAO">
    <jpa:context property="entityManager" unitname="wcsri-jpa"/>
    <tx:transaction method="*" value="Required"/>
  </bean>

  <!-- VersionInfo -->
  <bean id="versionDAO" class="edu.ucar.ral.wcsri.pubsub.persistence.dao.jpa.VersionInfoJPADAO">
    <jpa:context property="entityManager" unitname="wcsri-jpa"/>
    <tx:transaction method="*" value="Required"/>
  </bean>

  <!-- Idempotent service -->
  <bean id="idempotentRepository" class="edu.ucar.ral.wcsri.pubsub.persistence.service.DAOIdempotentRepository">
    <property name="idemPotentDao" ref="idempotentDAO"/>
    <tx:transaction method="*" value="Required"/>
  </bean>

  <service ref="subscriptionDAO" interface="edu.ucar.ral.wcsri.pubsub.persistence.dao.SubscriptionDAO">
    <service-properties>
      <entry key="tranAttribute" value="Required"/>
      <entry key="version" value="1.1.0"/>
    </service-properties>
  </service>

  <service ref="messageDAO" interface="edu.ucar.ral.wcsri.pubsub.persistence.dao.MessageDAO">
    <service-properties>
      <entry key="tranAttribute" value="Required"/>
      <entry key="version" value="1.1.0"/>

    </service-properties>
  </service>

  <service ref="eventProducerDAO" interface="edu.ucar.ral.wcsri.pubsub.persistence.dao.EventProducerDAO">
    <service-properties>
      <entry key="tranAttribute" value="Required"/>
      <entry key="version" value="1.1.0"/>

    </service-properties>
  </service>

  <service ref="idempotentDAO" interface="edu.ucar.ral.wcsri.pubsub.persistence.dao.IdempotentDAO">
    <service-properties>
      <entry key="tranAttribute" value="Required"/>
      <entry key="version" value="1.1.0"/>

    </service-properties>
  </service>

  <service ref="versionDAO" interface="edu.ucar.ral.wcsri.pubsub.persistence.dao.VersionInfoDAO">
    <service-properties>
      <entry key="tranAttribute" value="Required"/>
      <entry key="version" value="1.1.0"/>

    </service-properties>
  </service>

  <service ref="idempotentRepository" interface="org.apache.camel.spi.IdempotentRepository">
    <service-properties>
      <entry key="tranAttribute" value="Required"/>
      <entry key="version" value="1.1.0"/>

    </service-properties>
  </service>

  <service ref="streamingFactory" interface="edu.ucar.ral.wcsri.pubsub.persistence.dao.StreamingFactory">
    <service-properties>
      <entry key="tranAttribute" value="Required"/>
      <entry key="version" value="1.1.0"/>

    </service-properties>
  </service>

  <reference id="jta"  interface="javax.sql.DataSource"
             filter="(transactional=true)" availability="mandatory"/>

</blueprint>
