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.

Web Framework Comparison Whitepaper

Working at Virtuas in June was really a lot of fun. We worked a fair amount preparing for JavaOne, and also found time to work on a number of whitepapers. These whitepapers are part of an Open Source Landscape Series that has been posted to Virtuas's site. For your convenience, here's a current list:

In addition to the whitepaper, I also wrote an article for JDJ that'll be showing up in the July issue.

Posted in Java at Jun 30 2005, 07:54:10 PM MDT 8 Comments

[JavaOne] Web Frameworks and Birthday Celebrations

Yesterday was a fun afternoon. James Goodwill and I sat in the same room for 3 hours and watched 3 different presentations: Tapestry in Action, JSF and Spring and the Web Framework Smackdown. The Web Framework Smackdown was particularly enjoyable. It was great to see all the framework guys "duke it out" and there were plenty below the belt comments. After that, we hit a bunch of the Birthday Celebration festivities, including Free Booze, an Art Auction and Dennis Miller. Unfortunately, we missed Zepperella - an all-female Led Zeppelin cover band.

Following JavaOne festivities, we met up with the Geronimo guys - only to discover they had just passed the TCK for J2EE 1.4. This resulted in many hours of celebrating and good times. As usual, I took plenty of pictures.

James and Floyd

Today I slept in because I know I won't get any sleep when I get home (parents with small children hardly ever get to sleep much). I attended the Web Tier Expert Group meeting this afternoon, which was really great. We had folks from JSF, JSP and the Servlet teams, all trying to figure out what's next and what we need to do to make web development in Java easier. There were a lot of great ideas, and the next versions of all 3 specs should really improve things.

Posted in JavaOne at Jun 30 2005, 07:44:37 PM MDT Add a Comment

[JavaOne] Tapestry in Action

Last night was much milder than the previous night, and I actually feel pretty good today. I'm sitting in Howard's Tapestry in Action session, having just missed the session on Shale. This is a introduction to Tapestry, but it seemed like the most interesting session for this time slot.

Yesterday was a long day, mainly because of the Bomb Squad festivities from Monday. I did a book signing and actually managed to sign a few books. Spring Live is now #11 on the best sellers list at JavaOne.

Last night was a good time. We hit the Mergere party and learned a bit about Maven 2. It was cool to learn that Ant 1.7 is going to include Maven 2's dependency resolution. From there, we tried to go to a session on APT, but the room was packed and lacked A/C, so we bailed. From there, a whole slew of us (from Virtuas) went to a Southeast Asian restaurant that served excellent food, family-style, for hours on end. We hit the Tangosol+Solarmetric party after that and closed down the place. Click on the image below to see a bunch of pictures from the event.

JavaOne 2005 - Tuesday

Tonight, there's a big party at Moscone - complete with comedian Dennis Miller.

Posted in JavaOne at Jun 29 2005, 02:30:58 PM MDT 2 Comments

[JavaOne] Pictures from Monday

Click on the image below to see a bunch of pictures from the first day at JavaOne.

Posted in JavaOne at Jun 28 2005, 07:32:16 PM MDT 5 Comments

[JavaOne] Experiences with the 1.5 Language Features

This is the last session I plan on attending today, and it's titled "Experiences with the 1.5 Language Features: Tips and Techniques" by Tim Hanson and Jess Garms of BEA. Tonight looks to be a good time with the JBoss Party, Java Blogger Meetup (@ Thirsty Bear), the Pavilion Party. Times for the events are 5-9, 6-8 and 6:30-8. This conference is definitely packed, and I expect the parties to be the same. In other words, the best part of this shindig is yet to begin. ;-)

This talk is about how to make effective use of the new 1.5 Language Features in your applications.

For Each Loop: Initialization expression is evaluated once (unlike former). Major limitation of using the new for each loop is you don't have access to the index or the iterator.

Annotations: Built-in annotations - i.e. @SuppressWarnings("deprecation"). Possible values: all, deprecation, unchecked, fallthrough, path, serial, finally. This annotation is not supported in the latest version of Java 5, it is supported in Mustang and Eclipse 3.1. @Deprecated is another built-in annotations. If you use this tag, you should use the @deprecated javadoc tag as well. Last one is @Override, which is used to indicate that a method declaration is intended to override a method declaration in a superclass. If the superclass signature changes, this annotation will make sure you change it in child classes.

