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.

Which Ajax enabled framework should you use as an Enterprise Java developer?

Paul Browne asks (and answers) "which Ajax enabled framework should you use as an Enterprise Java developer?":

Pre Ajax, the answer to 'which Java presentation framework should I use?' would have been Apache Struts. Not because it was technically better than any of the other frameworks (although feel free to leave your comment!) but because everybody else is using it. This meant
(a) using Struts is good for your client, as they can replace you if you get run over by a bus and
(b) using Struts is good for you, as you can take your Struts skills to your next piece of work.
However , in this strange new Ajax and Web 2.0 world, things are beginning to change. Javascript gone from 'has been kiddie scripting language' to 'coolest thing on the planet'. User expectations about what Enterprise Web applications can are going through the roof as Web 2.0 enters the mainstream. What Java framework are you going to use to deliver these expectations?

Paul goes on to show you how he researched the Ajax-enabled Java frameworks that are currently available and gives a set of criteria he used. His conclusions?

  • Use AjaxAnywhere if you need to add Ajax functionality to an existing Struts application.
  • For new applications with Ajax, use AppFuse. While he recommends the Struts version, I recommend using the other flavors first (Spring MVC, WebWork, Tapestry or MyFaces). ;-)
  • For the future (which I believe is what he means by medium-term), use a JSF implementation. AppFuse currently uses MyFaces, and it's likely we'll keep improving that (possibly with a Shale front-controller or some nifty things the Spring team has been adding).

Posted in Java at Mar 02 2006, 12:16:14 PM MST 17 Comments

Sun's Guerilla Cannibal Team

James Governor:

... Sun would do well to build a new team tasked with putting pressure on its own software portfolio. This disruptive influence would ideally eschew technologies associated with the Java Enterprise System. Instead it would concentrate on other issues such as establishing a business model for the Roller blogging platform, or working out a non-virtual machine story for scripting languages. Doing cool things with Rome and Atom. Focusing on mashups, Web 2.0, Read/Write and programmableweb and new ways of getting things done. Oh yeah - AJAX.
...
So who is on the A-Team, in my view?

  • Hal Stern - Hal is a playful, but could play the role of Corporate Guy on the guerilla team. As a Sun Services representative he can bring some very useful resources to the table. Many of the new approaches in web 2.0 require hosting. That's a potential services play. Note that IBM Global Services doesn't like hosting easy software that doesn't require a lot of expensive customisation.
  • Simon Phipps - Simon is currently Sun's chief open source officer. Perhaps counterintuitively, as the rest of the industry begins to realise that Sun isn't "out out get" OSS, his role may become less, rather than more, important. A successful open source strategy requires less top down management of issues. So why not free up Simon to do what he does best. Contrarian Evangelism.
  • Tim Bray - developers respect Tim almost without reservation (although his championing of ATOM has left some people scratching their heads). He even thinks of himself as the honourable opposition. Needs to be on the team because he has a visceral dislike of space architecture and WS-I.
  • Dave Johnson - the developer behind Roller. He just gets the new new thing, and he builds stuff, rather than talking about it.
  • Matt Raible - doesn't work for Sun, but works well with Dave. And RedMonk just likes him...

It's not every day you get listed with a line-up like that! Like Simon Phipps commented - where should I send my resume? Looks like I owe the RedMonk guys a beer or 6. ;-)

Posted in Java at Mar 01 2006, 05:45:33 PM MST 4 Comments

DbUnit Tip: Turn off foreign key constraints when importing into MySQL

One of the issues I've had with using DbUnit is getting tables to load in the proper order from XML. The XML datasets I use to load table data are flat and don't really have any notion of foreign keys and such. Therefore, when you get into a situation where tables have a circular reference, using DbUnit can be a real bitch. I ran into this situation yesterday.

Luckily, I was able to figure out a solution thanks to the help of Mark Matthews. Just add "sessionVariables=FOREIGN_KEY_CHECKS=0" to your JDBC URL. Here's how the "db-load" target in AppFuse looks with this in place:

    <target name="db-load" depends="prepare"
        description="Loads the database with sample data">
        <property name="operation" value="CLEAN_INSERT"/>
        <property name="file" value="metadata/sql/sample-data.xml"/>
        <dbunit driver="${database.driver_class}"
            supportBatchStatement="false" 
            url="${database.url}&amp;sessionVariables=FOREIGN_KEY_CHECKS=0"
            userid="${database.username}" password="${database.password}">
            <operation type="${operation}" src="${file}" format="xml" transaction="true"/>
        </dbunit>

    </target>

Does your preferred database have a similar mechanism for turning off foreign key checks using the connection URL?

Posted in Java at Mar 01 2006, 04:16:48 PM MST 25 Comments

Why I like Tomcat 5.5.12 better than Tomcat 5.5.15

Here's what happens with Tomcat 5.5.15:

alotta:~/dev/appfuse mraible$ export CATALINA_HOME=$TOOLS_HOME/apache-tomcat-5.5.15
alotta:~/dev/appfuse mraible$ ant deploy;tstart
Buildfile: build.xml

...

deploy:
    [unwar] Expanding: /Users/mraible/Work/appfuse/dist/webapps/appfuse.war into
 /opt/dev/tools/apache-tomcat-5.5.15/webapps/appfuse

BUILD SUCCESSFUL
Total time: 3 seconds
Using CATALINA_BASE:   /opt/dev/tools/apache-tomcat-5.5.15
Using CATALINA_HOME:   /opt/dev/tools/apache-tomcat-5.5.15
Using CATALINA_TMPDIR: /opt/dev/tools/apache-tomcat-5.5.15/temp
Using JRE_HOME:       /Library/Java/Home
alotta:~/dev/appfuse mraible$ ant reload
Buildfile: build.xml

