Rapid Application Development and Application Generation Tools
Total Page:16
File Type:pdf, Size:1020Kb
Rapid Application Development and Application Generation Tools 5/2014 Walter Knesel Java... A place where many, many ideas have been tried and discarded. A current problem is it's success: so many libraries, so many technologies, so many choices Or, You want to be a Java Full Stack Developer? WEB Project DNA ● IDE (Eclipse, NetBeans, Jbuilder, IntelliJ, ...) ● Build Tool (Maven, Ant, …) ● Unit testing (Arquillian, EasyMock, JUnit, ...) ● App server (Tomcat, JBoss, WebLogic, WebSphere, Netty, ...) ● UI framework (JSF, GWT, Spring MVC, Struts, Tapestry, …) ● CSS files, JavaScript files, Images, HTML files, SQL ● View JavaBeans, Business JavaBeans, WebService endpoints ● ORM, DAO (JPA, Hibernate, JDBC), WebService clients ● Database (SQL Server, Oracle, MySQL, ...) Java SE Java takes too long: ● develop / compile / deploy / test cycle is long ● IDE / project integration mysteries ● download / config jars into IDE / app server ● XML configurations are tedious (older spring / hibernate) ● Technologies change every darn time ● !! Getting a new project started is hard !! So what did we do about it? Rapid Application Development ! As usual, there are many choices: AppFuse 3.x ● open-source Java EE web app framework ● designed for quick, easy development start up ● Provides project skeleton and additional code features ● Maven 2 build automation ● Hibernate, iBATIS or JPA as persistence frameworks ● compatible with JSF, Spring MVC, Struts 2 or Tapestry frameworks ● Uses Netty web server ● http://appfuse.org Some of the Code Features: ● User Management – login, signup, remember ● E-Mail ● Templated Layout ● File Upload AppFuse 3.x Grails ● Re-use technologies like Hibernate and Spring under a single interface ● Templates using GSP (Groovy Server Pages) ● Dynamic tag libraries for creating web page components ● Customizable Ajax support ● sample applications that demonstrate the framework ● includes a web server and automatic reload of resources ● http://grails.org/ Features ● No XML configuration ● All required libraries present ● Automatically prepares the Java web environment for deployment ● provides dynamic methods (mixins) based on class type ● allows developers to perform operations without implements or extends ● Has an app generator, owned by Spring Source, works like Spring Roo Grails JSPX(-bay) ● asp.net like imitator, yet different ● Does not mix java into jspx pages ● Plain html use – page tags ● convention over configuration ● stateful ui interface ● Data persistence exists, JPA not mentioned ● http://jspx.sourceforge.net/ JSPX(-bay) OpenXava ● You write the code for data structure and business logic ● You do not have to write HTML, JavaScript, CSS, SQL, etc. ● Java EE user interface and the database logic are automatically provided ● Extend any part of the app later, if needed ● List mode (search) has paging, ordering, filtering, adding / removing / moving columns, PDF reports, export to Excel, etc. ● Detail mode (view) with tabs, frames, dialogs, editors for references and collections, etc. OpenXava Play 2.x ● Definite Scala web platform possibility ● Scala and Java, non Java EE ● heavily inspired by and similar to Ruby on Rails and Django, uses module concept ● Uses convention over configuration ● designed to be run using JBoss Netty web server ● Can package to war and run on EE app servers. ● Stateless: Play 2 is fully RESTful - there is no Java EE session per connection ● a persistence layer based on JPA ● Built in hot-reloading ● an embedded database ● full embedded testing framework ● http://www.playframework.com/ Play 2.x WaveMaker 6.x ● Automatic generation of Hibernate mapping, queries from database schema import ● Automatic creation of Enterprise Data Widgets based on schema import ● Edit form implements create, update, delete functions automatically ● Visual, drag & drop assembly of web applications ● Developer sees live application data within the studio (LiveLayout) ● one-touch deployment to Tomcat, Websphere, Weblogic, Jboss ● Browser-based WaveMaker studio can be bundled ● Deploys a standard Java .war file ● effectively an open source alternative to Force.com ● http://www.wavemaker.com WaveMaker 6.x Others not covered ● Jrapid, not free, cloud based, DRY http://www.jrapid.org/ ● Stripes, not specifically RAD http://www.stripesframework.org ● Vaadin, not specifically RAD https://vaadin.com ● Wicket, not RAD, plain html, components http://wicket.apache.org/ Common Features ● Project skeletons and some feature code ● Convention over configuration and Annotations ● Maven – get / configure / deploy jars ● Maven – standard project config, operations ● light-weight frameworks, scripting langs ● DRY (don't repeat yourself) pattern ● code generation or support of some layers Another Approach Please? ● I don't really want to give up my environment for another ● The technology changed again and I don't want to jump to yet another environment to catch up ● I'd like to just push a button..... Application Generation Tools ● Not as easy as pushing a button ● Does not generate a production application ● DOES generate a deployable running application ● A good start, delete what you don't want ● Grails ● Maven archetypes ● Spring Roo ● Seam / JBoss Forge Maven Archetypes ● Many choices, will likely find one for your desired environment and version. ● Built a demo with jboss-javaee6-webapp-archetype 7.1.3 Final ● Command line: mvn archetype:generate ● Eclipse new → maven project ● Produces a maven project skeleton ● http://maven.apache.org Jboss EE6 Blank Project Jboss EE6 non blank Project Maven Archetypes Pros ● Part of Maven, instant Maven project ● Light, quick, easy to run ● No other external software to install ● Freedom to build app your way ● Many, many archetypes to work with Cons ● Produces a skeleton only ● Blank is truly minimal (pom, libraries, persistence.xml) Spring Roo ● Is a separate (commandline) generator ● Has to be installed (unzipped) ● Install oracle driver into internal osgi ● Reversing a database worked first try! ● Had to build database tables first ● http://projects.spring.io/spring-roo/ Roo shell Roo commands ● project --topLevelPackage org.cchmc.bmi.psysoc.pvp ● jpa setup --provider HIBERNATE --database ORACLE ● dependency remove --groupId com.oracle --artifactId ojdbc14 --version 10.2.0.2 ● dependency add --groupId com.oracle --artifactId ojdbc6 --version 11.2.0 ● database properties set --key database.driverClassName --value oracle.jdbc.OracleDriver ● database properties set --key database.url --value jdbc:oracle:thin:@localhost:1521:XE ● database properties set --key database.username --value myid ● database properties set --key database.password --value mypass ### all tables at once ● database reverse engineer --schema PSYSOCPVP --package ~.models ● web jsf setup --implementation ORACLE_MOJARRA --library PRIMEFACES --theme BLUESKY ### build them all ● web jsf all --package ~.beans Roo Generated: ● a PrimeFaces JSF UI ● Non EE AspectJ Spring beans and models ● heavy use annotation and injection ● Models use JPA ● Some internationalization provided ● Simple CRUD app, runs in Tomcat Roo Project Roo App Roo Pros ● Little investment ● More capabilities than shown ● Database schema reversal works ● Spring, JPA, JSF, PrimeFaces Cons ● Non EE ● AspectJ bean generation ● Roo Specific Annotations ● Does not “drop in” to Jboss servers Seam 2 ● Marry JSF 1.2 w/ JPA and make it work ● My first app generation encounter ● Installed Seam external to IDE ● Defined schema in reveng.xml ● Built an EE 5 CRUD app ● MPM admin tool started this way ● http://www.seamframework.org/Seam2/Home Seam 3 ● Java EE 6 and CDI ● Seam 2 had to become Seam 3 ● Seam 3 introduced JBoss forge ● Seam 3 has stopped (see Apache DeltaSpike, others) ● http://www.seamframework.org/Seam3 Jboss Forge 1.4x ● Is a separate (commandline) generator ● Has to be installed (unzipped, Eclipse) ● Reversing a database - miserable failure ● Did it their way, inside out ● http://forge.jboss.org/ Forge Shell Forge Commands ● New-project; ● scaffold setup --scaffoldType faces; ● beans setup; ● entity --named Customer --package ~.domain; ● field string --named firstName; ● field string --named lastName; ● field temporal --type DATE --named birthDate; ● … ● @/* Generate the UI for all */; ● scaffold from-entity ~.domain.* --scaffoldType faces –overwrite; ● @/* create rest WebService CRUD endpoints */; ● rest setup; ● rest endpoint-from-entity ~.domain.*; ● build; Forge Generated: ● JSF UI ● Domain beans, EE criteria query view beans ● heavy use annotation and injection ● views use JPA ● Simple CRUD app, runs in Jboss 7 Forge Project Forge App Forge Pros ● More function, for free ● J2EE 6 Annotated, JBoss compatible, what we use ● JSF, JPA, criteria queries already built if desired ● Large table paging is built in. Cons ● Multiple injected entity managers ● Extended conversations ● More pages, clicks to navigate ● Want DB reverse engineering to work ● View beans are too dense Conclusions ● Generally good starts or short cuts ● Use what works, delete what doesn't ● May show new ideas, techniques, APIs ● Build multiple projects, cannibalize them ● Don't be afraid to modify / extend .