Parameterizing EAR
I would like to set some read-only parameters (eg. an RMI registry host and port) to a Java EE application deployed on a Glassfish server. The usual place to do this would be the deployment descriptor, but my problem is that it is packaged in the EAR, so I cannot edit it without changing the EAR.
I need something similar to setting JDBC and JMS resources, but much simpler. I could put t开发者_开发知识库he configuration data in a database table but that seems to be overkill. I could use the File Resource Adapter, but it would be best if I could edit the configuration in the Glassfish Admin Console.
Is there a standard way to do this? How do you test your applications when they depend on external nodes they need to be communicating with? Where shall I put these parameters and how can I access them?
My best guess was to define external JNDI resources, but then where do I put the data?
UPDATE: this is what I was thinking of:
How can I store Java EE configuration parameters outside of an EAR or WAR?
So the question is: how do I do this in Glassfish?
After a few hours of googling I found the answer! It's not trivial, but luckily very easy. Here it is:
http://www.mentby.com/glassfish/custom-resource-work-when-looking-it-up-but-not-with-injection.html
Create a Custom Resource on the Admin Console, and add a Property called "value". Like this:
alt text http://img231.imageshack.us/img231/8237/jndicustomresource.png
Then accessing this name/value is really easy from the EJB:
try {
InitialContext ic = new InitialContext();
String value = (String) ic.lookup("MyCustomResource");
System.out.println("MyCustomResource = " + value);
} catch (NamingException e) {
e.printStackTrace();
}
Which prints
INFO: MyCustomResource = A big hug from MyCustomResource!
精彩评论