Mark
Mark

Reputation: 18827

Is it possible to reflect changes in portal-ext.properties without restarting whole Liferay portal?

My problem is every time after changing the Liferay portal-properties (and this is frequent especially at beginning of a new portal project) I need to restart the whole portal.

Some properties I can set over hook and these values will be changed after redeployment. Also that must be possible to change most portal properties at run time.

However, do you know some approach to reflect changes in portal-ext.properties without restarting Liferay portal?

Upvotes: 5

Views: 4847

Answers (6)

Andre Albert
Andre Albert

Reputation: 1394

Some of the Liferay classes read their properties when initialising static field constants. E.g.:

public static final boolean ENABLED = GetterUtil.getBoolean(
    PropsUtil.get(DynamicCSSFilter.class.getName()));

Basically, it is possible to reload the properties (eg via script in control-panel), but all those static constants will remain.

Upvotes: 0

Srikanth Shanigaram
Srikanth Shanigaram

Reputation: 161

I know it is a very old thread but it may be helpful for someone who is looking for some type of work around
As we know there is no straight forward way for this but I did this by using java reflection and class loader.
Liferay Version : 6.x

//Loading the PropsUtil class by using PortalClassLoader
Class<?> prospsUtilClass = PortalClassLoaderUtil.getClassLoader().loadClass("com.liferay.portal.util.PropsUtil");
//getting the reload method of PropsUtil class
Method reloadMethod = prospsUtilClass.getMethod("reload", null);
//Invoking the static reload method 
reloadMethod.invoke(null, null);

Reload method (re)loads the portal-ext properties to the portal so we can use new properties without restarting Liferay server.

Upvotes: 3

Gunnar
Gunnar

Reputation: 413

I've just searched for reloading portal-ext.properties and landed here. Ok - not a feature in Liferay.

So I'll use an old trick I like:

  1. place custom properties in (liferay-tomcat-home)/conf/filename.properties
  2. reload them whenever you want by

    Properties customProperties = new Properties();
    customProperties.load(new FileInputStream(new File(System.getProperty("catalina.base"), "conf/filename.properties")));
    

I must confess I haven't tried this in a Liferay-Portlet-Environment, but this system property ("catalina.base") should be available in this context, at least by using some Liferay-Helper-Class.

Upvotes: 0

evaldeslacasa
evaldeslacasa

Reputation: 603

If you create a hook to override portal properties, you will be able to change properties with just deploying the hook without restarting the Portal.

Be aware that you cannot modify all properties with a hook. For a list of the ones that you can modify, check out: https://docs.liferay.com/portal/6.2/definitions/.

Upvotes: 0

Prakash K
Prakash K

Reputation: 11698

As stoldark mentioned, this is not possible in a production environment at all. Since portal.properties's properties are loaded at portal start-up.

But for development you can use a tool like JRebel, some steps to configure it here. The only issue you would get with this tool is that it is paid ;-).

Upvotes: 5

stoldark
stoldark

Reputation: 444

This has also been asked in Liferay forums:

https://www.liferay.com/community/forums/-/message_boards/message/800954

But I am afraid that most properties are only read once during portal startup. Usually, the use of a properties file as in this case has this drawback.

There's even an issue open at Liferay about this, but is still unresolved:

http://issues.liferay.com/browse/LEP-5579

Upvotes: 1

Related Questions