<!--
  Licensed to the Apache Software Foundation (ASF) under one
  or more contributor license agreements. See the NOTICE file
  distributed with this work for additional information
  regarding copyright ownership. The ASF licenses this file
  to you 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.
-->
<beans xmlns="http://www.springframework.org/schema/beans"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xmlns:context="http://www.springframework.org/schema/context"
  xmlns:tx="http://www.springframework.org/schema/tx"
  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/tx
                      http://www.springframework.org/schema/tx/spring-tx.xsd
                      http://www.springframework.org/schema/aop
                      http://www.springframework.org/schema/aop/spring-aop.xsd
                      http://www.springframework.org/schema/context
                      http://www.springframework.org/schema/context/spring-context.xsd">

  <context:annotation-config />

  <context:component-scan base-package="org.apache.cloudstack, com.cloud" />

  <!--
    @DB support
  -->
  <bean id="componentContext" class="com.cloud.utils.component.ComponentContext" />

  <bean id="transactionContextBuilder" class="com.cloud.utils.db.TransactionContextBuilder" />
  <bean id="actionEventInterceptor" class="com.cloud.event.ActionEventInterceptor" />
  <bean id="instantiatePostProcessor" class="com.cloud.utils.component.ComponentInstantiationPostProcessor">
    <property name="Interceptors">
        <list>
            <ref bean="transactionContextBuilder" />
            <ref bean="actionEventInterceptor" />
        </list>
    </property>
  </bean>

  <bean class="com.cloud.network.security.SecurityGroupManagerTestConfiguration" />

  <!--
    RPC/Async/EventBus
  -->

  <bean id="onwireRegistry" class="org.apache.cloudstack.framework.serializer.OnwireClassRegistry"
    init-method="scan" >
    <property name="packages">
      <list>
        <value>org.apache.cloudstack.framework</value>
      </list>
    </property>
  </bean>

  <bean id="messageSerializer" class="org.apache.cloudstack.framework.serializer.JsonMessageSerializer">
    <property name="onwireClassRegistry" ref="onwireRegistry" />
  </bean>

  <bean id="transportProvider" class="org.apache.cloudstack.framework.server.ServerTransportProvider"  init-method="initialize">
    <property name="workerPoolSize" value="5" />
    <property name="nodeId" value="Node1" />
    <property name="messageSerializer" ref="messageSerializer" />
  </bean>

  <bean id="rpcProvider" class="org.apache.cloudstack.framework.rpc.RpcProviderImpl" init-method="initialize">
    <constructor-arg ref="transportProvider" />
    <property name="messageSerializer" ref="messageSerializer" />
  </bean>

  <bean id="eventBus" class = "org.apache.cloudstack.framework.eventbus.EventBusBase" />
  <bean id="messageBus" class="org.apache.cloudstack.framework.messagebus.MessageBusBase" />

  <bean id="apiServlet" class = "com.cloud.api.ApiServlet" />

</beans>
