Java Open Source Development Intertech March, 2006
Open Source (& Java Open Source) is Big There are over 110,000 open source projects today! There are about 20,000 Java open source projects! Nov 2004 report suggests 67% of all companies use open source products. With an 16% additional expected to join in 2005.1 Sept 2003 reports suggests 41% of application development tools are open source.2 It's Big 1 - http://www.informationweek.com/story/showArticle.jhtml?articleID=51201599&tid=5979 2 - http://www.dwheeler.com/oss_fs_why.html
Our Objectives This dialogue is an exploration of some of the more popular Java open source products/tools. With some 20K projects to choose from, we can’t look at them all. Give you a broad picture of Java open source landscape. Give you some options to explore for your own projects. Give you resources for more information/exploration.
This is an Exchange – not a Lecture Did we mention this was a dialogue? We welcome and encourage audience participation. What open source products/tools have you encountered? What worked well for you? What blew chunks? What else would you include in our survey? Impromptu show-of-hands surveys should also help give you and idea of popular products in this area.
Open Source Categorization To assist in our examination, we break Java open source projects up into several categories. User interface/Web frameworks Middleware and integration products Persistence frameworks Design and development tools Testing tools and frameworks Support/Maintenance tools Miscellaneous products Some products/tools cut across several categories.
Product/Tool Examination What is the product/tool’s purpose? How long has it been in existence? Benefits/Issues Commercial counterparts/competitors If they exist Where “popular” competing projects exist Compare and contrast Project’s future We have left off Sun’s reference implementations. We assume everyone knows how to examine/get these. In many cases, these maybe your best option.
An Open Source Drive-By Tour With the time we have, we only have time to mention products. Explore their general use/purpose. This is not a detail dive into the products. Unfortunately work left for you.
Defining “Popular” We couldn’t possibly hit all the projects. We focus on popular tools/products Popular = widely used and active We also measure “popular” by: Ownership – who is in charge of the project now. Current Web site – and its last update. Documentation – quantity and quality. Setup/download – ease of getting/setting up the product/tool Forum/blog/news groups – what others are saying and how often (especially for support)
User Interface & Web Frameworks MyFaces (JSF) Struts Tiles WebWork Cocoon Spring Tapestry jCharts jFreeChart JasperReports jFreeReports TagLibs (JSTL) Lucene Xalan
MVC Frameworks Purpose of Struts and JSF: application frameworks for building Web applications Struts – the old stand-by struts.apache.org Launched in 2000 Creator same as JSF (Craig McClanahan – now with Sun) JSF – the new stand-by MyFaces – Apache implementation of JSF myfaces.apache.org Launched 2005 (JSF launched in 2004) Many of the frameworks can be weaved together.
Struts Field validation Locale/internationalization support Plenty of extensions. Tiles framework for sophisticated layout management WebWork now folded into Struts Action Framework
MyFaces (JSF) Implementation of Sun standard JEE 5.0 containers must provide an implementation of JSF First free implementation of JSF Focus on View of MVC (more “fat client” like). JSF Struts + Swing Rich component model with event handling and component rendering JSF components handle the purely visually-oriented HTTP requests (example – clicking on a tree control). Business events go through the standard Struts-request-processing lifecycle (example – add this to my cart).
Struts vs. JSF McClanahan's Weblog blogs.sun.com/roller/page/craigmcc/20040927#struts_or_jsf_struts_and Bottom-line Struts users - think about migrating slowly to JSF New projects – think JSF The two can co-exist Unless unusual needs exist
Cocoon An XML publishing framework. Based on Servlets. Manipulate the presentation layer using XSLT Includes a technology called "XSP" for Extensible Server Pages. Focus on separation of concerns Uses concept of component “pipelines” to process requests cocoon.apache.org Around since 1999 Version 2.0 recently released
Tapestry Also a Java MVC Web application framework. Builds on the standard Java Servlet API Its ability to blend into a standard HTML markup is its distinguishing and most valuable feature Doesn’t use JSPs Tapestry “templates” are regular HTML, decorated with Tapestry attributes Inspired JSF Facelets jakarta.apache.org/tapestry Started in 2000 Just release version 4 Good comparison of JSF to Tapestry at: www.theserverside.com/articles/article.tss?l=JSFTapestry
Spring Application Framework A comprehensive, layered Java/J2EE application framework www.springframework.org Started 2003 Version 2 soon to be released Features A complete lightweight container Aspect oriented framework Assembly of loosely-coupled POJOs A common abstraction layer for transaction management. A JDBC abstraction layer that can be integrated to/use Toplink, Hibernate, JDO, etc. Flexible/extensible app framework SpringMVC Struts++
Java Charting tools Dozens of options Many open source options at java-source.net/open-source/charting-and-reporting Commercial competitors include: JClass, EspressChart, ChartFX, and many more… jFreeChart www.jfree.org/jfreechart/index.php First released in 2000 Krysalis jCharts jcharts.sourceforge.net First released in 2000
Java Reporting tools Dozens of options Many open source options at java-source.net/open-source/charting-and-reporting Commercial competitors include: Formula One, JReport, and many more… JasperReports jasperreports.sourceforge.net www.jaspersoft.com “Most popular embeddable open source reporting library” JFreeReport sourceforge.net/projects/jfreereport Introduced in 2002
TagLibs Is an “open source repository for JSP custom taglibraries and associated projects.” jakarta.apache.org/taglibs Includes the reference implementation of the Java Server Pages Standard Tag Library (JSTL) Includes JCP Standardized Tag Libraries (JSTL) a collection of tag libraries that cover conditionals, iterators, accessing URL resources, internationalization and text formatting, database access (SQL), and XML processing. Custom Tag Library Extensions (CTLX) are extensions for popular web publishing tools
Lucene A high performant, scalable and full-featured text search engine library. Allowing you to add indexing and searching capabilities to your apps. lucene.apache.org Many well known web sites use Lucene (including Wikipedia, FedEx, Eclipse.org, etc.) Around since ’97/’98 First open source release in 2000 There are competing products Not all Java Not as well used. Also behemoths like Google, Yahoo, etc. in this arena.
Xalan Java (Xalan-J) An XSLT processor for transforming XML documents into HTML, text, or other XML document types. Implements XSL Transformations (XSLT) Version 1.0 Implement XML Path Language (XPath) Version 1.0 Implements JAXP 1.3 Builds on SAX 2 and DOM level 3 parsers Can be used from the command line, in an applet or a servlet, or as a module in other program. xml.apache.org/xalan-j Actually two versions of Xalan (Java and C++) Used to be part of the Apache XML Project Alternate: Saxon
Middleware & Integration Products JBoss JOnAS Enhydra Tomcat Jetty Resin James Axis Xerces OpenJMS MantaRay ActiveMQ JORAM
Application Servers Full J2EE Stack containers Supporting servlets, EJBs, JMS, JCA, etc. JBoss (jboss.org – claims to be the #1 Java app server on the market) JOnAS (jonas.objectweb.org) Enhydra Enterprise (www.enhydra.org) Apache Geronimo (geronimo.apache.org - just released version 1.0) GlassFish – Sun’s open source EE app server (https://glassfish.dev.java.net/) WebSphere and WebLogic are biggest commercial competition Oracle a somewhat distant third. “During the next two years, open source application servers will gain share in the J2EE market, forcing further vendor consolidation“ – says the Meta Group1 1 http://www.theserverside.com/news/thread.tss?thread_id=24501
App Server (cont.) Servlet/JSP/Web containers Tomcat (tomcat.apache.org) Jetty (jetty.mortbay.org/jetty) Resin (www.caucho.com - has some EJB functionality) See Server Side’s App Server Matrix www.theserverside.com/articles/article.tss?l=ServerMatrix
James James is a SMTP and POP3 Mail server and NNTP News server. Also provides a Java mail API for use in applications Lets you write Java code email processor – called mailets. Mailets can generate an automatic reply, update a database, prevent spam, build a message archive, etc. Rumor has it future releases may support instant messaging. james.apache.org James is based upon the Apache Avalon application framework.
Axis - SOAP Toolkit Axis is a tool kit for working with SOAP and WSDL SOAP and WSDL are the backbone XML documents in Web services. Axis shields developers from the details of dealing with SOAP and WSDL Axis is the most popular implementation of JAX-RPC. ws.apache.org/axis Few real alternatives, but are some add-ons See java-source.net/open-source/web-services-tools
Xerces Java (Xerces-J) An XML parser. Fully conforming XML Schema processor Supports SAX 2 Supports DOM level 3 and 2 xerces.apache.org Actually two versions of Xerces (Java and C++ - also have a Perl wrapper version) Used to be part of the Apache XML Project Alternate: many See java-source.net/open-source/xml-parsers
JMS Implementations There are several open source Java Message Service API implementations. OpenJMS ActiveMQ JORAM Mantray See java-source.net/open-source/jms Full J2EE servers also support JMS. Open source ESBs – still emerging ServiceMix (ActiveMQ producer) OpenESB (open-esb.dev.java.net) Celtix (celtix.objectweb.org – Iona and ObjectWeb)
Hibernate Attempts to be “non-intrusive” persistence solution. A lightweight object/relational mapping service. Using POJO’s and Java reflection Isolating mapping and SQL in XML configuration files Provides several means to access data including Hibernate’s own HQL www.hibernate.org Hibernate 3 now available The foundation of entity beans (EJB) in EJB 3.0 Started in 2001 Winner of Software Development Jolt award
Castor Provides Java-to-XML binding and Java-to-SQL persistence. Two products: Castor XML and Castor JDO JDO similarities but not compliant with Sun’s JDO spec. SQL statements are automatically generated for loading, updating, creating and deleting. Uses subset of ODMG's query language www.castor.org
ObJectRelationalBridge - OJB (JDO) JDO (Java Data Objects) is a Java specification java.sun.com/products/jdo Finalized in 2002 Transparent persistence framework accomplished through byte code enhancement (which some don’t like). Spec does not dictate the type of data store (relational or object-oriented databases). Spec does not address object to relational mapping (mapping files will not be portable) OJB is an open source JDO implementation db.apache.org/ojb Many open source and commercial implementations of JDO KodoJDO is leading commercial implementation. See www.jdocentral.com.
Comparing Persistent Frameworks Options Roll-your-own with JDBC/POJOs OR mappers á la TopLink, CocoBase Hibernate JDO implementations EJBs Other open source options (Castor, iBATIS) Bruce Tate and others have given several talks dev2dev.bea.com/pub/a/2003/07/Java_Persistence.html (although some comments are outdated) Outlining pros/cons of each
DBCP Part of the Apache commons project (more in a bit) Provides database connection pooling services Tomcat and James use DBCP jakarta.apache.org/commons/dbcp/ There are several connection pool utilities. Most servers have them built in.
Hypersonic SQL (HSQLDB) Hypersonic SQL is full relational database engine. Written in Java Provides a JDBC driver Supports a large subset of ANSI-92 SQL PolePosition is a benchmark test suite to compare database engines and object-relational mapping technology. Found HSQLDB/JDBC to be one of the more performant open source DBs (www.polepos.org) Offered as optional/free database server for many commercial products Example: Systinet Registry hsqldb.org There are a number of Java open source RDBMS. Of course, MySQL, though not Java, is the world's most popular open source database
Design and Development Tools Eclipse NetBeans jEdit Java CVS Client SQuirreL ArgoUML JLint Velocity Jalopy ProGuard Ant AntHill Commons XDoclet Maven we save for later.
IDEs and Editors IDEs – many to choose from; few widely used Eclipse (Eclipse.org) NetBeans (NetBeans.org) Significant commercial competitors (WSAD, IntelliJ, JBuilder,..) Java Editors – many to choose from jEdit – (www.jedit.org) TextPad (textpad.com - not Java) – also provides Java edit, compile, execution JBuilder is not being open-sourced despite reports on Registry.com
Eclipse vs. NetBeans Eclipse Based on IBM/OTI’s work which started in ’98 Released to open source in 2001 Built on premise of plug-ins on top of base platform Dozens of plug-ins and projects Allows for non-Java development Most popular IDE Requires assembly of many plug-ins based on needs NetBeans Made open source by Sun in 2000 Heavily influenced by Sun Governed by community and 1/3 by Sun More all-encompassing/inclusive (no plugins required) Java develop platform
Additional Development Tools jCVS – a Java CVS Client (www.jcvs.org) SQuirreL – a Java SQL client application (squirrel-sql.sourceforge.net) ArgoUML – UML 1.4 design tool (argouml.tigris.org) JLint – Java code checker looking for bugs, inconsistencies and synchronization problems (artho.com/jlint) Velocity – a template engine (jakarta.apache.org/velocity) Used in several Apache projects Jalopy – code formatter (jalopy.sourceforge.net)
Additional Development Tools (cont) ProGuard – code obfuscator (proguard.sourceforge.net) Many IDEs, like NetBeans, uses ProGuard Ant – build tool (ant.apache.org) Antelope - A GUI for running Ant and editing build files (antelope.tigris.org) AntHill – controller for the build process (www.urbancode.com/projects/anthill) XDoclet – A source code or other document generation engine (xdoclet.sourceforge.net/xdoclet) XDoclet is an extension to the Javadoc Doclet engine Commons – a library of all sorts of reusable Java components (jakarta.apache.org/commons) There are often many competitors – these tend to get most of the attention in their perspective area.
Unit Testing JUnit is the original unit regression testing framework www.junit.org Has many extensions and IDE adapters HttpUnit is a unit testing framework for testing web based applications www.httpunit.org HttpUnit models the HTTP protocol – testers deal with request and response objects. HtmlUnit is also a unit testing framework for testing web based applications htmlunit.sourceforge.net HtmlUnit models the returned document – testers deal with pages and forms and tables. JUnitPerf is a collection of JUnit test decorators used to measure the performance and scalability within existing JUnit tests. www.clarkware.com/software/JUnitPerf.html Cactus is a framework for unit testing server-side java code (Servlets, EJBs, tags, Filters, ...). jakarta.apache.org/cactus Extends JUnit
Beyond Unit Testing Jameleon is an integration and acceptance-level testing tool. jameleon.sourceforge.net JMeter is a tool to load test and measure (performance) functional behavior jakarta.apache.org/jmeter Abbot is a tool for unit and functionally testing Java GUI (Swing/AWT) abbot.sourceforge.net A lot of commercial competition in testing market Mercury, CompuWare, Quest (JProbe) and others See opensourcetesting.org for other open source alternatives
Support & Maintenance Tools Log4J Quartz Scarab Maven Bugzilla
Log4J Ubiquitous framework for logging application debugging messages. JDK logging offer similar functionality today. Apache Commons provides a bridge to either logging utility Sometimes Log4J will conflict with other logging packages in environment/server logging.apache.org/log4j Around since 1998 Version 1.3 expected this year (2006)
Quartz Quartz is a job scheduling system Jobs run on any number of triggers. Quartz can run stand-alone or in a cluster It can run embedded within another application It can be instantiated within an application server or servlet container) It can participate in XA transactions www.opensymphony.com/quartz Flux is a commercial competitor
Project Management Maven A “software project management and comprehension” tool. Initially started as a means to simplify the build processes in the Jakarta Turbine project. Uses concept of project object model. It is a site and documentation tool It extends Ant maven.apache.org Scarab Scarab is an issue and artifact tracking tool. scarab.tigris.org Bugzilla is leading open source bug tracking tool. Not Java! Plenty of commercial competition on management tool side.
Java JVM Miscellaneous Jikes – IBM open source JVM Developed in 1997 by IBM alphaWorks Typically faster than Sun’s JVM implementation Usually comes with Linux distributions jikes.sourceforge.net AspectJ Aspect-oriented extension to Java www.eclipse.org/aspectj Java and other language mixes Groovy – Java-like scripting language on JVM (groovy.codehaus.org) JRuby – Ruby interpreter in Java (jruby.sourceforge.net) Jython – Python interpreter in Java (www.jython.org)
Wrap Up Raise the open source awareness level! There is probably an open source tool for almost every part of your application’s lifecycle. In most cases there is more than one option. Even if you have the funding for commercial products Explore open source alternatives – may be just as good or better Explore the features, benefits, issues so you know what you want in a commercial alternative
Recourses For more information, check out these references: java-source.net jakarta.apache.org TheOpenSourcery.com SourceForge.net OSDir.com (O’Reilly’s open source page) FSF.org (Free Software Foundation) Gnu.org Richard Monson-Haefel on “Rebel Frameworks” http://www.burtongroup.com/research_consulting/doc.aspx?cid=650