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.

Equinox (a.k.a. AppFuse Light) 1.7 Released!

This release's major new features are upgrading to Spring 2.0, Hibernate 3.2, an Ajax + Spring MVC version, an Acegi Security + Spring MVC version and Struts 2.0 as an optional web framework. It's highly likely that the "extras/security" package can be installed with other web frameworks, but it's only been tested with Spring MVC. Furthermore, this release provided all of the different combinations that Equinox provides - all 50 of them!

All of the frameworks used in Equinox, as well as most of its build/test system is explained in Spring Live. A summary of the changes are below (detailed release notes can be found in JIRA):

  • Added extras/spring-ajax with examples of ajaxified displaytag (with AjaxAnywhere), in-place editing (, in-page updates (DWR) and lightbox (Lightbox gone Wild) popups.
  • Added extras/security with Acegi Security integration for authentication and authorization.
  • Automated creation and testing of all possible combinations for distribution.
  • Converted from JSP to Facelets for JSF/MyFaces option.
  • Integrated Ajax4JSF into JSF/MyFaces option.
  • Added Struts 2.0.1 as web framework.
  • Upgraded to Spring 2.0, including improved XML syntax and JSP Form Tags
  • Added Cargo settings to pom.xml so it's possible to run web tests from Maven.
  • Changed dataSource bean to use a connection pool.
  • Added popup calendar (using jscalendar) to Spring MVC and Struts 2.
  • Added OpenSessionInViewFilter for Hibernate and OpenPersistenceManagerInViewFilter for JDO/JPOX.
  • Fixed foreign-language encoding issues with Spring's CharacterEncodingFilter.
  • Changed from DAO to Dao to be more consistent with other projects.
  • Dependent packages upgraded:
    • Canoo WebTest 1393
    • Cargo 0.8
    • Commons Validator 1.3.0
    • DWR 1.1.1
    • FreeMarker 2.3.8
    • jMock 1.1.0
    • JPOX 1.1.1
    • Hibernate 3.2
    • MyFaces 1.1.4
    • Spring 2.0
    • Spring Modules Validation 0.5
    • Struts 1.2.9
    • Tapestry 4.0.2
    • WebWork 2.2.4
  • Dependent packages added:
    • Acegi Security 1.0.2
    • Ajax4JSF 1.0.2
    • AjaxAnywhere 1.2-rc2
    • Facelets 1.1.11
    • Struts 2.0.1

Download. For more information about installing the various options, see the README.txt file.


Thanks to all the users of Equinox for making this a great release!

P.S. I'm fully aware that this project's name conflicts with an Eclipse project. ;-)

Posted in Java at Oct 20 2006, 04:28:31 PM MDT 16 Comments

Matt, The readme in the Eclipse: section says to type "mvn idea:idea" instead of "mvn eclipse:eclipse" do you want a bug submitted for it?

Posted by Mark Kasprowicz on October 21, 2006 at 04:58 AM MDT #

I've fixed the problem in CVS - thanks Mark.

Posted by Matt Raible on October 21, 2006 at 11:53 AM MDT #

good call on facelets nice error page :)

Posted by Matthias Wessendorf on October 21, 2006 at 06:33 PM MDT #

Matthias - it looks like you've discovered an issue with MyFaces/Facelets on Resin 3. It works fine on Tomcat 5.5.x and Jetty 6. We did have to make adjustments to Resin for Spring 2.0 and Struts 2.0 - maybe that breaks JSF.

Posted by Matt Raible on October 21, 2006 at 10:04 PM MDT #

Looks like there is an incompatibility between Facelets and Resin 3.

Posted by Matt Raible on October 21, 2006 at 10:11 PM MDT #

Matthias, this has been fixed. Upgrading from Resin 3.0.14 to Resin 3.0.21 solved the issue. Thanks to Contegix for doing the upgrade quickly and efficiently.

Posted by Matt Raible on October 21, 2006 at 11:29 PM MDT #

Hi Matt, the new version(s) looks great! It seems though, that in the configuration run at the URL you can't use the date-picker in combination with the lightbox (clicking on last name, thing try choosing a date).

Posted by Roman on October 22, 2006 at 06:56 AM MDT #

Roman - there's something weird going on with Lightbox that I couldn't figure out. Basically, it strips off any included JavaScript files so neither the calendar nor DWR works when you're viewing the page in lightbox mode.

Posted by Matt Raible on October 22, 2006 at 09:48 AM MDT #

Matt, in Spring + Ajax the date isn't validated. If I enter 0/0/2006 or 0/0/0 it saves without problem. Gilberto

Posted by Gilberto on October 23, 2006 at 08:42 AM MDT #

Gilberto - that's because it calls and skips any web-tier validation. Hopefully JSR 303 will provide a standard way of validating POJOs anywhere in an application. Unfortunately, they may require JDK 5. Right now, I could use Hibernate's Validation annotations or Spring Modules validation - just haven't gotten around to exploring and testing them out.

Posted by Matt Raible on October 23, 2006 at 08:48 AM MDT #

Just a note - it seems the Apache Snapshots repository dropped the 2.0.1 version of struts2. The current versions listed are 2.0-SNAPSHOT, 2.0.0-SNAPSHOT, and 2.0.2-SNAPSHOT.

Posted by Anthony Hersey on October 27, 2006 at 01:44 PM MDT #

Anthony, I built and deployed 2.0.1 to - you can use that as a repository if you like.

Posted by Matt Raible on October 27, 2006 at 05:27 PM MDT #

Hi Matt,

I came across this article looking for information on ajax anywhere. The system I work is based on webwork and I am trying to ajaxify a display tag table. The rub is that it is located on a remote tab. So, as you might guess, the links generated by the display tag to sort table columns refer to the tab specific action and when invoked throw me out of the tab container. The only solution I can think of is to ajaxify the table so I don't reload the entire page, but there don't seem to be any examples I can follow. After see the Spring + Ajax example here, I am wondering if you have ever ajaxified a display tag table in your webwork branch, and more specifically, how you pulled it off?

Thanks for maintaining your blog,


Posted by john on November 05, 2006 at 04:31 PM MST #

John, I haven't played around with AjaxAnywhere and WebWork + DisplayTag. It should work just fine, but I don't know about working within a remote tab.

Posted by Matt Raible on November 06, 2006 at 12:56 PM MST #

Hey... Wat if i use hibernate's annotation based validation for my presentation layer. It will be great, as it will work for both presentation and persistent layer.

Posted by Sudhir Nimavat on January 05, 2007 at 06:07 AM MST #

Hi... I dont wanna duplicate my validation related code twice... so i use hibernates validation annotations to annotate my domain object.... and i have developed one interceptor which passes action invocation through this validation phase... it works for both presentation and persistence layer.... im waiting for JSR 303, as it claims to generalize bean validation across all the layers of your application. but currently there is no other way... if any have any, plz suggest Sudhir Nimavat (sudhir_nimavt at

Posted by Sudhir Nimavat on January 05, 2007 at 06:18 AM MST #

Post a Comment:
  • HTML Syntax: Allowed