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 "maven". 270 entries found.

You can also try this same search on Google.

ICEfaces gets open sourced

As far as JSF Ajax frameworks are concerned, there seems to be two major players: Ajax4jsf and ICEfaces. I don't know that either one is a true open source project (where developers are from multiple companies), but Spring isn't either, so I don't know that it actually matters. I think it interesting that both products don't seem to care about capitalization, but I digress.

Today, ICEsoft announced they've open-sourced ICEfaces. Was this inspired by Java going GPL?1 I doubt it, these things take time and it's likely that ICEsoft had this one in the cooker for quite a while. I do think it's interesting that the major JSF component vendors (Oracle, Exadel and now ICEsoft) have all open-sourced their products. Must be a tough market out there.

Apparently, ICEfaces works with Facelets, so it should work with AppFuse and Equinox. Looking through ICEfaces documentation and sample apps, they seem to be missing a straight-forward "here's how to integrate it into your existing application" guide. They do show how to modify your web.xml, but there doesn't seem to be a short, concise guide to what configuration settings you need to add to your faces-config.xml. I was somewhat motivated to write such a guide this morning, but lost motivation quickly as I realized it might be quite the effort. If someone wants to create the Maven bundles for ICEfaces, I'll try to carve out some time later this week to write up instructions for integrating ICEfaces into Equinox and AppFuse.

Unfortunately, integrating ICEfaces into your project is only the beginning. The hard part is choosing which is a better Ajax toolkit: ADF Faces/Trinidad, Ajax4jsf or ICEfaces? Trinidad and ICEfaces seem to be more about components, whereas Ajax4jsf is more about Ajaxifying regular ol' JSF components. So I think Ajax4jsf still remains, and ICEfaces looks like a better out-of-the-box component library than Trinidad. I guess time will tell.

Update: I forgot to mention Infragistics NetAdvantage as a JSF Ajax framework. OpenLogic decided to use Infragistics in the project I started for them. I was able to get it working in AppFuse fairly easily, but it's kinda ugly from a setup standpoint. They require you to copy a bunch of static files (images, stylesheets and scripts) into your project. Yech.

[1] Stephen O'Grady has an excellent writeup on this: And Sun Said, Set My Java Free: The Open Source Q&A.

Posted in Java at Nov 14 2006, 10:27:07 AM MST 8 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

IDEA 6 on OS X and Out of Memory Errors

Ever since I upgraded to IDEA 6.0.1 on OS X, I've been getting Out of Memory errors like no tomorrow. It seems like it's leaking memory when I'm not even using it. Today, I went to lunch shortly after opening IDEA to do some work. When I came back, I was created with the following dialog:

OOM Error Dialog

I've set my Info.plist to have -Xms256m -Xmx512m -XX:MaxPermSize=256m, but it doesn't seem to help. How has your IDEA 6 experience been on OS X? Are you running out of memory? I haven't had any issues on Windows - maybe it's a problem with the MacBook Pro?

I fully expect the IDE zealots to say "use NetBeans or use Eclipse". Eclipse doesn't support hierarchical projects, so that won't work. I'm willing to try NetBeans if I can run something like "mvn netbeans:netbeans" and if it supports hierarchical projects like IDEA does.

Posted in Java at Nov 02 2006, 08:06:39 PM MST 15 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

The Colorado Software Summit in Keystone

This week I'm speaking at the Colorado Software Summit in Keystone, CO. I love this conference because it's so close to home (only an hour drive) and because it's so relaxed. The organizers, Wayne and Peggy Kovsky, do an excellent job of organizing the show. I've never felt more cared for as a speaker, including the fact that they plan and communicate with speakers for the preceding 6 months to the show. Not only that, but it's in one of the most beautiful places in the world. Check out the view from our condo this morning.

If there's any sessions you'd like me to attend and blog about, let me know!

Posted in Java at Oct 23 2006, 08:56:47 AM MDT 2 Comments

Equinox (a.k.a. AppFuse Light) 1.7 Released!

This release's major new features are upgrading to Spring 2.0, Hibernate 3.2, an Ajax + Spring MVC version, an Acegi Security + Spring MVC version and Struts 2.0 as an optional web framework. It's highly likely that the "extras/security" package can be installed with other web frameworks, but it's only been tested with Spring MVC. Furthermore, this release provided all of the different combinations that Equinox provides - all 50 of them!

