6 Replies Latest reply on Mar 9, 2016 4:43 PM by Hristo Stoyanov

    GWT 2.8 and the future of Errai

    Hristo Stoyanov Master

      Hi all,

      I have a few question about the future of Errai in light of the design guidelines Google provided for GWT 2.8 and beyond:

      1. Google said they will drop Widget class and use only DOM elements. How is GWT going to cope this as everything inherits from CompositeWidget?

      2. Google recommended stop using Guice and instead start using Dagger2 for dependency injection. I know Errai is based on Guice for its CDI implemention

      3. Google recommended stop using linker /generators and move to standard Java apt processing. How is Errai going to migrate off these generators?

      4. Google wants to move off JSNI/JSObject and start using JSInterop. Is this being done in Errai?

      5. Google wants to move off UIBinder, which I do not think Errai is suing anyway?

      6. There were some experiments with Material Design and Errai. Not sure what happened? In the meanwhile the community came up with two approaches:

          a. GwtMaterialDesign GwtMaterialDesign/gwt-material · GitHub

          b. Vaadin Polymer  wrapper - vaadin/gwt-polymer-elements · GitHub

          These are different approaches (Vaadin -generate code around Polymer, and GwtMaterialDesign - hand coding around the lighter Materil Design CSS). Which one is Errai able to work with? I am more interested in option a.

       

      My concern is that Errai moves very, very, very,very  slowly and we may end up putting up with old stuff for quite some time. I doubt any of these future-proofing items will be addressed in Errai 4.0 (which I do not even know when it is going to be released!). Also, are there any plans to fork "lighter/better/future" Errai and cut off legacy and break backward compatibility?

       

      Thanks.

        • 1. Re: GWT 2.8 and the future of Errai
          Max Barkley Expert

          Hi Hristo,

           

          Here is a blog post from August where we discussed some things we were working on for Errai 4. Specifically, (1), (4), (5), and (6) are all changes under the umbrella of Errai UI improvements that are almost complete on 4.0.0-SNAPSHOT. I'm not sure what your source is for (2), but Errai does not use Guice. Regarding (3), we do plan to migrate our existing generators to annotation processors but this change will not be in 4.0 (which is fine since GWT 2.8 still supports generators). I will be blogging about all of these changes in more detail in the new year as we get closer to releasing a 4.0 beta.


          Since the blog post I linked above we've addressed almost all of the items in your list; I wouldn't call that pace "very, very, very, very slow".

          • 2. Re: GWT 2.8 and the future of Errai
            Hristo Stoyanov Master

            Thanks for the clarification, Max!

            Not sure why I thought Guice was used ... sorry.  Eagerly expecting updates on what is coming in Errai 4. Btw, is Errai 4 usable for projects that will be released in Q1 2016? If so, I am willing to switch ... or should I wait for the GWT 2.8 release or any known showstoppers to be cleared?

            • 3. Re: GWT 2.8 and the future of Errai
              Anton Hughes Master

              Max Barkley wrote:

               

              ...we were working on for Errai 4. Specifically, (1), (4), (5), and (6) are all changes under the umbrella of Errai UI improvements that are almost complete on 4.0.0-SNAPSHOT....

              Max - sounds like you are making some really great improvements!

               

              Keep up the good work!

              • 4. Re: GWT 2.8 and the future of Errai
                Hristo Stoyanov Master

                Max,

                Getting back to this old topic ... Errai 3.2.x does use Google guice 3.0. Removing it causes compile failures:

                ---------------------------------------------------------------------------------------------

                compile - Compile classpath for source set 'main'.

                +--- com.google.guava:guava:19.0

                +--- org.jboss.errai:errai-bus:3.2.3-SNAPSHOT

                |    +--- org.jboss.errai:errai-common:3.2.3-SNAPSHOT

                |    |    +--- org.jboss.errai.reflections:reflections:3.2.3-SNAPSHOT

                |    |    |    +--- org.javassist:javassist:3.18.1-GA

                |    |    |    \--- org.slf4j:slf4j-api:1.7.2

                |    |    +--- de.benediktmeurer.gwt-slf4j:gwt-slf4j:0.0.2

                |    |    \--- org.apache.commons:commons-lang3:3.1

                |    +--- org.jboss.errai:errai-config:3.2.3-SNAPSHOT

                |    +--- org.jboss.errai:errai-marshalling:3.2.3-SNAPSHOT

                |    |    +--- org.jboss.errai:errai-common:3.2.3-SNAPSHOT (*)

                |    |    +--- org.jboss.errai:errai-config:3.2.3-SNAPSHOT

                |    |    +--- org.jboss.errai:errai-codegen:3.2.3-SNAPSHOT

                |    |    |    +--- org.jboss.errai:errai-common:3.2.3-SNAPSHOT (*)

                |    |    |    \--- org.mvel:mvel2:2.2.7.Final

                |    |    \--- org.jboss.errai:errai-codegen-gwt:3.2.3-SNAPSHOT

                |    |         \--- org.jboss.errai:errai-codegen:3.2.3-SNAPSHOT (*)

                  +--- com.google.inject:guice:3.0

                |    |    +--- aopalliance:aopalliance:1.0

                |    |    \--- org.sonatype.sisu.inject:cglib:2.2.1-v20090111

                |    +--- org.mvel:mvel2:2.2.7.Final

                |    +--- org.slf4j:slf4j-api:1.7.2

                |    +--- org.javassist:javassist:3.18.1-GA

                |    +--- io.netty:netty-codec-http:4.0.12.Final

                |    |    +--- io.netty:netty-codec:4.0.12.Final

                |    |    |    \--- io.netty:netty-transport:4.0.12.Final

                |    |    |         \--- io.netty:netty-buffer:4.0.12.Final

                |    |    |              \--- io.netty:netty-common:4.0.12.Final

                |    |    \--- io.netty:netty-handler:4.0.12.Final

                |    |         +--- io.netty:netty-buffer:4.0.12.Final (*)

                |    |         +--- io.netty:netty-transport:4.0.12.Final (*)

                |    |         \--- io.netty:netty-codec:4.0.12.Final (*)

                |    \--- org.jgroups:jgroups:3.2.13.Final

                -------------------------------------------------------------------------------------------------

                 

                 

                Here are all the packages I have to filter out (see compileExcludes) in my Gradle build to make my WAR file contain jars that I know I need and are up to date. Any plans to improve this in Errai 4?

                 

                ---------------------------------------------------------------------

                dependencies {

                   

                   

                    dependencies {

                   

                         def compileExcludes = {

                            //exclude group: 'com.google.inject'

                            exclude group: 'com.google.gwt'

                            exclude group: 'com.google.guava'

                            exclude group: 'javax.enterprise'

                            exclude group: 'javax.annotation'

                            exclude group: 'javax.inject:javax'

                            exclude group: 'org.keycloak'

                            exclude group: 'org.jboss.resteasy'

                            exclude group: 'dom4j'

                            exclude group: 'org.lesscss'

                            exclude group: 'org.jboss.spec'

                            exclude group: 'javax.servlet'

                            exclude group: 'javax.inject'

                            exclude group: 'javax.el'

                            exclude group: 'junit'

                            exclude group: 'org.hibernate.javax.persistence'

                            exclude group: 'org.jboss.spec.javax.interceptor'

                            exclude group: 'org.jboss.spec.javax.el'

                            exclude group: 'org.jboss.spec.javax.ws.rs'

                            exclude group: 'org.jboss.spec'

                            exclude group: 'org.hibernate'

                            exclude group: 'asm'

                        }

                    

                        //GWT

                        providedCompile "com.google.gwt:gwt-user:${gwt_version}"

                   

                        //Cargo

                        cargo  "org.codehaus.cargo:cargo-core-uberjar:${cargo_version}",

                               "org.codehaus.cargo:cargo-ant:${cargo_version}",

                               "org.wildfly.core:wildfly-controller-client:${wildfly_controller_version}"

                   

                   

                        //Java EE

                        providedCompile "javax:javaee-api:${java_ee_version}"

                   

                        //Other compile dependencies

                        compile "com.google.guava:guava:${guava_version}"

                        gwt "com.google.guava:guava-gwt:${guava_version}"

                                       

                        //Errai dependencies

                        compile "org.jboss.errai:errai-bus:${errai_version}", compileExcludes

                        compile "org.jboss.errai:errai-ioc-bus-support:${errai_version}", compileExcludes

                        compile "org.jboss.errai:errai-ioc:${errai_version}", compileExcludes

                        compile "org.jboss.errai:errai-cdi-client:${errai_version}", compileExcludes

                        compile "org.jboss.errai:errai-weld-integration:${errai_version}", compileExcludes

                        compile "org.jboss.errai:errai-data-binding:${errai_version}", compileExcludes

                        compile "org.jboss.errai:errai-jaxrs-client:${errai_version}", compileExcludes

                        compile "org.jboss.errai:errai-jaxrs-provider:${errai_version}", compileExcludes

                        compile "org.jboss.errai:errai-ui:${errai_version}", compileExcludes

                        compile "org.jboss.errai:errai-navigation:${errai_version}", compileExcludes

                        compile "org.jboss.errai:errai-jboss-as-support:${errai_version}", compileExcludes

                   

                        // Errai Keycloak

                        compile "org.jboss.errai:errai-security-server:${errai_version}", compileExcludes

                        compile "org.jboss.errai:errai-security-client:${errai_version}", compileExcludes

                        compile "org.jboss.errai:errai-security-keycloak:${errai_version}", compileExcludes

                   

                        // Keycloak

                        compile "org.keycloak:keycloak-core:${keycloak_version}", compileExcludes

                        compile "org.keycloak:keycloak-adapter-core:${keycloak_version}", compileExcludes

                        compile "org.keycloak:keycloak-servlet-oauth-client:${keycloak_version}", compileExcludes

                   

                        compile project(":web-server")

                        compile project(":web-shared")

                    }

                }

                • 5. Re: GWT 2.8 and the future of Errai
                  Max Barkley Expert

                  Hi Hristo,

                   

                  I'm sorry for misleading you about Guice in Errai. I forgot that it is used internally by Errai Bus to wire itself.

                   

                  Regarding streamlining dependencies, this is an issue we've looked into from time-to-time but without any obviously superior solutions. There are lots of dependencies in Errai that only ought to be provided scoped. But since Maven does not transitively include provided dependencies, if we made the dependencies provided our users would have to manually include them as provided in their own projects. So far we've preferred for these dependencies to be compile-scoped so that users don't need to manually add them all to a project when they're getting started.

                  • 6. Re: GWT 2.8 and the future of Errai
                    Hristo Stoyanov Master

                    Thanks Max,

                    One thing that helps is to clearly designate the provided scope in the docs. In section 15.13 of the docs, some top level packages do not have compile or provided scope. Trying to figure it out from examples is hard.

                     

                    Is Errai 4 Java EE 7 dependent? You can then drop lots of Java EE packages not present in earlier editions.