reload:
   [reload] FAIL - Encountered exception java.lang.NoClassDefFoundError: 
org/apache/log4j/spi/VectorWriter

BUILD FAILED
/Users/mraible/Work/appfuse/build.xml:1063: FAIL - Encountered exception 
java.lang.NoClassDefFoundError: org/apache/log4j/spi/VectorWriter

Total time: 1 second
alotta:~/dev/appfuse mraible$ 

Here's what happens with Tomcat 5.5.12:

alotta:~/dev/appfuse mraible$ export CATALINA_HOME=$TOOLS_HOME/apache-tomcat-5.5.12
alotta:~/dev/appfuse mraible$ ant deploy;tstart

...

BUILD SUCCESSFUL
Total time: 4 seconds
Using CATALINA_BASE:   /opt/dev/tools/apache-tomcat-5.5.12
Using CATALINA_HOME:   /opt/dev/tools/apache-tomcat-5.5.12
Using CATALINA_TMPDIR: /opt/dev/tools/apache-tomcat-5.5.12/temp
Using JRE_HOME:       /Library/Java/Home
alotta:~/dev/appfuse mraible$ ant reload
Buildfile: build.xml

reload:
   [reload] OK - Reloaded application at context path /appfuse

BUILD SUCCESSFUL
Total time: 3 seconds
alotta:~/dev/appfuse mraible$ 

Looks like I'll be sticking with 5.5.12 for the foreseeable future.

Posted in Java at Mar 01 2006, 12:17:13 PM MST 10 Comments

Canoo WebTest Firefox Plugin

Canoo WebTest now has a Firefox plugin, similar to Selenium IDE. I gave it a 2-minute test using Deer Park (a.k.a. Firefox) on my MacBook Pro. Thumbs down, not intuitive enough. Of course, if it had a video like Selenium's video, it might be easier to figure out.

Posted in Java at Mar 01 2006, 11:54:20 AM MST 1 Comment

Nice Weather

Yesterday was 70°F, today is going to be even nicer. You couldn't ask for nicer weather for the ol' bike commute. ;-)

Today's Forecast

Posted in General at Feb 28 2006, 08:17:44 AM MST 6 Comments

Roller on Geronimo

Geronimo Homepage Jeff has posted a nice tutorial showing how to run Roller on Geronimo. Note that he's using a HEAD build of Geronimo, so you might have to build Geronimo yourself or wait for the next release. I've heard rumors the next release will ship with a Web-only version (i.e. Tomcat and JMS), so that might be a good fit for Roller. As for pre-compiling JSPs, that's on my to do list.

There's been a few "how to run Roller (or AppFuse)" on X server lately. IMO, the best howto is no howto - it just works. I recently tried AppFuse 1.9 on JOnAS and it ran w/o any changes. Since it uses a Spring-managed connection pool and doesn't require any server configuration, this is how things should work. I've had similar results with AppFuse on Jetty and JBoss (and Tomcat of course).

Posted in Roller at Feb 27 2006, 04:23:30 PM MST 3 Comments

MacBook Pro and Wireless

The only major issue I've had so far with my MacBook Pro is wireless connectivity. It works fine at my office, works great at Starbucks, but not at home. My router is a Netgear WGT624.

The Netgear works flawlessly with my Windows XP Desktop (HP Pavilion 1250n) and PowerBook G4. It works with no password, 40-bit WEP and 128-bit WEP. But not with the MacBook Pro. Is there something special I have to set on my router for it to work with the MacBook Pro?

I posted this question on the Apple Discussion forums yesterday (which appear to be powered by Jive Forums). The response? Crickets. Oh well, I think I'll just leave my MacBook at the office and ignore this issue for now.

Update: Looks like Apple is aware of many issues with the MacBook Pro. Hat tip to Jeff for the article.

Posted in Mac OS X at Feb 27 2006, 09:46:39 AM MST 73 Comments

OpenLaszlo Tutorial and AppFuse with DWR

A few web development nuggets:

I also noticed a recently updated howto on the AppFuse wiki: Spring Rich Client with AppFuse by Radim Burget. The amount of documentation being produced by the AppFuse community is truly awesome. Thanks everyone!

Update: XFire is crazy fast. If you like, you can see for yourself in AppFuse using OpenLaszlo as a client. Hopefully we can include XFire in a coming release, along with Maven 2 integration.

Posted in Java at Feb 25 2006, 03:52:23 PM MST 4 Comments

Smashed Fingers

Daddy and Jack Today we took the kids to Dave & Buster's for lunch. They're not quite old enough, but they do good. Abbie and I race cars and she can't even touch the gas. After a few seconds of waiting, her car takes off and she's driving - hooting and hollering the whole time. Jack isn't quite tall enough - he can peer over the edge and see a bunch of coins in the machine - but has no idea what it does. He does know that the machine takes coins - and loves putting them in. When he won 100+ tickets today, he was ecstatic - pulling the tickets out and giggling to himself the whole time.

I carried both kids to the car on the way out. We have a Honda Odyssey mini-van (they might be cheesy, but they make awesome cars - spoken like a true dad, eh?). Holly opened the door with the remote. It stopped after opening a few inches - and I reached to open it manually. As soon as I got my fingers around the door, it shut. Youch! I screamed like a little girl. After a few seconds, Holly was smart enough to open the front door and I pulled them out. No dropped kids, which was pretty impressive. It's been a couple hours since then. It was only two fingers, but one is still numb. The good news is I'm still able to type - but they're still throbbing.

Posted in General at Feb 25 2006, 03:37:03 PM MST 7 Comments