Annotations are especially useful for frameworks (i.e. EJBs, Web Services, etc.). Not a preprocessor, not a silver bullet.

Enums: Better than static final int. Type-safe. Utility classes: java.util.EnumMap and EnumSet. Public static final int-like behavior: Comparable, statically importable (even as an inner class).

Varargs: Special syntax for cleaning up code. Allows you to use "String... args" instead of a whole slew of methods that take multiple arguments. Use them sparingly - avoid code that casts.

Covariant Returns: Replaces three anti-patterns.

Using Generics: Example from Collections - static List Collections.singletonList(T o). There is a two-pass inferencing process to determine what T is. Other Generified classes: Class (public T newInstance()), Comparable (public int compareTo(T o)), Enum> (public Class getDeclaringClass()). You can also use wildcards with generics, which has a syntax of List instead of List. This allows you to specify subtypes, and not be tied to a strictly typed solution. Wildcards are great to use in APIs and to hide implementations from users.

I give up - this guy has been going on about Generics for far too long. Time to go hunt down some parties.

Posted in JavaOne at Jun 27 2005, 06:20:51 PM MDT 1 Comment

[JavaOne] Programming Puzzlers with the Google Guys

I'm sitting in a session titled "Yet More Programming Puzzlers" by Joshua Block and Neal Gafter. The other two sessions I chose for this time slot were Groovy and EJB 3. The main reason I chose this session is I've seen these guys in action before and they're excellent speakers. As part of this conference, I'd like to learn a bit about technology - but I'm more interested in becoming a better speaker. This is only my second of the day, with the first being the general session this morning. The afternoon has been spent networking, doing some Virtuas booth time, and presentation a short talk on AppFuse on the java.net booth.

In other news, it's pretty cool to see that BEA is going to start supporting Spring and Struts in its tools and servers.

The BEA WebLogic Workshop and other tools will be designed to allow applications to be built or blended from leading open source frameworks, including Apache Beehive, the Spring Framework and Apache Struts, and can then be deployed on BEA WebLogic Server. BEA will also certify the BEA WebLogic Workshop tools for Apache Geronimo and Apache Tomcat.

The Google Guys session? Entertaining and packed. All chairs were filled and many people were standing in the back and on the sides.

Posted in JavaOne at Jun 27 2005, 04:19:38 PM MDT 1 Comment

Made it to JavaOne

I arrived in San Francisco at 8:30 this morning, and headed downtown to the Moscone center. I've been sitting in the "General Session" room for the last couple of hours, and there's been some interesting announcements. You can get a Sun Ultra 20 Workstation for $30/month and it comes with a 90-day money-back guarantee. The guy on stage made it sound like a screaming machine, but it was also a Sun sales pitch.

Another announcement is they're dropping the "2" from J2EE and J2SE. Now we're not supposed to say the "J", but rather "Java". Now it's called "Java EE". I think the 2 needed to be dropped, but I think it'll take a while before Java EE has the same ring as J2EE. I can already see folks calling it "Java, eh".

Posted in JavaOne at Jun 27 2005, 12:02:17 PM MDT 4 Comments

[ANN] Equinox 1.4 Released

This release is mainly to support Spring 1.2.1 and Hibernate 3.0.5. The default database is now PostgreSQL because of an issue with Hibernate 3 and HSQL. 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 "typeMismatch.java.util.Date" key to messages.properties (for Spring) to display a friendly error for invalid dates.
- Changed to use PostgreSQL as the default database because of an issue with HSQL and Hibernate 3.0. Read more »
- Added "clear" target to build.xml for clearing out the database.
- Added MySQL JDBC Driver and jdbc.properties.mysql for easy switching to MySQL.
- Changed UserWebTest (jWebUnit test) to get lastInsertedId from UI using HttpUnit rather than using UserManager (Richard Easterling).
- Changed spring-sandbox.jar to springmodules-validator-0.1.jar since Commons Validator support for Spring has moved to the Spring Modules project.
- Changed all Spring XML files to use new "value" and "ref" attributes.
- Dependent packages upgraded:

  • Cargo 0.5
  • Log4j 1.2.9
  • Hibernate 3.0.5
  • iBATIS 2.1.0
  • OJB 1.0.3
  • Spring 1.2.1

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

