On Feb 16, 2012, at 6:07 AM, Romain Manni-Bucau wrote:

> couldn't we simply add syst prop to th ejb container before adding the map?
> 
> it is what we do for other container styles

That's exactly what ends up happening.  We just need to make sure that on our 
end we check the properties in SytemInstance rather than java.lang.System so we 
can see all sources of properties.

-David

> 
> 2012/2/16 David Blevins <[email protected]>
> 
>> 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