<?xml version="1.0"?>

<beans
	default-destroy-method="destroy"
	default-init-method="afterPropertiesSet"
	xmlns="http://www.springframework.org/schema/beans"
	xmlns:aop="http://www.springframework.org/schema/aop"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.0.xsd http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd"
>
	<bean id="liferayDataSource" class="org.springframework.jdbc.datasource.LazyConnectionDataSourceProxy">
		<property name="targetDataSource">
			<bean class="org.springframework.aop.framework.ProxyFactoryBean">
				<property name="targetSource" ref="shardDataSourceTargetSource" />
			</bean>
		</property>
	</bean>
	<bean id="liferayHibernateSessionFactory" class="org.springframework.aop.framework.ProxyFactoryBean">
		<property name="targetSource" ref="shardSessionFactoryTargetSource" />
	</bean>
	<bean id="shardDataSource0" class="org.springframework.jdbc.datasource.LazyConnectionDataSourceProxy">
		<property name="targetDataSource">
			<bean class="com.liferay.portal.dao.jdbc.spring.DataSourceFactoryBean">
				<property name="propertyPrefix" value="jdbc.default." />
			</bean>
		</property>
	</bean>
	<bean id="shardDataSource1" class="org.springframework.jdbc.datasource.LazyConnectionDataSourceProxy">
		<property name="targetDataSource">
			<bean class="com.liferay.portal.dao.jdbc.spring.DataSourceFactoryBean">
				<property name="propertyPrefix" value="jdbc.one." />
			</bean>
		</property>
	</bean>
	<bean id="shardDataSource2" class="org.springframework.jdbc.datasource.LazyConnectionDataSourceProxy">
		<property name="targetDataSource">
			<bean class="com.liferay.portal.dao.jdbc.spring.DataSourceFactoryBean">
				<property name="propertyPrefix" value="jdbc.two." />
			</bean>
		</property>
	</bean>
	<bean id="shardDataSourceTargetSource" class="com.liferay.portal.dao.shard.ShardDataSourceTargetSource">
		<property name="dataSources">
			<map>
				<entry>
					<key>
						<value>default</value>
					</key>
					<ref bean="shardDataSource0" />
				</entry>
				<entry>
					<key>
						<value>one</value>
					</key>
					<ref bean="shardDataSource1" />
				</entry>
				<entry>
					<key>
						<value>two</value>
					</key>
					<ref bean="shardDataSource2" />
				</entry>
			</map>
		</property>
	</bean>
	<bean id="shardSessionFactoryTargetSource" class="com.liferay.portal.dao.shard.ShardSessionFactoryTargetSource">
 		<property name="shardDataSourceTargetSource" ref="shardDataSourceTargetSource" />
	</bean>
	<bean id="com.liferay.portal.kernel.dao.jdbc.MappingSqlQueryFactoryUtil" class="com.liferay.portal.kernel.dao.jdbc.MappingSqlQueryFactoryUtil">
		<property name="mappingSqlQueryFactory">
			<bean class="com.liferay.portal.dao.shard.ShardMappingSqlQueryFactoryImpl" />
		</property>
	</bean>
	<bean id="com.liferay.portal.kernel.dao.jdbc.SqlUpdateFactoryUtil" class="com.liferay.portal.kernel.dao.jdbc.SqlUpdateFactoryUtil">
		<property name="sqlUpdateFactory">
			<bean class="com.liferay.portal.dao.shard.ShardSqlUpdateFactoryImpl" />
		</property>
	</bean>
	<bean id="com.liferay.portal.kernel.dao.shard.ShardUtil" class="com.liferay.portal.kernel.dao.shard.ShardUtil">
		<property name="shard">
			<bean class="com.liferay.portal.dao.shard.ShardImpl">
				<property name="shardAdvice" ref="com.liferay.portal.dao.shard.advice.ShardAdvice" />
			</bean>
		</property>
	</bean>
	<bean id="com.liferay.portal.kernel.util.InfrastructureUtil" class="com.liferay.portal.kernel.util.InfrastructureUtil">
		<property name="dataSource" ref="liferayDataSource" />
		<property name="mailSession" ref="mailSession" />
		<property name="shardDataSourceTargetSource" ref="shardDataSourceTargetSource" />
		<property name="shardSessionFactoryTargetSource" ref="shardSessionFactoryTargetSource" />
		<property name="transactionManager" ref="liferayTransactionManager" />
	</bean>
	<bean id="com.liferay.portal.dao.shard.advice.ShardAdvice" class="com.liferay.portal.dao.shard.advice.ShardAdvice">
		<property name="shardDataSourceTargetSource" ref="shardDataSourceTargetSource" />
		<property name="shardSessionFactoryTargetSource" ref="shardSessionFactoryTargetSource" />
	</bean>
	<bean id="com.liferay.portal.dao.shard.advice.ShardCompanyAdvice" class="com.liferay.portal.dao.shard.advice.ShardCompanyAdvice">
		<property name="shardAdvice" ref="com.liferay.portal.dao.shard.advice.ShardAdvice" />
	</bean>
	<bean id="com.liferay.portal.dao.shard.advice.ShardPortletAdvice" class="com.liferay.portal.dao.shard.advice.ShardPortletAdvice">
		<property name="shardAdvice" ref="com.liferay.portal.dao.shard.advice.ShardAdvice" />
	</bean>
	<bean id="com.liferay.portal.dao.shard.advice.ShardPersistenceAdvice" class="com.liferay.portal.dao.shard.advice.ShardPersistenceAdvice">
		<property name="shardAdvice" ref="com.liferay.portal.dao.shard.advice.ShardAdvice" />
	</bean>
	<bean id="com.liferay.portal.dao.shard.advice.ShardGloballyAdvice" class="com.liferay.portal.dao.shard.advice.ShardGloballyAdvice">
		<property name="shardAdvice" ref="com.liferay.portal.dao.shard.advice.ShardAdvice" />
	</bean>
	<bean id="com.liferay.portal.dao.shard.advice.ShardIterativelyAdvice" class="com.liferay.portal.dao.shard.advice.ShardIterativelyAdvice">
		<property name="shardAdvice" ref="com.liferay.portal.dao.shard.advice.ShardAdvice" />
	</bean>
	<bean id="com.liferay.portal.dao.shard.advice.ShardParameterAdvice" class="com.liferay.portal.dao.shard.advice.ShardParameterAdvice">
		<property name="shardAdvice" ref="com.liferay.portal.dao.shard.advice.ShardAdvice" />
	</bean>
	<aop:config proxy-target-class="false">
		<aop:advisor advice-ref="com.liferay.portal.dao.shard.advice.ShardCompanyAdvice" pointcut="bean(com.liferay.portal.service.CompanyLocalService)" />
		<aop:advisor advice-ref="com.liferay.portal.dao.shard.advice.ShardPortletAdvice" pointcut="bean(com.liferay.portal.service.PortletLocalService)" />
		<aop:advisor advice-ref="com.liferay.portal.dao.shard.advice.ShardPersistenceAdvice" pointcut="bean(*Persistence) || bean(*Finder)" />
		<aop:advisor advice-ref="com.liferay.portal.dao.shard.advice.ShardGloballyAdvice" pointcut="execution(void com.liferay.portal.convert.messaging.ConvertProcessMessageListener.receive(..))" />
		<aop:advisor advice-ref="com.liferay.portal.dao.shard.advice.ShardGloballyAdvice" pointcut="execution(void com.liferay.portal.events.StartupHelper.updateIndexes())" />
		<aop:advisor advice-ref="com.liferay.portal.dao.shard.advice.ShardGloballyAdvice" pointcut="execution(void com.liferay.portal.events.StartupHelper.upgradeProcess(int))" />
		<aop:advisor advice-ref="com.liferay.portal.dao.shard.advice.ShardIterativelyAdvice" pointcut="execution(void com.liferay.portal.events.StartupHelper.verifyProcess(boolean))" />
		<aop:advisor advice-ref="com.liferay.portal.dao.shard.advice.ShardGloballyAdvice" pointcut="execution(void com.liferay.portal.service.ReleaseLocalService.createTablesAndPopulate())" />
		<aop:advisor advice-ref="com.liferay.portal.dao.shard.advice.ShardGloballyAdvice" pointcut="execution(void com.liferay.portal.service.ServiceComponentLocalService.upgradeDB(..))" />
		<aop:advisor advice-ref="com.liferay.portal.dao.shard.advice.ShardGloballyAdvice" pointcut="execution(void com.liferay.portlet.journal.service.JournalArticleLocalService.checkArticles())" />
		<aop:advisor advice-ref="com.liferay.portal.dao.shard.advice.ShardParameterAdvice" pointcut="execution(* com.liferay.portal.service.AccountLocalService.getAccount(long, long))" />
		<aop:advisor advice-ref="com.liferay.portal.dao.shard.advice.ShardParameterAdvice" pointcut="execution(* com.liferay.portal.service.ResourceCodeLocalService.checkResourceCodes(long, String))" />
		<aop:advisor advice-ref="com.liferay.portal.dao.shard.advice.ShardParameterAdvice" pointcut="execution(* com.liferay.portal.service.UserLocalService.searchCount(..))" />
	</aop:config>
</beans>