Matt RaibleMatt Raible is a Java Champion and Developer Advocate at Okta.

The Angular Mini-Book The Angular Mini-Book is a guide to getting started with Angular. You'll learn how to develop a bare-bones application, test it, and deploy it. Then you'll move on to adding Bootstrap, Angular Material, continuous integration, and authentication.

Spring Boot is a popular framework for building REST APIs. You'll learn how to integrate Angular with Spring Boot and use security best practices like HTTPS and a content security policy.

For book updates, follow @angular_book on Twitter.

The JHipster Mini-Book The JHipster Mini-Book is a guide to getting started with hip technologies today: Angular, Bootstrap, and Spring Boot. All of these frameworks are wrapped up in an easy-to-use project called JHipster.

This book shows you how to build an app with JHipster, and guides you through the plethora of tools, techniques and options you can use. Furthermore, it explains the UI and API building blocks so you understand the underpinnings of your great application.

For book updates, follow @jhipster-book on Twitter.


Over 10 years ago, I wrote my first blog post. Since then, I've authored books, had kids, traveled the world, found Trish and blogged about it all.

RE: Thoughts on the future direction of AppFuse

Sanjiv has some interesting thoughts on the future direction of AppFuse. To summarize: take on Seam head-to-head, but use Spring instead. Get rid of all the other frameworks except for JSF, Spring and Hibernate. Furthermore, focus on making Web 2.0 applications easy to create and use.

I like Sanjiv's ideas, but I'm not so hot on ditching all the other web frameworks in favor of JSF. I'm still not convinced it's the best solution for Java web development. The idea behind JSF is great, but the implementation has warts. Maybe that'll be fixed with JSF 1.2, but it will likely be quite a few months before MyFaces supports it. Yeah, I know there's the RI, but it is an RI and you remember the 1.1 version don't you? ;-)

I'd hate to give up WebWork support because I've used it on a couple of projects and really like it. Ditching Spring MVC would likely be a mistake as well since it's the most popular web framework among AppFuse users today. While I love what Tapestry brings to the table, it is harder (for the newbie) than JSF. Also, it seems to be the least-used web framework in AppFuse, which means I'm doing a lot of maintenance for no reason. AppFuse 2.0 will definitely make things simpler (JDK 5, Maven 2, standard directory layout, better IDE integration), but it will still be difficult to support 5 web frameworks and 2 persistence frameworks.

What do you think about Sanjiv's proposal? It sounds good to me. However, I'd rather see different lead developers for each framework and continue to support them all - except for Struts of course.

Posted in Java at May 22 2006, 08:16:53 PM MDT 28 Comments

My suggestion would be to drop Struts and use Hibernate as the only ORM layer. You'd be doing novices a favor by not letting them choose Struts or iBatis.

Posted by Todd Huss on May 22, 2006 at 10:02 PM MDT #

FWIW, Struts Action 2 (WebWork) now (in trunk) integrates cleanly with JSF [1], allowing you to use JSF where it makes sense in an Action-based app. I'm working on Action 1 support and plan to look at Spring MVC next.


Posted by Don Brown on May 22, 2006 at 10:13 PM MDT #

