JMX

Today I joined two sessions on JMX, one was given by Eamonn McManus's and one of the new JMX features coming in JMX 1.3 (which will be part of Mustang) is the possibility to directly query attributes of a composite element. So for example you MBean has a ThreadInfo attribute, which is an object that has attributes in itself. Using this new feature you can directly query one of the attributes of the ThreadInfo attribute by addressing it as threadInfo.isActive.

In the last project we did we ran into the similar problem and solved it by utilizing commons-jxpath and commons-modeler of the Jakarta-commons project. What we did was define a custom MBean implemenetation class com.sun.util.jmx.JXPathEnabledMBean in the mbean-descriptiors file of commons-modeler like this:

<mbean         
  name="Foo"
  description="Foo something."
  className="com.sun.util.jmx.JXPathEnabledMBean"
  type="com.sun.x.y.Foo">
The className attribute overrides the default ModelMBean of commons-modeler. In the JXPathEnabledMBean class we used JXPath in the getAttribute() and setAttribute() methods to drill down to the requested attribute in case the requested attribute an atomic member of the class managed object itself. As an example the getAttribute() method:
public class JXPathEnabledMBean extends BaseModelMBean {

  public Object getAttribute(final String name)
      throws AttributeNotFoundException, MBeanException, ReflectionException {

    try {
      return super.getAttribute(name);
    } catch (ReflectionException re) {
      // Attribute not an atomic attribute of managed object
      // Try using JXPath...
      JXPathContext context;
      try {
        Object object = getManagedResource();
        context = JXPathContext.newContext(object);
        // JXPath uses '/' to as separator...
        String attName = name.replace('.', '/');
        return context.getValue(attName);
      } catch (Exception e) {
        // Here we know the attribute is not retrievable at all.
        logger.error("Failed getting attribute via JXPath", e);
        throw re;
      }
    }
  }

.....
}

