Matt RaibleMatt Raible is a writer with a passion for software. 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 "framework". 558 entries found.

You can also try this same search on Google.

Updated Presentations: Spring, AppFuse and Comparing Web Frameworks

As part of my trip to Norway last month, I had an opportunity to update many of the presentations I've delivered at JUG meetings and conferences. Of course, there's not a whole lot to these slides because I believe the real value is seeing them delivered. ;-)

The presentation on Test-Driven Development with Spring and Hibernate (a.k.a. AppFuse) will serve as the basis for my AppFuse Tutorial at OSCON. If you're planning on attending that tutorial and would like to see any enhancements, please let me know. All of these are downloadable in PDF format.

Enjoy!

NOTE: I updated this site to the latest code from Roller's CVS this morning, so please let me know if you see any issues.

Posted in Java at Jun 07 2005, 12:36:43 PM MDT 4 Comments

AppFuse 2.0: JDK 5, Annotations and JSP 2.0

For the most part, I haven't used JDK 5 on any of my recent projects. You can compile and run AppFuse with JDK 5, but it doesn't use any JDK 5 features. After doing a code review at Bouvet last week and seeing how much cleaner their code is with Generics, Varargs and the Enhanced for Loop, I think it's time to dig in. I don't know how soon we'll start, but I think it's time to start creating a branch for AppFuse 2.0 - which will use these features. For AppFuse 2.0, I'd like to go whole hog, bleeding-edge and use all the stuff that's out there to make developer's lives easier. This includes JSP 2.0, Annotations (especially for Hibernate and Spring, as well as Tapestry) and all the JDK 5 features that seem useful.

Since most developers won't be able to deploy on a JDK 5-compliant server for quite some time, we'll continue to maintain the 1.x branch as JDK 1.4-compliant. I expect to release AppFuse 1.8.1 later this week (with mostly bug fixes + latest releases of Hibernate/Spring) and 1.9 in the next month or so. From there, we'll likely do 1.9.x releases with bug fixes and do all the major upgrades (i.e. Tapestry 4.0.x) in the new branch. Working with new features in JDK 5 should be a lot of fun.

I'm hopeful that we can get rid of XDoclet and we may even give Maven 2 a run for its money. Last week in Norway, I found that most Java developers were using Maven on their projects and I also discovered that many of the core Maven 2 developers are getting paid to work on it full time. There were even claims that Maven 2 is going to be twice as fast as Ant - which definitely intrigues me.

Later: I just realized the hardest part of this migration is going to be replacing AppGen. It currenly uses XDoclet templates for all the class templates - and we'll need a new solution based on annotations. Oh well, it's kind of ugly anyway, but it'll likely be difficult to figure out a new solution. Hopefully we can create some sort of tool that involves easy-to-customize templates and a GUI to drive it all.

Posted in Java at May 30 2005, 12:41:52 PM MDT 27 Comments

Norway Rocks!

Norway has to be one of the coolest places on Earth. I've been here for a week now, and I'm definitely impressed. I didn't know what to expect when I left the U.S. - mostly because my last trip to a non-English speaking country was to Russia in the mid-90s. When I went to Russia, I thought it'd be a lot like the U.S. What I found was a beautiful country that was struggling to survive. I wasn't expecting a whole lot from Norway.

I'd heard it was modern, but I wasn't going to get my hopes up. When my laptop died on the way over, I thought I was in for it. I figured they probably didn't sell PowerBook cords over here, so I was screwed. Luckily, I was wrong. Unfortunately, I had to buy a whole new laptop - but it has been quite nice using a faster machine (1.67 MHz / 1.5 GB RAM) this week, with Tiger and all that jazz.

This week has definitely been tiring. I've given a fair amount of presentations in my life, and even done a few week-long training course. However, I've never talked as much as I did this week. I did a total of 7 sessions on Spring this week, at 3 different companies and 2 different JUGs. It was a lot of work, but it was also fun to meet so many enthusiastic Java Developers. Preaching the Spring gospel is pretty easy since it's such a kick-ass framework.

So what about Norway? It's very modern. In many ways, it's more modern than the U.S. It seems cleaner, the people are nicer, and apparently there's little crime and/or poverty. This is readily apparent from the moment you get off the plane. There's a "bullet train" from the modern/cool-looking airport into downtown Oslo. It takes about 20 minutes, and then you're wisked away into a historic city by the sea. I dig the train.

I've been staying at the Hotel Stefan in downtown Norway Oslo, which is about 5 blocks from the main courthouse and lots of historic buildings. I'm a block away from a castle too! The funny thing is all the westernization - there's a TGI Fridays down the street and Star Wars is playing at the local theater. Taxis are very cool - most of which are new Mercedes. The only downside I've seen so far is the beer is pretty expensive ($10/each).

