views:

30

answers:

1

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 the 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:

http://stackoverflow.com/questions/965061/how-can-i-store-jee-configuration-parameters-outside-of-an-ear-or-war

So the question is: how do I do this in Glassfish?

+1  A: 

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

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!

Gabor Kulcsar