Full GlassFish adoption questionnaire responses from Florent Garin of DocDoku.

Date : January 2007


Can you tell us about the application, site, or service in which you have adopted GlassFish?

DocDoku is a document centric management software that helps people share and collaborate online. DocDoku includes many features like versioning, workflow, tagging and so on. But the most important of them is its clear interface and its turnkey capability.  For those interested in the naming, "doku" means "unique" in Japanese, so DocDoku is really about never loosing your document.

From a technical perspective, we started developing DocDoku as a plain Java SE application. The client front-end was implemented using the Java Swing API and the back-end system was made of basic RMI services. Progressively, as we were adding features, we were seeing ourselves implementing technical services that you get for free in a modern application server. So, we decided to migrate our software from a custom based architecture to a state-of-the-art Java Enterprise Edition application. When we started looking for a Java EE, we set the criteria as follows :

While this narrows the choice, we still had two options: JBoss and GlassFish. Finally, after a week of strong debate and prototyping, we selected GlassFish. Even if frameworks like Seam or Spring integrate great ideas, to preserve our investment, our strategy is to keep using the Standard as possible (Java EE 5.0 in our case). We’re convinced that, sooner or later, every valuable feature exclusively found in other alternative frameworks will fall back into the Standard.

How did you go about technically refactoring your code to use the Java EE 5 APIs? 

On the server side, switching from plain RMI services to EJB3 session beans didn’t seem to be a heavy task. The new annotation+POJO paradigm saved us from the burden of creating EJBs as in the previous version of the spec. However, the migration process involved some redesign decision. Specifically, one of our old RMI services was acting as a bootstrap, performing authorization and returning other service references when needed. The initialization of these services was done with nonserializable parameters. Such a pattern is inapplicable to the EJB world, since a remote business interface cannot define an init method that accepts non-serializable parameters. Moreover even if the same EJB object can be exposed through either a remote or a local interface, you cannot use alternatively both interfaces on the same object instance.

The side effect of replacing RMI remote objects by EJB session objects was also changing the underlying protocol from JRMP to IIOP. Unfortunately we encountered a strange bug in the J2SE IIOP implementation which had to do with failing IIOP-serialized enums comparisons. In my opinion, it's important to fix this bug given the Java Language Specification states that "there is only one instance of each enum constant". Anyway, the workaround is simple: compare the names instead. In the end, we were very satisfied as our code was drastically reduced (using annotations) and all the technical glue code were thrown away. The whole application could now benefit from the scalability of the J2EE platform.

On the client side, we didn't change our deployment mechanism. We're still using a standalone Java Web Start client. For the moment, we don't consider switching to the Application Client Container (ACC). However the idea of a client container is awesome, we're just waiting for more benefits to come with future evolutions than simply the dependencies injection. For the deployment part, the biggest problem we met was the need to carry out more than 15Mb of libraries (appserv-rt.jar and javaee.jar) on the client. It's very frustrating to have to deploy such libs when you know there are already tons of "corba" classes in the Java SE API. Hopefully,
after passing all the libraries to the pack200 compressor, the total size of the jars was reduced to 5Mb, which is acceptable in our case.

How and when did you first find out about GlassFish? 

I first heard about GlassFish on the java.net web site, maybe at the end of 2005.

What specific version of GlassFish are you using? 

V1 Milestone 7.

On what operating system do you run GlassFish? Do you use the same OS for both development and production deployment? 

All our development workstations run on Ubuntu linux. The production servers are driven by a custom linux based on RedHat 7.2. Although it gives us full satisfaction, as the number of users increase, we will need a more powerful OS with features like ZFS or DTrace. Debian or Ubuntu with their large adoption could be good candidates. Solaris 10 is also an interesting alternative that could offer the advantage of one supplier (Sun) for the hardware, the OS and the application server.

What specific features or modules of GlassFish are you using?

Mainly the EJB Container (stateless, stateful and entity beans), the JDBC connection pooling, and the IIOP support for Rich Clients. For the web part we use Servlet and JSP. In the long term, we expect to develop a small web client with JSF that would expose the main features. 

What do you like most about GlassFish?

We want to have a productive platform and don’t want to waste time maintaining thousand of xml files. In that sense, the GlassFish web administration console perfectly fits our needs. Setting up the server environment through the web console is a real pleasure. Installing the mySQL jdbc driver, configuring the authentication realm (we used this JAAS module), the database connection pool, the mail session and so one can be done by a kid. Every imaginable parameter, from classic application entries (connection pool...) to complex management rules, can be set. For example, we also tuned the IIOP listeners to increase the Max Message Fragment Size parameter. GlassFish has also high end profiling and monitoring features. Really, the GlassFish web console is very impressive.

The integration with NetBeans is also very valuable. It doesn't take more than 10 minutes to write, deploy and run a "Hello world" Java EE application on GlassFish from a fresh default NetBeans installation. However, to be honest, I believe that as soon as the other Java EE servers pass the Java EE 5.0 certification the NetBeans open architecture will make it easy to reach the same level of integration.

What would you most like to see improved in GlassFish?

Smaller libs on client side to communicate with GlassFish and better documentation to support "legacy" features such as IIOP HTTP tunneling.

Are you using any open source or commercial frameworks or tools in your application?

We base our development on the standard Java EE 5.0 framework so apart from TopLink Essentials which is included in GlassFish and accessed transparently through JPA we don't use other commercial or open source frameworks. However, on the client side we have dependencies on some third-party libraries like synthetica for the look and feel (commercial license), l2fprod-common which provides additional Swing components and JDIC for desktop integration.

Have you bought support for GlassFish?

At this point, the community support was sufficient. Having said this, it might be interesting for us to do so in the near future and would certainly save the team precious time searching the web as we did recently.

Does your application use a database? If so, which one?

Yes, mySQL 5.0.

Are there any figures about the scale of your adoption which you would like to share? 

We didn't invest yet a penny on internet marketing, hence the modest adoption rate around 10 users per day. In fact, the surprise came from middle and big companies, some of them asking us to deploy our software on their enterprise network. We're currently setting up a system intended to scale to 250 users. Even if selling license fees is not our core business, we're proud of these references because we won against well established content management system vendors because of the ease of use of the solution that leads to a low learning curve.

How has GlassFish performed since your application went live?  Have you run into any production issues which you would attribute to GlassFish? 

Three months have passed since we deployed GlassFish in production for our hosted service, the server always behaves perfectly and we never had to restart it!

How would your describe your participation in the GlassFish project?

For now, we didn't participate much. We were too busy bringing our product to market. However, we plan to do so. We're offering our application as a hosted service. The performance and the stability of the whole system is a key factor. It's our own interest to participate and thus benefit from the open source approach.

Is there anything else you think would be of interest in a story about your GlassFish adoption? 

As a conclusion, the Java EE 5.0 + GlassFish + NetBeans package is definitely a killer platform for developing and deploying your enterprise applications and every serious java enterprise developer should give it a try!