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.