I've taken a few pictures and hope to take several more while sipping on seome cold ones with the locals tonight. I'll try to upload the whole batch later this evening or tomorrow morning. My flight leaves at 11 a.m. and I'll be back in the Denver tomorrow night. The 16-hour flight home is going to be rough - good thing it's in first class. ;-)

Posted in General at May 27 2005, 09:22:32 AM MDT 27 Comments

A CSS Framework

Mike Stenhouse's CSS Framework seems like it might be a good candidate for inclusion in AppFuse. In his article about this framework, he basically says that there are 6 basic layouts that "cover most of the blogs out there and most of the corporate sites as well". He shows you how it's possible to use a single XHTML page, and use CSS to achieve all of these layouts w/o changing your HTML. This is huge IMO because you can accomplish all the different layouts w/o changing your markup. Very cool. Hat tip to CSS Beauty.

Posted in Java at May 23 2005, 10:26:01 AM MDT 15 Comments

Java Jobs: broken down by web framework

I updated my Web Framework Comparison presentation today. Rather than updating the graph that shows today's job availability, I did one that compares today to 6 months ago. Struts is still the clear winner (and growing). Spring is definitely growing. Tapestry has about the same amount of jobs (9 vs. 8). WebWork lost 10 opening (down to 4) and the demand for JSF skills has grown as well.

Is WebWork a dying framework? I've heard folks complain about its small community, and there still aren't any books is only one book about it. Is that a jab at Patrick, Jason and Kris - or a jab at Manning? I'm not sure. ;-) The good news is WebWork in Action and WebWork Live should both be out this summer.

Web Framework Jobs

My search criteria for all of these was "framework and java" from the front page on dice.com. I did filter a bunch out for WebWork b/c there's some product called "WebWorks" that folks want to hire for.

In my own experience, these numbers are not as accurate as you might think. Since I gave my original presentation, I've been contacted a number of times to work on projects. It's about even between Struts, Spring MVC, WebWork and JSF. I haven't had a single inquiry to do Tapestry development. The bad part about Struts jobs is there's so many of them, that rates are likely pretty low (i.e. 35-45/hour), whereas the others can get you upwards of 80-90/hour.

So what do these numbers mean? Do they mean you should tailor your learnings and skills to the most popular frameworks? In a sense, it's important to do so. If nothing else, Struts skills are import so you can migrate all the Struts applications to your favorite framework. However, I don't think these numbers are that important when choosing a framework to start your project with. I think the most important thing in choosing a framework is passion. Which one do you want to work with the most? It's likely that your productivity will be higher if you're enthusiastic about the framework, rather than bored with all the skills you've accumulated using it. Then again, if you're motivated by productivity more than enthusiasm - using your skills to crank out applications quickly is probably a good idea.

You might think that the number of skilled developers for framework X is important too. I don't think it is. I think the most important thing is to hire smart developers. A good developer can come up to speed on any framework in 2 weeks and be highly productive in 4 weeks. If not, the developer isn't that smart or the framework isn't that good. ;-)

Just for kicks, I did some searching for other web frameworks as well:

  • Rife: 0
  • Wicket: 0
  • Echo: 3
  • Ruby on Rails: 1
  • ASP .NET: 2876

Now the question is - what kind of rates are these skills getting? I'd like to know what the average Rails and ASP .NET developers make. In Denver, Java developers seem to make between 65-85/hour when they're experienced contractors.

Posted in Java at May 22 2005, 07:28:01 AM MDT 13 Comments

Passport Expired

It figures. I'm supposed to leave on Friday for Norway and I waited until today to check the expiration date on my Passport. It expired in January of this year. That gives me 3 days to try to get it renewed before my flight takes off. This site makes it look like it ain't gonna happen, but I'm hopeful. There's a fair amount of walk-in places in Denver that do on-site photos.

Let me know if you have any tips or have been through this process yourself.

Update: Thanks to David Carter's suggestion, I found American Passport and should have a new passport on my doorstep Thursday morning. :-D

Update 2: Passport has arrived!

Posted in General at May 16 2005, 09:54:34 PM MDT 25 Comments

[Colorado Software Summit] Spring and Comparing Web Frameworks

I'm pleased to announce that I'll be speaking at the Colorado Software Summit in October. I'll be doing a presentation on Spring and one on Comparing Web Frameworks. The abstracts are on my very own speaker page. I've never been to this conference, so I'm definitely looking forward to it - especially since it's only an hour away from my house. The only downside to the conference (for speakers) is you have to deliver each presentation 3 times. Of course, this is great if you're an attendee. Now I just need to figure out a way to get SourceBeat to sponsor my condo for the week. ;-)

