9 Replies Latest reply on Dec 17, 2008 3:40 PM by andres hurtado

    GWT and Seam

    Joshua Jackson Master

      Hi all,

      Does anyone use Seam with GWT here? I am evaluating to use Seam with GWT, but still wondering whether it is better than using Richfaces. Any experiences with Seam and GWT here?

      Thanks in advance

        • 1. Re: GWT and Seam
          Rick Kilcoyne Newbie
          I'm about to kick-off a project and I'm bouncing back and forth between Seam+GWT+ExtGWT and Seam+ExtJS. I just finished a project using Richfaces

          Richfaces isn't bad, but I'm facing some pretty high-demands in terms of user interface, and want to move more towards a desktop-like experience.

          The issue I run into with Seam+ExtJS is that it's tricky to get Seam data into ExtJS controls without some really dirty code. Adding GWT to the mix makes this much easier at the expense of the latest ExtJS widgets and occasional UI weirdness. I was really close to an elegant solution using xstream to convert seam entities to JSON, but I couldn't get xstream into a format that the extJS JSON parser liked.

          I plan on experiementing a bit more today, but right now it looks like it's going to be Seam+GWT+ExtGWT.

          • 2. Re: GWT and Seam
            Darrin Tisdale Newbie

            I have to admit that I too am interested in seeing just how far Seam can be pushed, considering all the stupid mistakes I keep making because the whole thing seems logically inconsistent.  I've admired the early RoR rigidity for performance. 

            But yes, AAMOF, I downloaded the toolkit, and now I'm going to to see wassup.

            . . . TizzyD

            • 3. Re: GWT and Seam
              Tomaz Cerar Master
              Hi guys,

              We are using Seam+GWT+GXT(extjs+gwt) for making admin interfaces for our apps.
              So far we are quite satisfied, there ware some bugs witch have been fixed (serialization issues) in latest release (2.1.1.cr1) and documentation is a bit flaky (both seam and gwt with gxt) but other than that is great. You can make a real good looking interface in no time and without redeploying app every line you change...

              Before gwt+gxt & seam we used ExtJS + Seam and as Rick said it is quite painful to do because of transmitting data from server (seam) to client (extjs)

              to see what you can get with gxt check its demo at http://extjs.com/explorer/

              • 4. Re: GWT and Seam
                Joshua Jackson Master

                Hey you guys, thanks for sharing your experiences. I really appreciate it. I thought when it comes to Seam, everyone is using Richfaces as their front-end. This has given me more confidence to use GWT with Seam. :-) I like the whole idea of GWT, but I was just wondering whether anyone has bumped into major hurdles when using it with Seam. What about the remoting support that comes from Seam, is it sufficient enough to be used with GWT? Or is there still some features lacking in that remoting support?


                • 5. Re: GWT and Seam
                  Rick Kilcoyne Newbie

                  What approach did you take to get seam object data into ext-js controls? I've seen a few hacks floating around, but after using them I feel like taking a shower. Sounds like your ultimate approach was to use Seam+GWT+GXT.

                  • 6. Re: GWT and Seam
                    Tomaz Cerar Master
                    Hi guys,

                    sorry for late reply been sick for a week...

                    Remoting support in seam in general works very well. There ware some issues with gwt support like this one https://jira.jboss.org/jira/browse/JBSEAM-2933
                    but it has been fixed in latest release.
                    So if you are trying out seam + gwt + framework of choice, I would really recommend you to use latest (2.1.1) release of seam, most of "well known" problems are fixed and most of workarounds are not needed anymore.

                    • 7. Re: GWT and Seam
                      Rick Kilcoyne Newbie

                      So are you actually using RPC to marshall entity objects between Seam and GWT? I've tried doing this, but I can't get my gwt compile to recognize my entity objects -- obviously a classpath issue, but I've lost patience. I've moved to using xstream to convert my objects to JSON, passing the string to gwt, and using an overlay object. Somewhat elegant, but lots of code repetition that makes the fingers hurt.


                      • 8. Re: GWT and Seam
                        Rick Kilcoyne Newbie

                        odd, now getting the following stacktrace on my remote method calls:

                        |22:17:56,069 ERROR [[/addressbook]] Exception while dispatching incoming RPC call
                        java.lang.IndexOutOfBoundsException: Index: 0, Size: 0
                             at java.util.ArrayList.RangeCheck(ArrayList.java:547)
                             at java.util.ArrayList.get(ArrayList.java:322)
                             at com.google.gwt.user.server.rpc.impl.ServerSerializationStreamReader.extract(ServerSerializationStreamReader.java:617)
                             at com.google.gwt.user.server.rpc.impl.ServerSerializationStreamReader.readInt(ServerSerializationStreamReader.java:432)
                             at com.google.gwt.user.client.rpc.impl.AbstractSerializationStreamReader.prepareToRead(AbstractSerializationStreamReader.java:38)
                             at com.google.gwt.user.server.rpc.impl.ServerSerializationStreamReader.prepareToRead(ServerSerializationStreamReader.java:383)
                             at org.jboss.seam.remoting.gwt.GWTService.RPC_decodeRequest(GWTService.java:376)
                             at org.jboss.seam.remoting.gwt.GWTService.processCall(GWTService.java:203)
                             at org.jboss.seam.remoting.gwt.GWTService$1.process(GWTService.java:120)
                             at org.jboss.seam.servlet.ContextualHttpServletRequest.run(ContextualHttpServletRequest.java:53)
                             at org.jboss.seam.remoting.gwt.GWTService.getResource(GWTService.java:105)
                             at org.jboss.seam.servlet.SeamResourceServlet.service(SeamResourceServlet.java:80)
                             at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
                             at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
                             at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
                             at org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:83)
                             at org.jboss.seam.web.IdentityFilter.doFilter(IdentityFilter.java:38)
                             at org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:69)
                             at org.jboss.seam.web.MultipartFilter.doFilter(MultipartFilter.java:90)
                             at org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:69)
                             at org.jboss.seam.web.ExceptionFilter.doFilter(ExceptionFilter.java:64)
                             at org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:69)
                             at org.jboss.seam.web.RedirectFilter.doFilter(RedirectFilter.java:45)
                             at org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:69)
                             at org.ajax4jsf.webapp.BaseXMLFilter.doXmlFilter(BaseXMLFilter.java:177)
                             at org.ajax4jsf.webapp.BaseFilter.handleRequest(BaseFilter.java:267)
                             at org.ajax4jsf.webapp.BaseFilter.processUploadsAndHandleRequest(BaseFilter.java:380)
                             at org.ajax4jsf.webapp.BaseFilter.doFilter(BaseFilter.java:507)
                             at org.jboss.seam.web.Ajax4jsfFilter.doFilter(Ajax4jsfFilter.java:56)
                             at org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:69)
                             at org.jboss.seam.web.LoggingFilter.doFilter(LoggingFilter.java:58)
                             at org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:69)
                             at org.jboss.seam.debug.hot.HotDeployFilter.doFilter(HotDeployFilter.java:54)
                             at org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:69)
                             at org.jboss.seam.servlet.SeamFilter.doFilter(SeamFilter.java:158)
                             at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
                             at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
                             at org.jboss.web.tomcat.filters.ReplyHeaderFilter.doFilter(ReplyHeaderFilter.java:96)
                             at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
                             at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
                             at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:230)
                             at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)
                             at org.jboss.web.tomcat.security.SecurityAssociationValve.invoke(SecurityAssociationValve.java:182)
                             at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:432)
                             at org.jboss.web.tomcat.security.JaccContextValve.invoke(JaccContextValve.java:84)
                             at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
                             at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
                             at org.jboss.web.tomcat.service.jca.CachedConnectionValve.invoke(CachedConnectionValve.java:157)
                             at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
                             at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:262)
                             at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844)
                             at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583)
                             at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:446)
                             at java.lang.Thread.run(Thread.java:637)

                        I'm at a bit of a loss here -- this was working fine. Now I'm dead in the water and can't find a solution to the above error. Keep in mind, my remote method just returns a String -- nothing fancy here.


                        • 9. Re: GWT and Seam
                          andres hurtado Newbie
                          The work with richfaces is more integrated from the development perspective.

                          To start to work your frontent with gwt, there is some tasks to do to complete a really good integration with seam; for example:

                          > you don`t have support for hibernate validations
                          > you don't have support for binding

                          you can see the integration with seam in the remoting/gwt sample of a seam 2.1.1 or more recent version, where some bugs has been eliminated, but for communication with your services layer I have seen that there are some other approaches to communicate with this tier, i.e:

                          + jboss rest

                          from my point of view to make a client with gwt linked with seam comsumes more time than a project made with the seam tradditional application stack (of course we wish it could change in the future).

                          you can see an example of "gwt + gwt-ext" in the jbpm gwt console, but this is not connected with seam.