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.

Maven, Cargo, Struts 2 and working outside

Life is pretty good today. I'm currently working outside - in a courtyard area near the 30th Street Station in Philadelphia. There's 4 restaurants in the courtyard, all with outside seating. It's 72°F and beautiful. I plan to work for a few hours, then hop on the 5:00 train to NYC.

The reason I'm writing this post is to point out a few useful tidbits I've picked up today. First of all, Andrew Glover has written a developerWorks article on Cargo titled In pursuit of code quality: Repeatable system tests. In this article, he shows how to use jWebUnit as well as DbUnit. While the article uses Ant, Andrew mentions that Cargo also works with Maven (and has a Java API too).

Equinox uses jWebUnit, Maven and Cargo, but it doesn't currently support running Cargo from Maven. The major reason for this is I tried to automate running jWebUnit tests from the antrun-plugin and couldn't get it to work (I only tried for 10 minutes). Does anyone have any insight for including jWebUnit tests alongside your regular tests, excluding them from Maven's "test" phase, and running them in the "integration-test" phase? The good news is AppFuse 2.0 uses Maven as well, and we have Cargo + Canoo WebTest working just fine. BTW, did you know that Mergere’s Maestro (a free product) includes Equinox? If you're looking to learn Continuum and you're familiar with Equinox, downloading Maestro is probably a good start.

Speaking of web testing, I've been playing with Selenium lately. I was able to easily integrate it into Thomas and I's Spring 2.0 Kickstart application thanks to these Maven and Selenium integration instructions. The only issues I've run into so far are specifying an initial URL that works in Selenium core as well as Selenium IDE and integrating Selenium with CruiseControl. If you're interested in learning more about Selenium checkout Catching up with Selenium on InfoQ.

Last, but certainly not least, Struts 2.0 was released today. I've already integrated this into the Struts version of AppFuse 2.0. If you like living on the bleeding, you could dig in and try it out today. Unfortunately, I haven't had a chance to put a whole lot of documentation together yet. I hope to install Confluence on appfuse.org sometime this week to start documenting how bad-ass AppFuse 2.0 will be ;-).

Speaking of 2.0 releases, wasn't Spring 2.0 Final supposed to be released yesterday?

Posted in Java at Sep 27 2006, 11:40:42 AM MDT 7 Comments

Comparing Web Frameworks Presentation

I've uploaded my Comparing Web Frameworks presentation I delivered today. This presentation is still somewhat outdated - all the stats I have in it are from February of this year (2006). I've also updated the Equinox framework-comparison page to have links to some more readable papers.

Deciding which Java web framework to use when developing your applications can be a difficult choice. I've often wondered which one is "best" myself. Since 2004, I've been playing and developing with the top five web frameworks for Java: JSF, Spring, Struts, Tapestry and WebWork. For my most recent opinion on which one is my preferred choice, see What Web Application framework should you use?. You might also checkout the following whitepapers I've written at virtuas.com:

Posted in Java at Sep 26 2006, 02:37:50 PM MDT 3 Comments

Spring Forward 2006 - The Keynote

After a 1 and a 1/2 hour cab ride, I arrived at Spring Foward 2006 just in time for the opening keynote. It looks like I'll be doing a 2nd talk this afternoon as Clark Richey was unable to make the show. I was given a choice of talks, and I chose "Comparing Web Frameworks" because that's a fun talk to do.

Thomas Risberg introduced the show (and the new Philadelphia Spring User group site), and now Colin Sampaleanu is talking about Spring. Spring 2.0 is fully backwards-compatible. There's a huge user base that demands full backwards compatibility so their old code still works. Spring 2.0 will run on your existing infrastructure: Java 1.3, 1.4 or 5. It'll run on all major application servers, as well as a simple servlet container.

The first major new features in Spring 2.0 are the simpler (extensible) XML configuration, as well as new AOP mechanisms.

XML Configuration in Spring 2.0

  • Ability to define new XML tags to produce one or more Spring bean definitions
  • Tags out of the box for common configuration tasks
  • Problem-specific configuration (easier to write and to maintain)
  • XML schema validation (better out of the box tool support, code completion for free)
  • Exploits the full power of XML (namespaces, tooling, etc.)
  • Backwards compatible (full support for <beans> DTD, complete interoperability b/w classic and extended configuration)

JNDI Lookup example (Spring 1.2.x):

<bean id="dataSource" class="...JndiObjectFactoryBean">
    <property name="jndiName" value="jdbc/StockData"/>
    <property name="resourceRef" value="true"/>
</bean>

In Spring 2.0:

<jee:jndi-lookup id="dataSource" jndiName="jdbc/StockData" 
    resourceRef="true"/>

AOP in Spring 2.0

  • Simplified XML configuration using <aop:*> tags
  • Closer AspectJ integration (pointcut expression language, AspectJ-style aspects in Spring AOP, @AspectJ-style aspects in Spring AOP that are fully interoperable with ajc compiled aspects)
  • Build on strengths, eliminate weaknesses
  • Preserve ease of adoption (still zero impact on development process/deployment, easier to adopt)
  • Benefit from the power of AspectJ
  • Spring and AspectJ are still separate projects, but work close together since both projects' leads work for Interface21