I originally did my Web Frameworks Comparison (PDF) last year at ApacheCon. I'm looking to revamp it this year - so please let me know if have any suggestions for improvements.

Colorado Software Summit

Posted in Java at May 08 2005, 01:12:17 PM MDT 13 Comments

AppFuse Videos

I know I said I'd never do an AppFuse video, but after having many requests - I decided to go ahead and make a couple. The first one is a demo of creating a new project and then installing and browsing that project in your browser - to see all the out-of-the-box features.

The 2nd one basically all the stuff that's done in the tutorials - using Spring MVC for the web framework. I create a Person.java object and then use AppGen to generate all the code for it. In this one, I make a number of mistakes (but solve them all). I thought about going fully happy-path, but then decided it was important to show some gotchas that might occur.

I used the trial version of Camtasia Studio to create these videos. Thanks to Keith at KGB Internet for hosting the demo site for AppFuse. If you need Tomcat hosting, Keith offers an excellent service at a very good price.

Update: You can also download these videos for off-line use.

Update 2: I updated these videos for AppFuse 1.9.3.

Posted in Java at May 04 2005, 09:48:40 AM MDT 32 Comments

[ANN] AppFuse 1.8 Released!

This release of AppFuse replaces Container Managed Authentication (CMA) with Acegi Security. Other major features include numerous bug fixes to AppGen and a refactoring of build.xml to use Ant 1.6 features. Eclipse and IDEA project files were also improved so you can easily run tests from within your IDE. A MyJavaPack all-in-one installer was also added so you can download everything you need for AppFuse at once. Eclipse and its plugins were not included in the initial release, but may be in a future release.

If you find any issues, let us know.

Update: You can now see Demos and Videos.

Posted in Java at Apr 29 2005, 08:51:08 AM MDT 11 Comments

Using DWR with Spring and Hibernate

For the past few weeks, I've been developing an application using Struts, Spring, Hibernate and the DWR project for my XmlHttpRequest framework. As you might remember, I used JSON-RPC for Ajax stuff on my last project. I found DWR to be much more full-featured and easier to use. This post is meant to capture some issues I encountered so others won't have to jump the hurdles that I did. For those of you that get bored quickly, here's a movie (QuickTime) of the app's Ajax features.

I've been using version 0.4 of DWR, and I haven't had a chance to try out version 0.5. When I first started using it, I ran into a ThreadDeath problem that was easily resolved by changing a log.debug message to System.out.println. I tried to reproduce this issue yesterday and couldn't, so who knows what that was all about. As far as configuring DWR in your webapp, that's pretty easy to do, and well documented. See the project's documentation or this Spring MVC HowTo.

Here are a few things I remember from my development experience.

  • The examples are great, especially how to dynamically edit a table.
  • When developing, make sure to set the "debug" init-param to "true". This allows you to go to http://location:8080/yourapp/dwr and see a screen that allows you to call methods on your exposed classes.
  • In WEB-INF/dwr.xml, you need to specify a converter for each POJO you want to expose to your UI via JavaScript. I started out by converting a whole package, but found this to be *extremely* slow (we have a package of around 50 DTOs). So I changed it to be only the DTOs I was using. This turned out to take about 30 seconds to do the conversion, and was again unacceptable. The problem turned out to be that the converter was invoking all the lazy-loaded children for each DTO. My final solution was to create a NameValue object and only convert that. Then in my Spring bean, I populate it from DAOs and DTOs. I'm using Spring's OSIVF for Hibernate to ensure that DWR doesn't invoke lazy-loading.
  • I had to override a few of DWR's JavaScript functions in util.js b/c they didn't work for me. I changed showById() and toggleDisplay() to use style.display='' instead of style.display='block' b/c this is what I've always used and block doesn't work that well. I also changed useLoadingMessage() to have a cleaner-looking load message.
  • I used the Fade Anything Technique in this project and found that IE likes to have full 6-digit hex values for colors in CSS rules. The shorter 3-digit hex values simply don't work in IE.
  • Using "test" buttons that only showed up for my username proved to be a great way to test the UI and the Ajax stuff. These buttons called a number of JavaScript functions to drive the UI and wait between invoking different functions using window.setTimeout.

All in all, using DWR was a great experience and I definitely plan to use it more in my projects. The client loves the app - especially since it's wicked fast and seems to work like a desktop app.

Posted in Java at Apr 28 2005, 02:10:26 PM MDT 31 Comments