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.

New Laptop

When I saw Russell's Why I Might Switch Back... post a couple of weeks ago, I found myself wanting to write a response. My response was going to be I completely agree and I was going to bitch about how slow my PowerBook is (once again). Then, later that day, I was doing something with iPhoto and I thought - I really do like OS X. It's the Mac hardware that I don't like. And it's not the look of the hardware (I love that), it's the fricken speed!! Most PowerBook users I know don't switch b/w computers a whole lot - whereas I spend 50% of my time on a fast Windows desktop. When I go from something that's so fast to something so slow, it's quite painful.

Last week, I started working with a new client - developing an application with Spring, Hibernate, WebLogic and Eclipse. Installing WebLogic on OS X was pretty easy, thanks to this article. Even remote debugging with Eclipse was pretty easy to setup. However, when I started running WebLogic locally and trying to debug it with Eclipse, it was extremely frustrating. I've never seen the spinning beach ball so much in one day. When other developers would watch me work, it was embarrassing how slow my computer was. And it's not like I had a whole lot running: Mail, Safari, Eclipse, WebLogic and iTerm.

Over the past couple of months, I've started debating if my next laptop should be a PC. It's not like I hate the Mac or don't like my PowerBook - but Java development on a Mac is far slower than on a PC equivalent. The problem is that I really like the PowerBook's form-factor. I'm so comfortable using the keyboard, right-clicking with the Control key, and all that jazz - that I'd probably have a hard time adjusting. I realize that a lot of my PowerBook bitching might seem unfair - as I'm often comparing a Desktop to a Laptop.

What I'd really like is two laptops: a PowerBook for doing all non-Java stuff and a PC for doing Java stuff.

My dreams came last Friday when my client handed me a brand new Dell Latitude D610. It's got Windows 2000, a 1.6 GHz CPU and 1 GB of RAM. To be honest, I expected it'd have a lot bigger processor. However, the fact that it doesn't makes it easier for me to show you how fricken slow my PowerBook is.

I used AppFuse for this test and ran ant clean war 3 times on each. I had ANT_OPTS set to -Xmx256m, JAVA_OPTS set to -Xmx512m and I'm using the latest 1.4.2 JDK available for each respective platform. It's possible my PowerBook suffers from some OS Rot, but it's still amazing how much faster the Windows laptop is.

  • PowerBook: 58.3 seconds
  • Latitude: 17.3 seconds

Holy ass-kicking batman!

My PowerBook has a 1.33 GHz CPU and 1 GB of RAM. It'd be interesting to do the see the numbers for a PowerBook with a 1.67 GHz processor. Here's to hoping OS X with a 1.6 GHz Intel processor can keep up with Windows for Java development.

Posted in Java at Oct 02 2005, 11:25:17 AM MDT 25 Comments

Jetty vs. Tomcat vs. Resin: A Performance Comparison

This morning, I did some comparisons between Jetty 5.1.5rc1, Tomcat 5.5.9 and Resin 3.0.14 (OS version). I ran AppFuse's "test-canoo" target, which tests all the JSPs using Canoo WebTest. I did this as a Servlet 2.4 application, and had to tweak some stuff in my web.xml to make it work on Jetty and Resin. Nothing big, just stuff that Tomcat let pass through and these servers didn't. One interesting thing to note that Resin requires you to use "http://java.sun.com/jstl/fmt" for JSTL's "fmt" tag URI, while Jetty and Tomcat require "http://java.sun.com/jstl/fmt_rt". This is with Resin's "fast-jstl" turned off - b/c everything blows up if it's turned on (I don't feel like coding my JSTL to Resin's standards, that's why I turn it off).

Below is a list of the average time it took to run "test-canoo" after I ran it once to compile all the JSPs.

  • Jetty: 19 seconds
  • Tomcat: 19 seconds
  • Resin: 29 seconds

In addition, I tested how long it took for each server to startup - including the initialization of AppFuse.

  • Jetty: 7 seconds
  • Tomcat: 8 seconds
  • Resin: 13 seconds

