Code splitting issue
This is a follow up to Jim Douglas's question about the change in 2.6.0 to GWT.runAsync() here: https://groups.google.com/forum/#!topic/google-web-toolkit/7SxQHP_Jbtc We started working towards avoiding multiple calls to runAsync() for a particular code splitting point. Our application provides a framework for dynamically creating displays using GWT. We don't know what controls our customers will use on a given display until they actually create the controls. To decrease the size of the initial download, we have partitioned some of the lesser-used controls into groups that are downloaded on demand. What we've done below is how we worked around the difficulty of using the Command pattern with code splitting. Now at first, I was able to successfully change our code to avoid multiple calls to runAsync(). I was iterating quickly, so I used -draftCompile. When I removed the -draftCompile (no other changes), the GWT compiler began to include everything in our first split point. Here's an example of what we're doing. The following classes are generated using annotations and a GWT Generator: MessageReconstructor.java: public class MessageReconstructor { private Dispatcher m_group1; private Dispatcher m_group2; ... // there are 6 total. public void dispatch(final MessageData p_msg, ...) { int msgType = p_msg.getMsgType(); if (msgType = *GROUP1_LAST*) { if (*m_group1* == null) { GWT.runAsync(*Dispatcher1*.class, new RunAsyncCallback() { @Override public void onSuccess() { *m_group1* = new *Dispatcher1*(); *m_group1*.dispatch(p_msg, ...); } @Override public void onFailure() { // fail... } }); } else { *m_group1*.dispatch(p_msg, ...); } } else if (msgType = *GROUP2_LAST*) { if (*m_group2* == null) { GWT.runAsync(*Dispatcher2*.class, new RunAsyncCallback() { @Override public void onSuccess() { *m_group2* = new *Dispatcher2*(); *m_group2*.dispatch(p_msg, ...); } @Override public void onFailure() { // fail... } }); } else { *m_group2*.dispatch(p_msg, ...); } } } In each of Dispatcher1 and Dispatcher2, we have something like this: public class Dispatcher1 implements Dispatcher { @Override public void dispatch(MessageData p_msg, ...) { int msgType = p_msg.getMsgType(); switch (msgType) { case *MSG1*: { *String_String_Int* data = (*String_String_Int*)p_msg; *Group1SpecificMessage1* msg = new *Group1SpecificMessage1* (data.*string1*, data.*string2*, data.*int1*); msg.exec(...); break; } case *MSG2*: { *String_Int* data = (*String_Int*)p_msg; *Group1SpecificMessage2* msg = new *Group1SpecificMessage2* (data.*string1*, data.*int1*); msg.exec(...); break; } ... /// lots of messages. } } } One interesting thing I've found is that if I change the type of the Dispatcher objects in the MessageReconstructor from 'Dispatcher' to 'Dispatcher1', 'Dispatcher2', etc., then the compiler also fails to put them in the appropriate code fragments even when I specify -draftCompile. This looks to me like a bug, but I'm not sure where to start looking. Does anyone know for certain whether we should expect this to work or not? If not, is there a way we can make it work to avoid running a runAsync() on every single MessageData, but still obtain the benefits of code splitting when compiling for production? I'll try to anticipate some questions with some preemptive answers: 1. If I eliminate the block: } else { *m_group1*.dispatch(p_msg, ...); } the compiler places the code in the appropriate code fragment regardless of whether '-draftCompile' is specified. 2. The Group1SpecificMessage* and Group2SpecificMessage* all refer either to code shared in one of our initial code fragments or to disjoint sets of classes. Any help is appreciated. Thanks! Adam -- You received this message because you are subscribed to the Google Groups Google Web Toolkit group. To unsubscribe from this group and stop receiving emails from it, send an email to google-web-toolkit+unsubscr...@googlegroups.com. To post to this group, send email to google-web-toolkit@googlegroups.com. Visit this group at http://groups.google.com/group/google-web-toolkit. For more options, visit
Re: Code splitting issue
I created an Eclipse project that exhibits similar behavior and uploaded it to GitHub: https://github.com/adamh-basis/code-splitting-bug.git If you ensure the compiler settings include -draftCompile and check the resulting deferredjs/id/1.js, you won't see any references to a classes Dispatcher2$Class0..3 . If you remove -draftCompile, the size of the 2.js and 3.js files decrease significantly, the size of the 1.js files increase, and Dispatcher2$Class0...3 begin to appear inside 1.js. Again, if there's any hints about how to work around this bug, I'd love to hear them. On Friday, December 20, 2013 3:13:20 PM UTC-5, ahawtho wrote: This is a follow up to Jim Douglas's question about the change in 2.6.0 to GWT.runAsync() here: https://groups.google.com/forum/#!topic/google-web-toolkit/7SxQHP_Jbtc We started working towards avoiding multiple calls to runAsync() for a particular code splitting point. Our application provides a framework for dynamically creating displays using GWT. We don't know what controls our customers will use on a given display until they actually create the controls. To decrease the size of the initial download, we have partitioned some of the lesser-used controls into groups that are downloaded on demand. What we've done below is how we worked around the difficulty of using the Command pattern with code splitting. Now at first, I was able to successfully change our code to avoid multiple calls to runAsync(). I was iterating quickly, so I used -draftCompile. When I removed the -draftCompile (no other changes), the GWT compiler began to include everything in our first split point. Here's an example of what we're doing. The following classes are generated using annotations and a GWT Generator: MessageReconstructor.java: public class MessageReconstructor { private Dispatcher m_group1; private Dispatcher m_group2; ... // there are 6 total. public void dispatch(final MessageData p_msg, ...) { int msgType = p_msg.getMsgType(); if (msgType = *GROUP1_LAST*) { if (*m_group1* == null) { GWT.runAsync(*Dispatcher1*.class, new RunAsyncCallback() { @Override public void onSuccess() { *m_group1* = new *Dispatcher1*(); *m_group1*.dispatch(p_msg, ...); } @Override public void onFailure() { // fail... } }); } else { *m_group1*.dispatch(p_msg, ...); } } else if (msgType = *GROUP2_LAST*) { if (*m_group2* == null) { GWT.runAsync(*Dispatcher2*.class, new RunAsyncCallback() { @Override public void onSuccess() { *m_group2* = new *Dispatcher2*(); *m_group2*.dispatch(p_msg, ...); } @Override public void onFailure() { // fail... } }); } else { *m_group2*.dispatch(p_msg, ...); } } } In each of Dispatcher1 and Dispatcher2, we have something like this: public class Dispatcher1 implements Dispatcher { @Override public void dispatch(MessageData p_msg, ...) { int msgType = p_msg.getMsgType(); switch (msgType) { case *MSG1*: { *String_String_Int* data = (*String_String_Int*)p_msg; *Group1SpecificMessage1* msg = new *Group1SpecificMessage1*(data.*string1*, data.*string2*, data.*int1*); msg.exec(...); break; } case *MSG2*: { *String_Int* data = (*String_Int*)p_msg; *Group1SpecificMessage2* msg = new *Group1SpecificMessage2*(data.*string1*, data.*int1*); msg.exec(...); break; } ... /// lots of messages. } } } One interesting thing I've found is that if I change the type of the Dispatcher objects in the MessageReconstructor from 'Dispatcher' to 'Dispatcher1', 'Dispatcher2', etc., then the compiler also fails to put them in the appropriate code fragments even when I specify -draftCompile. This looks to me like a bug, but I'm not sure where to start looking. Does anyone know for certain whether we should expect this to work or not? If not, is there a way we can make it work to avoid running a runAsync() on every single MessageData, but still obtain the benefits of code splitting when compiling for production? I'll try to anticipate some questions with some preemptive answers: 1. If I eliminate the block: } else { *m_group1*.dispatch(p_msg
Re: Code splitting issue
I went ahead and submitted an issue for this report so as not to lose track of it. https://code.google.com/p/google-web-toolkit/issues/detail?id=8503 Thanks again for any help, Adam On Friday, December 20, 2013 5:10:44 PM UTC-5, ahawtho wrote: I created an Eclipse project that exhibits similar behavior and uploaded it to GitHub: https://github.com/adamh-basis/code-splitting-bug.git If you ensure the compiler settings include -draftCompile and check the resulting deferredjs/id/1.js, you won't see any references to a classes Dispatcher2$Class0..3 . If you remove -draftCompile, the size of the 2.js and 3.js files decrease significantly, the size of the 1.js files increase, and Dispatcher2$Class0...3 begin to appear inside 1.js. Again, if there's any hints about how to work around this bug, I'd love to hear them. On Friday, December 20, 2013 3:13:20 PM UTC-5, ahawtho wrote: This is a follow up to Jim Douglas's question about the change in 2.6.0 to GWT.runAsync() here: https://groups.google.com/forum/#!topic/google-web-toolkit/7SxQHP_Jbtc We started working towards avoiding multiple calls to runAsync() for a particular code splitting point. Our application provides a framework for dynamically creating displays using GWT. We don't know what controls our customers will use on a given display until they actually create the controls. To decrease the size of the initial download, we have partitioned some of the lesser-used controls into groups that are downloaded on demand. What we've done below is how we worked around the difficulty of using the Command pattern with code splitting. Now at first, I was able to successfully change our code to avoid multiple calls to runAsync(). I was iterating quickly, so I used -draftCompile. When I removed the -draftCompile (no other changes), the GWT compiler began to include everything in our first split point. Here's an example of what we're doing. The following classes are generated using annotations and a GWT Generator: MessageReconstructor.java: public class MessageReconstructor { private Dispatcher m_group1; private Dispatcher m_group2; ... // there are 6 total. public void dispatch(final MessageData p_msg, ...) { int msgType = p_msg.getMsgType(); if (msgType = *GROUP1_LAST*) { if (*m_group1* == null) { GWT.runAsync(*Dispatcher1*.class, new RunAsyncCallback() { @Override public void onSuccess() { *m_group1* = new *Dispatcher1*(); *m_group1*.dispatch(p_msg, ...); } @Override public void onFailure() { // fail... } }); } else { *m_group1*.dispatch(p_msg, ...); } } else if (msgType = *GROUP2_LAST*) { if (*m_group2* == null) { GWT.runAsync(*Dispatcher2*.class, new RunAsyncCallback() { @Override public void onSuccess() { *m_group2* = new *Dispatcher2*(); *m_group2*.dispatch(p_msg, ...); } @Override public void onFailure() { // fail... } }); } else { *m_group2*.dispatch(p_msg, ...); } } } In each of Dispatcher1 and Dispatcher2, we have something like this: public class Dispatcher1 implements Dispatcher { @Override public void dispatch(MessageData p_msg, ...) { int msgType = p_msg.getMsgType(); switch (msgType) { case *MSG1*: { *String_String_Int* data = (*String_String_Int*)p_msg; *Group1SpecificMessage1* msg = new *Group1SpecificMessage1*(data.*string1*, data.*string2*, data.*int1*); msg.exec(...); break; } case *MSG2*: { *String_Int* data = (*String_Int*)p_msg; *Group1SpecificMessage2* msg = new *Group1SpecificMessage2*(data.*string1*, data.*int1*); msg.exec(...); break; } ... /// lots of messages. } } } One interesting thing I've found is that if I change the type of the Dispatcher objects in the MessageReconstructor from 'Dispatcher' to 'Dispatcher1', 'Dispatcher2', etc., then the compiler also fails to put them in the appropriate code fragments even when I specify -draftCompile. This looks to me like a bug, but I'm not sure where to start looking. Does anyone know for certain whether we should expect this to work or not? If not, is there a way we can make it work to avoid running a runAsync() on every single MessageData, but still
Re: Cannot found source in GWT Project
Hi Eric, I have a project with two source directories, src/ and test/ that also refers to the JUnit 4 library. The test/ directory refers to classes in JUnit, and these references cause the can not be found errors. I reproduced it by creating a new GWT project, adding the JUnit library, and referring to JUnit classes from the client/ directory. Here's the project structure: src/pkg/Foo.gwt.xml src/pkg/client/Foo.java test/pkg/client/FooTest.java FooTest.java looks like this: package pkg.client; import org.junit.runner.RunWith; import org.junit.runners.Suite; @RunWith(Suite.class) public class FooTest { } And the error looks like this: org.junit.runners.Suite can not be found in source packages. Check the inheritance chain from your module; it may not be inheriting a required module or a module may not be adding its source path entries properly. FooTest.java/GWTTesting/test/pkg/client line 5 Adam On Oct 27, 9:37 am, Eric Clayberg clayb...@google.com wrote: It would be helpful to see a test case project that wil reproduce this. -- You received this message because you are subscribed to the Google Groups Google Web Toolkit group. To post to this group, send email to google-web-tool...@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.
OOPHM not connecting to Code Server
When running in Development mode from the Eclipse plugin, the DevMode console does not indicate any URL, and starting DevMode does not open a browser. From the UsingOOPHM wiki link, I found the text: If you start DevMode in a browser without the plugin, you will get to the page allowing you to install the plugin. If you want to install it ahead of time, you can go directly to that missing-plugin page to install the plugin. Since nothing appeared, I went to the missing-plugin page to install the plugin, and found references to the gwt.hosted query param. Our GWT pages are all served via servlets from a context URL of / webconfig/*. We do not have a static HTML page. I tried to follow the same pattern by navigating in FF to localhost:/webconfig/default? gwt.hosted=localhost:9997 . Our application does seem to load and function normally, but although I had run the DevMode configuration from Eclipse's Debug menu, breakpoints don't work and I never see a connection from the OOPHM plugin noted in the logs. I even suspended the Code Server thread from within the DevMode JVM to see if it ever returned from the ServerSocket.accept() (it didn't). It seems as though the URL I'm using is bypassing the mechanism that invokes the OOPHM plugin. Another anomaly that I think might be related is that when creating or editing a Run/Debug Configuration, the GWT tab on the configuration dialog appears different when I select my GWT project (it's missing the Browser URL field and replaces the Compiler Shell section with a Development Mode section, see attached images for details). I idly wondered if it was related to our GWT bootstrap HTML pages being generated by servlets, so I mention it here. I found this: http://groups.google.com/group/google-web-toolkit/browse_thread/thread/b3c69a212002444b/95f9e9a0d65347f5?lnk=gst but I verified the gwt-servlet.jar was the same in the 2.0rc2 dir and my war/WEB-INF/lib dir . This looks like maybe the URL field is no longer valid: http://groups.google.com/group/google-web-toolkit/browse_thread/thread/b688ac3e31802a6/bbc44affbff385e0 But in any case, perhaps my servlet is handling things before it gets to yours? FWIW, I do have load-on-startup tags in my web.xml . Thanks for any help, Adam -- You received this message because you are subscribed to the Google Groups Google Web Toolkit group. To post to this group, send email to google-web-tool...@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.
Re: OOPHM not connecting to Code Server
Two additional pieces of information: 1. It worked in 1.7.1, but I was upgraded to a 64-bit machine running Ubuntu 9.10, which does not include libstdc++5 anymore. I'm upgrading to 2.0 because I can't use 1.7.1 hosted mode anymore. 2. The reference to images below because I was originally writing a bug report, but I thought I'd ask to make sure I didn't have an obvious configuration issue before reporting it, so please ignore that part :) Thanks to anyone who can help, Adam On Dec 1, 12:03 am, ahawtho adam.hawtho...@gmail.com wrote: When running in Development mode from the Eclipse plugin, the DevMode console does not indicate any URL, and starting DevMode does not open a browser. From the UsingOOPHM wiki link, I found the text: If you start DevMode in a browser without the plugin, you will get to the page allowing you to install the plugin. If you want to install it ahead of time, you can go directly to that missing-plugin page to install the plugin. Since nothing appeared, I went to the missing-plugin page to install the plugin, and found references to the gwt.hosted query param. Our GWT pages are all served via servlets from a context URL of / webconfig/*. We do not have a static HTML page. I tried to follow the same pattern by navigating in FF to localhost:/webconfig/default? gwt.hosted=localhost:9997 . Our application does seem to load and function normally, but although I had run the DevMode configuration from Eclipse's Debug menu, breakpoints don't work and I never see a connection from the OOPHM plugin noted in the logs. I even suspended the Code Server thread from within the DevMode JVM to see if it ever returned from the ServerSocket.accept() (it didn't). It seems as though the URL I'm using is bypassing the mechanism that invokes the OOPHM plugin. Another anomaly that I think might be related is that when creating or editing a Run/Debug Configuration, the GWT tab on the configuration dialog appears different when I select my GWT project (it's missing the Browser URL field and replaces the Compiler Shell section with a Development Mode section, see attached images for details). I idly wondered if it was related to our GWT bootstrap HTML pages being generated by servlets, so I mention it here. I found this:http://groups.google.com/group/google-web-toolkit/browse_thread/threa... but I verified the gwt-servlet.jar was the same in the 2.0rc2 dir and my war/WEB-INF/lib dir . This looks like maybe the URL field is no longer valid: http://groups.google.com/group/google-web-toolkit/browse_thread/threa... But in any case, perhaps my servlet is handling things before it gets to yours? FWIW, I do have load-on-startup tags in my web.xml . Thanks for any help, Adam -- You received this message because you are subscribed to the Google Groups Google Web Toolkit group. To post to this group, send email to google-web-tool...@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.
Re: OOPHM not connecting to Code Server
Thanks Rajeev, I added that and I have good news and bad news: The good news is that adding the cmdline arg did cause the Development Mode tab in Eclipse to display a URL: http://localhost:8080/webconfig/default?gwt.codesvr=127.0.1.1:9997, and I was able to paste that into firefox. The bad news is that doing so did not seem to change anything about the execution. No breakpoints, no attempt to connect to the code server, etc.. If you have any more ideas about this, I'd very much appreciate it. Side question: Does the use of the gwt.codesvr query parameter trigger the OOPHM plugin, or is it something else? Thanks, Adam On Dec 1, 10:07 am, Rajeev Dayal rda...@google.com wrote: Hey Adam, Try adding the following to the program arguments of your launch configuration: -startupUrl webconfig/default Rajeev On Tue, Dec 1, 2009 at 12:03 AM, ahawtho adam.hawtho...@gmail.com wrote: When running in Development mode from the Eclipse plugin, the DevMode console does not indicate any URL, and starting DevMode does not open a browser. From the UsingOOPHM wiki link, I found the text: If you start DevMode in a browser without the plugin, you will get to the page allowing you to install the plugin. If you want to install it ahead of time, you can go directly to that missing-plugin page to install the plugin. Since nothing appeared, I went to the missing-plugin page to install the plugin, and found references to the gwt.hosted query param. Our GWT pages are all served via servlets from a context URL of / webconfig/*. We do not have a static HTML page. I tried to follow the same pattern by navigating in FF to localhost:/webconfig/default? gwt.hosted=localhost:9997 . Our application does seem to load and function normally, but although I had run the DevMode configuration from Eclipse's Debug menu, breakpoints don't work and I never see a connection from the OOPHM plugin noted in the logs. I even suspended the Code Server thread from within the DevMode JVM to see if it ever returned from the ServerSocket.accept() (it didn't). It seems as though the URL I'm using is bypassing the mechanism that invokes the OOPHM plugin. Another anomaly that I think might be related is that when creating or editing a Run/Debug Configuration, the GWT tab on the configuration dialog appears different when I select my GWT project (it's missing the Browser URL field and replaces the Compiler Shell section with a Development Mode section, see attached images for details). I idly wondered if it was related to our GWT bootstrap HTML pages being generated by servlets, so I mention it here. I found this: http://groups.google.com/group/google-web-toolkit/browse_thread/threa... but I verified the gwt-servlet.jar was the same in the 2.0rc2 dir and my war/WEB-INF/lib dir . This looks like maybe the URL field is no longer valid: http://groups.google.com/group/google-web-toolkit/browse_thread/threa... But in any case, perhaps my servlet is handling things before it gets to yours? FWIW, I do have load-on-startup tags in my web.xml . Thanks for any help, Adam -- You received this message because you are subscribed to the Google Groups Google Web Toolkit group. To post to this group, send email to google-web-tool...@googlegroups.com. To unsubscribe from this group, send email to google-web-toolkit+unsubscr...@googlegroups.comgoogle-web-toolkit%2Bunsubs cr...@googlegroups.com . For more options, visit this group at http://groups.google.com/group/google-web-toolkit?hl=en. -- You received this message because you are subscribed to the Google Groups Google Web Toolkit group. To post to this group, send email to google-web-tool...@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.
Re: OOPHM not connecting to Code Server
Hi all, This is resolved, but I'm sorry to say I can't say exactly what the problem was. There's a few things I did that seemed as though they may have helped: 1. We have a complex classloader structure in our servlets. We add files to certain jar files, and because of this, there was a stray copy of gwt-user.jar from 1.7.0 somewhere in our build process. 2. It may have been that compiling used 1.7.1 due to some old dependencies in our custom Ant scripts, and so things were working in production mode. 3. I'm not sure what caused the OOPHM plugin to connect to the Code Server after all, my guess is that it was due to the difference between the gwt.codesvr and gwt.hosted query parameters. Adam On Dec 1, 12:43 pm, ahawtho adam.hawtho...@gmail.com wrote: Thanks Rajeev, I added that and I have good news and bad news: The good news is that adding the cmdline arg did cause the Development Mode tab in Eclipse to display a URL:http://localhost:8080/webconfig/default?gwt.codesvr=127.0.1.1:9997, and I was able to paste that into firefox. The bad news is that doing so did not seem to change anything about the execution. No breakpoints, no attempt to connect to the code server, etc.. If you have any more ideas about this, I'd very much appreciate it. Side question: Does the use of the gwt.codesvr query parameter trigger the OOPHM plugin, or is it something else? Thanks, Adam On Dec 1, 10:07 am, Rajeev Dayal rda...@google.com wrote: Hey Adam, Try adding the following to the program arguments of your launch configuration: -startupUrl webconfig/default Rajeev On Tue, Dec 1, 2009 at 12:03 AM, ahawtho adam.hawtho...@gmail.com wrote: When running in Development mode from the Eclipse plugin, the DevMode console does not indicate any URL, and starting DevMode does not open a browser. From the UsingOOPHM wiki link, I found the text: If you start DevMode in a browser without the plugin, you will get to the page allowing you to install the plugin. If you want to install it ahead of time, you can go directly to that missing-plugin page to install the plugin. Since nothing appeared, I went to the missing-plugin page to install the plugin, and found references to the gwt.hosted query param. Our GWT pages are all served via servlets from a context URL of / webconfig/*. We do not have a static HTML page. I tried to follow the same pattern by navigating in FF to localhost:/webconfig/default? gwt.hosted=localhost:9997 . Our application does seem to load and function normally, but although I had run the DevMode configuration from Eclipse's Debug menu, breakpoints don't work and I never see a connection from the OOPHM plugin noted in the logs. I even suspended the Code Server thread from within the DevMode JVM to see if it ever returned from the ServerSocket.accept() (it didn't). It seems as though the URL I'm using is bypassing the mechanism that invokes the OOPHM plugin. Another anomaly that I think might be related is that when creating or editing a Run/Debug Configuration, the GWT tab on the configuration dialog appears different when I select my GWT project (it's missing the Browser URL field and replaces the Compiler Shell section with a Development Mode section, see attached images for details). I idly wondered if it was related to our GWT bootstrap HTML pages being generated by servlets, so I mention it here. I found this: http://groups.google.com/group/google-web-toolkit/browse_thread/threa... but I verified the gwt-servlet.jar was the same in the 2.0rc2 dir and my war/WEB-INF/lib dir . This looks like maybe the URL field is no longer valid: http://groups.google.com/group/google-web-toolkit/browse_thread/threa... But in any case, perhaps my servlet is handling things before it gets to yours? FWIW, I do have load-on-startup tags in my web.xml . Thanks for any help, Adam -- You received this message because you are subscribed to the Google Groups Google Web Toolkit group. To post to this group, send email to google-web-tool...@googlegroups.com. To unsubscribe from this group, send email to google-web-toolkit+unsubscr...@googlegroups.comgoogle-web-toolkit%2Bunsubs cr...@googlegroups.com . For more options, visit this group at http://groups.google.com/group/google-web-toolkit?hl=en. -- You received this message because you are subscribed to the Google Groups Google Web Toolkit group. To post to this group, send email to google-web-tool...@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.