package org.pinus4j.integration.spring;
import javax.sql.DataSource;
import org.pinus4j.api.DefaultPinusClient;
import org.pinus4j.api.PinusClient;
import org.pinus4j.cluster.container.IContainer;
import org.springframework.beans.BeansException;
import org.springframework.beans.factory.DisposableBean;
import org.springframework.beans.factory.InitializingBean;
import org.springframework.beans.factory.config.BeanDefinition;
import org.springframework.beans.factory.support.DefaultListableBeanFactory;
import org.springframework.beans.factory.support.RootBeanDefinition;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
public class SpringPinusClient extends DefaultPinusClient implements PinusClient, ApplicationContextAware,
InitializingBean, DisposableBean {
private ApplicationContext appCtx;
@Override
public void afterPropertiesSet() throws Exception {
super.init();
// inject datasource
DefaultListableBeanFactory beanFactory = (DefaultListableBeanFactory) appCtx.getAutowireCapableBeanFactory();
IContainer<DataSource> dsC = this.getDBCluster().getDBConnectionPool().getAllDataSources();
BeanDefinition dsBean = null;
DataSource ds = null;
for (String key : dsC.keys()) {
ds = dsC.find(key);
dsBean = new RootBeanDefinition(ds.getClass());
beanFactory.registerBeanDefinition(key, dsBean);
if (LOG.isDebugEnabled()) {
LOG.debug("reg datasouce {} to spring container done", key);
}
}
}
@Override
public void destroy() {
super.destroy();
}
@Override
public void setApplicationContext(ApplicationContext ctx) throws BeansException {
this.appCtx = ctx;
}
}