its easy to enable detaching of any IDetachable field rather then only
IModel. this code can also walk behaviors, but i dont think it should
go beyond that. walking the entire object graph will be too expensive.
right now it performs a lot of caching which makes it work well.

-igor

On Fri, Apr 6, 2012 at 10:48 AM, Dan Retzlaff <dretzl...@gmail.com> wrote:
> Sorry to double-post, but I realized it's trivial to visit the object graph
> since local final variables show up as fields in the inner class. This
> following snippet prints "detaching". So what do you think about
> generalizing the automatic detach to all objects, not just components?
>
> final IModel model = new IModel() {
> @Override
> public Object getObject() {
> return null;
> }
> @Override
> public void setObject(Object object) {
> }
> @Override
> public void detach() {
> System.out.println("detaching");
> }
> };
>  Object object = new Object() {
> public void method() {
> System.out.println(model.getObject());
> }
> };
>  for (Field f : object.getClass().getDeclaredFields()) {
> System.out.println(f.getName());
> if (IModel.class.isAssignableFrom(f.getType())) {
> f.setAccessible(true);
> ((IModel)f.get(object)).detach();
> }
> }
>
> On Fri, Apr 6, 2012 at 11:26 AM, Dan Retzlaff <dretzl...@gmail.com> wrote:
>
>> I wish there were a way to apply this strategy to the whole object graph
>> (not just fields). I use local final LoadableDetachableModels on occasion,
>> and it'd be nice for those to magically detach too. I'm +0.
>>
>> Just got Calc-Eric's message. Looks like we're on the same page.
>>
>>
>> On Fri, Apr 6, 2012 at 10:42 AM, Igor Vaynberg 
>> <igor.vaynb...@gmail.com>wrote:
>>
>>> i wrote a IDetachListener that automatically detaches any IModel
>>> fields found on components. is this something we would be interested
>>> in for core? its been running in production for a while without any
>>> noticeable overhead and its nice not to have to implemenet onDetach()
>>> all the time just to forward it to secondary models. the only downside
>>> is that once we introduce this feature we can never remote it because
>>> doing so will break code.
>>>
>>> thoughts?
>>>
>>> -igor
>>>
>>
>>

Reply via email to