Matt RaibleMatt Raible is a Web Developer and Java Champion. Connect with him on LinkedIn.

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.

10+ YEARS


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.
You searched this site for "appfuse". 771 entries found.

You can also try this same search on Google.

[DJUG] JMS and Spring

Tonight's DJUG should be a fun one. First, I hope to learn some JMS tips and tricks from Chris Huston then I'm doing a presentation on Spring. I asked the group what they wanted to know about Spring last week and I got a wide range of answers. There should be a good mix of newbies and experienced Spring users. I'll give you a link to my presentation, but I have to warn you that there's not much there. I tend to show a lot of code in and do demos when I present, so my presentations tend to be kinda thin. My two goals for tonight are 1) keep it under an hour so we can all get to the bar and 2) inspire Spring-mania among the crowd.

   Download Presentation »

Posted in Java at Dec 08 2004, 05:00:51 PM MST 6 Comments

[ANN] AppFuse 1.7 Released

This release adds support for JSF/MyFaces and Tapestry as web framework options. AppGen has been updated to work with both of these frameworks and I added new tutorials as well. You can read about my integration experience in a previous post.

After I released AppFuse 1.6.1, I knew the only way I was going to get Tapestry and JSF support done was if I stayed close to the code and started the next release. I never envisioned developing the Tapestry and JSF versions of AppFuse at the same time, but it turned out to be very efficient. If you want a comparison of all the different web frameworks in AppFuse (and AppFuse Light) - you can checkout my Comparing Web Frameworks presentation. If you want more in-depth coverage - it'll be in the next Chapter of Spring Live. ;-)

If you find any issues, let us know.

Posted in Java at Dec 08 2004, 11:30:25 AM MST 9 Comments

Integrating JSF and Tapestry into AppFuse

Well it looks like I accomplished my goal for the year: integrate Spring MVC, WebWork, Tapestry and JSF into AppFuse. I decided to integrate JSF and Tapestry at the same time so I could get a good feel for their differences. Also, I figured there would be a lot of similarities I could re-use between the two. I found this to be a great idea. Often I'd use the first framework as a template and the second would go much quicker. It turned out to be a good strategy because I often found bugs in the first while working on the second. I really enjoyed developing with both JSF and Tapestry - here's my notes from my development marathon over the last week:

Tapestry

  • For Tapestry, I created a patched version of the 3.0 source. I did this because I wanted some non-standard things, like friendly URLs, a global properties file and a popup calendar that works with IE/XHTML. The Tapestry Community was gracious enough to supply the source - so I didn't have to do much patching myself.
  • Pure HTML, like Tapestry has, is ssoooooo much nicer to work with. The syntax highlighting in HomeSite is fully functional again! I've been an HTML developer since 94 and I felt like it was 97 all over again - when we didn't write apps, just static HTML.
  • Overriding the default Tapestry ValidationDelegate was pretty easy - and there's even an example in Tapestry in Action. I was able to add asterisks for required fields and error messages next to the fields fairly easily. Erik Hatcher also hooked me up with a Label component for non-validating fields.
  • For the contrib:Table component, you can easily i18n column headings by using "keyName:propertyName" as the column value. However, if your keyName has a period in it (i.e. user.username), you can't override the ValueBlock b/c user.username is an invalid OGNL expression. I patched Tapestry to solve this.
  • The ability to use <span key="keyName"/> to render i18n keys is awesome. So simple.
  • Tapestry has a very rich validation framework that requires virtually no configuration. No setting up your resource bundle, etc. It just works. Client-side too.
  • It would be nice to show all the client-side validation errors in a single dialog instead of one-at-a-time (WebWork does this too).

