`
likaidalian
  • 浏览: 51903 次
社区版块
存档分类
最新评论

[转] 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工厂和事务管理去生成相对应的数据库操作方法的。
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics