A visit to JUG Ukraine

Call me crazy or workaholic but I took a few hours out of my vacation in Kiev, Ukraine to visit the local JUG.

The meeting was hosted at GlobalLogic (somewhat of a geek’s paradise) and was pretty well attended given the last-minute organization. The presentation slides (in English) are here and the full photo album there.

The presentation started with a bit of a challenge as no one was using GlassFish (mainly WebLogic, WebpShere, Tomcat and some JBoss). Given the presentation + Q&A session lasted almost 2 hours, I think it’s fair to say that the interest was great. There were many questions during and after the presentation. Here’s the refined Q&A:

• OpenESB looks interesting (documentation, NetBeans graphical tooling, …), but can I use BPEL4People with it?

Unfortunately IBM does not support JBI and to the best of my knowledge, there is no BPEL4People service engine. OpenESB and JavaCAPS do come with a WS-BPEL implementation though.

• What is the Hibernate/TopLink split? (me asking)

– Hibernate: 60%

– TopLink: 40%

• Is the 404 error in the admin console during your demo a bug or a feature ? ;)

Well, GlassFish v3 is running on top of Felix by default so it can host any OSGi bundle. The question is rather how it can extend the features of GFv3. This is a nice picture to explain the additional metadata required.

• Can GlassFish run on the JRE (not the JDK)? This makes a difference for me in terms of re-distribution.

Provided you don’t need to compile JSP’s, GlassFish should run fine on top of the JRE, but this has not been extensively tested. Note that creating domains also requires the JDK (although that’s not really runtime per say). I’ll probably blog more on this, including the legal side to this (yes, you can redistribute the JDK).

• How does GlassFish manage the ClassPath when using JSR 199 (Java Compiler API) to compile JSP’s?

The default JavaDoc for this API isn’t really helpful. In general, JavaCompiler.getTask(...) gives you the ability to pass a set of options, including a classpath. You may also find this testing API to be helpful in debugging compile issues. Finally, this link explains the performance benefits of using JDK 6’s javac API in GlassFish. All is done dynamically now, all you need to do is use Java 6 to run GlassFish.

• Does GlassFish support distributed transactions between multiple JVMs?

Well, if you’re talking about WS-Coordination and WS-AtomicTransaction, these are both implemented as part of the Metro Web Services tack which itself is part of GlassFish v2 and above. This enables distributed transactions even with .Net services.

• You claim that Grizzly has very good performance for serving both static and dynamic data. Do you have any benchmark results?

Yes. You probably want to start looking at this original post by Jean-François Arcand. It’s a bit old but Grizzly and GlassFish only got better with time!

• How do you move from one version of GlassFish to another? Other products make this pretty painful.

We take compatibility very seriously. It’s a company thing (think Java 1.0). With every copy of GlassFish we provide bin/asupgrade which allows you to point to a source GlassFish domain, say GlassFish v1, and a target, say GlassFish v2. The tool will proceed to read the applications, resources, and configuration and recreate them in the target application server. You can achieve similar results with bin/asadmin backup-domain and bin/asadmin restore-domain within a single version of GlassFish.

• Have people started using GlassFish in production? Any more you could share?

Some people (like Wotif.com) have started in production using GlassFish v1. With the release of GlassFish v2 less than a year ago, we’ve seen a great level of deployments some (a fraction) of which are discussed by the users themselves on this blog: http://blogs.oracle.com/stories.

• Does GlassFish suffer from the same memory leaks as Tomcat on redeploys?

We’ve fixed a couple of bug in GlassFish v2 which should make the redeployment of artifacts painless, including on Windows which had a tendency to lock deployed files.

So there you are, this is all the questions I could remember. If you have more, please comment here, I’ll add them to the entry.

Well, with the performance (both static and dynamic) of Grizzly, and thus GlassFish, a Web Server is not needed for simple network topologies (no DMZ, no load-balancing). Of course you can use Apache with mod_jk or mod_proxy if you need to.
Does that answer the question?

Thanks Alexis for your answer.
In a realtime enterprise level need, where there would be clustered and load balanced environments, will mod_jk or mod_proxy scale up and perform well or are there foreseeable issues around such a setting?

re: Running on JRE – We could have a redistributable, small, subject of the JDK that only includes javac and that can invoked via JSR199, and bundle that w/ GF. It is mostly a legal/packaging/resourcing exercise. We would be interested in use cases to help us prioritize this effort.
– eduard/o

@Geertjan: thanks, this fits nicely into the OSGi question.
@Albin: we’ve made extensible scalability testing with Sun Web Server as the front end to a GlassFish cluster. In the case of Apache Web Server, you can find tips and tricks on configuring the proper mod_\* on the user mailing list. No reason for it not to scale to a large number of user connexions and glassfish instances. In any case, the testing we’ve done proves the scalability of the clustering technology itself (based on the shoal sub-project). By the way, the GlassFish Cluster is load-balancer agnostic. You can also use dedicated hardware or software load-balancing.