Hi Daniel Thanks for investigating. I have applied your patch and so far, the exception has not happened anymore.
It looks like UBA-6974 can be closed... Thanks again. Gruess, Etienne > -----Original Message----- > From: Daniel Grob [mailto:[EMAIL PROTECTED] > Sent: Tuesday, August 08, 2006 6:39 AM > To: Etienne Studer > Cc: [EMAIL PROTECTED] > Subject: Re: [ULC-developer] stacktrace > > Salut Etienne, > > I suppose that your posting is related to the JIRA issue 6974 > (https://www.canoo.com/jira/browse/UBA-6974) that you have created right > after sending your posting to the developer list. From the trace that > you have attached to the JIRA issue I can see that the second to last > round-trip contains the following requests: > 1. ULCListSelectionModel.stateUpdate(null) > 2. ULCComboBoxModelAdapter.stateUpdate(11) > 3. ULCTableColumnModel.stateUpdate(1504, 1506, 1505, 1507, 1508) > 4. ULCComboBox.actionPerformed() > > The error happens because of UBA-910 > (https://www.canoo.com/jira/browse/UBA-910): the state update of the > combo box may trigger an action event before the state update of the > table column has been executed. Therefore the table column model gets in > an inconsistent state. This finally results in an error when ULC tries > to fetch the renderer components from the inconsistent table column > model in the last round-trip. > > This issue has been fixed for ULC 6.1. For ULC 6.0.4 you can try the > patch at the end of my mail. > [ Show > <https://www.canoo.com/jira/browse/UBA-6974> ] > Daniel Grob > <https://www.canoo.com/jira/secure/ViewProfile.jspa?name=daniel> > [08/Aug/06 02:40 PM] The reason for the error is that the combo box > wrongly triggers an event during state update, i.e. the event is handled > by the application before all client-side state is synchronized to the > server-side. Actually there is stateUpdate for the table column model > after the combo box's action event. Therefore the table column model > gets in an inconsistent state. This finally results in an error when ULC > tries to fetch the renderer components from the inconsisten table column > model in the next server rount trip. > > > Griessli Dany > > import com.ulcjava.base.application.AbstractApplication; > import com.ulcjava.base.application.ULCBorderLayoutPane; > import com.ulcjava.base.application.ULCComboBox; > import com.ulcjava.base.application.ULCFrame; > import com.ulcjava.base.application.ULCLabel; > import com.ulcjava.base.application.ULCTextField; > import com.ulcjava.base.application.event.ActionEvent; > import com.ulcjava.base.application.event.IActionListener; > import com.ulcjava.base.application.event.UlcEvent; > import com.ulcjava.base.development.DevelopmentRunner; > import com.ulcjava.base.shared.IUlcEventConstants; > import com.ulcjava.base.shared.internal.Anything; > import com.ulcjava.base.shared.internal.ThrowableUtilities; > > public class PR910 extends AbstractApplication { > public void start() { > // replace ULCPatchedComboBox with ULCComboBox to see error! > > ULCLabel descriptionLabel = new ULCLabel( > "<html><ol>" > + "<li>Enter text into text field</li>" > + "<li>Select another item in combo box</li>" > + "<li>Look at console output: in the action > listener the text field is still empty</li>" > + "</ol></html>"); > final ULCTextField textField = new ULCTextField(); > final ULCComboBox comboBox = new ULCPatchedComboBox(new String[] { > "one", "two", "three" }); > comboBox.addActionListener(new IActionListener() { > public void actionPerformed(ActionEvent event) { > Object selectedItem = comboBox.getSelectedItem(); > System.out.println("selectedItem = " + selectedItem); > String text = textField.getText(); > System.out.println("text = " + text); > } > }); > > ULCFrame frame = new ULCFrame("PR910"); > frame.setDefaultCloseOperation(ULCFrame.TERMINATE_ON_CLOSE); > frame.getContentPane().add(descriptionLabel, > ULCBorderLayoutPane.NORTH); > frame.getContentPane().add(textField, ULCBorderLayoutPane.CENTER); > frame.getContentPane().add(comboBox, ULCBorderLayoutPane.SOUTH); > frame.setVisible(true); > } > > public static void main(String[] args) { > DevelopmentRunner.setApplicationClass(PR910.class); > DevelopmentRunner.main(args); > } > > private static class ULCPatchedComboBox extends ULCComboBox { > public ULCPatchedComboBox(Object[] items) { > super(items); > } > > protected void distributeToListeners(UlcEvent event) { > // we ignore events that are triggered by state updates in > // ULCComboBoxModelAdapter > String stackTrace = ThrowableUtilities.toString(new > Throwable()); > if > (stackTrace.indexOf("ULCComboBoxModelAdapter.handleRequest") >= 0) { > return; > } > > super.distributeToListeners(event); > } > > protected void handleEvent(int listenerType, int eventId, > Anything args) { > // To prevent double events the original ULCComboBox filters > // events triggered by the combo box if a previous state > update > // in the model adapter has already trigger that event... > if (listenerType == IUlcEventConstants.ACTION_EVENT) { > int modifiers = args.asInt(0); > distributeToListeners(new ActionEvent(this, > getActionCommand(), > modifiers)); > } else { > super.handleEvent(listenerType, eventId, args); > } > } > } > } > > > Etienne Studer wrote: > > > > Hi > > > > > > > > Could you please decipher the stacktrace below, especially the frames > > in the ULCTable. Thanks! > > > > > > > > Regards, Etienne > > > > > > > > > > > > 3 03.08.2006 11:50:14.916 1,000 SEVERE > > Thread[ULC Communication Controller Thread,6,main] > > com.ulcjava.base.server.ULCSession processRequests got > > exception while processing > > [java.lang.ArrayIndexOutOfBoundsException: -1 > > > > at java.util.ArrayList.get(ArrayList.java:326) > > > > at > > > com.ulcjava.base.application.AbstractColumnModel.getAbstractColumn(Abstr ac > tColumnModel.java:38) > > > > at > > > com.ulcjava.base.application.table.ULCTableColumnModel.getColumn(ULCTabl eC > olumnModel.java:3) > > > > at > com.ulcjava.base.application.ULCTable.d(ULCTable.java:190) > > > > at com.ulcjava.base.application.ULCTable.a(ULCTable.java:69) > > > > at > com.ulcjava.base.application.ULCTable.a(ULCTable.java:354) > > > > at > > com.ulcjava.base.application.ULCTable.handleRequest(ULCTable.java:156) > > > > at > > > com.navis.framework.ulc.server.application.view.table.ULCMetafieldTable. ha > ndleRequest(ULCMetafieldTable.java:103) > > > > at com.ulcjava.base.server.ULCSession.a(ULCSession.java:11) > > > > at > > com.ulcjava.base.server.ULCSession.processRequests(ULCSession.java:134) > > > > at > > > com.ulcjava.base.development.DevelopmentContainerAdapter.processRequests (D > evelopmentContainerAdapter.java:2) > > > > at > > > com.ulcjava.base.development.DevelopmentConnector.sendRequests(Developme nt > Connector.java:0) > > > > at > > com.ulcjava.base.client.UISession$k_.run(UISession$k_.java:28) > > > > at java.lang.Thread.run(Thread.java:534) > > _______________________________________________ ULC-developer mailing list [email protected] http://lists.canoo.com/mailman/listinfo/ulc-developer
