Apache Software Foundation Projects
Overview
Obviously, purchasing enterprise-grade commercial alternatives for each component of this architecture would easily run into hundreds of thousands of dollars. The right Open Source projects integrated correctly can get the job done at a fraction of the cost, but due to an almost total lack of marketing, it is very difficult to find the projects you need. Out-of-the-Box combines the critical elements of research, evaluation, project selection, and technical execution to provide a suite of integrated solutions to meet your needs. Detailed descriptions and uses for each of the projects follow.
The Apache Software Foundation hosts many Open Source projects in quite a few categories, including Java™ and XML. The diagram above depicts the subset of Apache projects that are installed and used in the Out-of-the-Box product. At the core of the picture is the Apache group. Radiating from it are the Apache HTTP Server and the two groups of most interest to us: Jakarta (Java projects) and XML.
Top-Level Apache Projects
Ant
Ant is an amazingly useful tool for building, testing, deploying, and managing Java-based projects. It replaces make as the tool of choice for building projects, as well as providing an excellent cross-platform utility for basic programming-task-related scripting. We have used it on dozens of projects and can't live without it. If you use no other open source tools, use Ant.
Apache HTTP Server
Apache HTTP Server is the most popular web server on the Internet. A staple in the Open Source toolchest, it is a secure, efficient, and extensible server that runs on all the major operating systems. It has been shown to be substantially faster, more stable, and more feature-rich than many other popular web servers. In addition to all of its intrinsic benefits, it also integrates well with Tomcat, which makes it our Open Source web server of choice.
Avalon Phoenix
Part of the Avalon framework, Phoenix provides server application environment management facilities, such as class loading, logging, security, and thread management. It is used by the James email server.
James
James is a wonderfully customizable mail server that can receive and store your mail, manage lists, utilize MySQL for storage, and generate Eyebrowse-compatible mail archives on any platform.
Apache Jakarta (Java) Projects
Hosted under Jakarta are many key Open Source Java technologies, including Struts, JSTL, Tomcat, and Log4j. Turbine and its subprojects combine to make a powerful core suitable for production quality content publishing. Velocity competes for mindshare with Struts in an attempt to become the web site development framework of choice but it is also very useful as a template engine outside of web page generation. Utilities of great usefulness to developers include Commons, Oro, Regexp, BCEL, Lucene, and Cactus.
Key technologies
Struts
Struts is a good framework for web site development. It has become more and more popular over the last year or so and is now entering the corporate mainstream. If you need to process a lot of forms in your JSP/servlet development projects, take a look at what Struts can do for you. Tiles is an included add-on to Struts that provides simple templating behavior for web pages. If you need to implement a full-blown portal, diving into Jetspeed may be worth your time.
JSTL
Much like Tomcat, the Java Server Pages Standard Tag Library (JSTL) is a Jakarta project that serves as one of the Sun™ standard Reference Implementations. This tag library is essentially a subset of all the existing tag libraries chosen to become a standard for implementation by all the JSP/servlet container vendors. Using this tag library is a smart choice for developers who want to make sure their code is portable across Tomcat, WebLogic, WebSphere, etc. with minimal work.
Tomcat
Tomcat was chosen to be the Sun JSP/servlet container Reference Implementation. For this reason, using Tomcat as your development environment is a good choice for those desiring web application portability. Tomcat generally supports the latest servlet and JSP specifications, which makes it a wonderful place to try out new features that will eventually be implemented by all the major container vendors. JBoss works well with Tomcat to provide a unified J2EE container.
Log4j
Log4j is a logging framework that was being used heavily long before the JDK 1.4 logging implementation came into existence. It is more configurable, and arguably, more powerful than the standard, which is one reason why it remains the logging mechanism of choice for many Open Source projects. Another key reason for its continued popularity is that it works with JDK 1.1 and later JDK's and is therefore available to "legacy" Java applications. The Apache Commons project includes a logging framework that thinly wraps other logging packages, such as Log4j, JDK 1.4 logging, Avalon's LogKit, or a very simple built-in logging mechanism if nothing else is available. It's nice because you only need to learn one logging API to fit any situation.
Velocity
Velocity is a template engine that competes with JSP as a method for Java developers to render web sites. It is used by many other Open Source projects, including Scarab and Roller Weblogger. Its easy integration into Turbine makes it attractive, but the JSP standard has much more momentum at this point. Velocity is also used solely for its powerful abilities as a template engine outside of web site production, such as in projects like Middlegen.
Commons
The The Commons project is a good place to look for code if you don't want to reinvent the wheel. It contains collection classes, a logging package that can delegate to Log4J, JDK 1.4 logging, and more, web utilities, XPath helpers, data validators, testing tools, XML mappers, a command-line parser, and more. One particularly interesting subproject of Commons is Jelly, a scripting language based on XML that contains features of JSP, JSTL, Velocity, Cocoon, and Ant. It is used by Maven as a powerful front end to Ant.
Jelly
Jelly is a tool that turns an XML document (a Jelly script) into executable code. It is a powerful, XML-based scripting language that combines many of the capabilities of Ant, JSTL, Velocity, and Cocoon to produce a language well suited for Java-based scripting, templating, and XML manipulation. Maven takes advantage of Jelly's scripting power to front-end Ant. We expect to see Jelly become much more popular as it has recently been promoted out of the sandbox and into the Jakarta Commons Project proper.
Logging
Apache Commons Logging is an excellent package on which to standardize for logging because it's a thin layer that will delegate to JDK 1.4 logging, Log4j, LogKit, and several other logging packages automatically. Whatever it finds first in your classpath (except for the built-in logging package in JDK 1.4) is what it configures for the lifetime of the application. Even if you're strongly committed to a particular logging package, standardizing on Commons Logging gives you the flexibility to change in the future without touching a line of code.
Validator
Validator provides user input validation and is used by Struts when validating HTML form fields.
Core Utilities
BCEL
BCEL, the Byte Code Engineering Library, is a low-level tool that allows code to inspect and modify existing .class files on the fly without requiring access to the original source code. It is used by many compilers, decompilers, optimizers, obfuscators, and analysis tools, in addition to Xalan. One interesting use of BCEL is to create and use a brand new class while your code is running. Related projects are CGLIB and Javassist
Cactus
Cactus is a framework for unit testing server-side Java code in place. It's a JUnit extension that allows your unit tests to run inside the servlet, EJB, and/or J2EE container for more accurate results. As a testing strategy, it usually fits between straight JUnit (white box testing with Mock objects) and HttpUnit (black box functional testing).
Lucene
Lucene is a high-performance, full-featured text search engine written by Doug Cutting, the author of search engines written for Xerox PARC, Apple, and Excite@Home. It is used by Eyebrowse, Scarab, and other open source projects. If you need to search text in a hurry, such as on your web site, give Lucene a try.
Oro and Regexp
Oro and Regexp are regular expression packages for use in searching and modifying text. They both work with JDK's prior to 1.4, in which regular expressions became standard. Each package is used by other Open Source code, so they remain in use and probably will for quite a while.
Turbine
Turbine is a servlet development framework that takes the grunt work out of developing a new servlet-based web site. It is comprised of a set of core API's and several independent subprojects: Torque, Fulcrum, JCS, and Maven.
Fulcrum
Fulcrum is an extensible services framework that supports the dozen or so services that come with the Turbine package.
JCS
JCS, or Java Caching System, is a distributed caching system for use in server-side applications. It is a highly flexible and configurable way to increase overall system performance by maintaining dynamic pools of frequently used objects while intelligently handling remote value modification. It's part of the Turbine meta project. Hibernate will optionally use JCS for persistent object caching.
Maven
Maven is a project management and visibility tool that gives team members easy access to technical project status. Among other things, it creates a comprehensive web site where users can access project change logs, source code metrics, unit test reports, coding style violations, project member email addresses, mailing lists, and source code.
Torque
With features that are similar to those of Castor and Hibernate, Torque is a persistence layer that uses XML to describe a schema. It can generate Java classes, database creation SQL and scripts, documentation, XML-based data dumps, and XML-based schema. Part of the Turbine meta project.
Miscellaneous
BSF
The Bean Scripting Framework provides scripting support to Java programs. It currently supports Javascript, Python, TCL, NetRexx, XSLT, Java (using BeanShell), JRuby, and JudoScript. BSF is used by BeanShell to provide a powerful scripting language based on Java itself.
Jetspeed
Jetspeed is a Java- and XML-based portal server that supports JSP, Velocity, content aggregation and syndication, WAP browsers, user-driven view customization and internationalization, caching, and much more. It is very similar to powerful commercial portal servers such as Epicentric (now part of Vignette) that give each individual user control over what he sees and how it's presented. The Jetspeed administrator can easily obtain news and other content from external sources and distribute original content to others.
JMeter
A load testing and performance analysis tool mainly for web applications. It supports multi-threaded load simulation, pluggable samplers and timers, and off-line visualization tools for data analysis.
mod_jk2
This Apache module bridges requests from the Apache HTTP Server to Tomcat. It lets Apache serve static content and pass through dynamic requests, such as servlet or JSP URL's, to Tomcat.
Apache XML Projects
Within the XML group are two core projects: Xerces and Xalan. These serve as the XML processing backbone of a vast number of projects, even though there are many competitors in the space. Among these worthy competitors are Crimson, Dom4j, JDOM, Saxon, and Jaxen. Another very useful XML technology related to documentation production is FOP.
Core
Xerces
Xerces is one of most well-known XML parsers for two reasons: it was one of the first and it's included in other Open Source and commercial application servers and other products. Although the competition is stiff, Xerces continues to evolve and grow by adding XML Schema support, complying to the JAXP (Java API for XML Parsing) standard, etc. Related projects include JDom, dom4j, Saxon, Electric XML, and Xalan.
Xalan
Xalan is the most common XSLT processing engine and, in fact, is now included as part of JDK 1.4. Either Xalan or Saxon is a necessity when dealing with XML because there is always a need to transform XML data from one format to another (e.g., creating HTML from DocBook XML source using DocBook XSL).
FOP
Formatting Objects Processor (FOP) is a print formatter driven by XSL Formatting Objects. We use it primarily to transform .fo files generated by DocBook XSL style sheets into PDF documents, but it can certainly turn Formatting Objects files into many other forms, such as PCL, PS, SVG, MIF, TXT, and others.
|