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