I’ve arrived at JavaZone in Oslo, Norway and I’ve been having quite a good time so far. The morning’s entertainment, a band that employed banging on dishwashers, freezers, and other loud boxes, was very rousing. The talks seem to be well attended as well, so I’m eager to see how many people show up for my talk on Quercus later today (Zone V, 15:45). There are also live projected videos of each speaker in the main hall and I just overheard someone say that you can point your headphones at each video to hear different speakers! The organizers have also set up a whiteboard area so that speakers and attendees can talk and brainstorm after the presentations. You can find me there after my talk…
Archive for the ‘Evangelism’ Category
Today, I had a call about Quercus and I’ve been working on my presentation for JavaZone and these two things made me realize that we still have some confusion around the various Caucho products and licenses. We’ve got some people working on real literature explaining all of this, but in the meantime, I thought I’d try to clear up some of the confusion with a quick post.
I’ve been working on finishing up the Resin administration training course and one of the subjects is “When and why to use PHP on a Java server”. Of course, I’m referring to Quercus and as I wrote this section, I realized some things about the PHP and Java open source communities.
Java’s open source community is most well known for producing great libraries and frameworks, while PHP’s is most well known for producing great applications. In Java, it’s often assumed that you’re paying someone to produce the application while in PHP it’s often that you’re not paying anyone or you simply don’t have time to write a custom application. With these things in mind, Java and PHP really can be viewed as complementary technologies. So when would you use them together?
- When you need to get an application ready right away and there’s a popular PHP application available, but you’re a Java shop
- You want to unify existing but separate PHP and Java deployments into one
- Moving a PHP-only site to Resin for improved performance, reliability, and monitoring
- You need PHP for the frontend and and Java libraries on the backend and you want them to be able to talk to each other easily
These are just a few of the examples that I came up with, but I’m sure there are more. What has your experience been?
This weekend’s WordCamp was really quite impressive. I wasn’t sure what to expect, having never been before, but I learned about a lot of interesting technologies and development strategies. It was so inspiring in fact, that I forgot to blog about it because I was upgrading to 2.6.1 and installing plugins yesterday.
I gave a talk on running WordPress with Quercus (slides here), which was well received for being the presentation right after lunch. Even so, there’s still a lot of work to do for us to improve the understanding of both the PHP and Java communities about what Quercus offers. One of the things I realized after the presentation is that I didn’t really show exactly how this could affect the WordPress user on the street.
During my presentation, I talked a lot about the joining together of the Java and WordPress communities. What does this actually mean if you’re a WordPress user though? Well, whether you know it or not, there’s a chance that you’ve already been reading blogs written in WordPress, running on Quercus (other than this one :-)). WordPress-related jobs are already appearing and will probably be increasing in number, so if you’re a WordPress user who’s thinking about going pro, it might be useful to you to get familiar with running WordPress on Java. There are some really big sites that are Java centric, who want to use WordPress. You could be the one to help them do it.
Tim Dawson, of International Decision Systems (IDS), was kind enough to write me a few weeks back about his use of Hessian in an equipment finance application. We collaborated to write a case study and it’s posted on our web site.
I got a nice note from Frank E. Banks yesterday about his cool new music search engine, musedot. It’s running on Resin and Quercus open source. Here’s a quote from Frank about why he chose Caucho for his platform:
Musedot (http://musedot.com) is a music search engine I created that is built with java for the core logic and uses resin/quercus for java integration and presentation logic (php). Once I determined that I would need to write a search engine from scratch, and one that needed to be robust and fast, I started doing a lot of research on the best architecture and settled on resin/quercus because I wanted to avoid the overhead of the Java web services model and doing something as complex as writing it all in C was totally out of the question. The fact that it is open source was also important. Despite having to learn two new program languages, java and php, the development process has gone smoothly (for software development) and I my choice has proven to be an excellent one.
Resin is one of the easiest application servers to develop with because of a number of developer-oriented features, but not a lot of people know about them! Let me mention a few of my favorites here:
- Automatic, in place compilation and recompilation of Java source. This feature lets you develop Java with the same ease as PHP. Just save your .java file in your webapp’s WEB-INF/classes directory (with the appropriate package path) and Resin will compile it for you. Changes are picked up as well and redeployed without restarting the whole server. Forget the hassle of building a .war for every little change, much less restarting the server.
- Versioned webapps. Say you’ve deployed your application, but found a bug. There are a few users who still have live sessions, so you don’t want to boot them off, but at the same time, you don’t want to allow new users to start new sessions with the buggy webapp. Versioned webapps let you deploy a new version that runs in parallel with the old version. The new version gets all the new sessions, while the old version stays live until the last old session expires. It allows a nice, soft rollout of new code. To use the feature, all you have to do is name your .war files with a version number. For example, foo-1.0.war would be superceded by foo-1.1.war, automatically.
- Live profiling. The /resin-admin application that’s provided with Resin has a number of great features for developers, one of which is the live profiler that shows how much time is spent in any given method and gives a stack trace to show how that method was reached. This should help you find the bottlenecks in your application.
- Heap dumps. This is another feature in the /resin-admin that gives you a sorted heap dump showing which objects take up the most memory.
There are a ton of other features, but hopefully that gives you a reason to try Resin or check out some of the features you’re missing if you’re already using Resin.
Existing users: are there any features that you’re using that you find helpful as a developer?
I’ve got a couple of articles in the latest Flash & Flex Magazine about Hessian. You can even download one of them!
I’m submitting another article on using BAM with a Flash client that should hopefully be out later in the summer.
Thanks to Frank Greco and everyone who came out to see my presentation at the NY JavaSIG. I got some great questions and it looked like a lot of people were starting to understand the problems with interactive applications using HTTP. BAM is the way to go! Anyway, here are the slides from my presentation: NY JavaSIG slides on BAM/HMTP
And, a correction: During my presentation, I stated that there is no standard intereface for Comet on the server. While technically true, the new Servlet 3.0 draft spec has an API. Someone mentioned this during the Q&A and I said that while I had looked at the spec, I didn’t actually see the Comet references in there. Well, they are there in Section 22.214.171.124. I haven’t had a chance to review the spec thoroughly, but it looks like a nice compromise. Webtide’s Greg Wilkins has a nice intro here that features Comet use cases in Servlet 3.0. There were a lot of attempts to create Comet APIs from us, Jetty, Tomcat, and Glassfish, so if we can standardize on something reasonable, that will help everyone. It still doesn’t change the fact that HTTP was not designed for this kind of interaction though.
Just a quick note: I’m sitting in the Brooklyn Bagel & Coffee Company on 8th Ave (Free Wifi!) with about 2.5 hours until my presentation at the NY JUG on BAM/HMTP. There’s a demo up here that I’ll be presenting during the meeting. It’s good enough to see what’s happening at the moment, but it will get even better in the coming weeks and might even be posted as a Facebook application.
See you at the JUG!