So what does all this mean? A number of things:

  • I need to clean up AppFuse's web.xml a bit for 2.4 applications.
  • Putting the database connection pool configuration in a Spring context file (vs. JNDI) makes AppFuse much more portable.
  • Jetty isn't as fast as Jetty-lovers say it is (or maybe Tomcat just caught up).
  • The open source version of Resin is much slower than the other open source servlet containers.
  • I should restructure the build.xml to pull out Tomcat stuff and allow users to specify server deployment settings (i.e. in a ${servername}.xml file).
  • Orion still doesn't support the Servlet 2.4 or JSP 2.0 specifications.

Posted in Java at Sep 15 2005, 10:52:50 AM MDT 12 Comments

Building a website with an Open Source CMS

I think the open source community has done an excellent job of figuring out how to create frameworks for developing web applications. But what about websites. You know, the web presence that every company wants - for minimal cost. For most companies, it's nothing more than 5-10 pages that tells a bit about the company, show some management folks and tells you how to get to their offices.

I've developed many websites over the years, many that were static, but more that were dynamic. The unfortunate thing about all of them is they required someone technical to update them. Often, the client had to contact me if they wanted anything new on the site. I've often thought there was a better solution - and I think I'm at a point where I know what customers want, and I know how to provide it. The solution is a Content Management Solution (CMS). One of the biggest problems with static websites is they're not dynamic enough. A CMS can alleviate this problem by reducing the bottleneck that a traditional "webmaster" creates.

In my mind, there are a couple of things that make a good CMS: 1) it's open source (to minimize costs to the client) and 2) it's easy to customize. On the customization front, my demands are a bit more rigorous - mainly because I know what many folks want in a website. Here are my main criteria for a good open source CMS - when it's used to power a regular ol' client-updateable website:

  • Design customization: I should be able to customize all the (X)HTML that's generated using one or two files (like SiteMesh allows). It should be possible to change the look and feel of *everything* by modifying some CSS. It should also be possible to use Mike Stenhouse's CSS Framework to simplify layout choices for clients. Ideally, a web designer or regular ol' HTML person could do the customization.
  • Static-looking URLs: The site should look like a static site. The URLs should be all lowercase and end with .html. It should be possible to modify all the URLs to look as if all pages are static. Apache's mod_rewrite and the URL Rewrite Filter are great tools for making this happen, but it'd be nice if the administration of the application allowed for setting these rules.
  • It shouldn't look like a CMS: No login links, no registration links, etc.
  • Ability to easily add dynamic content: It should be easy to add dynamic content - such as RSS Feed headlines to pages.
  • Menu Customization: In the application, it should be possible to create menus (both main and local navigation) and configure a page to highlight a menu when a particular page is shown.
  • Versioning of pages: In case someone messes something up, it should be easy enough to revert back to a previous version.
  • Easy to use: It should be possible to train a marketing person (with little technical knowledge) how to use the system in 10-15 minutes.

For technical companies (such as Virtuas), there are a few additional requirements I'd like to see:

  • Articles with syntax highlighting: It should be easy to publish articles with code that's colorized. The Java2HtmlPlugin for JSPWiki is a good example of this. I currently don't know of any for XHTML, XML or scripting languages like Ruby or Python.
  • File Upload: For uploading white papers and other technical publications.

So I've started looking at open source CMS's that fill my requirements. Last weekend, I wrote a solution that fills all of these requirements using SiteMesh, JSPWiki, CSS Framework, Acegi Security and the URL Rewrite Filter. It only took me about 6 hours to complete, but after completing it - I started wondering if I really wanted to start another open source project and maintain it. The answer is no, I don't want to create something new - I want to use something that's already out there. However, since I do have something that satisfies all my requirements, I will use it if I can't tweak an existing OS CMS enough.

Here are a list of CMS's that I'll be looking at in the next week or so. If you're associated with any of these projects, please leave a comment and let me know how many of my requirements you satisfy.

I'm a bit hesitant on Daisy b/c it requires XSLT knowledge for design customization. Magnolia has long URLs and doesn't appear like a static site - and the PHP ones often have .php in their URLs. It should be an interesting investigation to see if these (seemingly) heavyweight solutions can solve a few simple requirements.

Posted in Open Source at Sep 12 2005, 11:48:14 AM MDT 49 Comments

Using CruiseControl with Subversion

