开发者

Loading Liferay Properties from Spring IoC container (to get jdbc connection parameters)

开发者 https://www.devze.com 2022-12-18 04:06 出处:网络
I\'m developing some portlets for Liferay Portal 5.2.3 with bundled tomcat 6.0.18 using Spring IoC container.

I'm developing some portlets for Liferay Portal 5.2.3 with bundled tomcat 6.0.18 using Spring IoC container. I need to map the User_ table used in Liferay database to an entity with Hibernate, so I need to use two different dataSources to separate the liferay db from the db used by portlets.

My jdbc.properties has to hold all connection parameters for both databases: no problem for the one used by portlets, but I am having issues determining which database uses liferay to hold its data.

My conclusion is that i should have something like this:

liferayConnection.url=jdbc:hsqldb:${liferay.home}/data/hsql/lportal

in order to get the database url dynamically loaded, according to Liferay properties foun开发者_如何学Pythond in portal-ext.properties. (Or, better, load the whole portal-ext.properties and read database properties from there).

The problem is that the placeholder is not resolved:

Caused by: org.springframework.beans.factory.BeanDefinitionStoreException: Invalid bean definition with name 'liferayDataSource' defined in class path resource [WEB-INF/applicationContext.xml]: Could not resolve placeholder 'liferay.home'

To dodge this problem I tried to load explicitly portal-ext.properties with a Spring bean:

<bean id="liferayPropertiesConfigurer"
          class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"
          p:location="../../portal-ext.properties"/>

but no luck: liferay.home is not resolved but there aren't other errors.

How can I resolve the placeholder defined by Liferay? Thanks


You can use PropsUtil class (from Liferay) to get values of portal-ext.properties.

String value = PropsUtil.get("key");


For loading properties files from an applicationContext.xml file I usually use the PropertiesFactoryBean specifying the location property with a the name of the file located in the classpath, like this:

<bean name="myHibernateProperties" class="org.springframework.beans.factory.config.PropertiesFactoryBean">
        <property name="location">
            <value>classpath:hibernate.properties</value>
        </property>
    </bean>

Make sure the properties files are in a folder/package that is in the classpath.


You can call PropsUtil using SpringEL. for example:

#{T(com.liferay.portal.kernel.util.PropsUtil).get('liferay.home')}

I haven't tried exactly this. but you could load the liferay properties that you need with the following:

<util:properties id="liferayProps">
    <prop key="liferay.home">#{T(com.liferay.portal.kernel.util.PropsUtil).get('liferay.home')}</prop>
</util:properties>
0

精彩评论

暂无评论...
验证码 换一张
取 消