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
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.
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
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/
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?
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.
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.
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.
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.
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.