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 "ant". 338 entries found.

You can also try this same search on Google.

[TSE] Hop into Real Object Oriented (ROO) with Ben Alex

This session's goals are to:

  • To detail the "ROO" DDD architecture
  • To show you how productive ROO can be
  • To profile an Australian project using ROO

ROO is more of an implementation than an architecture. So what is ROO? It's not an Australian marsupial or an Australian airline. It's a Domain-Driven Design (DDD) implementation.

Real Object Oriented (ROO) is both an architectural approach and a framework with code generation.[Read More]

Posted in Java at Dec 10 2006, 10:32:04 AM MST 19 Comments

[TSE] The Holy Grails of Web Frameworks with Guillaume LaForge

Under the hood, Grails uses Spring MVC. It has support for "flash scope" between requests.

I find it funny that flash scope is so popular these days, we've had this in AppFuse for four years. However, web frameworks didn't add native support for it until it had a name (provided by Rails). To be fair to Struts Classic, they had support for it before Rails was even invented.

Rather than JSPs, Grails uses Grails Server Pages, which look much like JSPs. Grails uses SiteMesh by default and allows you to easily change the layout used with a meta tag.

<meta name="layout" content="main"/>

Most of the dynamic attributes in a GSP are rendered using the various "g" tags. There's dynamic taglibs for logic (if, else, elseif), iterating, linking, ajax (remoteFunction, remoteLink, formRemote, submitToRemote), form (select, currencySelect, localeSelect, datePicker, checkBox), rendering (render*, layout*, paginate), validation (eachError, hasError, message) and UI (i.e. richtexteditor). [Read More]

Posted in Java at Dec 09 2006, 12:31:25 PM MST 6 Comments

How do you get open source frameworks past the red tape?

From an e-mail I received earlier this month, with a subject of "Acceptance red tape":

After requesting permission to use the Spring Framework for the business logic and data access layers of an application, how do you fight something like this? Spring is not an approved Framework for the ********** environment. We understand the benefits of the framework. However, we have not certified it in our environment. Additionally, we have concerns that this framework will not gain long standing traction among the J2EE community. We would like to reduce the number of frameworks used in our environment, and do not want to be left with "legacy" frameworks that have little acceptance or support as is the case with the pico container. This is a response from one of our clients after asking about the use of a framework in our development after another vendor had used the PicoContainer without their permission. We have Spring experience and we love it. My responses have been to ask what they have certified that we could use and to ask their business staff to override their tech staff. I'm caught needing to redesign an aging J2EE application with an awfully over-architected original design confined to EJB 2.1, JSP 2.0, Servlet 2.4, and JDK 1.4.X in a very short amount of time. The additional responses were that they have only certified Struts and although both the business staff and the tech staff admit they know the benefits of Spring, neither of them are allowing us to use it.

My response:

Wow - I don't know what to say, especially when they say "Additionally, we have concerns that this framework will not gain long standing traction among the J2EE community." They're probably using Struts and they thinks it's wonderful, eh? ;-)

I could compose a long response with lots of details, but the fact that they prefer EJB over Spring is baffling. Spring is so much easier to program with, it's not even funny. Granted, EJB does have its place, but it's often used as a hammer for a problem that doesn't exist.

Have you experienced similar "Acceptance red tape" in your company? If so, how did you work around or work through it?

Posted in Java at Nov 16 2006, 08:04:24 AM MST 31 Comments

Is XMLC a dead project? Is anyone using it?

From an e-mail I received a while back:

I'm interested in hearing your opinion of XMLC? And when will we see it in AppFuse? ;-) Seems to me that with it's base in xml and all the ajax and SOA hubub that it could be primed for a resurgence. And what about BarracudaMVC as an AppFuse option?

[Read More]

Posted in Java at Nov 15 2006, 10:13:03 PM MST 14 Comments

Should I rename Equinox to AppFuse LE?