Demos:

The basic Equinox download contains all the various web and persistence framework options in the "extras" folder. If you have issues replacing the web or persistence framework (or both), please enter an issue in JIRA and I'll build and upload a customized version for you.

Posted in Java at Jun 27 2005, 06:27:23 AM MDT 5 Comments

Flying all over the place

I had a tremendous amount of fun this past weekend. On Friday, I flew from Denver to New York City (JFK) to attend a good friend's wedding. Friday night was the rehearsal dinner, followed by a night on the town at Webster Hall with a bunch of old college buddies. We didn't get home until 5:00 a.m. that night. Saturday we had lunch at Gramaldis in Brooklyn, which is supposedly some of the best pizza in NYC. It was definitely cool to be right in the heart of the city, eating great pizza and sipping on cold Coronas.

The wedding was held on Saturday at the Hammond Museum in North Salem, NY. The ceremony was outside in a Japanese Garden and it couldn't have been a more perfect setting. That night we were up until 4, and I woke up at 7:30 to catch a cab, train, bus and plane to get me back home. Now I'm heading to the airport to catch a flight to JavaOne. Should be a fun week.

Posted in General at Jun 27 2005, 04:10:46 AM MDT Add a Comment

RE: AppFuse, 'tool' of experts

I'm please to say that I've been biled yet again. The first time wasn't so bad, and this time seems pretty mild too. There's no mention of asshat, chozgobbler or turdburglar in the whole post, which is somewhat disappointing. Nevertheless, it's what I've come to expect from a guy who sallies car bombs and dances like a sissy.

Regardless of the lack of bile in Hani's post, he does bring up some good points. Let's take a look at them individually:

  • IzPack and MyJavaPack: the progress bar doesn't work, and the installer downloads everything rather than just including/installing it all.
    • To be honest, I didn't know it was possible to pack up everything and skip the internet download part. I'll definitely look into fixing this.
  • You must have Tomcat installed to work with AppFuse.
    • This is true, and I've thought about changing it to be Resin friendly, or possible Orion friendly, but there simply hasn't been any demand. Of course, Orion isn't that attractive to many folks because it doesn't even support Servlet 2.4. Maybe you should crackin' on that Hani! Or maybe you just like living in the dark ages with your affections for EJB 2.1, Servlet 2.3 and WebWork 1.4.
  • When creating a new project, you get prompted for the package name twice.
    • This is true, and something we should fix. The major reason we haven't is because I didn't want to distribute a 2MB BeanShell JAR that would support the 3 lines of code to fix the problem. I guess I should bite the bullet and add the bloat, or figure out a more elegant way to fix the problem. Issue #75.
  • Project generation auto-detects MySQL when you don't have it installed.
  • I'm a web monkey.
    • True, but that's cool now with Ajax and all.
  • Half the build targets don't work.
    • I think this is more like a handful don't work, but good effort. I agree we should remove the install-* targets when installing a web framework. Issue #76.
  • Every object creates builder objects in hashCode and toString.
    • This is true, and I've seen no performance implications from it. In reality, these are a product of the commons-lang project, as well as Commonclipse. We should probably change these to use smarter methods like the ones IDEA generates. It'd be nice if Eclipse has hashCode() and equals() method generation like IDEA.
  • The project's directory layout is bound to confuse a seasoned webapp veteran.
    • The directory structure is largely based off the example app in Java Development with Ant. Since AppFuse uses Ant, I figured it was a good idea to use a "best-practices" structure like Erik describes in his book. I've often thought about consolidating the 3-source tree, 3-test tree directory structure to one, but users are very attached to the current setup. Maybe for 2.0.
  • XDoclet generates web.xml.
    • I agree that using 11 XML fragments to generate 1 XML file is a little ridiculous. You're right - developers should know how to write a web.xml and what goes where. Issue #77.

Thanks for the feedback Hani - sounds like I owe you a car bomb or two at JavaOne. ;-)

Posted in Java at Jun 22 2005, 10:41:03 PM MDT 17 Comments