Ext-GWT TreeGrid chiama indirettamente un callback GWT-RPC? Perché?
Domanda
Sto usando GWT-RPC per popolare TreeGrids Ext-GWT con i dati da un server. Sto usando 4 callback per popolare 6 TreeGrids. Poiché la funzione di callback onSuccess modifica TreeGrid inserendo le righe, TreeGridView deve eseguire il rendering delle righe. La classe di callback si chiama MainPnlSummaryTablesAsyncCallback.
Per qualche motivo, quando è necessario determinare offsetHeight dello scroller di TreeGridView tramite JSNI, onSuccess o onFailure viene chiamato su un'altra istanza del callback nella traccia dello stack. Di seguito è riportata una copia della traccia dello stack che ho riscontrato.
Non è davvero strano? Perché sta succedendo questo?
Cordiali saluti, sto usando Ext-GWT 2.0.1 e GWT 1.7.0 e sto usando il browser in modalità host per eseguire il debug, anche se sono abbastanza sicuro che si tratti di un problema per la modalità web.
PnlSummaryClientDebug_as10node6 [Java Application]
com.google.gwt.dev.HostedMode at localhost:3595
Thread [main] (Suspended (breakpoint at line 403 in MainPage$MainPnlSummaryTablesAsyncCallback))
MainPage$8(MainPage$MainPnlSummaryTablesAsyncCallback).onSuccess(GWTPair<AggregateStringGWTTable,AggregateStringGWTTable>) line: 403
MainPage$8(MainPage$MainPnlSummaryTablesAsyncCallback).onSuccess(Object) line: 1
RequestCallbackAdapter<T>.onResponseReceived(Request, Response) line: 215
Request.fireOnResponseReceivedImpl(RequestCallback) line: 264
Request.fireOnResponseReceivedAndCatch(GWT$UncaughtExceptionHandler, RequestCallback) line: 236
Request.fireOnResponseReceived(RequestCallback) line: 227
NativeMethodAccessorImpl.invoke0(Method, Object, Object[]) line: not available [native method] [local variables unavailable]
NativeMethodAccessorImpl.invoke(Object, Object[]) line: 39
DelegatingMethodAccessorImpl.invoke(Object, Object[]) line: 25
Method.invoke(Object, Object...) line: 597
MethodAdaptor.invoke(Object, Object...) line: 103
IDispatchImpl.callMethod(CompilingClassLoader, Object, Variant[], MethodAdaptor) line: 126
IDispatchProxy.invoke(int, int, Variant[]) line: 155
IDispatchProxy(IDispatchImpl).Invoke(int, int, int, int, int, int, int, int) line: 294
IDispatchProxy(IDispatchImpl).method6(int[]) line: 194
COMObject.callback6(int[]) line: 117
COM.VtblCall(int, int, int, GUID, int, int, DISPPARAMS, int, EXCEPINFO, int[]) line: not available [native method]
IDispatch.Invoke(int, GUID, int, int, DISPPARAMS, int, EXCEPINFO, int[]) line: 64
OleAutomation.invoke(int, int, Variant[], int[], Variant) line: 493
OleAutomation.invoke(int, Variant[]) line: 417
ModuleSpaceIE6.doInvokeOnWindow(OleAutomation, String, Variant[]) line: 68
ModuleSpaceIE6.doInvoke(String, Object, Class<?>[], Object[]) line: 153
ModuleSpaceIE6(ModuleSpace).invokeNative(String, Object, Class<?>[], Object[]) line: 453
ModuleSpaceIE6(ModuleSpace).invokeNativeInt(String, Object, Class<?>[], Object[]) line: 207
JavaScriptHost.invokeNativeInt(String, Object, Class<?>[], Object[]) line: 75
Element$.getOffsetHeight$(Element) line: not available
El.getHeight(boolean) line: 984
TreeGridView(BufferView).getVisibleRowCount() line: 313
TreeGridView(BufferView).doRender(List<ColumnData>, List<ModelData>, int, int, boolean, boolean) line: 189
TreeGridView(BufferView).doRender(List<ColumnData>, List<ModelData>, int, int, boolean) line: 181
TreeGridView(GridView).renderRows(int, int) line: 1559
TreeGridView(GridView).insertRows(ListStore<ModelData>, int, int, boolean) line: 1242
TreeGridView(GridView).onAdd(ListStore<ModelData>, List<ModelData>, int) line: 1293
GridView$5.storeAdd(StoreEvent<ModelData>) line: 1179
GridView$5(StoreListener<M>).handleEvent(StoreEvent<M>) line: 22
GridView$5(StoreListener<M>).handleEvent(BaseEvent) line: 1
TreeGrid$2(BaseObservable).callListener(Listener<BaseEvent>, BaseEvent) line: 176
TreeGrid$2(BaseObservable).fireEvent(EventType, BaseEvent) line: 96
TreeGrid$2(ListStore<M>).insert(List<? extends M>, int, boolean) line: 467
TreeGrid$2(ListStore<M>).insert(List<? extends M>, int) line: 266
TreeGrid<M>.onAdd(TreeStoreEvent<M>) line: 430
TreeGrid$1.storeAdd(StoreEvent<M>) line: 123
TreeGrid$1(StoreListener<M>).handleEvent(StoreEvent<M>) line: 22
TreeGrid$1(StoreListener<M>).handleEvent(BaseEvent) line: 1
TreeStore<M>(BaseObservable).callListener(Listener<BaseEvent>, BaseEvent) line: 176
TreeStore<M>(BaseObservable).fireEvent(EventType, BaseEvent) line: 96
TreeStore<M>.doInsert(TreeModel, List<TreeModel>, int, boolean, boolean) line: 799
TreeStore<M>.insert(List<M>, int, boolean) line: 493
TreeStore<M>.add(List<M>, boolean) line: 163
TreeStore<M>.add(M, boolean) line: 174
PnlClientFactory.populatePnlDataTreeStore(AggregateStringGWTTable, TreeStore<BaseModel>) line: 42
MainPage$9(MainPage$MainPnlSummaryTablesAsyncCallback).onSuccess(GWTPair<AggregateStringGWTTable,AggregateStringGWTTable>) line: 403
MainPage$9(MainPage$MainPnlSummaryTablesAsyncCallback).onSuccess(Object) line: 1
RequestCallbackAdapter<T>.onResponseReceived(Request, Response) line: 215
Request.fireOnResponseReceivedImpl(RequestCallback) line: 264
Request.fireOnResponseReceivedAndCatch(GWT$UncaughtExceptionHandler, RequestCallback) line: 236
Request.fireOnResponseReceived(RequestCallback) line: 227
NativeMethodAccessorImpl.invoke0(Method, Object, Object[]) line: not available [native method]
NativeMethodAccessorImpl.invoke(Object, Object[]) line: 39
DelegatingMethodAccessorImpl.invoke(Object, Object[]) line: 25
Method.invoke(Object, Object...) line: 597
MethodAdaptor.invoke(Object, Object...) line: 103
IDispatchImpl.callMethod(CompilingClassLoader, Object, Variant[], MethodAdaptor) line: 126
IDispatchProxy.invoke(int, int, Variant[]) line: 155
IDispatchProxy(IDispatchImpl).Invoke(int, int, int, int, int, int, int, int) line: 294
IDispatchProxy(IDispatchImpl).method6(int[]) line: 194
COMObject.callback6(int[]) line: 117
OS.DispatchMessageW(MSG) line: not available [native method]
OS.DispatchMessage(MSG) line: 1925
Display.readAndDispatch() line: 2966
HostedMode(SwtHostedModeBase).processEvents() line: 235
HostedMode(HostedModeBase).pumpEventLoop() line: 558
HostedMode(HostedModeBase).run() line: 405
HostedMode.main(String[]) line: 232
C:\Program Files\Java\jdk1.6.0_06\bin\javaw.exe (Jul 29, 2009 2:11:16 PM)
Soluzione
Ok, sembra che il server stia emettendo alcune NullPointerExceptions quando venivano fatte le chiamate RPC ... tuttavia, non capisco perché la traccia dello stack sul lato client fosse così (sembra un po 'fuorviante, come se due le tracce dello stack si confondono l'una con l'altra).