Liferay多数据源配置及开发

原文:http://www.chinasb.org/archives/2010/12/1319.shtml

Liferay的多数据源配置十分简单,只需要在tomcat\conf\Catalina\localhost\ROOT.xml中增加即可。如:

	<!-- database source -->
	<Resource
		name="jdbc/LiferayPool"
		auth="Container"
		type="javax.sql.DataSource"
		driverClassName="oracle.jdbc.driver.OracleDriver"
		url="jdbc:oracle:thin:@192.168.1.229:1521:orcl"
		username="lportal"
		password="lportal"
		maxActive="20"
	/>

	<Resource
		name="jdbc/XXXPool"
		auth="Container"
		type="javax.sql.DataSource"
		driverClassName="oracle.jdbc.driver.OracleDriver"
		url="jdbc:oracle:thin:@192.168.1.229:1521:orcl"
		username="xxx"
		password="xxx"
		maxActive="20"
	/>

这里配置了两个数据源供Liferay使用,一个是替换Liferay默认数据源,一个是为需要开发的业务系统提供的数据源,这样一来就可以把业务数据库与Portal默认数据库分开管理了,现在大家都开始在问如何在Liferay开发里面使用第二个数据源呢?怎样进行事务控制?好了,接下来我们开始解决这些问题。(这是基于EXT下的开发哦)

1.新建ext-impl/src/META-INF/ext-spring.xml。内容如下:

	<!-- Liferay DataSource -->
	<bean id="liferayDataSource" class="org.springframework.jdbc.datasource.LazyConnectionDataSourceProxy">
		<property name="targetDataSource">
			<bean class="com.liferay.portal.spring.jndi.JndiObjectFactoryBean">
				<property name="jndiName" value="jdbc/LiferayPool" />
			</bean>
		</property>
	</bean>
	<!-- XXX DataSource -->
	<bean id="xxxDataSource" class="org.springframework.jdbc.datasource.LazyConnectionDataSourceProxy">
		<property name="targetDataSource">
			<bean class="com.liferay.portal.spring.jndi.JndiObjectFactoryBean">
				<property name="jndiName" value="jdbc/XXXPool" />
			</bean>
		</property>
	</bean>
	<bean id="xxxHibernateSessionFactory" class="com.liferay.portal.spring.hibernate.PortalHibernateConfiguration">
		<property name="dataSource" ref="xxxDataSource" />
	</bean>
	<bean id="xxxSessionFactory" class="com.liferay.portal.dao.orm.hibernate.SessionFactoryImpl">
		<property name="sessionFactoryClassLoader">
			<bean class="com.liferay.portal.kernel.util.PortalClassLoaderUtil" factory-method="getClassLoader" />
		</property>
		<property name="sessionFactoryImplementor" ref="xxxHibernateSessionFactory" />
	</bean>
	<bean id="xxxTransactionManager" class="com.liferay.portal.spring.transaction.TransactionManagerFactory" factory-method="createTransactionManager">
		<constructor-arg ref="xxxDataSource" />
		<constructor-arg ref="xxxHibernateSessionFactory" />
	</bean>

看明白了吧,就是这么简单,只要你留心一下Liferay源码就会发现了。

2.数据源配置好了,也放到Spring管理了,那么下一步该如果使用呢。很简单,当然是Liferay怎么去使用默认的数据源我们就怎样去使用我们自定义的数据源罗。没错,就是强大的ServiceBuilder。下面给个例子吧,再参照上一篇Liferay自定义原生态SQL查询就操作数据库方面就没什么难题了。

<?xml version="1.0"?>
<!DOCTYPE service-builder PUBLIC "-//Liferay//DTD Service Builder 6.0.0//EN"
"http://www.liferay.com/dtd/liferay-service-builder_6_0_0.dtd">
<service-builder package-path="com.xxx.xxx.portlet.book">
	<namespace>Book</namespace>
	<entity name="Book" local-service="true" remote-service="false" data-source="xxxDataSource" session-factory="xxxSessionFactory" tx-manager="xxxTransactionManager">
		<!-- PK fields -->
		<column name="bookId" type="long" primary="true" />
		<!-- Group instance -->
		<column name="groupId" type="long" />
		<!-- Audit fields -->
		<column name="companyId" type="long" />
		<column name="userId" type="long" />
		<column name="userName" type="String" />
		<column name="createDate" type="Date" />
		<column name="modifiedDate" type="Date" />
		<!-- Other fields -->
		<column name="title" type="String" />
	</entity>
</service-builder>

看到了吧,ServiceBuilder主要是通过指定的数据源,session工厂和事务管理去生成相对应的数据库操作方法的。

 

你可能感兴趣的:(spring,oracle,bean,jdbc,配置管理)