how to load properties file only once in enterprise application

This is the class which loads properties file which returns static instance;
**********************************************************************

public class LoadProperties {
	private static Properties properties = new Properties();

	
	public static Properties getProperties() {
		return properties;
	}

	
	public static void setProperties(
			Properties properties) {
		LoadProperties.properties = properties;
	}

}

Open in new window


This is Listener class mentioned in web.xml which can be read when server starts up;
**********************************************************************
public class LoadProperties implements ServletContextListener {

public void contextInitialized(ServletContextEvent arg0) {
		
		//Below properties placed in application server class path in server lib folder with compressed jar;
		InputStream inputStream = this.getClass().getClassLoader().getResourceAsStream("server.properties");
		
			
		LoadProperties.getProperties().load(inputStream);
		
				//value is printed successfully;
			System.out.println("LoadProperties.."+LoadProperties.getProperties().getProperty("type"));

		}

}

Open in new window



My requirement is How do we read this property(LoadProperties.getProperties().getProperty("type")) in EJB class without loading the properties file once again?because when we load this properties in WAR level we will get once instance of LoadProperties;I dont think same instance will not be propagated in EJB level as well.So Do i need to load same properties once again in EJB classes as well?

my EAR structure is like this;

APP.ear
lib--- jars -- server.properties related jar is placed in the application server class path not in this folder;
ejb.jar
web.war
LVL 20
chaitu chaituAsked:
Who is Participating?

[Product update] Infrastructure Analysis Tool is now available with Business Accounts.Learn More

x
I wear a lot of hats...

"The solutions and answers provided on Experts Exchange have been extremely helpful to me over the last few years. I wear a lot of hats - Developer, Database Administrator, Help Desk, etc., so I know a lot of things but not a lot about one thing. Experts Exchange gives me answers from people who do know a lot about one thing, in a easy to use platform." -Todd S.

for_yanCommented:
As far as I undersatnd, for servelets you coudl use ServletContext Attributes to store your applicaion wide properties, but there are no EJB context Attributes, so there is no way to do it in the same way.

This question is discussed in this rather old trail below. While the tone of the discussion is pessimistic, there are some suggestions there about using entity bean or JNDI to store such application -wise propertis:

http://www.velocityreviews.com/forums/t139068-get-and-set-attribute-for-ejb-context-storing-objects.html
0
chaitu chaituAuthor Commented:
you mean to say i need to again load this properties file in EJB beans as well;

if i do like this ,does this properties will be loaded?

InputStream inputStream = this.getClass().getClassLoader().getResourceAsStream"server.properties");
0
for_yanCommented:
I think you are correct - but you need to have server.properties in the classpath

I think there is a lot of  useful information on this subject  here (inclufding recommendation to put application-wide properties in ejb-jar.xml)
http://www.velocityreviews.com/forums/t692007-properties-file-in-a-jar-for-ejb-3-0-a.html
0
OWASP: Avoiding Hacker Tricks

Learn to build secure applications from the mindset of the hacker and avoid being exploited.

for_yanCommented:
I think this is a good example of how to do it without  reading properties many time:

http://javaevangelist.blogspot.com/2008/08/how-to-implement-ejb-30-in-ejb-jarxml.html

and this is the full project from that page to check how it is implemented:
http://enlightenment.bluelotussoftware.com/examples/EJBEnvironmentResourceInjectionExample.zip
0
chaitu chaituAuthor Commented:
I will do one more excercise.

i will remove Listner class mentioned in web.xml;so i dont read this properties in Servlet;

instead of that i will read the properties in EJB then the LoadProperties instance will be loaded right.

then after that servlet doesn’t find a resource in the WAR, then it should delegate to its parent classloader.

will it work?
0
CEHJCommented:
0

Experts Exchange Solution brought to you by

Your issues matter to us.

Facing a tech roadblock? Get the help and guidance you need from experienced professionals who care. Ask your question anytime, anywhere, with no hassle.

Start your 7-day free trial
for_yanCommented:
If you need the same set of properties accessible as in the EJB   in all  servlets and JSP  then I think you can load them the way you show in contextInitialized() and then store in ServletContext attributes, which you can then access in all servlets of this application,

like it is shown in the code in the solution to this question:

http://stackoverflow.com/questions/7975162/bare-bones-servlet-application-where-to-store-config-settings-that-i-can-refere
0
CEHJCommented:
:)
0
It's more than this solution.Get answers and train to solve all your tech problems - anytime, anywhere.Try it for free Edge Out The Competitionfor your dream job with proven skills and certifications.Get started today Stand Outas the employee with proven skills.Start learning today for free Move Your Career Forwardwith certification training in the latest technologies.Start your trial today
Java

From novice to tech pro — start learning today.