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.

Hibernate vs. iBATIS

There's an interesting thread taking place on the iBATIS User Mailing List. The basic jist of the responses are: Hibernate works well when you control the data model, iBATIS works well when you need to integrate with an existing database. I've said this for a couple years now, and I still believe it. Furthermore, I've found that when working with iBATIS, I tend to know what's going on a lot more. After all, it's just SQL. From all the questions on the AppFuse mailing list, it seems like a lot of Hibernate users are constantly trying to get Hibernate to "work its magic" and handle all their relationships for them.

I wonder if newbies would be better of using iBATIS? Using iBATIS, there isn't a whole lot of magic, and you get full control over the SQL - which would likely be easier to understand. Maybe I should create a "newbie" version of AppFuse - where the frameworks uses are the easiest to learn or most documented. It'd probably be Struts+Spring+iBATIS, or maybe just Spring+iBATIS so I could sell more copies of Spring Live. ;-)

Posted in Java at Feb 28 2005, 07:10:25 AM MST 38 Comments

Rails is 8 times slower than Spring+Hibernate

Might as well start off this week by getting people's blood boiling. ;-) According to a comment on Dion's blog:

Having done extensive performance (scalability means different things to different people) testing on both Rails and a comparable Spring/Hibernate/JSP2 webapp (no one seems have have done any sort of benchmarking on Rails, or they simply don't care, I don't really know, but since benchmarking is what I do... :-)) I can say that Apache2/FastCGI/Rails is about... 8x slower than the comparable Tomcat/Spring/Hibernate/JSP2 solution. And that is with caching turned on in Rails (using Rails 0.9.5...)

Quite frankly, 62 req/s on a Dual Opteron with 4GB of RAM rendering a simple view with no DB access is too... damn slow.

Personally, I still think Rails looks like a great (and easy) way to develop webapps. I just wonder if there's some truth to the "can't scale" argument. I guess the best way to find out is for me to develop an application like AppFuse with Rails, and then hammer it (and AppFuse) with JMeter to see what kind of results I get.

On a sidenote, I wonder when Rails will hit the illustrious version 1.0? They released 0.1 last week - which is a bad version number for marketing. If it's as mature as folks claim, why not make the next release 1.0? That version number alone will likely allow developers to use it more in big companies.

Posted in Java at Feb 28 2005, 06:25:27 AM MST 15 Comments

[ANN] Equinox 1.3 Released

This release is mainly a bug fix release, but it also adds support for Maven. All of the frameworks used in Equinox, as well as its build/test system is explained in Spring Live. Detailed release notes are below:

