On 8/26/13 11:28 AM, Oliver Heger wrote:
> Am 26.08.2013 16:18, schrieb Phil Steitz:
>>
>> On Aug 26, 2013, at 7:38 PM, Oliver Heger <oliver.he...@oliver-heger.de> 
>> wrote:
>>
>>> Am 25.08.2013 18:45, schrieb Adrian Crum:
>>>> +1
>>>>
>>>> -Adrian
>>>>
>>>> On 8/25/2013 9:26 AM, James Carman wrote:
>>>>> AtomicReference?
>>> There are multiple aspects here. One is the safe publishing of a value
>>> written into the member field. This can be achieved by atomic
>>> references, synchronization, or a volatile field.
>>>
>>> The other aspect is that such a field of a static utility class is
>>> pretty global. You cannot have different values for different threads.
>>>
>>> So the question is, is it good design to have static utility classes
>>> with state?
>> Excellent point.  The key question to ask is are there use cases where 
>> different threads in the same JVM are really going to want different default 
>> factories.  I wonder if any actual user of the current code has ever wanted 
>> this.
>>
> In this special case, I *assume* that there are hardly any concrete use
> cases, but of course, we cannot be sure.
>
> However, there may be other examples in [configuration]. Would it make
> sense to be homogeneous here, i.e. use the same design principles for
> all classes?

Yes and the non-static approach is certainly more flexible, so on
balance I think you and James are right.

Phil
>
> Oliver
>
>> Phil 
>>> For users, it may be more convenient to simply access functionality
>>> through static methods, especially if the default values for static
>>> member fields are reasonable for most use cases. However, such a design
>>> makes it impossible to use the represented functionality with different
>>> settings in parallel.
>>>
>>> Also, I am not sure whether complex class loader scenarios (e.g. an
>>> application server or an OSGi container) may cause problems with the
>>> static approach.
>>>
>>> Oliver
>>>
>>>>> On Sunday, August 25, 2013, Phil Steitz wrote:
>>>>>
>>>>>> On 8/24/13 11:33 AM, Oliver Heger wrote:
>>>>>>> Hi all,
>>>>>>>
>>>>>>> regarding a principle design question I would like to get your opinion:
>>>>>>>
>>>>>>> In [configuration] there are a few static utility classes. One of them
>>>>>>> is BeanHelper which supports the creation of beans from configuration
>>>>>>> data. The actual bean creation is done by a BeanFactory which can be
>>>>>>> configured using the static (currently unsynchronized)
>>>>>>> setDefaultBeanFactory() method.
>>>>>>>
>>>>>>> Sebb stated correctly that this approach is thread-hostile [1]. An
>>>>>>> alternative could be to make BeanHelper a non-static class which can be
>>>>>>> instantiated and configured per instance. This would be more flexible
>>>>>>> and would also simplify testing of client code (just pass in a mock
>>>>>>> object). The drawback is that clients now always would have to
>>>>>>> create an
>>>>>>> instance, so the API becomes slightly more verbose - in fact, most
>>>>>>> clients will probably never have the requirement to change the default
>>>>>>> bean factory.
>>>>>>>
>>>>>>> So, the question is, what do you prefer? The static approach like
>>>>>>> Object myBean = BeanHelper.createBean(...);
>>>>>>>
>>>>>>> or using an instance as in
>>>>>>> BeanHelper helper = new BeanHelper(myFactory);
>>>>>>> // or use no-args ctor for default factory
>>>>>>> Object myBean = helper.createBean(...);
>>>>>> Personally, I would like the static method better as a user.
>>>>>> Synchronizing access to the static factory field would seem to fix
>>>>>> the problem unless I am missing something.  Also, I would not expect
>>>>>> lots of concurrent access to the getter/setter for this field in
>>>>>> normal use cases , so the performance overhead of the sync would be
>>>>>> immaterial.  Having the setter there may also be a little easier for
>>>>>> dependency injection.
>>>>>>
>>>>>> Phil
>>>>>>> TIA
>>>>>>> Oliver
>>>>>>>
>>>>>>> [1] https://issues.apache.org/jira/browse/CONFIGURATION-486
>>>>>>>
>>>>>>> ---------------------------------------------------------------------
>>>>>>> To unsubscribe, e-mail:
>>>>>>> dev-unsubscr...@commons.apache.org<javascript:;>
>>>>>>> For additional commands, e-mail:
>>>>>>> dev-h...@commons.apache.org<javascript:;>
>>>>>> ---------------------------------------------------------------------
>>>>>> To unsubscribe, e-mail: dev-unsubscr...@commons.apache.org
>>>>>> <javascript:;>
>>>>>> For additional commands, e-mail:
>>>>>> dev-h...@commons.apache.org<javascript:;>
>>>>
>>>> ---------------------------------------------------------------------
>>>> To unsubscribe, e-mail: dev-unsubscr...@commons.apache.org
>>>> For additional commands, e-mail: dev-h...@commons.apache.org
>>>
>>> ---------------------------------------------------------------------
>>> To unsubscribe, e-mail: dev-unsubscr...@commons.apache.org
>>> For additional commands, e-mail: dev-h...@commons.apache.org
>>>
>> ---------------------------------------------------------------------
>> To unsubscribe, e-mail: dev-unsubscr...@commons.apache.org
>> For additional commands, e-mail: dev-h...@commons.apache.org
>>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: dev-unsubscr...@commons.apache.org
> For additional commands, e-mail: dev-h...@commons.apache.org
>
>


---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscr...@commons.apache.org
For additional commands, e-mail: dev-h...@commons.apache.org

Reply via email to