AOP is about pointcuts:

  • Pointcuts give us the tool to think about program structure in a different way to OOP
  • Without a true pointcut model, you only have trivial interception
  • By integrating AspectJ's pointcut expressions in Spring AOP, it's a much more powerful AOP framework

Hot on the heals of Spring 2.0, Spring Web Flow 1.0 will be released. It's a full Spring subproject and part of Spring's web stack. Using SWF, you can capture a logical flow of your web application as a self-contained module, at a higher level. Another interesting project is Spring LDAP. It's a Spring subproject that simplifies LDAP operations - based on the pattern of Spring's JdbcTemplate. It encapsulates nasty boilerplate plumbing code traditionally required for LDAP.

Finally, Spring 2.0+ will support OSGI. So what is OSGI? It's an industry driven framework specification, with multiple implementations. It has a dynamic omponent model, based around the idea of bundles. It's a full component model with classloading (for isolation and versioning), lifecycle control definition, etc. It's the foundation of Eclipse's plugin architecture.

Why do you need Spring-OSGi? Spring-OSGi is an integration library for Spring in OSGi environments. For those that need it, allows a more powerful component programming model. Without Spring having to re-invent the wheel, ApplicationContexts become bundles that are able to import and export services with full isolation and integration into OSGi lifecycles. The project is moving along rapidly, with large amounts of interest and involvement from vendors such as BEA, Oracle, IBM members of the OSGi foundation and the general public.

Finally, don't forget about The Spring Experience 2006. It's 3 days, 55 sessions across 5 tracks, including: Core Spring 2.0, Core Enterprise 2.0, Core Web 2.0, Domain-Driven Design and Just Plain Cool.

Posted in Java at Sep 26 2006, 08:14:01 AM MDT 2 Comments

Integrating Hibernate Validator with Spring MVC

Remember when I wrote about Better client-side validation with Prototype back in May? Ted Bergeron responded to my post with the following comment:

Now that I am using Hibernate Annotations Validator, I stopped using commons validator. You can use the hibernate validator without using hibernate for persistence. I wrote some jsp 2.0 tag files to handle binding my form fields with spring mvc, and I use reflection to check for the validation annotations. This makes it no work to have a js calendar for all Date fields, or have class="required" added to all fields that have a @NotNull annotation. I'd be happy to send you the code for appfuse 2.0.

Ted followed up by sending me the code. I took a look at it, and reviewed a well-written PDF he'd written for his work. I told him he should publish it as an article, hooked him up with some folks at IBM developerWorks - and voila! Ted's article, titled Hibernate can meet your validation needs was published yesterday. Nice work Ted!

I'm looking forward to trying to leverage Hibernate Validation annotations for all the web frameworks in AppFuse. Should be interesting hacking into the cores of the frameworks to modify how their validation engines work.

Posted in Java at Sep 13 2006, 11:17:46 AM MDT 14 Comments

Integrating Compass with AppFuse and the Display Tag

ChenRanHow has written up a detailed tutorial on how to integrate Compass with AppFuse and the Display Tag. From his mailing list post:

Thanks ChenRanHow!

Another great tutorial was recently written by Luciano Fiandesio. If you're looking to use Quartz, checkout Luciano's (well styled) AppFuse and Quartz tutorial.

In other AppFuse news, FanYang has started translating the documentation to Japanese, Mike McMahon has converted the appfuse-hibernate module to annotations, CruiseControl is continually testing, Mike Horwitz has solved most of the "Maven doesn't read a WARs dependencies" issue, and Scott Ryan is still hard at work on the code generation plugin. Even better - we've asked Scott to come aboard as a committer and he's accepted. Welcome aboard Scott - we appreciate all the work you're doing.

As far as progress on AppFuse 2.0, we're almost done with the Maven 2 conversion. The only thing left is figuring out how to get Mike's maven-warpath-plugin to hook into the Eclipse and IDEA plugins to they generate project files correctly. After that, it's time to start on documentation. I'm still torn on if we should use Confluence or DocBook. However, after looking at Spring's documentation for the past week, I think DocBook is probably the better choice. Then again, Stripes' Confluence Wiki looks nice and organized.

What do you think? What's the best way to write documentation for an open source project? Which system do you prefer to read? From experience, I prefer reading Spring's documentation over trying to find stuff in WebWork's wiki.

We've had great success with AppFuse users contributing to the documentation via a wiki, and I'd hate to create a documentation system that gets away from that. Maybe a DocBook/Confluence combination is the way to go? It looks like the CeltiXFire folks are having a similar debate.

Posted in Java at Sep 09 2006, 12:51:40 PM MDT 6 Comments

Continuum vs. CruiseControl for Maven 2

