A few months ago, we published The Great Java Application Server Debate in order to investigate which servers were better for different tasks and use cases. As this was a report and not a feature length book, we limited our bake off to 5 application servers, Tomcat, Jetty, JBoss, GlassFish and the WebSphere Liberty Profile. We also mentioned IBM’s WebSphere Application Server and Oracle’s WebLogic Server too.
There are other options out there we wanted to talk about and decided to do it as a blog post after the original report. In this post, we pick some Application Servers which we didn’t talk about in the report, but that we think you might be interested in or should take a look at, including Resin, Tcat, Pivotal tc server, Geronimo and although we mention TomEE in the original report, we make light reference to it here as well.
Resin is a JavaEE 6 Web Profile compliant, lightweight app server first developed by Caucho 13 years ago. However reports suggest that it is only now picking up traction in the market, with netcraft showing 10x growth, between Feb 2011 and Feb 2012.
The latest release, version 4, comes in an open source, professional or enterprise flavour, providing extra functionality, runtime capacity and support with each jump.
Download and installation are a little pained as there’s not a simple unzip install option available. Instead you need to download, unzip, run a configuration script, make the native libraries, and then you have your installation complete (unless you want to access the admin console, in which case you’ll have extra steps similar to Tomcat). Your installation will actually be placed in the
/usr directories. I much prefer a single directory install which we’ve seen with most other application servers. So overall I’m not too impressed with the Dowload and installation process which needs a 7:08 video to explain. Ok there’s plenty more in that video, but my point is, it’s overly complex compared to other vendors.
Once installed though the admin is good, from command line, rest interface to the admin console itself. There are only 2 config files which are a bit verbose but are mostly comments showing you how to configure. One nice thing is the watchdog process (with pro edition) which monitors your Resin server and restarts it if an unexpected stop occurred. A report is also generated per incident when this happens so it can be debugged.
Resin also has (as you’d expect) great integration with it’s Resin Web Server with load balancing capabilities (even distribution) across the cluster.
The Caucho site contains good documentation and to get you started and up and running with Resin, including video demos, samples and tutorials. There is a forum, but this doesn’t look particularly active, most questions going unanswered. As far as tooling goes, there’s support for the big 3, Eclipse, IntelliJ and NetBeans and this is purely to manage a server within an IDE.
Mulesoft created Tcat server as “Enterprise Tomcat made simple“. They pretty much wrapped Tomcat with an agent and provide enterprise QoS on top of the stable Tomcat base. So, lets see whether that’s true or not!
First of all we have to download the binary and run the installer for our platform, which means accepting a license agreement, choosing which level of Tomcat to use (options on the installer are Tomcat 6 and Tomcat 7, with the Tcat agent) and the Tcat server console. We also choose where we’d like to install it and are presented with a list of ports which Tcat would use!
I accepted the defaults, but had a rogue Tomcat instance already running on my machine, so I received an error explaining the port was in use! Neat, although annoyingly I couldn’t override this and shut down Tomcat later. No worries, I’ll just update the port 8080 to 8081 and continue. The installation is pretty quick and painless, as is the server start-up; but what would you expect, it’s Tomcat!
However, it seems not all checks we’re in place as I got the following error:
SEVERE: StandardServer.await: create[localhost:8005]: java.net.BindException: Address already in use at java.net.PlainSocketImpl.socketBind(Native Method)
Oops – more checks needed! Anyway, once the path was clear and I did get the server up and running, the first thing that hit me was the server startup time – 40 seconds! That’s about as long as the major application servers like WebSphere, out the box! What on earth could Tcat be doing that takes so long? The question is, is it worth the wait…
Let’s go to the admin console and take a look at what it offers. Starting with the Servers tab, there’s a huge amount of useful information available around each managed server, but sadly this is very much readonly, similar to the vanilla Tomcat admin console. It looks more like a server dashboard with depth than something you’d administer.
However, you are able to distribute configuration across your Tomcat instances from the Administration tab which really would save time for larger deployments.
You’re able to group servers so you can logically see clusters and deploy across these groups. A ‘Deployment’ is a number of web applications that you can install onto an application server or group of servers. When servers drop out of a group or join new groups, you have the option to update their deployments as they go.
So what are we really saying here? We’ve talked a lot about the operations model and little about what it offers from a development point of view. That’s really because the best way of using Tcat is to play with Tomcat in your development environment and use Tcat as your operations tool to deploy to your environment and manage your Tomcat server farms. So why are we including it in a development review? Well, Tomcat suffered in the report with its admin and looking forward to production, it would suffer even more as it doesn’t have the services Tcat provides. It would be nice to see Tcat providing more of an interactive server view where you can neatly view and make changes to config on a per server/group basis, but overall, I like what it offers.
Tcat documentation is good, although I must admit I did get a little lost on the mulesoft site a few times.
Pivotal tc Server
The Pivotal tc Server is another app server which enhances the Tomcat stack by providing value adds in the enterprise view. From the download site, both a standard edition runtime and a developer edition runtime is available, and once downloaded, unzipped you are able to create servers using either the Tomcat 6 or 7 base. I created an instance which contains ‘Spring Insight‘, an application that allows you to debug your Spring applications from JDBC queries to Spring bean iterations to looking inside HTTP headers.
On starting the server, you’ll notice the Tomcat lingo changes slightly in that you’ll call
tcruntime-ctl.sh start rather than
startup.sh but the output is very familiar. (By the way, if you’re on RHEL, you can install as an RPM – neat!) Once you have your server up and running, you’ll first notice that it took a fair time. Mine typically took between 40-50 seconds on a good machine, which again surprised me.
So, how can I configure and manage the server? Well there’s a Hyperic tc Server Plug-in which manages all my runtime instances (not just local ones) as well as configure server specifics, including data sources, ports and JVM options. Application life cycle management is also available through the admin console as it is with the Tomcat manager app.
There is also a CLI to view your servers and deployments as well as install and uninstall apps. There is also instance and group management that can be performed. One of the big reasons you might choose tc server is if you’re a Spring shop/fanboy. The tc Server Spring Edition is part of the vFabric Suite and includes Spring Insight Operations among other features and Spring commercal support. The Operations part of Spring Insight allow you to use the functionality in production :) although I couldn’t see how much of a performance hit that would cause. Perhaps those in the know or users could let us know in the comments.
Documentation is pretty good, hosted on the vmware site, although given how tc server has changed hands a fair bit, I did find myself looking through SpringSource, VMWare and Pivital sites for the info I needed. The VMWare vFabric Suite docs look to be the most substantial and is eventually linked to from the Pivotal site. Community wise, you’re in luck as you’re basically choosing the largest most popular base (Tomcat) with the largest web framework/eco-system around (Spring) and given you’ll likely be writing a Spring app, these are all things that should make you happy as the community is lively and abundant.
Geronimo sounds like something you’d cheerfully shout while jumping off a cliff, perhaps hoping that whatever it is you land on, will be soft. Let’s see if the same applies to the project it represents :)
Geronimo is an Apache Project which was once wrappered by IBM in to their WebSphere Application Server Community Edition, but has since been dropped in favour of their new (well, newer) Liberty Profile offering which featured in our main Application Server report. Did you know Geronimo is a FULL Java EE 6 certified application server? Personally, I feel like it’s not a well known fact, and it can be overlooked as for some reason it’s not considered one of the popular platforms. It actually goes beyond Java EE as it also supports OSGi applications (via the Apache Aries project), and you can choose whether to use Felix or Equinox as your runtime implementations.
Once downloaded, you can simply unzip install and call
geronimo run to start your server. With the server started you can access the admin console that provides the usual deploying of applications and EBAs/assets for your OSGi applications, configuration and management of your server, connectors, JMS resources, datasources, security and much much more.
As with all Open Source implementations the tools and admin tends to suffer a little in the design and style points. Geronimo is no different, but although the console looks like it came from the 80s, it does at least work :) The documentation is actually very good, although in a few places you do find yourself reading stale docs which haven’t been updated in a release or so.
As far as tools go for the big 3 IDEs, Eclipse and IntelliJ plugins exist, but I couldn’t see anything for NetBeans that support a Geronimo v3 server (v2 support exists). This provides the usual capabilities such as managing a server and pushing apps onto it from your workspace. Maven support also exists to deploy apps and manipulate the server.
Let’s of course not forget about TomEE (pron. Tommy) which did feature in the main Application Server report, but I wanted to lightly mention it again here, just so you know what it is! :)
TomEE literally wraps the Tomcat base with feature rich value adds that bring Tomcat up to a Web Profile compliant standard. I must admit I’m a TomEE fan and an closely watching how it picks up traction in the years to come, as it’s very much automating what is today a manual process. Such a large proportion of the Tomcat user population construct a bespoke server for their production making use of additional bundles for JPA and EJB support, which then require some level of local support and maintenance. TomEE bundles this out the box, releasing you of the bespoke and often high maintenance solutions.
So which should you go ahead and use? Well, I don’t think anyone would raise their eyebrows if you picked any of them to be honest, as they’re all very good in their own right and should be seriously looked at and considered. If you’re currently using Tomcat in production, it’s well worth taking a look at some the options available to you from a production point of view which value-add products like Tcat and tc server can offer. But if you’re using one of other big names (namely, JBoss, Jetty, GlassFish or Liberty Profile), then you’ll likely be ok sticking with those–especially if you read the full report that compares them all!