gwt create2013 frankfurt: how we built a million dollar business with gwt
DESCRIPTION
QAFE stands for Quality Application Framework for Enterprises. It was developed by Java and Oracle engineers to modernize Oracle Forms, and at the same time to create a modern platform for new business application development. QAFE separated the business logic from the presentation layer. Therefore, as the web evolves, developers do not have to rewrite their applications: because the QAFE engine, with the help of GWT and other toolkits, renders their logic to any frontend. http://gwtcreate.com/#agenda-eu_room1_event10 http://www.qafe.comTRANSCRIPT
How we built a million dollar business with GWT
GWT.create 2013 Frankfurt QAFE Inc.
Rokesh Jankie ([email protected]) Salar Abdefaily([email protected])
Agenda• Introduction: Rokesh, Salar, QAFE
• Tools and Demos
• What we have learned
• Considerations
• The Future…
Who we areQAFE Inc. !
2008
Est.1998
USA, S-America & Netherlands
Soft- / Hardware Solutions
220 Consultants
Outsourcing,
Hosting, Training
Application Development
QUALOGY
Who we areQAFE Inc. !
2008
Est.1998
USA, S-America & Netherlands
Soft- / Hardware Solutions
220 Consultants
Outsourcing,
Hosting, Training
Application Development
QUALOGY
Who we areQAFE Inc. !
2008
Est.1998
USA, S-America & Netherlands
Soft- / Hardware Solutions
220 Consultants
Outsourcing,
Hosting, Training
Application Development
QUALOGY
QAFE• Quality Application Framework for
Enterprises.
• Created by Developers for Developers
• Makes sure you focus on business and not nitty-gritty of building applications
Our Mission• Bring legacy Oracle Forms to the Web
and be the best at it.
• To tackle my frustration :)
Our Mission• Bring legacy Oracle Forms to the Web
and be the best at it.
• To tackle my frustration :)
Why ? Horror of last decade
Why ? Horror of last decade
And of course…
And of course…
Hmmmm…
Q4 2013Q4 2010
Hmmmm…
Q4 2013Q4 2010
Hmmmm…
Q4 2013Q4 2010
Hmmmm…
Q4 2013Q4 2010
Hmmmm…
Q4 2013Q4 2010
Hmmmm…
Q4 2013Q4 2010
Hmmmm…
Q4 2013Q4 2010
Hmmmm…
Q4 2013History seems to repeat itself!Q4 2010
QAFE ArchitectureFLEX HTML5
Presentation Framework (QPF)
Business Framework(QBF)
Java
“Third Parties”
OthersFront-end Technologies
Back-end Technologies
GWTQA
FE
DatabaseWebService
Mobile
QAFE ArchitectureFLEX HTML5
Presentation Framework (QPF)
Business Framework(QBF)
Java
“Third Parties”
OthersFront-end Technologies
Back-end Technologies
GWTQA
FE
DatabaseWebService
Mobile
How do we do that ?QAML,
QAFE’s Markup Language
Inspiration
Inspiration
Why GWT • Early adopter
• Lots of Java back then
• Best solution so far
• Alternative, ZK Framework, but wasn’t Google :)
Our first GWT
Design considerations• Shorter compilation times (fast development cycle)
• Any application with same size Javascript
• Easy for any developer, accessible for newbies
• Use the power of GWT under the hood
• We like Single Page Applications (SPAs)
• Use of Maven and other standards (web overlay)
Tooling• QAML Builder [Eclipse Plugin]
• Graphical Editing UI
• Flow Editing
• Integration with native sources [DB,Java]
• Maven based
• Mobile and more…
Demo Tooling
Mobile
Mobile• We’ve spent a lot of time on finding out which
Mobile Platform
Mobile• We’ve spent a lot of time on finding out which
Mobile Platform
• Sencha, JQuery Mobile, Dojo Mobile, etc.
Mobile• We’ve spent a lot of time on finding out which
Mobile Platform
• Sencha, JQuery Mobile, Dojo Mobile, etc.
• Result: mgwt !!
Mobile• We’ve spent a lot of time on finding out which
Mobile Platform
• Sencha, JQuery Mobile, Dojo Mobile, etc.
• Result: mgwt !!
• Demo: ERP integration with Mobile GWT
Demo Mobile
Oracle Forms• Global Marketplace
• Default industry standard for more than a decade
• Blocking Innovation: Client -Server (2-tier)
Demo Forms Wizard
So what did we do ?• Mentis
• too.qafe.com
• Telecommunications Company in Caribbean
What we’ve learned
Callbacks• Performance Callback
• IE6
• Telecommunication company in South America
• Callback coding
Callbacks
Java GC != Javascript GC
Callbacks service.getShapes(dbName, new AsyncCallback() {
public void onSuccess(Shape[] result) {
}
public void onFailure(Throwable caught) {
} catch (IncompatibleRemoteServiceException e) {
// this client is not compatible with the server; cleanup and refresh the
// browser
} catch (InvocationException e) {
// the call didn't complete cleanly
} catch (Throwable e) {
// last resort -- a very unexpected exception
}
CSS & Dom• Reading from IE8, from com.google.gwt.user.client.DOM class
public static java.lang.String getStyleAttribute(Element elem,java.lang.String attr)
• Put “background” in the DOM and get “BACKGROUND” back.
• We use LessCSS for clever CSS
Dependency Third-party Libraries
• gwt-mosaic
• gwt-incubator
• Wasn’t rebuilt by Google, had to make explicit request for that
• Wrapper of JS Libraries were hard!
• Still using gquery though!
Download size• http compression of generated
javascript
• GZIPFilter in HttpResponseHeaderFilter (web.xml)
Styling of Components• Complex
• Our Graphic Designer wasn’t happy
• gwt-bootstrap seems really nice :)
Releases• Lower release frequency
• Risky, updates on browsers are fast (Chrome) and there were some issues with GWT Animation.
• Smaller community
Future roadmap
Future roadmap• From the first build until now a super solid solution!
Future roadmap• From the first build until now a super solid solution!
• Cross Browser (even the older ones)
Future roadmap• From the first build until now a super solid solution!
• Cross Browser (even the older ones)
• Tuning in Javascript is immense!
Future roadmap• From the first build until now a super solid solution!
• Cross Browser (even the older ones)
• Tuning in Javascript is immense!
• Continue to work with GWT
Future roadmap• From the first build until now a super solid solution!
• Cross Browser (even the older ones)
• Tuning in Javascript is immense!
• Continue to work with GWT
Future roadmap• From the first build until now a super solid solution!
• Cross Browser (even the older ones)
• Tuning in Javascript is immense!
• Continue to work with GWT
Future roadmap• From the first build until now a super solid solution!
• Cross Browser (even the older ones)
• Tuning in Javascript is immense!
• Continue to work with GWT
• Focus on clean HTML output (Web Components!)
Future roadmap• From the first build until now a super solid solution!
• Cross Browser (even the older ones)
• Tuning in Javascript is immense!
• Continue to work with GWT
• Focus on clean HTML output (Web Components!)
• Open Sourcing the QAFE Engine
Future roadmap• From the first build until now a super solid solution!
• Cross Browser (even the older ones)
• Tuning in Javascript is immense!
• Continue to work with GWT
• Focus on clean HTML output (Web Components!)
• Open Sourcing the QAFE Engine
• Debugging using what we learned at “Compiler Deep Dive”
Future roadmap• From the first build until now a super solid solution!
• Cross Browser (even the older ones)
• Tuning in Javascript is immense!
• Continue to work with GWT
• Focus on clean HTML output (Web Components!)
• Open Sourcing the QAFE Engine
• Debugging using what we learned at “Compiler Deep Dive”
Thanks
!Rokesh Jankie ([email protected])
(+RokeshJankie) Salar Abdefaily([email protected])
Questions ?
Thanks
!Rokesh Jankie ([email protected])
(+RokeshJankie) Salar Abdefaily([email protected])
Questions ?Vote for our presentation!gwtcreate.com/agenda