One of the most compelling needs of applications is to read initialization properties. If your application is EJB-centric, then a very simple strategy is to read the properties from a File and store them in an EJB Singleton. Here is how to do it.
At first here is how our application looks like:
DemoApp.war
|
|-------- console.properties
|
|-------- WEB-INF
|
|---- classes
|
|----- com
|------ sample
|------- EJBSingleton.class
As you can see, we have our EJB packaged as part of a Web application and we have stored our property file in the WEB-INF/classes folder so that it’s visible from the Web application classloader.
With Singleton EJBs is fairly simple to store properties in a variable class so that it can be retrieved via get/set by other classes using the EJB:
@Singleton @Startup public class EJBSingleton { Properties properties; @PostConstruct public void init() { InputStream inputStream = this.getClass().getClassLoader() .getResourceAsStream("console.properties"); properties = new Properties(); System.out.println("InputStream is: " + inputStream); // Loading the properties properties.load(inputStream); // Printing the properties System.out.println("Read Properties."+properties); } }
Now you can read your properties across the application by simply injecting the EJB as follows:
@EJB EJBSingleton ejb;
Or, if your are using CDI:
@Inject EJBSingleton ejb;