This morning, I had the pleasure of setting up an AppFuse-based project to run under CruiseControl. Normally, this is very easy to do because I have the CruiseControl setup files and instructions. However, this project uses Subversion instead of CVS. Luckily, Subversion is easy to use and I was able to modify things to work quite easily. Below are the steps you can take to modify your AppFuse project to run under CruiseControl and Subversion.

  • Download svant and extract it to your work directory.
  • In build.xml, change your "cvs" target to "svn" and change the tasks appropriately.

        <path id="svn.classpath">
            <fileset dir="svnant-1.0.0-rc1/lib" includes="*.jar"/>
        </path>
            
        <taskdef resource="svntask.properties" classpathref="svn.classpath"/>
        
        <target name="svn">
            <delete dir="checkout/appfuse"/>
            <svn>
                <checkout url="https://svn.java.net/svn/appfuse/trunk" 
                    revision="HEAD" destPath="checkout/appfuse" />
            </svn>
        </target>
    
  • Modify the "test" target in build.xml to depend on "svn".
  • In config.xml, change the <modificationset> to be <svn LocalWorkingCopy="/home/cc/work/checkout/appfuse"/> instead of the <cvs> equivalent.

The instructions have been documented on the wiki and checked into AppFuse's CVS.

Posted in Java at Aug 24 2005, 10:24:26 AM MDT 4 Comments

Equinox on Resin 3.0.14

Yesterday I moved demo.raibledesigns.com from Kattare to Contegix. The main reason I moved is because Contegix is much more responsive when I have issues, as well as Kattare's server was incredibly slow to startup Tomcat. The move went pretty smoothly, but I did run into a couple issues - caused by moving from Tomcat 5.0.28 to Resin 3.0.14. The issues were only in one application - the MyFaces version of Equinox.

The first issue was that the corejsf-validator.jar that I'm using (for client-side validation) contained an invalid TLD file. It was easy enough to fix as it was missing a <short-name> element. This is the 2nd issue I've found with this library - obtained from David Geary's Core JSF book. The first issue is that Spring's Ant-style patch matching doesn't work when this JAR is in the classpath. Anyone out there using a better (less buggy) library for client-side validation in JSF?

The 2nd issue was that MyFaces depends on commons-el.jar, which is shipped with Tomcat. Not so with Resin. Adding this JAR to my WEB-INF/lib directory solved the problem. I've committed both changes to CVS.

Below is a full listing of the sample apps I have installed on this server. The one app that I didn't move is Struts Resume. I'll be moving that one to appfuse.org today.

I'm open to adding more, so let me know if you have one you'd like hosted. Of course, I reserve the right to refuse suggestions based on my interest in the functionality they're demonstrating. ;-)

Posted in Java at Aug 16 2005, 08:50:27 AM MDT 4 Comments

Scaling with Rails

Whenever I talk to developers in the Java community about Rails, the first question out of their mouth is usually "But can it scale?" Today, David has written a nice post titled It's boring to scale with Ruby on Rails.

The one thing that I see time and time again is that Java developers don't seem to realize that some of the highest traffic sites on the net are using LAMP stacks similar to what Rails advocates. IMHO, I don't think "Rails can't scale" is a valid argument. In fact, I don't know if there's any argument or way to put down Rails anymore.

