Just a reminder that when adding flags and properties into code, to use the 
SystemInstance Options to check for those properties.

Specifically, calls like the following should be avoided.

 - Boolean.getBoolean("foo")
 - System.getProperty("foo")

If someone were to attempt to use the above in an embedded scenario like so, 
they would be ignored:

    Properties p = new Properties();
    p.setProperty("foo", "the value");
    EJBContainer.createEJBContainer(p);

Same if those were passed into an InitialContext or specified via a 
jndi.properties file.

The nice thing about placing properties in these areas is they only last 
temporarily.  If you run a test like this:

    Properties p = new Properties();
    p.setProperty("foo", "the value");
    EJBContainer.createEJBContainer(p);

Then this:

    Properties p = new Properties();
    EJBContainer.createEJBContainer(p);

The "foo" property of the previous test does not persist to the next test and 
change the behavior in unwanted ways.  So the SystemInstance effectively allows 
us to create and destroy the container several times in a VM without any 
"bleeding" of static state.

In that spirit, ideally we'd not store properties obtained through 
SystemInstance Options as static variables.  Not sure how good we've been in 
that regard in the past.  Probably something we should evaluate.

Also note, you can check for properties at an application, module or ejb level. 
 There are only a couple places where we use that so far, but certainly 
something it would be nice to see used more.

Another interesting feature of the Options class is that it will log the 
property and value.  Debug is used if the default value is chosen.  Info level 
is used if the user changed the default.  So it makes it easier for users to 
know if we are in fact "seeing" the property.  Nice because it's really easy to 
misspell property names and spend a couple hours pulling your hair out.


-David

Reply via email to