Or you could get on board: get involved in development of Seam. If you feel that there are truly things that Spring has that Seam/EJB3 does not have, then contribute Spring integration for Seam. (I've considered adding this myself, but I honestly don't see anything that would be gained - the only thing I've seen suggested is support for Acegi, but there are probably better ways to support Acegi than going via Spring. Neverthless I would accept a patch providing Spring integration.) Seriously, its time to start to converge here, that's why we've submitted the Web Beans JSR: the choice space is just too big right now, and people are stuck using dated technologies because of the resulting uncertainty. Wouldn't it be better to help reduce the choice space?

Posted by Gavin on May 22, 2006 at 10:29 PM MDT #

Yeah, I'd say keep the WebWork support until SAF 2 comes out, then switch over. I think you can expect big things from SAF 2, including interesting things like the JSF integration Don did and some cool API stuff Bob Lee's been working on. SAF 2 will be very cool with JDK 1.5 APIs.

Posted by Jason Carreira on May 22, 2006 at 10:39 PM MDT #

Oh, and rather than dropping an OR framework, you might want to look at adding JPA, especially the OpenJPA stuff dropping from Kodo/BEA.

Posted by Jason Carreira on May 22, 2006 at 10:41 PM MDT #

I second Jason in his suggestion to support JPA. It's being touted as the standard now, and it will get widespread adoption. Having tried it myself (with Hibernate EntityManager and Annotations) I have to say it's a pleasure to work with, particularly because of the available annotations.

Posted by GB on May 23, 2006 at 12:23 AM MDT #

I currently use iBatis and in my daily work I can't think of a switch to Hibernate... I need complete control over the SQL being executed... I think Hibernate is not the right solution for all situations especially if you have not control over db structure (like me) for web framework I'm using SpringMVC and I plan to start with JSF.

Posted by lime on May 23, 2006 at 01:46 AM MDT #

I think it's a great idea to remove all the choices and make AppFuse more of a singularly focused product. The real advancement comes not from the amount of choices, but from the simplified integration and application development. This is one of the reasons Rails is so good: all of the choices are made for you. I hope to see AppFuse be the Rails for Java: an all in one packaging that smartly integrates the best of breed frameworks for web applications. It almost doesn't matter what the framework choices are, as long as you make them, integrate them, and make it brain dead simple to use. I think it's a no brainer to use Hibernate. Don't like Hibernate? That's OK, just don't use AppFuse 3.0. Choosing a web framework is a bit harder, but whatever... just pick one and integrate it. Someone will always say, "But X is way better!" That's fine, just don't use AppFuse 3.0. Good luck!

Posted by Seth Ladd on May 23, 2006 at 01:54 AM MDT #

I suggest to drop Hibernate related dependencies and go with Spring and their JPA-Support. This allows everyone to use either OpenJPA or Toplink or Hibernate or whatever other implementation. I think not many would mind dropping tapestry. This type got replaced by JSF anyways. And after SAF2 is on the road, there is not much sense in supporting both Struts and WebWork. Just go for the unified version. Spring MVC is the sexiest one, so this is a nono to throw out. And Seam is no alternative at all. It does not have any advantage (rather disadvantages) to JSF-Spring-JPA. And thanks for the great tool.

Posted by Karsten Voges on May 23, 2006 at 02:29 AM MDT #

I've never got into JSF, but I'm intrigued by Bob Lee's comparison of the Google Web Toolkit & JSF:

Posted by Stephen Duncan Jr on May 23, 2006 at 04:37 AM MDT #

What is the real goal of AppFuse? The site says that it's an application for kickstarting web development. Based on my readings and experience, I would say that people are using it to kickstart development, but they are also using it to study and experiment with the different technologies. Where else can you study an application where the functionality is implemented with so many permutations of technology? For me, a major portion of the "kickstart" is in the design and the build scripts, which are extremely valuable.

If the goal is to compete with Ruby on Rails, then I personally would align with Gavin's comment. I'm all for having enough competition to spur innovation, but I think there's a tendancy in the open source space to just have too many solutions. I think Matt would bring a great set of talents and experience to something like Seam.

If the goal is to just "light the fuse" for custom apps and showcase some technologies, then I would say stay the current course. I appreciate this approach because Matt (and the other AppFuse developers) seems to constantly be finding bugs or making suggestions that get the framework designers attention. I think there was a good discussion about integrating Tiles with webwork on the struts-user list awhile back? Matt eventually figured it out - something he has a real knack for. I think there's value in that.

Posted by Troy Kelley on May 23, 2006 at 05:45 AM MDT #

Drop Struts IMO. Lot's of people use Struts, but not for the right reasons. I love the way Seam manages state. Moving towards a framework like that in Spring would be great.

Posted by Tom on May 23, 2006 at 07:38 AM MDT #

Drop Tapestry although it won the Duke's Choice Award for Innovation at Java One? Thats surprising. If not for anything maybe for the love of hockey, NHL web site uses Tapestry, lets keep it in Appfuse :-)

Posted by Sib Mangena on May 23, 2006 at 10:39 AM MDT #

GUI: Keep one action framework (SAF2/Webwork) and one component framework (JSF). Put the other frameworks on subprojects and/or tutorials teaching how to integrate them. Persistence: Keep Hibernate for simplicity and create tutorials teaching how to integrate iBatis and JPA. The objectives would be: simplicity for novices and a road to experts extend the basics funcionalities and integrate other tools.

Posted by Clair on May 23, 2006 at 10:50 AM MDT #

I don't see much value in turning AppFuse into a "streamlined" single-choice application. To me, one of the greatest features of AppFuse is not even being able to kick-start development, but being able to learn how to use technologies and frameworks that I had not used previously, and also how to integrate them with the stuff I am already familiar with. AppFuse has become an excellent learning tool, and I don't think this aspect is any less valuable than its "kickstarting" mission.

If something needs to be dropped, then I suppose Struts and Tapestry are prime candidates, but at the same time support for JPA should probably be added (as others have suggested.)

Posted by Gene on May 23, 2006 at 02:32 PM MDT #

I agree the logical choice is SAF2 to replace Struts/Webwork and OpenJPA to replace Hibernate (but not if it forces you to use a J2EE server for AppFuse instead of just a servlet server). Not sure about the others. I keep hoping Tapestry will take off because it's a better way to design web sites (a step above the JSF/ASPX paradigm), but JSF will take most of the market, just as the so-so Struts did when Webwork or Spring MVC should have. Maybe you should restart this by going back and letting us know why you put each of the frameworks in :-) More AJAX stuff should be added though (including DWR, etc.)

Posted by Ken Yee on May 23, 2006 at 02:49 PM MDT #

Matt, As I've mentioned before, I think AppFuse could change from an implementation of several web frameworks to a _spec_. You've got the market share and influence to define a high level requirements document for each framework to build a complete stack. You could add requirements such as "complete stack", "developer mode", "testing framework", etc (all the things that make RoR nice to work with) and then leave it to the individual framework authors to actually implement. I think that would free you up to focus on the big picture items while letting the individual project members build their best stack possible. Patrick

Posted by Patrick Lightbody on May 23, 2006 at 03:16 PM MDT #

Ok may be it is a little harsh (even people may think i am crazy) but here is my opinion: - create a new code tree with Java 5 and JEE 5 support. Make the developement on this, only keep maintenance-bug fixes on other branches. - drop tapestry, struts and webwork. Maybe also Spring MVC. - Drop Ibatis, JDO. Even wait until hibernate is full EJB 3.0 compliant. Focus on standards on this.. - May drop velocity, freemarker support. focus on newer versions of JSP, JSF. - Even you may not need to use Spring's many functionality. None of the frameworks i told to be dropped are bad. But trying to focus on standards have some serious advantages on mind share and learning experience. i am just tired of documentation problems, maintenance and knowledge-transef issues of many of the frameworks i counted. And aparently Spring and Hibernate-Jboss people are not getting well with, i am just tired of the Spring-Hibernate lazy-loading, session, transaction problems. There is no good source of information either, Hibernate guys does not even use the word "Spring" anymore.. i think i am just tired..

Posted by afsina on May 23, 2006 at 03:41 PM MDT #

Can you have a consideration about jsr 168 portlet integration in appfuse 2.0? I think it will be a trend in a few years. jsf is hard to implemented and need tightly ide integrated. it may be not a good idea recently. you can delay the publishment of appfuse 2.0 to look around and decide which will be a better scape.

Posted by yue shen on May 23, 2006 at 07:24 PM MDT #

Personally I'd prefer to see AppFuse maintain it's diversity of choices, this is what Java development is all about. I'm almost sick of hearing this bull about pick JSF becuase it's a standard and pick JPA and EJB3 becuase they are standards. Pick the best technology that suits your particular problem, period. Open source projects like Spring, Hibernate, Struts, Tapestry, etc. are what kept J2EE alive, these are the things that push the limits of productivity and innovation through their ability to move quickly and adapt.

I would like to see AppFuse keep the existing framework choices, and even add more choices. However, I'd like to see a cleaner way to build a project skeleton that includes only the frameworks that you select such that all the extra stuff does not confuse and get in the way. Just my $.02

Posted by Mark Helmstetter on May 23, 2006 at 08:39 PM MDT #

Personally I think matt did a great job to support multiple web and persistence frameworks in Appfuse. This is unique and biggest value of Appfuse, isn't it? Don't drop support of Struts and iBatis. Many REAL projects are using them and will use them in the forseen future.

Posted by john on May 24, 2006 at 07:17 PM MDT #

i'd suggest to drop struts. i can't imagine using struts for new projects in favor of a component-based and event-driven framework. action-based frameworks tend to produce procedural code instead of oo-style code.

i think Tapestry is currently the best java framework for building web 2.0 application. the separation of html und code ist unique and the base for producing webapps with lots of css and js because you do have control on the markup that is generated. you can do this using jsf too, but it is more complicated and very time-consuming (see tutorial on writing a "div" jsf component). And the AJAX integration is unrivalled too (see tacos library) !! JSF will take at least 2 years to reach that level (except you use ajax4jsf by Alex Smirnov ... that comes really close).

from my point of view there is an ever growing momentum driving Tapestry (see JavaOne Dukes Award). And i've never seen a JSF app with 150 components in action :)

best regards kris

Posted by kristian marinkovic on May 31, 2006 at 02:31 AM MDT #

APPFUSE is different because it enables users to try out different frameworks and then select the best he wants. APPFUSE is great because it lets you see working code examples as reference. I've never used APPFUSE but have downloaded it and referred to it many times, including the ANT build file. So Please do keep it the way it is which is the prime reason for its popularity. DO NOT compete against seam. As Gavin rightly pointed out (though i dont really like the hibernate group, i love hibernate technology though.. again digressing, rod johnson and spring group comes across as nice helping folks then gavin and the hibernate group.. just look at the hibernate forum for arrogance and abuse) its better to reduce the choice in terms of frameworks. Spring and Seam are good enough and we dont need another framework doing exactly the same thing. SUMMARY, APPFUSE is a great melting point of current technlogies. Keep the borders open ;)

Posted by Muthu Ramadoss on May 31, 2006 at 10:09 PM MDT #

Full stack is the key. Would be nice to see AppFuse provide better support for full stack solutions: view + middle tier + persistance. Even further, I think it would be nice to see preference for full stack solutions that harness standards which are publically accepted as being "good" such as EJB3. Seam looks like a prime candidate in that category but it hasn't reached a stable release to date (which is due to change). I think it is agreed we are all looking for the easy + standard + quality combination which makes it important that we zero in on those emerging solutions. Here is my proposed list of frameworks which AppFuse should support: 1) Seam 2) Spring + Spring MVC + Hibernate + [select view technology] 3) ? Shimon

Posted by Shimon Amit on June 01, 2006 at 12:25 AM MDT #

Matt, My vote, in line with Patrick Lightbody's, is for Appfuse itself to become a framework. Pick a 'flagship' stack of technologies and have it drive the innovation. Then, as you have proposed, tap contributors (or groups of contributors), to head alternate stacks. It would seem that AppFuse has grown into a full-time affair for you and that it would serve the AppFuse community and yourself best to take a step up and manage the bigger picture. I would hate to see AppFuse lose its variety as a teaching tool and platform for technology evaluation. Of course, it all goes back to Troy Kelley's question: "What is the real goal of AppFuse?" Is that the question you are trying to have answered here or are you looking for the more direct "drop Struts & Tapestry, keep WebWork (SAF 2.0)"?

Posted by Doug Hays on June 04, 2006 at 11:40 PM MDT #

Matt, If you're focusing on Hibernate as the persistence layer, I think should take another look at Stripes MVC--perhaps as the replacement for Stuts. This is the best MVC architecture I've seen for pushing complex data objects all the way to the front of the presentation layer. It is a natural action layer for managing the kinds of data objects you can create with Hibernate/EJB3 where you may have a domain object that might include among its properties lists of nested objects derived from foreign-key linked tables. Using Stipes I can map those nested properties directly into HTML select lists for presentation and editing and pass them directly back to the hibernate layer of inserts/updates with one line of code and no action forms. Rick

Posted by Rick on June 05, 2006 at 09:15 AM MDT #

I'd just like to point out that arguments to keep Struts or iBatis or whatever --because there are several existing projects out there that use these frameworks--are moot, since AppFuse is used primarily to kickstart new development by providing a basic project structure and showing how the different parts connect. Existing projects presumably have this already...

Posted by Patrick Angeles on September 09, 2006 at 07:08 AM MDT #

Similar to a previous comment...I have used Appfuse as a reference for serveral years now, but in all that time I only used it as the base for 1 project. It has helped me setup many, many this very minute I am setting up another project and using Appfuse to evaluate JSF/Spring/iBatis.

I have been using iBatis for a long time and will be using it for my current project. I need complete control over my sql...Hibernate looks cool, but I have never had a use for it.

JSF is my new choice over Velocity/Struts

I have never intergated Spring into my projects and am really considering using it this time. Appfuse is helping me with this choice, by showing me a complete solution.

I like the "flagship stack" and subprojects idea...the more choices the better and let contributors decide what they want to support...if nobody wants to support a configuration, let it die.

Posted by Alan Fitzgerald on October 21, 2006 at 06:52 PM MDT #

Post a Comment:
  • HTML Syntax: Allowed