The plan was to post to my blog at least once a day during JavaOne. All went well till my server at home got disconnected from the internet :-( So I gave Mirjam a call to figure out what the problem was. Time to teach Mirjam je basic Linux commands... Open a terminal (right click an select "new terminal") and try doing an "/sbin/ifconfig -a". " I see 14 lines of magic ?!?" OK, anything like eth0 or eth1? "Nope, just vmnet.." What happened to the network interfaces? How am I going to explain how to configure network interfaces? Thats probably one step to far to do over the phone... no more blogging on JavaOne I guess...

Thanks to Wilfred we (Wilfred, Marcel and me) were sitting first row during the first keynote session at JavaOne. One of more funny things was the celebration of the 10th birthday of Java. Most of the original Green team that created the first version of Java was present and was invited to come onto the stage. When James Gossling and Scott Mcneally invited the Green team, all people sitting next to us on the first row stood up and walked onto stage... now that was very tempting... what would have happened if we would have simply did what the rest of the row did?

During this first key note there were a couple of interesting announcements. One cool one was the fact that Solaris DTrace will now also work for Java applications. So if you ever wonder why your Java application is not performing, consider using DTrace. If will give you detailed insight into all the system calls you app is doing and using that you'll be able to identify the bottlenecks.

The interesting announcements on the enterprise level were the open sourcing of Sun's Application Server (Platform Edition) and Sun's JBI (JSR 208) implementation. Both can be found at Java.net. The Studio Enterprise demonstration was interesting, it demo-ed how a service flow could be orchestrated graphically (not sure if the notation was BPMN) and generated a BPEL application of it. The BPEL implementation seemed to be FiveSight PXE since the console said "PXE start" when the application was deployed. Wonder if a BPEL engine will be included in the open sourced JBI implementation.

Boy would it be convenient if the airplane seats had a 220v outlet. I attempted to do some improvements on the JavaOne 2005 Schedule webapp but my batteries were empty before I knew it. The extra one I borrowed from the helpdesk specifically for this trip lasted 10 minutes... my original battery got me going a little longer. To kill some time I wrote this Blog entry using BlogME on my Treo.

I made two improvements to the JavaOne 2005 Schedule webapp. First, session that last longer than 1 hour are now spread over multiple rows (the start and end time were already correct in the generated vCalendar file). Second, when I imported the generated vCalendar file into Palm Desktop and then synced it to my Treo, I noticed that some crucial info (the location of a session, which is included in the vCalendar file) did not end up in the Treo. Palm Desktop and the Treo do not support the notion of a meeting location. That's not really handy when you're huuying to your next session. To overcome this, the session location is now prepended to the abstract of the session. This abstract is attachted to the meeting as a note and does end up in the Treo Calendar. After that I wanted to include the option to set alarms... but the screen went black...

In the plane I watched "Et Un Momento Dado", a movie about Johan Cruijff and the impact he had on Catelonia and Barcelona. Cruijff is the best dutch soccer player of all times and is in the same league as Pele and Maradona. Funny to see the impact a sportsman can make on so many people. Some even start crying when asked for their favorite Cruijff moment.

233 miles / 35 minutes to SFO.... almost there.

Check out my JavaOne 2005 Scheduling aid. Using this web page you'll be able to:

  • Get an overview of all JavaOne 2005 technical sessions and BOFs
  • Define which topic's you want to include in the overview
  • Generate a vCalendar file that can be imported into lots of Calendar applications (Outlook, Evolution, Palm Desktop, ....). This file can either include all of the sessions that you selected, or the sessions you selected and all other sessions.
I succesfully imported data into Evolution and Palm Desktop.

There are some things to keep in mind:

  • I noticed that Palm Desktop creates duplicate entries if you import the same file twice :-( This is a problem of Palm Desktop. Importing the same file multiple times into Evolution did not create duplicate entries.)
  • The generated vCalendar file is very rich (check out here). However, not every Calendar application imports all data. Evolution for example does import meeting attendees and categories, Palm Desktop does not.

There are still some things I'd like to improve:

  • All sessions are displayed on the webpage with the same length, which is not true. Some sessions are longer than others. The vCalendar file does contain the correct start and end times for sessions.
  • Add alarms to session that have been selected to attend
  • Create a slicker look & feel (it's really basic now).
  • Set up an automatic process that takes the latest updates in the JavaOne schedule.
That should be a nice job for the flight to San Francisco... if my battery lasts long enough...

Bummer...

Just found out that the calendar on my Treo 600 does not support categories! I'm pretty sure my old Palm did have categories for the calendar items.... the Treo 650 also seems to have it... This is going to make nearly impossible to import all JavaOne sessions into the Treo 600 calendar and still make sense of it? There are 10+ concurrent sessions taking place all the time and that's going to look pretty crowded on a small displaty. Using the categories you could limit this too only the session of a particular category, usually 2 - 3 per time slot.

I'll need to include an option in the webapp to only include the session I'm interested in in the generated vCalendar file. .... and I need to find some time to build the webapp...

As I described in Preparing for JavaOne I attempted to get my Treo 600 synced using Synthesis SyncML Client and the Sync4J SyncML server. Unfortunately the SyncML server and the Synthesis client are not completely on speaking terms yet. I got the sync process to start, but it never completed, tried to fix it, but no luck.

A different approach is needed to get the session details of JavaOne 2005 in the calendar or my Treo. Bert Ertman described a more k.i.s.s approach and that triggerd me to do the following. Instead of syncing directly to the palm, I now create a vCalender file that can be imported into any application that understands vCalender files. Examples are Evolution, Outlook and the Palm Desktop client. After importing the vCalendar file into one of these applications you can sync your PDA and you're done. Using some shell scripting (based on some prework by Wilfred), a little XSL and Java this was done quickly.

I now have a vCalendar file containing all details of all breakout sessions. So all sessions and BOF are included, the general sessions are not included. The calendar items contain:

  • Session ID
  • Title
  • Category
  • Abstract
  • Date
  • Start time
  • End time
  • Location
  • Speakers
I successfully imported this vCalender file into Evolution and all looked fine. What appeared to be very convenient is that I could limit the number of sessions displayed by selecting a specific category. With 300 meetings scheduled in 4 days time it get's a bit busy in the display...

What's next? In the current situation all sessions are imported and there is no notion of what sessions I'm intending to visit. The plan now is to create a web application that allows me to select the sessions I wany to attend. Once selected it will then generate a vCalendar file that adds an extra category to the sessions I want to attend. In my calendar application I can then quickly get an overview of the sessions I want to attend by selecting this category.

How am I going to keep track of all sessions at JavaOne, the subset of sessions I want to attend and the other meetings I'm scheduling? Obvious answer is to use the calendar I always use, namely my Treo 600. How do I get all sessions in there? Mmmm, must be a problem someone else already tackled.... but I could not find someting on the internet.

My idea now is to get all define categories per track in my calendar and one extra category for sessions I plan to attend. Challenges I see now are:

  1. Grab the session details from the JavaOne site
  2. Grab my schedule from the JavaOne site
  3. Get this data into the Treo calendar
The first two point don't seem to hard. The last one is more tricky. I'm currently looking at Sync4J and the Synthesis SyncML Client for my Treo. Once I have that working I should real easy to take the session details from the first two points, feed them into the Syn4J server and then sync my Treo.

If all went OK my blog entries should now also show up on planetsun.org...

Visiting JavaOne this year is triggered me to dust of my J2ME Blog Client: BlogME. I created this app about a year ago and just forgot about it. Using BlogME I'll keep track of JavaOne from my Treo 600. Needless to say that this post was also written and posted using BlogME...

I'll be a JavaOne this year and guess what, I'll be assisting in the tossing T-Shirts during tuesdays general session! These shirts are personally design by James Gossling and of course it's a limited edition ;-)

Finally found a web based bookmark managing solution that integrates nicely with Firefox (and other browsers): http://www.myqlinks.com. Other extensions for FireFox just didn't feel right and were not so straightforward to use. Also looked at the bookmark manager provided by Yahoo.com but the presentation was just clumsy. myQLinks presents your bookmarks in a much more compact and organized way.

One of the key characteristics of myQLinks is that others can also see you collection, but you do have the possibilty to hide bookmarks for others if you want. In case you're interested, my bookmark collection can be found here.