I spent some time this past weekend getting automated builds setup for AppFuse 2. Since the project now uses Maven 2, I figured I'd give Continuum a try. I pointed it at my pom.xml in SVN and expected everything to work out-of-the-box. No dice. It seems that Continuum reads the artifactIds instead of the module names for sub-project resolution. To workaround this issue, I'd basically have to rename all my sub-projects to have an "appfuse-" prefix. Doesn't that violate the whole DRY principle? Sure, there's projects that do this, but there's others that don't.

Since I didn't feel like renaming the modules/directories in SVN, I gave CruiseControl a try instead. It took a bit of elbow grease on my part, but I ended up with a config.xml file that works splendidly. It seems somewhat ironic to me that the CruiseControl works better with Maven 2 than Continuum does.

Posted in Java at Sep 05 2006, 03:29:04 PM MDT 28 Comments

AppFuse 2.0 Status

Last week I managed to get AppFuse to compile with Maven 2, this week I got all the tests passing. This week, I struggled with Maven's WAR dependencies and how AppFuse will be used by end-users. It was frustrating, but I think I got most everything figured out. Unfortunately, there's still many issues to be sorted out.[Read More]

Posted in Java at Aug 26 2006, 02:41:26 PM MDT 7 Comments

Label placement in web forms

From Swapnonil Mukherjee:

Matteo Penzo has published an excellent article about the placement and alignment of labels in data entry forms. His research, though much more scientific and thorough, confirms what I had said earlier, about the importance of right aligning form labels.

Screenshot of User Profile In AppFuse 1.9.2, we added support for the CSS Framework and Wufoo-style forms. The new form layout appears to satisfy many of Matteo's suggestions. The only things we aren't doing are: 1) we're using bold labels instead of plain text and 2) we're using labels for drop-downs, instead of making the first element the label. I suppose the bold labels isn't much of an issue b/c we're not using heavy input borders. As for labels and <select> elements, I think the way we're doing things is good enough. If it works for Wufoo, it works for us!

Posted in The Web at Aug 22 2006, 12:43:01 PM MDT 7 Comments

High Performing Java Web Frameworks

Steven Haines appears to be gearing up for a showdown among Java web frameworks. In his Web Frameworks article (found via dzone), Steven notes the following:

There are many factors that you need to consider when choosing an application framework, including but not limited to:

  • Suitability for your specific business needs
  • Developer productivity
  • Performance
  • Support and community activity
  • Technology maturity
  • Developer prowess
  • Business relationships

He goes on to say that he's planning on comparing a number of web frameworks, and his study will give special attention to how these frameworks perform. He'll be comparing Struts 1.x, Struts 2.x, Shale and Spring MVC. If you think your framework can compete, Steven invites you to send him an e-mail.

If anyone has a compelling reason why we should add an additional framework, please contact me and I will be glad to consider it in this endeavor.

I'm looking forward to reading Steven's articles, I just hope I can find them again when they're published.

Posted in Java at Aug 21 2006, 08:42:40 PM MDT 9 Comments

AppFuse 2.0 Status

I managed to get most of AppFuse's code moved over to a Maven 2 structure this week. I have tests working in the hibernate/ibatis projects, as well as the service project, but not in the web tier projects yet. I do have everything compiling though. ;-)

[INFO] ------------------------------------------------------------------------
[INFO] Reactor Summary:
[INFO] ------------------------------------------------------------------------
[INFO] AppFuse ............................................... SUCCESS [2.228s]
[INFO] AppFuse Common Data Module ............................ SUCCESS [1.681s]
[INFO] AppFuse Hibernate Module .............................. SUCCESS [0.809s]
[INFO] AppFuse iBATIS Module ................................. SUCCESS [0.630s]
[INFO] AppFuse Data Modules .................................. SUCCESS [0.008s]
[INFO] AppFuse Service Module ................................ SUCCESS [0.696s]
[INFO] AppFuse Common Web Module ............................. SUCCESS [2.817s]
[INFO] AppFuse JSF Module .................................... SUCCESS [4.410s]
[INFO] AppFuse Spring MVC Module ............................. SUCCESS [4.038s]
[INFO] AppFuse Struts 2 Module ............................... SUCCESS [4.954s]
[INFO] AppFuse Tapestry Module ............................... SUCCESS [4.042s]
[INFO] AppFuse Web Modules ................................... SUCCESS [0.007s]
[INFO] ------------------------------------------------------------------------
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESSFUL
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 26 seconds
[INFO] Finished at: Fri Aug 18 15:06:54 MDT 2006
[INFO] Final Memory: 11M/26M
[INFO] ------------------------------------------------------------------------

If you'd like to review any of the work done thus far, I've uploaded my latest work to:

http://static.appfuse.org/downloads/appfuse2-20060817.zip

The major issue I've encountered to date can be reviewed on the Maven user mailing list. If you happen to try things out, the best thing to do is post feedback to the dev list. I'm considering another device-free weekend, so I may not respond until Monday.

Posted in Java at Aug 18 2006, 03:17:31 PM MDT 14 Comments