JSF/MyFaces

  • I like how you don't have to create mappings - just link to the .jsp with an .html extension.
  • For some reason, when I save a user and server-side validation occurs, the user's username and roles disappear. Good thing client-side validation is available.
  • It was easy to override the Labels to add asterisks thanks to some code from David Geary on the MyFaces mailing list. In order to make it work, I had to ditch my HTML <table> and use an <h:panelGrid>. Now my JSP is Tag Soup. I think JSF is going to have to ditch JSP if they want to get anywhere. Hopefully JSF will soon support HTML templates like Tapestry and parse them with a Servlet Filter or something.
  • It's unfortunate that I have to specify a "styleClass" attribute on all my <h:message> tags - I'd like to just set a default for these tags (others too).
  • I ditched JSF's message setting and opted for setting my own List of messages in the session and then grabbing them out with a MessageFilter. This was so much easier to implement than the standard JSF message setting stuff.
  • I'd rather not have to specify <f:loadBundle> at the top of each page. It's going to be the same for my whole app - it'd be nice to set a default bundle and variable name that all tags could access.
  • It was quite a bit easier to integrate JSF into AppFuse than Tapestry. This was mainly due to the fact that I could re-use a lot of the JSP code, as well as the WebWork Actions are pretty close to the JSF Managed Beans.
  • Spring Rocks - it never caused any issues with either framework. I just wish MyFaces wouldn't warn that it can't find a variable that it's already found. I had to turn logging down to FATAL so I don't get any meaningless messages from MyFaces.
  • With JSF, why do I have to specify the supported locales in faces-config.xml? Why can't it look up the available bundles like JSTL with Spring/WebWork/Struts does?

So after all of this, which is my favorite? Unfortunately, there is no clear winner. They're both pretty cool, but not that much better than Struts, Spring or WebWork. In reality, I like them all, that's why they're all integrated into AppFuse! ;-)

Update: I forgot to mention that I was very pleased with the latest version of Canoo's WebTest. It now uses HtmlUnit at its core and its JavaScript support has vastly improved. I wouldn't have been able to do integration testing on the JSF version without this (updated) library. Not only did it work great, but it found XHTML issues in my code - that rocks! The JSF and Tapestry versions of AppFuse are the only ones that run Canoo tests with JavaScript turned on. This is mainly because the old tests worked fine w/o JavaScript and I didn't want to break them.

Posted in Java at Dec 08 2004, 04:10:27 AM MST 5 Comments

The Future of the J2EE Web Tier

There's a chat in a few hours on the future of the J2EE Web Tier. I'll be sitting in and hoping to learn something. The alignment of the JSP EL and JSF EL will be nice - but we really want HTML Templating for JSF - like Tapestry. After developing Tag Soup JSPs for JSF and HTML-editor-friendly pages for Tapestry, I can say there's definitely a big difference. Tapestry templates are much easier to read. However, if you have an existing JSP app, you can migrate to JSF easier.

Posted in Java at Dec 07 2004, 09:30:02 AM MST 7 Comments

AppFuse - Tapestry and JSF Support in CVS

I've finished the coding part of adding JSF (MyFaces) and Tapestry support to AppFuse. This weekend was spent knee-deep in XDoclet templates - updating AppGen for these two frameworks. I still need to write up a couple of blog posts about integration and update the tutorials, but the hard part is done.

If you're an early-adopter, feel free to check it out. The QuickStart Guide should help you get the source from CVS. I hope to release version 1.7 later this week.

Posted in Java at Dec 06 2004, 05:43:00 PM MST 2 Comments

Helluva Week

It's been a rough one this week. Mainly due to AppFuse. This is the 4th (or maybe 5th) night this week I'm up late working on it. Tonight will be an average night, turning in at 5:30 a.m.. Last night was 6:00 a.m. Abbie likes to wake me up at 8.

The good news is that I have the JSF and Tapestry integration done. I just finished up writing all the programmer tests for the beans/pages and tomorrow (today?) I'll work on Canoo WebTests and installation/appgen/documentation. With any luck I'll finish up and release this weekend.

Next week, I get to write a chapter for Spring Live on MVC Framework integration. I'm also talking about Spring at the local Denver JUG on Wednesday night.

I can't wait for Christmas - 2 weeks in Sunny Southern Florida.

Posted in General at Dec 04 2004, 05:17:50 AM MST 4 Comments

GMail - Spam Filter Quit Working

It started yesterday and continues today. GMail is no longer filtering out spam - I'm getting it all. This means if I leave my computer and check my e-mail a couple hours later - I'm up to 200 new messages, with 1 or 2 that are actually sent to me - the rest are spam. Anyone else experience this GMail meltdown?

