Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to include values from .properties file into web.xml?

I need to include some values from a file.properties into the WEB-INF/web.xml something like this:

<param-name>uploadDirectory</param-name>
<param-value>myFile.properties['keyForTheValue']</param-value>

I'm currently working with this:

  • JBoss
  • JEE5
like image 930
lancha90 Avatar asked Aug 23 '12 19:08

lancha90


2 Answers

You can add this class, that add all properties from your file to JVM. And add this class like context-listener to web.xml

public class InitVariables implements ServletContextListener
{

   @Override
   public void contextDestroyed(final ServletContextEvent event)
   {
   }

   @Override
   public void contextInitialized(final ServletContextEvent event)
   {
      final String props = "/file.properties";
      final Properties propsFromFile = new Properties();
      try
      {
         propsFromFile.load(getClass().getResourceAsStream(props));
      }
      catch (final IOException e)
      {
          // can't get resource
      }
      for (String prop : propsFromFile.stringPropertyNames())
      {
         if (System.getProperty(prop) == null)
         {
             System.setProperty(prop, propsFromFile.getProperty(prop));
         }
      }
   }
}  

in web.xml

   <listener>       
      <listener-class>
         com.company.InitVariables
      </listener-class>
   </listener>  

now you can get all properties in you project using

System.getProperty(...)

or in web.xml

<param-name>param-name</param-name>
<param-value>${param-name}</param-value>
like image 131
Ilya Avatar answered Oct 01 '22 23:10

Ilya


A word of caution regarding the accepted solution above.

I was experimenting with this on jboss 5 today: the contextInitialized() method doesn't get invoked until after web.xml is loaded so the change to System properties doesn't take effect in time. Strangely this means that if you re-deploy the webapp (without restarting jboss) the property will survive from being set the last time it was deployed, so it may appear to work.

The solution that we're going to use instead is to pass the parameters to jboss via the java command line e.g. -Dparameter1=value1 -Dparameter2=value2.

like image 37
dannyclark Avatar answered Oct 02 '22 01:10

dannyclark