I'm curious to know if folks think I should rename Equinox to "AppFuse LE"? LE stands for "Light Edition" in this context, but I'm open to other suggestions. Even though my Equinox project is ranked higher than Eclipse's Equinox project, it's obvious there's a name clash. It seems to make sense for me to change the name since it's a one-man project and Eclipse is a huge organization. AppFuse LE seems like a good descriptive name, as does "AppFuse Light" and "Spring Kickstart".

Eventually, I'd like to figure out a way to merge AppFuse and Equinox. If users could start with something like Equinox (no features) and plug-in the various features, that'd be pretty cool. Some web frameworks (i.e. Struts 2) have a plugin feature, but most don't. I figure we can leverage Struts 2 for all frameworks, and convert to specific frameworks' plugin features if they're added. Of course, we're also looking at OSGi and Spring's OSGi support for our plugin architecture. The only problem with OSGi is it looks pretty complicated compared to Struts 2's plugin system.

The other advantage of changing the name is I could create a new java.net project with SVN support and not have to pay for the CVS -> SVN conversion. Of course, leaving the name the same also makes it pretty easy as there would be no additional work for me. ;-)

Thoughts?

Posted in Java at Nov 13 2006, 09:36:59 AM MST 20 Comments

Continuum, Luntbuild, Pulse and NetBeans

Last night, I did a bit of playing with technologies new to me. First of all, I got AppFuse 2.0 running on Continuum. This was was easy enough, I just had to add <scm> information to each pom.xml. Thanks to those who recommended this approach. I thought it was a silly solution until I realized "mvn site" produced the wrong information when <scm> wasn't present for sub-modules.

Since I was playing with Continuous Integration tools, I decided to give Cerberus, LuntBuild, and Pulse a spin. My goal was to give each server the old "college try" and see if I could get them running with minimal effort. I don't know where I heard about Pulse, but it was somehow included in my tests.

Cerberus didn't work with my Cygwin/Ruby setup, so I was done with it quickly. LuntBuild worked pretty well, but the interface and configuration seemed kinda clunky. I also found it strange that it uses a 4.x version of Jetty - seems kinda old. I was surprised to see that it uses Tapestry for its web framework. Pulse was the nicest one with a kick-ass (ajaxified) user inferface, powered by Acegi, WebWork and Hibernate (according to its JARs). It was definitely the easiest to setup and use. While Pulse isn't free for commercial use, it is free for open source projects, as well as small teams.

Summary: Continuum, LuntBuild and Pulse seem to be the best tools for building Maven 2 projects. While CruiseControl works, and works well, it does require you to customize XML from the command line, whereas these tools allow you to do everything through a web interface.

Toward the end of the night, I downloaded NetBeans 5.5 and installed its Maven 2 Plugin. I was surprised at how full-featured this plugin is. I was able to build, test and run the AppFuse web modules in the embedded Tomcat without issues. It's definitely a cool plugin. As for NetBeans, it seemed pretty sluggish and I couldn't figure out how to get Ctrl+Shift+R functionality, which is a must for me these days. Also, I couldn't get the JSF support working for the AppFuse JSF Module, seemingly caused by the Maven plugin (project properties only has Maven options). Since NetBeans works so well with Maven 2, and it's much more full-featured than Eclipse, it seems natural to recommend it to AppFuse 2 users. Of course, I like IDEA a lot more, but there's no Maven 2 plugin that I know of.

Posted in Java at Nov 03 2006, 10:31:19 AM MST 17 Comments

[CSS 2006] Using Maven 2 to get control over your Development Process

This afternoon I attended Hermod Opstvedt's talk on Using Maven 2 to get control over your Development Process. Most of it was review for me, but I took some notes anyway. About halfway through, I quit taking notes and just listened. The most interesting part for me was seeing how the Maven Embedder works. Since Maven doesn't currently allow you to create archetypes from existing projects the embedder seems like a good workaround. I'd rather code in Java rather than XML any day. [Read More]