- Added missing "validator" property to "userFormController" bean in Spring MVC version.
- Added "redirect" element to success mapping to user list to prevent duplicate post problem.
- Moved "ctx" variable declaration from decorators/default.jsp to taglibs.jsp so it's available to all JSPs.
- Changed any references to UserDAO in UserWebTest.java instances to use UserManager instead (to prevent problems when transactions aren't used).
- Fixed install scripts in extras so they'd work on Windows from the command prompt. Added "fixcrlf" target for users that encounter issues.
- Added installer for Maven in "extras/maven". This can be used to replace the Ant build system.
- Dependent packages upgraded:

  • Display Tag 1.0
  • Hibernate 2.1.8
  • iBATIS 2.0.9b.550
  • JPOX 1.1.0-beta-1
  • Spring 1.1.4
  • Tapestry 3.0.2

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

Demos:

Rather than uploading the different combinations that are possible with Equinox, I figured I'd just wait for requests. So if you'd like things like Tapestry+Spring+JDO, or JSF+Spring+JDBC, let me know and I'll upload a pre-built version of 1.3.

Posted in Java at Feb 27 2005, 05:55:21 PM MST 17 Comments

Table-less forms for your webapp

The Man in Blue has some nice form layouts using fieldsets, labels and CSS. I think I'll integrate one of these styles for the forms in AppFuse. I've always stuck with tables for layout because it seemed easy, but I really like the look and flexibility that CSS provides.

Posted in Java at Feb 26 2005, 03:53:01 PM MST 6 Comments

Updating Pro JSP for JSP 2.1

Apress recently contacted me about updating Pro JSP for JSP 2.1. While the fame of having 3 books published is tempting, I think I'm going to have to pass. The Security chapter I wrote could probably use some updates, but I just wrote a Security Chapter for Spring Live - and I don't really feel like writing another. The other chapter, titled "Using Struts, XDoclet, and Other Tools", would be fun (since it's about AppFuse and Struts Resume), but I'd probably try to squeeze way too much into 50 pages.

Maybe I could just %s/Chapter 11 in Pro JSP/Chapter 12 in Spring Live and %s/Chapter 12 in Pro JSP/Chapter 2 in Spring Live and show folks how to use Struts+Spring+Hibernate. ;-)

Posted in Java at Feb 25 2005, 08:57:42 AM MST 1 Comment

JBoss ClassLoader Logic

Is there any logic to how JBoss puts all WARs, EARs and their accompanying JARs into the same ClassLoader? It seems logical that I should be able to deploy different versions of a JAR in different WARs. This works fine on Tomcat, but doesn't seem to on JBoss. Is there someway to turn this segmentation on?

Posted in Java at Feb 25 2005, 08:00:36 AM MST 11 Comments

There's nothing like...

I got up at the crack of dawn (4:00) this morning. For the first time since the 2nd week in January, I drove to work instead of riding my bike. We have a deadline and the software needs to be ready for production tomorrow. We don't want to stay late tonight, so we figured coming in early would be a good idea. So what happens when I get here? The server that we talk to for all our data is down. Figures - should be a good 3-4 more hours until it's up again. A wasted morning for productivity.

Hmmmm, that's strange. This post's published time shows up as 4:02 a.m. - but it was really 5:02 when I posted it.

Posted in General at Feb 24 2005, 04:02:32 AM MST 4 Comments

Remember Me works on JRoller!

JRoller has upgraded to Roller 1.0.1 and Remember Me is finally working! Since I'm the one who added this feature - please let me know if you find any issues with it. The last time we deployed it to JRoller, it ended up being a huge security hole and you could log into other people's accounts. Doh! Sorry about that. Hopefully it won't happen this time. ;-)

If you want to know how this feature is implemented, see AppFuse's Remember Me documentation.

Posted in Roller at Feb 21 2005, 04:55:18 PM MST 3 Comments

Going to Redmond

I've decided to attend the Microsoft Conference in a few weeks. The good news is I got approval (from Microsoft) to blog the whole thing - even during the event. So you, my dear readers, will know as much as I do after this shindig. Furthmore, they agreed to let me cut out early. My sister's birthday is St. Patty's day (Thursday) and she's going to pick me up so we can head to my parents (in Oregon) for the weekend. A couple days with the folks and then I fly back to Denver on Saturday. Sounds fun.

Posted in Java at Feb 21 2005, 03:02:05 PM MST 2 Comments

RE: Ruby on Rails Koolaid

David Geary on Ruby on Rails:

Interestingly enough, ROR creates default views for your db tables. Cool. But after I thought about it for a minute, I came to the conclusion that that feature is certainly close to useless: It's nice to get you up and running, and great for seductive demos and articles, but you're going to override at least 100% of the views that ROR generates. And therein lies the rub...

...because views in ROR are a mixture of HTML and Ruby scriplets! We've been there before, of course, in the early days of JSP with HTML mixed with Java scriptlets. No thanks, I'll pass on that giant step backwards.

I've thought about this myself. I think David is right, but only to a certain point. Ruby on Rails (and its scriptlet-ridden views) will work until they get HTML designers in their writing Ruby code. Furthermore, when companies start off-shoring their Ruby development, that's when it gets ugly. JSP scriplets were a disaster because you had HTML developers writing Java code, and using if statements that exceeded the 64K block and such. JSP scriplets are hard to maintain when they're used and abused. I've seen a lot of code (especially the off-shored stuff) that has very ugly and unmaintanable scriplet code. However, using scriptlets in JSPs isn't a bad thing - it's only bad if you're coding business logic and/or, using lots of Java code in them, or having JSPs that are scriplet-only pages.

However, I believe Rails is a bit different. Not only does it enforce MVC from the get-go, but you can't use the views stand-alone (can you?). With JSPs and Servlets, you have the opportunity to use JSPs only - which encourages scriptlets. I do wish that Rails' templates used the ${...} syntax that JSP, Velocity and FreeMarker enjoy - the <% %> syntax brings bad bad thoughts of 1000+ line JSPs.

Oh, and one last thing - for David and Rick (the JSF-is-the-best-thing-since-sliced-bread-duo). At least Rails allows HTML in its view templates. JSF developers don't even get to see HTML anymore - poor guys. ;-)

Posted in Java at Feb 21 2005, 09:55:25 AM MST 4 Comments