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.

AppFuse Demos moved to

I bought the domain name sometime last year. I haven't done anything with it for the most part and I've just pointed it to this site. It's amazing how many people actually use it - it's my 4th largest referrer! The demo site I have at Kattare ( has a whole slew of demos installed on it, so I contacted Keith (at to set me up a new domain for AppFuse-only demos. These can now be found at or by clicking on of the URLs below. The site is currently running AppFuse 1.8 with JDK 5 and Tomcat 5.5.7.

The "Issues" link on this site won't work yet - I'm in the process of setting up JIRA at Hopefully we'll have it done sometime this week. Contegix has been gracious enough to offer free hosting of AppFuse's JIRA instance.

Update: AppFuse's JIRA is now up. Thanks again to Atlassian for a great product and to Contegix for hosting it. The quick installation and support from Contegix has been outstanding.

Posted in Java at May 03 2005, 09:54:30 AM MDT 10 Comments

fyi the jsf demo ended up with a ... javax.servlet.ServletException: HibernateTemplate: Duplicate entry '7' for key 1; nested exception is java.sql.BatchUpdateException: Duplicate entry '7' for key 1 at net.sf.acegisecurity.intercept.web.SecurityEnforcementFilter.doFilter(

Posted by andres on May 03, 2005 at 11:58 AM MDT #

Andres - do you remember what you did to produce this error? I'd like to try and reproduce it so I can fix it. Thanks.

Posted by Matt Raible on May 03, 2005 at 01:07 PM MDT #

Im just trying to login with tomcat/tomcat and remember me checked. It did it again here is the full stack: javax.servlet.ServletException: HibernateTemplate: Duplicate entry '10' for key 1; nested exception is java.sql.BatchUpdateException: Duplicate entry '10' for key 1 at net.sf.acegisecurity.intercept.web.SecurityEnforcementFilter.doFilter( at net.sf.acegisecurity.util.FilterChainProxy$VirtualFilterChain.doFilter( at net.sf.acegisecurity.providers.anonymous.AnonymousProcessingFilter.doFilter( at net.sf.acegisecurity.util.FilterChainProxy$VirtualFilterChain.doFilter( at net.sf.acegisecurity.wrapper.ContextHolderAwareRequestFilter.doFilter( at net.sf.acegisecurity.util.FilterChainProxy$VirtualFilterChain.doFilter( at net.sf.acegisecurity.context.HttpSessionContextIntegrationFilter.doFilter( at net.sf.acegisecurity.util.FilterChainProxy$VirtualFilterChain.doFilter( at net.sf.acegisecurity.util.FilterChainProxy.doFilter( at net.sf.acegisecurity.util.FilterToBeanProxy.doFilter( at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter( at org.apache.catalina.core.ApplicationFilterChain.doFilter( at org.apache.catalina.core.StandardWrapperValve.invoke( at org.apache.catalina.core.StandardContextValve.invoke( at org.apache.catalina.core.StandardHostValve.invoke( at org.apache.catalina.valves.ErrorReportValve.invoke( at org.apache.catalina.core.StandardEngineValve.invoke( at org.apache.catalina.connector.CoyoteAdapter.service( at org.apache.coyote.http11.Http11Processor.process( at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.processConnection( at at at org.apache.tomcat.util.threads.ThreadPool$ at

Posted by andres on May 03, 2005 at 01:36 PM MDT #

Hmmm, that sure is wierd. I tried logging into the JSF version using tomcat/tomcat with Remember Me checked and it worked fine. I suspect it might be your cookies or something.

Posted by Matt Raible on May 03, 2005 at 01:41 PM MDT #

Also had that error mentioned by andres upon first try. disappeared though. The Tapestry version gave me this when first clicked on sorting column in the User List. Couldn't reproduce it either... but I thought I let you now anyway... Great work Matt. Now go focus on the kids... Cheers, t. org.apache.tapestry.ApplicationRuntimeException Page recorder for page users is locked after a commit(), but received a change to property sessionState of component users/table.tableView. Stack Trace: * org.apache.tapestry.record.PageRecorder.observeChange( * org.apache.tapestry.engine.RequestCycle.observeChange( * org.apache.tapestry.Tapestry.fireObservedChange( * org.apache.tapestry.AbstractComponent.fireObservedChange( * org.apache.tapestry.contrib.table.components.TableView$Enhance_29.setSessionState(TableView$ * org.apache.tapestry.contrib.table.components.TableView.storeSessionState( * org.apache.tapestry.contrib.table.components.TableView.saveSessionState( * org.apache.tapestry.contrib.table.components.TableView.fireObservedStateChange( * org.apache.tapestry.contrib.table.components.inserted.SimpleTableColumnComponent.columnSelected( * sun.reflect.GeneratedMethodAccessor1044.invoke(Unknown Source) * sun.reflect.DelegatingMethodAccessorImpl.invoke( * java.lang.reflect.Method.invoke( * org.apache.tapestry.listener.ListenerMap.invokeTargetMethod( * org.apache.tapestry.listener.ListenerMap.access$100( * org.apache.tapestry.listener.ListenerMap$SyntheticListener.invoke( * org.apache.tapestry.listener.ListenerMap$SyntheticListener.actionTriggered( * * org.apache.tapestry.engine.DirectService.service( * org.apache.tapestry.engine.AbstractEngine.service( * org.apache.tapestry.ApplicationServlet.doService( * org.apache.tapestry.ApplicationServlet.doGet( * javax.servlet.http.HttpServlet.service( * javax.servlet.http.HttpServlet.service( * org.apache.catalina.core.ApplicationFilterChain.internalDoFilter( * org.apache.catalina.core.ApplicationFilterChain.doFilter( * com.opensymphony.module.sitemesh.filter.PageFilter.parsePage( * com.opensymphony.module.sitemesh.filter.PageFilter.doFilter( * org.apache.catalina.core.ApplicationFilterChain.internalDoFilter( * org.apache.catalina.core.ApplicationFilterChain.doFilter( * org.appfuse.webapp.filter.GZIPFilter.doFilter( * org.apache.catalina.core.ApplicationFilterChain.internalDoFilter( * org.apache.catalina.core.ApplicationFilterChain.doFilter( * org.displaytag.filter.ResponseOverrideFilter.doFilter( * org.apache.catalina.core.ApplicationFilterChain.internalDoFilter( * org.apache.catalina.core.ApplicationFilterChain.doFilter( * org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal( * org.springframework.web.filter.OncePerRequestFilter.doFilter( * org.apache.catalina.core.ApplicationFilterChain.internalDoFilter( * org.apache.catalina.core.ApplicationFilterChain.doFilter( * com.opensymphony.clickstream.ClickstreamFilter.doFilter( * org.apache.catalina.core.ApplicationFilterChain.internalDoFilter( * org.apache.catalina.core.ApplicationFilterChain.doFilter( * org.appfuse.webapp.filter.ActionFilter.doFilter( * org.apache.catalina.core.ApplicationFilterChain.internalDoFilter( * org.apache.catalina.core.ApplicationFilterChain.doFilter( * * org.springframework.web.filter.OncePerRequestFilter.doFilter( * org.apache.catalina.core.ApplicationFilterChain.internalDoFilter( * org.apache.catalina.core.ApplicationFilterChain.doFilter( * net.sf.acegisecurity.util.FilterChainProxy$VirtualFilterChain.doFilter( * net.sf.acegisecurity.intercept.web.FilterSecurityInterceptor.invoke( * net.sf.acegisecurity.intercept.web.SecurityEnforcementFilter.doFilter( * net.sf.acegisecurity.util.FilterChainProxy$VirtualFilterChain.doFilter( * net.sf.acegisecurity.providers.anonymous.AnonymousProcessingFilter.doFilter( * net.sf.acegisecurity.util.FilterChainProxy$VirtualFilterChain.doFilter( * net.sf.acegisecurity.wrapper.ContextHolderAwareRequestFilter.doFilter( * net.sf.acegisecurity.util.FilterChainProxy$VirtualFilterChain.doFilter( * net.sf.acegisecurity.context.HttpSessionContextIntegrationFilter.doFilter( * net.sf.acegisecurity.util.FilterChainProxy$VirtualFilterChain.doFilter( * net.sf.acegisecurity.util.FilterChainProxy.doFilter( * net.sf.acegisecurity.util.FilterToBeanProxy.doFilter( * org.apache.catalina.core.ApplicationFilterChain.internalDoFilter( * org.apache.catalina.core.ApplicationFilterChain.doFilter( * org.apache.catalina.core.StandardWrapperValve.invoke( * org.apache.catalina.core.StandardContextValve.invoke( * org.apache.catalina.core.StandardHostValve.invoke( * org.apache.catalina.valves.ErrorReportValve.invoke( * org.apache.catalina.core.StandardEngineValve.invoke( * org.apache.catalina.connector.CoyoteAdapter.service( * org.apache.coyote.http11.Http11Processor.process( * org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.processConnection( * * * org.apache.tomcat.util.threads.ThreadPool$ *

Posted by thot on May 03, 2005 at 11:52 PM MDT #


  • AppFuse replaces Container Managed Authentication (CMA) with Acegi Security.
  • Refactoring of build.xml to use Ant 1.6 features.
  • Numerous bug fixes to AppGen.
  • All-in-one installer was also added.

Posted by mornlee's blog on May 09, 2005 at 08:42 AM MDT #

I was wondering if appFuse will soon support OpenLaszlo to get the following combo: OpenLaszlo + Spring + Hibernate Thanks, Peter

Posted by Peter Dishchekenian on June 21, 2006 at 05:49 PM MDT #

Peter - it's on the roadmap, but I don't know when I'll get to it. I'm probably 40 hours away from having it done in Equinox, but I haven't had time to clean it up and release it. Doing AppFuse would be a much larger endevour, but definitely possible. If XFire supported RESTful services, it'd likely be a lot easier. Working with SOAP is just a pain IMO.

Posted by Matt Raible on July 21, 2006 at 07:44 AM MDT #

I would like to contact Peter Dishchekenian; my father's last name was the same as Peter's. Matt can you notify Peter? Thank you.

Posted by Robert Sarquis on October 19, 2006 at 01:24 PM MDT #

Robert - Peter didn't leave his e-mail address, so I don't know how to get in touch with him. Hopefully he'll check back on this post.

Posted by Matt Raible on October 19, 2006 at 01:36 PM MDT #

Post a Comment:
  • HTML Syntax: Allowed