All of the frameworks used in Equinox, as well as most of its build/test system is explained in Spring Live. A summary of the changes are below (detailed release notes can be found in JIRA):

  • Added extras/spring-ajax with examples of ajaxified displaytag (with AjaxAnywhere), in-place editing (Script.aculo.us), in-page updates (DWR) and lightbox (Lightbox gone Wild) popups.
  • Added extras/security with Acegi Security integration for authentication and authorization.
  • Automated creation and testing of all possible combinations for distribution.
  • Converted from JSP to Facelets for JSF/MyFaces option.
  • Integrated Ajax4JSF into JSF/MyFaces option.
  • Added Struts 2.0.1 as web framework.
  • Upgraded to Spring 2.0, including improved XML syntax and JSP Form Tags
  • Added Cargo settings to pom.xml so it's possible to run web tests from Maven.
  • Changed dataSource bean to use a connection pool.
  • Added popup calendar (using jscalendar) to Spring MVC and Struts 2.
  • Added OpenSessionInViewFilter for Hibernate and OpenPersistenceManagerInViewFilter for JDO/JPOX.
  • Fixed foreign-language encoding issues with Spring's CharacterEncodingFilter.
  • Changed from DAO to Dao to be more consistent with other projects.
  • Dependent packages upgraded:
    • Canoo WebTest 1393
    • Cargo 0.8
    • Commons Validator 1.3.0
    • DWR 1.1.1
    • FreeMarker 2.3.8
    • jMock 1.1.0
    • JPOX 1.1.1
    • Hibernate 3.2
    • MyFaces 1.1.4
    • Spring 2.0
    • Spring Modules Validation 0.5
    • Struts 1.2.9
    • Tapestry 4.0.2
    • WebWork 2.2.4
  • Dependent packages added:
    • Acegi Security 1.0.2
    • Ajax4JSF 1.0.2
    • AjaxAnywhere 1.2-rc2
    • Facelets 1.1.11
    • Struts 2.0.1

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

Demos:

Thanks to all the users of Equinox for making this a great release!

P.S. I'm fully aware that this project's name conflicts with an Eclipse project. ;-)

Posted in Java at Oct 20 2006, 04:28:31 PM MDT 16 Comments

Confluence installed for AppFuse 2.0 Documentation

The last item on the AppFuse Roadmap for 2.0 M1 is setting up the documentation system. I'm still undecided on whether Confluence or DocBook is a better system to use. However, I am certain that using a wiki to document an open source project is the lowest barrier to entry. For more on this topic, see my post from a month ago. In an ideal world, Confluence could be used as an authoring tool, and everything could be exported to DocBook for storing in SVN. Even better, pages that are "core" to AppFuse could be automatically saved in Subversion, and built using Maven's DocBook (or Confluence) support. Who knows, this is still new territory for me, and I feel like I'm losing momentum just thinking about it.

So far, I've installed Confluence 2.2.9 at http://dev.appfuse.org, but this will change in the coming weeks. I plan on eventually moving it to appfuse.org and leaving the demos on the demo.appfuse.org server. Hopefully there won't be too many 404s when we make the change.

Currently, I have Adaptavist's Builder installed for managing/manipulating themes. I've done some work with the default theme, but I think we can do much better. One cool thing I did find was the Page Tree Plugin that allows for Ajaxified tree menus like Stripes has.

Thanks to Atlassian and Adaptavist for the free product licenses.

Posted in Java at Oct 15 2006, 04:54:55 PM MDT 6 Comments

Equinox 1.7 will include all framework combinations

Whenever I've done an Equinox release in the past, I've just uploaded the main zip file to java.net. This made it difficult for end-users because they were forced to install any optional frameworks themselves. While I've usually been successfull doing this, many users have had issues. Therefore, Equinox 1.7 will include *all* combinations as part of the release. See the Equinox Roadmap to see what still needs to be done for 1.7.

How many combinations are there? 35! That's right - there's 5 web frameworks (+ FreeMarker and Velocity for Spring MVC) as well as 5 persistence frameworks. CruiseControl is spitting out the combinations if you'd like to try them now. When I wrote the script to create everything this weekend, I was a bit worried about combining them and all getting all the tests to pass. Amazingly enough, all the tests passed on the first try. Thank you Spring, you separate layers quite nicely.

If you're interested in how this all works, take a look at release.xml. This file handles the artifact creation, as well as testing and uploading to java.net. I was hoping to create Maven 2 archetypes for all the combinations as well, but it doesn't look like it can be automated. I'd love to figure out a way generate archetypes from an existing project.

Posted in Java at Oct 09 2006, 03:59:51 PM MDT 4 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