Thomas,  here is the trace of what is going on :

The changes involved in this update are:
  Change PrimaryObject.alias to "TEMPLATE"
  Change PrimaryObject.field1 to 10
  Change PrimaryObject.field2 to 0
  Change PrimaryObject.subObjectC from SubObjectC(ID 2) to SubObjectC(ID 1)

Browser request:

{ "F" : "com.my.package.gwt.shared.MyRequestFactory",
  "I" : [ { "O" : "j_yEHCJ9k$WUFHgn__u$bEm7haU=",
        "P" : [ { "S" : "IjEi",
              "T" : "AK9V76Rtc6gMKi9lbRBXpR_Vfsc="
            } ],
        "R" : [ "subobjectb.subobjecta",
            "subobjectc.subobjecta",
            "subobjecta",
            "subobjectb",
            "subobjectc"
          ]
      } ],
  "O" : [ { "O" : "UPDATE",
        "P" : { "alias" : "TEMPLATE",
            "field1" : 10,
            "field2" : 0,
            "subobjecta" : { "S" : "IjMi",
                "T" : "xSFY59dKciM_bQDRhOYtCU94gBw="
              },
            "subobjectb" : { "S" : "IjEi",
                "T" : "HtxC4B1dhRC9YcFi2VSkpbkVpcY="
              },
            "subobjectc" : { "S" : "IjEi",
                "T" : "VJdvF9mvxcVn$KJmLjACkBkrjhw="
              }
          },
        "S" : "IjEi",
        "T" : "AK9V76Rtc6gMKi9lbRBXpR_Vfsc=",
        "V" : "IjEzMjg2Mjc0MzI2Mzki"
      },
      { "O" : "UPDATE",
        "S" : "IjMi",
        "T" : "xSFY59dKciM_bQDRhOYtCU94gBw=",
        "V" : "IjEzMjM0NDUxNDMxODci"
      },
      { "O" : "UPDATE",
        "P" : { "subobjecta" : { "S" : "IjEi",
                "T" : "xSFY59dKciM_bQDRhOYtCU94gBw="
              } },
        "S" : "IjEi",
        "T" : "HtxC4B1dhRC9YcFi2VSkpbkVpcY=",
        "V" : "IjEzMTk1NzUyOTgzNDgi"
      },
      { "O" : "UPDATE",
        "S" : "IjEi",
        "T" : "xSFY59dKciM_bQDRhOYtCU94gBw=",
        "V" : "IjEzMTk1NzUyOTA1NTQi"
      },
      { "O" : "UPDATE",
        "P" : { "subobjecta" : { "S" : "IjEi",
                "T" : "xSFY59dKciM_bQDRhOYtCU94gBw="
              } },
        "S" : "IjIi",
        "T" : "VJdvF9mvxcVn$KJmLjACkBkrjhw=",
        "V" : "IjEzMjg2MjczOTk4NzQi"
      }
    ]
}


Object Graph:
  PrimaryObject
   |
   +--SubObjectA
   +--SubObjectB
   |  |
   |  +--SubObjectA
   |
   +--SubObjectC
      |
      +--SubObjectA  

Order of operations seen in the ServiceLayerDecorator:

1. Load PrimaryObject(ID 1)
2. Load SubObjectA(ID 3)
3. Load SubObjectB(ID 1)
4. Load SubObjectA(ID 1)
5. Load SubObjectC(ID 2)
6. PrimaryObject.setAlias(TEMPLATE)
7. PrimaryObject.setSubObjectA(SubObjectA(ID 3))
8. PrimaryObject.setField1(10)
9. PrimaryObject.setField2(0)
10. PrimaryObject.setSubObjectB(SubObjectB(ID 1))
11. LoadDomainObject SubObjectC(ID 1)  <<-- This load after dirtying the 
PrimaryObject causes the flush

Stack trace at breakpoint 11:

ServiceLayerCache(ServiceLayerDecorator).loadDomainObject(Class<T>, Object) 
line: 121 
ReflectiveServiceLayer.loadDomainObjects(List<Class<?>>, List<Object>) 
line: 221 
LocatorServiceLayer(ServiceLayerDecorator).loadDomainObjects(List<Class<?>>, 
List<Object>) line: 126 
MyServiceLayerDecorator(ServiceLayerDecorator).loadDomainObjects(List<Class<?>>,
 
List<Object>) line: 126 
ServiceLayerCache(ServiceLayerDecorator).loadDomainObjects(List<Class<?>>, 
List<Object>) line: 126 
RequestState.getBeansForIds(List<SimpleProxyId<?>>) line: 267 
RequestState.getBeansForPayload(List<IdMessage>) line: 147 
RequestState.getBeanForPayload(Splittable) line: 124 
EntityCodex.decode(EntitySource, Class<?>, Class<?>, Splittable) line: 101 
MySimpleRequestProcessor$1.visitReferenceProperty(String, AutoBean<?>, 
PropertyContext) line: 547 
ProxyAutoBean<T>.traverseProperties(AutoBeanVisitor, 
AbstractAutoBean$OneShotContext) line: 324 
ProxyAutoBean<T>(AbstractAutoBean<T>).traverse(AutoBeanVisitor, 
AbstractAutoBean$OneShotContext) line: 166 
ProxyAutoBean<T>(AbstractAutoBean<T>).accept(AutoBeanVisitor) line: 101 
MySimpleRequestProcessor.processOperationMessages(RequestState, 
RequestMessage) line: 537 
MySimpleRequestProcessor.process(RequestMessage, ResponseMessage) line: 210 
MySimpleRequestProcessor.process(String) line: 127 
MyRequestFactoryServlet.doPost(HttpServletRequest, HttpServletResponse) 
line: 153 
MyRequestFactoryServlet(HttpServlet).service(HttpServletRequest, 
HttpServletResponse) line: 637 
MyRequestFactoryServlet(HttpServlet).service(ServletRequest, 
ServletResponse) line: 717 
ApplicationFilterChain.internalDoFilter(ServletRequest, ServletResponse) 
line: 290 
ApplicationFilterChain.doFilter(ServletRequest, ServletResponse) line: 206 
PageFilter(SiteMeshFilter).obtainContent(ContentProcessor, 
SiteMeshWebAppContext, HttpServletRequest, HttpServletResponse, 
FilterChain) line: 129 
PageFilter(SiteMeshFilter).doFilter(ServletRequest, ServletResponse, 
FilterChain) line: 77 
ApplicationFilterChain.internalDoFilter(ServletRequest, ServletResponse) 
line: 235 
ApplicationFilterChain.doFilter(ServletRequest, ServletResponse) line: 206 
OpenEntityManagerInViewFilter.doFilterInternal(HttpServletRequest, 
HttpServletResponse, FilterChain) line: 113 
OpenEntityManagerInViewFilter(OncePerRequestFilter).doFilter(ServletRequest, 
ServletResponse, FilterChain) line: 76 
ApplicationFilterChain.internalDoFilter(ServletRequest, ServletResponse) 
line: 235 
ApplicationFilterChain.doFilter(ServletRequest, ServletResponse) line: 206 
FilterChainProxy$VirtualFilterChain.doFilter(ServletRequest, 
ServletResponse) line: 368 
FilterSecurityInterceptor.invoke(FilterInvocation) line: 109 
FilterSecurityInterceptor.doFilter(ServletRequest, ServletResponse, 
FilterChain) line: 83 
FilterChainProxy$VirtualFilterChain.doFilter(ServletRequest, 
ServletResponse) line: 380 
ExceptionTranslationFilter.doFilter(ServletRequest, ServletResponse, 
FilterChain) line: 97 
FilterChainProxy$VirtualFilterChain.doFilter(ServletRequest, 
ServletResponse) line: 380 
SessionManagementFilter.doFilter(ServletRequest, ServletResponse, 
FilterChain) line: 100 
FilterChainProxy$VirtualFilterChain.doFilter(ServletRequest, 
ServletResponse) line: 380 
AnonymousAuthenticationFilter.doFilter(ServletRequest, ServletResponse, 
FilterChain) line: 78 
FilterChainProxy$VirtualFilterChain.doFilter(ServletRequest, 
ServletResponse) line: 380 
SecurityContextHolderAwareRequestFilter.doFilter(ServletRequest, 
ServletResponse, FilterChain) line: 54 
FilterChainProxy$VirtualFilterChain.doFilter(ServletRequest, 
ServletResponse) line: 380 
RequestCacheAwareFilter.doFilter(ServletRequest, ServletResponse, 
FilterChain) line: 35 
FilterChainProxy$VirtualFilterChain.doFilter(ServletRequest, 
ServletResponse) line: 380 
UsernamePasswordAuthenticationFilter(AbstractAuthenticationProcessingFilter).doFilter(ServletRequest,
 
ServletResponse, FilterChain) line: 187 
FilterChainProxy$VirtualFilterChain.doFilter(ServletRequest, 
ServletResponse) line: 380 
UsernamePasswordAuthenticationFilter(AbstractAuthenticationProcessingFilter).doFilter(ServletRequest,
 
ServletResponse, FilterChain) line: 187 
FilterChainProxy$VirtualFilterChain.doFilter(ServletRequest, 
ServletResponse) line: 380 
UsernamePasswordAuthenticationFilter(AbstractAuthenticationProcessingFilter).doFilter(ServletRequest,
 
ServletResponse, FilterChain) line: 187 
FilterChainProxy$VirtualFilterChain.doFilter(ServletRequest, 
ServletResponse) line: 380 
LogoutFilter.doFilter(ServletRequest, ServletResponse, FilterChain) line: 
105 
FilterChainProxy$VirtualFilterChain.doFilter(ServletRequest, 
ServletResponse) line: 380 
SecurityContextPersistenceFilter.doFilter(ServletRequest, ServletResponse, 
FilterChain) line: 79 
FilterChainProxy$VirtualFilterChain.doFilter(ServletRequest, 
ServletResponse) line: 380 
FilterChainProxy.doFilter(ServletRequest, ServletResponse, FilterChain) 
line: 169 
DelegatingFilterProxy.invokeDelegate(Filter, ServletRequest, 
ServletResponse, FilterChain) line: 237 
DelegatingFilterProxy.doFilter(ServletRequest, ServletResponse, 
FilterChain) line: 167 
ApplicationFilterChain.internalDoFilter(ServletRequest, ServletResponse) 
line: 235 
ApplicationFilterChain.doFilter(ServletRequest, ServletResponse) line: 206 
StandardWrapperValve.invoke(Request, Response) line: 233 
StandardContextValve.invoke(Request, Response) line: 191 
StandardHostValve.invoke(Request, Response) line: 127 
ErrorReportValve.invoke(Request, Response) line: 102 
StandardEngineValve.invoke(Request, Response) line: 109 
CoyoteAdapter.service(Request, Response) line: 298 
Http11Processor.process(Socket) line: 857 
Http11Protocol$Http11ConnectionHandler.process(Socket) line: 588 
JIoEndpoint$Worker.run() line: 489 
Thread.run() line: 662 

(The custom Decorator, RequestProcessor, and Servlet are all identical to 
the 2.4 version except for a bit more error logging)

-- 
You received this message because you are subscribed to the Google Groups 
"Google Web Toolkit" group.
To view this discussion on the web visit 
https://groups.google.com/d/msg/google-web-toolkit/-/bZd2c5OzRVYJ.
To post to this group, send email to google-web-toolkit@googlegroups.com.
To unsubscribe from this group, send email to 
google-web-toolkit+unsubscr...@googlegroups.com.
For more options, visit this group at 
http://groups.google.com/group/google-web-toolkit?hl=en.

Reply via email to