Posted in Java at Oct 24 2006, 03:53:43 PM MDT 2 Comments

RE: Five things I hate about AppFuse

Karsten Voges has written a nice critique of AppFuse titled Five things I hate about AppFuse. I started a new JSF+Hibernate project with AppFuse yesterday, so I definitely feel some of his pain. Let's examine his points one-by-one:

1. It's nice to choose between the usage of JSP 2.0 or before, but making the changes (to all jsps and the web.xml) every time I build my app sucks.

I absolutely agree. I spent a good hour modifying build.xml, web.xml, etc. to switch my app from JSP 1.2 to JSP 2.0 yesterday. You can modify your build.xml to permanently switch to JSP 2.0, but it doesn't get everything. I'll create a separate script for 1.9.3 and the upcoming 1.9.4 to make this cleaner.

2. Seperating the classes in web, services and dao is good, but I hate the building of jar-Files for the different layers. Just take the classes under dao and service and copy them into the war or move them over to the webapps folder as it is done with the web classes!

Yeah, I've proposed doing this a couple of times on the user mailing list. It always gets shot down by existing users. I'm sure it'd be possible to write a script to do this, but it'd be no fun to write.

3. Eclipse crashed with OutOfMemory errors. Always when trying to open the build file. The build file is really, really long, with lots of stuff in there. IMO 50% of it could be deleted.

Hmmm, I rarely have OOM errors with Eclipse, but I also used Bruce's tip for increasing Eclipse's available memory. If you're using Windows, here's how to bump up Eclipse's memory.

4. Generation of Hibernate-Mapping files. I really hate it to look within a jarfile how the Hibernate mapping file looks like. It is nice to get it generated, but I prefer to be able make adjustments to it by hand to try out things quickly. And it is quite hard to enter special SQL statements in an Hibernate file, if it gets overwritten all the time.

You can create/modify the Hibernate mapping files by hand if you prefer. From the FAQ:

If you have an @hibernate.class tag on a POJO - hibernatedoclet will generate the mapping file into build/dao/gen. If you have a mapping file (*.hbm.xml) file for your POJO in the src/dao/**/model/* directory, it will overwrite the generated version. If you don't want to worry about the two conflicting - just remove the @ sign from @hibernate.class in your POJO and put your hbm.xml file in the model directory.

No build.xml modification are need for this to work. The "package-dao" target will include these mapping files. If you want to get rid of the hibernatedoclet process, you can do that- but make sure and run it first - and then copy all of the generated hbm.xml files into your model directory.

5. I don't like to get my struts.xml merged from many sources. I like to have one struts-config file holding all my struts configuration.

I agree this is kinda painful, but so is developing with Struts. ;-) You should be able to move the generated struts-config.xml into web/WEB-INF and remove the <strutsconfigxml> from build.xml to get the behavior you're looking for.

As far as throwing out the build.xml, I'm actually planning on doing that with my current project. I will keep it in place for the development phase, but I hope to move the application into a large build system once I'm done. Since it's all Java code and XML in the end, this shouldn't be hard to do. I did it when migrating to Maven 2, so I know it's possible. As far as Karsten's opinion of Maven 2, he may be right - but I hope to make a strong effort to make it very useable when using AppFuse. In fact, I hope to make it possible for users to use their IDE their entire time, with no need to run any Maven commands. Of course, that could be a pipe dream - only time will tell.

As far as sounding like the BileBlog, the more you rag on AppFuse, the better. Remember, screaming users are a good thing.

Posted in Java at Oct 06 2006, 08:03:58 AM MDT 10 Comments

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

New Tutorial: Integrating JBPM into AppFuse

Ameer Ahmed has written a tutorial titled Integrating jBPM into AppFuse. If you're interested in using jBPM in your project, you may want to check it out. I'm sure Ameer would appreciate any comments on his work.

Posted in Java at Sep 15 2006, 02:01:59 PM MDT 10 Comments