As a developer, my guess is the rates for programming in Ruby developer are less than for programming in Java (unless you're a Ruby Superstar of course), so that's one reason not to program in it. However, since Rails is one of those new bright and shiny things, chances are you might be able to get high rates for it. As far as Enterprise Adoption of Rails, unfortunately I think that's still pretty far on the horizon. I think the hardest part is convincing management that they'll be able to find developers to support it. Mind you, I didn't say good developers, just developers. Period. This is information I've gathered from talking to my Java developer friends.

Try convincing a Fortune 500 company to program in Rails vs. Struts and they'll probably choose Struts because there are thousands of Struts Developers. Is this a good decision on their part? I don't think so. I think it's more important to hire smart people that can learn a technology, rather than hiring those that know a technology. Of course, if someone knows a technology really well, there's probably no harm in hiring them.

I think Rails can become a real contender in the Enterprise if managers can be convinced that it'll be easy to maintain Rails application. Remember that most of software cost is maintenance. Because of this, the whole "it's super productive to develop with" doesn't matter so much - does it? Are Rails applications easy to maintain? My guess is yes, but how do you convince CTOs and CIOs? Another thing I think Rails needs for Enterprise Adoption is good tool support. Drag and Drop type of stuff. Why? Because management loves that stuff (because then they can develop apps) and it's a great sales tool. ASP.NET has been successful because of Visual Studio, not because of its ease-of-use and simple syntax.

Will I learn Rails and use it to develop applications? I certainly hope to, but it's hard enough convincing companies to use something other than Struts - so I don't know if I'll have much luck in selling Rails. The one cool thing about my new job at Virtuas is its an open source company, not just a Java open source company. This opens the doors for me to learn about Rails (and others) and compare them to Java Web Frameworks.

Update: Aaron Rustad has written an interesting article for DeveloperWorks that compares Rails to Struts+Hibernate: Ruby on Rails and J2EE: Is there room for both?

Posted in Java at Jul 12 2005, 08:45:26 AM MDT 28 Comments

Off to Big Sky Country

Holland Lake In only a few more hours, we're heading on Raible Family Roadtrip #9. Number 7 was when Julie, Abbie and I traveled up the California coast, and number 8 was when my Dad and I drove my '66 Bus to Denver from San Diego. This time it's going to be much more special. The end destination is my favorite place on earth. We're heading for the cabin, which is a log cabin my grandpa built in 1918. I was born in one corner, my sister in the other, and I spent the first 16 years of my life there.

Spending the 4th of July at the cabin has been a long standing family tradition. It's always fun to watch the parade and the O-Mok-See in the small town I grew up in. The Swan Valley is a very special place and my friends that visit often return. It really is one of those uniquely special places on Earth.

I love road trips. Julie hates them, but tolerates the fact that I love them. The main reason we're not flying to Montana is because the flights are very expensive. It's a 1 and 1/2 hour plane ride and a 15-hour drive in the car. It's a good thing we have a DVD system in our Odyssey for the kids - 15 hours is a heckuva long trip.

While I was at JavaOne last week, Julie did some research and discovered that Yellowstone isn't too far out of our way, so we're staying there tomorrow night. I've been to Yellowstone a few times, and every time it takes my breath away. I can't wait to see the look on Abbie's face when she sees an Elk right outside her window.

The best part about the whole trip? It's sure to be the family, laughing and creating memories. But I'm also going unplugged - which I haven't done in a while. For the next week, I'll be without a laptop and refusing to check voicemail or e-mail. E-mail is going to suck when I get back, but the peace of mind while I'm gone is sure to be priceless.

Posted in General at Jul 01 2005, 11:25:40 PM MDT 6 Comments

[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

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

Notes from DJUG: Rhythm and Open Source Strategies

Last night I had the pleasure of listening to two great speakers at Denver's JUG. Not only did Brian and Lajos know their stuff, but they were very comfortable on stage and interesting to listen to. Below are my notes from this event. When I did a print preview of this in Dreamweaver, it came out to be 5 pages - so just to warn you, this is a pretty long post.

Brian Boelsterli - Nudging your organization towards agility: Ingredients for an agile execution environment

Even if you have a dream team of developers, it doesn't mean the project will succeed. Process Matters. A lot of what Brian's Rhythm process was developed while working at Sprint - where they completed 169 iterations on their way to production. There are problems with agile methodologies: team has no rhythm (restart, pause, delay all the time), project plans are big and heavy and just about worthless, methodology teams get in the way, specifications are close to worthless, design review meetings are horrible. In order to combat these problems (regardless of your methodology), Brian has developed a Rhythm Process that helps agile methods succeed. This system contains a number of ingredients to solve problems with agile methodologies.

Heartbeat/Stacked Iterations "...no rhythm" Iteration Artifact Review Meeting (iARM) "...worthless review meetings."
Software Push "...software deliveries are atrocious" Issue Review Meeting (IRM) "...lack of pattern for managing our backlog of defects ..."
Iteration Advocate "...methodology team gets in our way" Software Iteration Plan "...worthless project plans"
Iteration Artifacts "...worthless artifacts" Iteration Transition Meeting (ITM) "...we are status-based, instead of delivery based!"

The Heartbeat is the logical representation to the physical thing called an "iteration". Starts Thursday morning, ends Wednesday night - based on psychology b/c it fosters sustainability. By giving 2 days to start a new iteration, they've found higher productivity because no one wants to work the weekend.

Rhythm advocates weekly iterations, regardless of deliverables. The primary reason for this is to maintain the heartbeat. Rather than doing XP-type iterations where you do everything in an iteration, you do Stacked Iterations. In an iteration, you still do full lifecycle (requirements, development, deploy), but the Business Analysts are 1 iteration ahead of the developers and the developers are 1 iteration ahead of the deployment team. In Rhythm, there's an Iteration Advocate who gathers and manages requirements, Developers do the development, and the QA team does automation and deployment. I've worked with this system in the past with Brian and this process works quite well.

Iteration Advocate: Traditional "Process Mentor", in disguise. They're responsible for making sure the spin happens and the work gets done. Responsible for one thing: Ensuring the successful delivery of each and every iteration. A big reason that Rhythm advocates this role is because they've found that Project Managers tend to spend 80% of their time doing PM work. By having this role, the PM can concentrate on managing the project and doesn't have to be concerned about managing people and their deliverables. As part of each iteration, artifacts are produced. This makes it possible to put the project in hibernation at any iteration transition point.

Software Iteration Plan (SIP): A simple artifact that includes features and tasks, as well as defects to fix for each iteration. As part of the weekly planning, this artifact is re-visited and updated. Depending on how formal your organization is, this document can be kept on a wiki site, in a word document, etc. Meetings are held every Wednesday afternoon - where PMs sit in a room and team members come in and report their status.

Iteration Transition Meeting (ITM): Backbone of the process - happens every Thursday morning and involves all parties involved in the project. Similar to SCRUM's Post-Sprint Meeting. It's an official buyer/seller marketplace for cross-functioning teams to buy/sell iteration artifacts.

  • Definers are selling their requirements, analysis and design specs
  • Developers are selling their functionality
  • Testing are selling their test plans and specs

Participation requires a minimum of one representative from each respective group. Project Manager conducts, Iteration Advocate facilitates. Brian says this meeting has virtually eliminated the need to do status meetings.

From working with Brian, I know that one of the key ingredients to this process is the Testing Team. The folks that typically fill the QA Developer role is on a whole new level from most testers I've seen. Rhythm Testers are automation experts and know how to setup CruiseControl, run Ant/Maven/Unit tests, as well and configure and deploy to production servers. These folks are the ones who handle the initial installation and configuration of the test, development and production servers.

As part of Rhythm, it's also important to plan for "Featureless iterations" - where nothing is done but run performance tests and regression tests. Done at both 40% and 60% project completion. This was a good presentation about an excellent process that I still try to use today. In my experience, the hardest part to implementing it is finding good QA Engineers that are automation experts as well. Nice job Brian!

 » Download Presentation (PPT)

Lajos Moczar: Creating A Successful Open Source Strategy

Lajos is a committer on OpenEJB and has written two books: one on Cocoon and one on Tomcat. Lajos has been working with open source since 1995 and has a company called Galatea Information Strategies in Colorado Springs. Lajos mentioned that he recently became well-known in the open-source world by writing a paper titled "Start developing and deploying J2EE apps on the first open source J2EE server". This title apparently pissed off the JBoss guys to no end, their PR Firm called JavaWorld and they renamed it to A first look at Apache Geronimo. Because of the JBoss controversy, Lajos became inspired to write The open source monopoly, which explains why he thinks doesn't think JBoss is open-source.

NOTE: The big reason Lajos doesn't like corporate-backed open-source is because he feels that quality app servers like JOnAS deserve lots of press too. However, they don't have the marketing dollars that JBoss has, and are therefore overshadowed. He also mentioned how dangerous it can be when a project's committers get so full of themselves that they start veering from a standard (i.e. J2EE) and developing their own add-ons. If companies and developers use these add-ons, it leads to Vendor Lock-in, which is the same as the lock-in you find in commercial products with proprietary APIs.

Bottom Line for open source adoption: Open Source is mature for the enterprise, as long as you're mature in your approach to it.

The state of OSS: Over the past past 4-5 years, OSS has gone from youth to adulthood. Now a viable choice for large-scale organizations, common talk in business and news. Recent report from CSC on enterprise usages of OSS:

  • 70% have Linux and/or Apache
  • 42% are using Tomcat
  • 14% are using PHP

OSS in young adulthood, where childhood was free software, not a thread to the mainstream. OSS was born of the hacker culture of the 70s (and earlier). Richard Stallman and GNU dominated open source in the 80s and early 90s.

In Adolescence, open source went a big crazy (late 90s). The Big Split was when open source was redefined as a methodology instead of a culture. Eric Raymond, Netscape and the launch of "commercial" open source. Open source != free software. Open source + the Internet = Linux, which leads to popular access to open source.

Now in Young Adulthood, where there is an explosion of choices (in Operation Systems, Containers, Technologies (i.e. PHP, Perl, Python, etc.), Web Frameworks). 34,000 open-source projects on freshmeat, 86,000 on sourceforge. There's also an explosion of licenses. Explosion of technological advances in web services, Java and development technologies. This has all resulted in an explosion of adoption in many large organizations.

Is OSS Mature? Open source faces a crisis of maturity:

  • Does it achieve the ideals of its origins and stay as a separate force in the technology world?
  • Does it get subsumed by the increasing trend of corporate open source?

With the "corporate open source" model, the project is essentially a product, except that it's free and and you can see the source. Are we losing the intrigue and excitement that the 2:00 a.m. developer experiences? The "corporate open source" model seems to discount the roots of open source - when developers stayed up until the wee hours of the morning to develop something they were passionate about. With the corporate model, it becomes their job and could lead to a loss of passion.

Some Challenges: As OSS matures, there are challenges that face OSS implementers, particularly those in advocacy/evangelization roles. Inherent problems - a lot of releases (difficult to keep up), is it really free, etc.

More Challenges: Overwhelming choices (choose a languages (Java, Perl, C#, Python, C++) , choose a direction w/in a language (i.e. Java 1.4 or 1.5) , choosing a technology direction (J2EE or just part of it - sans EJB).

After this overview, Lajos went into an example of how open source is typically adopted in an enterprise. It starts off with a web application pilot, where a developer downloads Apache + Tomcat, spends a day getting them talking to each other, and then configures everything using the default settings. From there, an application is developed w/o code or directory structure standards, without security and without failover solutions or backups. Nothing is documented as development ensues. This pilot becomes a production application and the IT organization has no idea how to support the application, and new developers have no idea how to maintain it, or start a new project based on the same architecture and tools. Bottom line: using a pilot like this is an irresponsible way to introduce OSS to your enterprise.

Typical OSS Introduction problems: The first step towards successful OS is organizing the problems or "challenges". Use of technology problems, process problems and choice problems. OSS has the strange effect of highlighting inherent problems in your enterprise or IT strategy. These problems can be fixed.

  • Technology problems: Technologies come and go, but the core business stays the same. What is important is that you know how to use and what you choose. Commons IT mistakes: The latest and greatest, bleeding edge software, technology for the sake of technology, instead of for the business. Sounds obvious, but you must always start with one question: what is the purpose of IT?
  • Process problems: OSS highlights already existing process problems b/c it's very accessible, tends towards permutations in options and versions and there's less work done in the way of best practices than we need. You need a solid infrastructure - processes and principles - to handle the problems with OSS and to insure complete success with it. More than ever, this is the time for process: no OSS implementation should be w/o them! Develop, test, upgrade, deploy, etc.
  • Choice problems: Factors influencing choices: technology direction, project viability and health, knowledge base, license type, corporate sponsorship, "spirit" of founders.

Principles of a Pilot: Your pilot is the most critical step in OSS implementation. The pilot must demonstrate: sound and viable technology choices, solid processes and principles, vertical slices.

Starting a web pilot right: Research the options: which version of Apache/Tomcat/MySQL is the most stable (use mailing list). What is the proven integration solution, security "best practices", licensing concerns? Are there documentation concerns? Do you have to pay for it? Is it any good?

When starting with open-source you need to plan, plan, plan.

  • Organize your directories for repeatability, ease of maintenance.
  • Separate program directories from development directories from deployment directories
  • Document all configurables, installation quirks, directory locations
  • Define a solid and repeatable build process
  • Never take all the defaults! Determine what to change.

Authentication and Security. Problem: multiple logins is the curse of the modern enterprise - don't reinvent! Use single sign-on if possible. Don't have an LDAP server, install one! Kerberos is a good option if you are starting out: a bit of work, but worth it. Problem: OSS is not inherently more secure than anything else. Solution: research for the most low-risk products. Keep currently with he project bug lists and security announcements. Subscribe to all relevant mailing lists.

Development processes. Problem: Need a development process for OSS-based applications. Solution: Use CVS with replication (CVSUP). Use Ant/Maven with a well-documented target/properties schema for builds. Implement a three-stage process, of development, QA and production. Create a simple process for tracking application releases and enabling rollbacks.

While listening to Lajos talk about all of this stuff, I couldn't help thinking to myself that AppFuse solves a lot of these problems for you. ;-)

Understand the Pitfalls of OSS:

Version mania and product instability: establish your own release criteria and testing plans. Always upgrade with a rollback plan. Once you find stability, keep it!

Lack of product infrastructure: Great products are useless w/o the proper infrastructure. If any of the following don't exist around an open source project, it's a warning sign that it might not be ready for prime-time.

  • premier documentation (i.e. books)
  • training services
  • tiered support services
  • integration services
  • security alerts
  • intuitive administration and operator interfaces
  • interoperability testing - does the release announcement provide upgrade paths?
  • load testing
  • release criteria (i.e. basic interoperability testing, tested functionality, etc.)

Free software is not really free - there will be costs:

  • Training
  • Consulting
  • Hardware
  • Support

Flavor-of-the-month technologies: ask the hard questions about any technology, jumping on the bandwagon for its own sake will be expensive, older proven technologies are often better. Ruby on Rails fits into this category.

Corporate open source and branded technologies: beware brand names backed by VC funding - they could end up being monopolies. Can lead to Vendor Lock-in. Beware of technologies dominated by a single entity. Standards are the best way to prevent this from happening. The best solution: community-driven standards - complete with best practices.

Open source or "free" software requires the same approach and dedication as does commercial software:

  • Software infrastructure
  • Training, documentation, support
  • Sound implementation, upgrade, support processes

At this point, Lajos gave his recommendations of good open-source projects that are ready for enterprise adoption. I wasn't fast enough to write down the ones he mentioned for Security, Integration and End-user applications. He did say he'd post his slides, so hopefully I can fill this list in later.

  • Operation System: RedHat/Fedora, SuSE, FreeBSD, OpenBSD, Mandrake
  • Data: MySQL (note the license), PostgreSQL, MaxDB, dbXML, Xindice, eXist, Castor, Hibernate
  • Security
  • Web Services: Apache SOAP/AXIS, Tomcat, Jetty, JBoss, JOnAS, OpenEJB, Resin, Geronimo, LUkAS, ebXML, Jabber, SIM, CryptIM, Magpie (PHP RSS), Jena, ircd, OpenCMS
  • Integration: JMS (OpenJMS, SwiftMQ)
  • End-user: Firefox, Open Office

Implement: Once you have organized your choices, divide and conquer. Determine what you will keep commercial: mainframe apps? High-end database platforms? Take one slice at a time: database, communications, server platforms, end-user platforms, web services, networking, etc. Be careful of tightly integrated components.

This marked the end of Lajos's (very enjoyable) presentation. I've known of Lajos through his Apache+Tomcat FlashGuides, so it was very cool to meet the man behind the knowledge. It's also pretty neat that we're both doing the same line of work. I hope to sit down and have a beer with Lajos in the near future. During the QA Session at the end, I picked up a couple of audience tips: Google has their open-source code at code.google.com and Revolution OS is a good movie to rent.

 » Download Presentation (PDF)

This is one of the best Denver JUG meetings I've been to in a long time, and this summer looks like it'll be packed full of good sessions. July's JUG Meeting is going to be awesome: Bruce Tate talking about Beyond Java followed by David Geary talking about Ruby on Rails.

Posted in Java at Jun 09 2005, 03:00:25 PM MDT 1 Comment