Posted in The Web at Nov 25 2004, 10:44:12 AM MST 7 Comments

AppFuse Tapestry/JSF Status

There's 3 phases of adding a new web framework to AppFuse. The first phase is integration and configuration. This is the fun part and involves adding JARs and configuring everything so the framework actually works. At the end of this phase, I'm usually pretty enthusiastic about my progress and think I can finish the whole project in a few more days. Then comes the "features" phase, when I start coding AppFuse features with the framework. This part always takes wwaaaaaaayyyy longer than I anticipate. This is the part where I realise previously done things (from other framework implementations) won't work and I have a long road ahead of me. For instance, with Tapestry and JSF, I have to figure out how to do the following: Country drop-down based on locale (currently a JSP tag, so should work with JSF), multi-select checkbox, and placing an asterisk next to required fields.

The asterisk isn't too hard if you do it the "WebWork way" - where you simply specify required="true" on JSP Tag. However, I'd prefer to have it read from the validation engine, so this will probably take some digging on how to do it with JSF/Tapestry. For the country drop-down, I'll probably have to create a Tapestry Component. I believe both frameworks have a multi-select checkbox component. After working with Tapestry's contrib:Table component for a few hours, I miss the Display Tag. The contrib:Table works, but it's a LOT more difficult to configure than the Display Tag. It also blows up if you click the column headings too many times. Also, it doesn't have any exporting features like the Display Tag. Sure, it might not need them, but a lot of folks have come to rely on these and it's a handy feature. Furthermore, another unfortunate thing I found in Tapestry this morning is it doesn't seem to read the locale from the request. So if you change your browser's language, it won't switch the language. You actually have to logout and kill the session to switch the locale. Bummer.

My main problem with the 2nd phase of the project is choosing whether to "do it right" or "get it done". I often start out just trying to get shit done, but end up being a perfectionist and trying to do it right. This phase took a couple of weeks to get through with WebWork. Ugh - I'd rather just get this stuff done, but I don't think it's gonna happen. I think I'll be working on the "features" phase for quite some time. Oh well, at least I'll learn the ins and outs of each framework.

The final "finishing up" phase is one of the best. It's when everything works and I write the installation scripts and tutorials. This is slightly painful b/c there's nothing new to discover, but it's also nice because there's nothing new to learn or get tripped up on.

AppFuse 1.7 estimated release date? I was hoping for the next couple of weeks, but I'd better stick with the end of the year. I'm sure there's going to be a fair amount of banging my head against the wall in the next few weeks.

Posted in Java at Nov 25 2004, 08:52:13 AM MST 1 Comment

Happy Thanksgiving!

Happy Thanksgiving to all those celebrating today. It's been a great week at the Raible Household. I've managed to squeeze in a few hours for AppFuse/Tapestry/JSF, but mostly I've been building a garage workbench with my Dad. We also setup a "beer fridge" so the garage is now a nice place to hang out. Should be even better when I start disassembling the bus.

I have a lot to be thankful for this year - the new bus, new baby, new house and new book. Abbie is a ton of fun these days, so I owe her a big thanks for all the smiles and laughs. I owe Julie a huge thanks for being so supportive of my "burning the midnight oil" and allowing me to write another book. To my Mom, Dad, and Kalin - you guys rock for always reminding me who I am and where I came from.

I owe my readers a note of thanks for visiting this site and listening to me ramble on about Java and the kick-ass open source tools that make our lives easier. You guys are responsible for the popularity of this site. Finally, I thank Dave Johnson for Roller (which started this site) - which lead to meeting Lance, which led to my first authoring opportunity. A lot of good fortune these days come from this site - I'm still astounded that a simple blog can open so many doors.

Happy Thankgiving!

Posted in General at Nov 25 2004, 08:30:32 AM MST 1 Comment

AppFuse Gig in San Fran

Todd Huss is looking for an AppFuse developer in San Francisco. More details at http://www.craigslist.org/sfc/eng/49835022.html. For those of you who don't know, AppFuse isn't much of a framework itself - it's more of a directory structure and build file that helps glue Hibernate, Spring and various web frameworks together. You can learn more about it by reading this article on java.net.

Posted in Java at Nov 23 2004, 09:59:22 AM MST