Thesis-Driven Development

My current gig at JBoss is labelled "research and prototyping". That's a relatively open-ended job description, so I've taken to giving myself theses (that's the plural of "thesis") to help direct my work.

These are not academic theses, though; these are open-source projects. I'm truly hoping people find them useful enough to start playing with and ultimately contributing to or leading them.

JBoss-Rails 1.0.0.Beta5 released

Good afternoon everyone.  I hope everyone had an enjoyable lunch involving bacon.

Now go grab the latest beta of JBoss-Rails.

The biggest bits in this release are:

Give it a whirl, see if it breaks.


JBoss-Cloud 1.0.0.Beta3 released!

I'm happy to announce JBoss-Cloud 1.0.0.Beta3 release. This release is focused on making JBoss-Cloud more modular, faster and easy to use. Full list of changes you can find here. Below are major changes in this release.

JBoss-Cloud Support

Core of JBoss-Cloud was moved to JBoss-Cloud Support project to give us (and you, obviously), more space to move. Now, if you want to build own appliances, you can use Support project directly. More information available on JBoss-Cloud Support documentation page.


Wizard was completely rewritten. Now it is very useful and user friendly. Major changes are highlighted in my last post on JBoss-Cloud (highly recommended to read). Take a look at the documentation on how to use it.

Documentation upgrade

Documentation for both project, JBoss-Cloud and JBoss-Cloud Support was updated and reflects now all changes. I you want to know more, just check these pages.

If you want to start with JBoss-Cloud immediately please read how to start page.

Get it...

JBoss-Cloud 1.0.0.Beta3 appliances are available for download here. Source code for 1.0.0.Beta3 is available from GitHub.

Remember, you can always grab latest sources from JBoss-Cloud and JBoss-Cloud Support  from GitHub.

...and get in touch with us

We're always looking for your feedback. Meet us in #jboss-cloud IRC channel on freenode. If you want to talk with us on mailing list, feel free to subscribe by sending an email to:

[email protected]

You can search the archives via MarkMail too.

If you have have an idea on how to make our Cloud better (or found a bug) — file a new ticket on Lighthouse.

Future plans

Next release will be focused on Amazon EC2 support. Subscribe to oddthesis.org for news. You can follow JBoss-Cloud on Twitter too!


Summer of Odd Code

JBoss has been selected (along with the Fedora Project) as a mentoring organization for the Google Summer of Code.  I've thrown up some ideas on the JBoss idea page.

But don't feel limited to just those.  Ultimatley, you, the fantastic, enthusiastic, and intelligent student will write your own proposal to Google.  Feel free to color outside the lines and come up with even better ideas for any of the JBoss projects.

If you've got something great, we'll find you a mentor.

Anyhow, if you'd rather hack code than work a "real job" this summer break, start thinking about what you can do with JBoss.

Both the JBoss-Rails and JBoss-Cloud projects look forward to working with some young whipper-snappers this summer.


DevNexus slides for JBoss-Rails

If you were unlucky enough to miss my presentation on JBoss-Rails yesterday at the DevNexus conference, you can grab the entire deck right here.

DevNexus JBoss-Rails Presentation


JBoss-Rails 1.0.0.Beta4 in time for the weekend

I'm happy to announce after quite a lag, there's a new version of JBoss-Rails available with lots of new features. Just in time for playing with it over the weekend!

This release sees a solidification of the Job Scheduling component, along with the addition of the Ruby SOAP Endpoints component.  The SOAP stuff also brings along support for cyrptographic keystores and XML-to-Ruby-to-XML databinding.

Additionally, we've upgraded the version of JRuby (1.2RC1 now) and removed a dependency on JRuby-Rack.

New and updated documentation now exists.

We've also created a "My first Rails App(tm)" walk-through to get you started on that weekend project of doing a mash-up between your sprinkler-system and Twitter.

All of the artifacts are available from our newly-minted Maven repository.

This includes:


JBoss-Cloud: Core, Wizard, VMware & Roadmap

Introducing jboss-cloud-support

The most important change in JBoss-Cloud project is moving its core to a external project called JBoss-Cloud Support. Sources are available, as usual, at github.

You might be asking what's the reason of that move? As you know we at JBoss are open, really open. If you want to generate appliances, not neccessary for Cloud, you can use only jboss-cloud-support with self created appliance files and all needed stuff for that. But you should know that we're focusing on JBoss-Cloud project, though.

If something isn't working for you in a "stand-alone" version of JBoss-Cloud, tell us about that. We're on IRC and we have also a mailing-list. You can create a ticket too (remember to add core tag — this will help a lot!).

Wizard improvements

Wizard has been completely rewritten. What's new? In one word: everything. Wizard shipped with 1.0.0.Beta2 has enabled only selecting appliance and output type. Now you can choose everything you need:

  • Appliance to build,
  • Disk size,
  • Memory size,
  • Output type,
  • Network name (if VMware Personal or Enterprise output type is selected).

More, you can save an appliance configuration and reuse it later! By default wizard will store configurations in ~/.jboss-cloud/configs/ directory. You can override this by setting JBOSS_CLOUD_CONFIG_DIR environment variable, eg:

export JBOSS_CLOUD_CONFIG_DIR=/opt/jbc/configs/


At start wizard will show all saved configurations. After selecting saved config there are three options:

  • view — it'll print saved configuration,
  • delete — it'll remove selected configurations from disk,
  • use (default) — it'll build selected configuration.

To run wizard go to JBoss-Cloud home folder and run ./wizard. Note that it was renamed from appliance-builder.

Tip: you can exit from wizard any time by pressing CTRL+C!

VMware support changes

VMware support code has been completely rewritten, too. Most important changes are:

  • Switch to SCSI disks for VMware Personal appliances (Enterprise has SCSI disks already),
  • Got rid of some dependencies: python-virtinst and qemu-img are no longer required!
  • Increase VMware appliances generation speed. If you have generated RAW image before, converting it to VMware images, both Personal and Enterprise will take not ~20 minutes as before, but < 5 sec, really, check it out!

When it will be released?

We're getting closer and closer to next beta release of JBoss-Cloud. Take a look at tickets assigned to 1.0.0.Beta3 milestone. We're going to push it in the near future, so be prepared to get latest and best Cloud out there!

But if you are impatient (don't worry, we like them), take a look at how to start page.


A few words on VMware support in JBoss-Cloud

Why VMware?

I'm a VMware fan, really. They provide good, reliable virtualization environment for personal use and big business too. In the middle of 2008 VMware has announced a new product called ESXi. It's a hypervizor, available for free (but still not opensource), for everyone. ESXi can be a part of VMware Infrastructure (you can choose between old, fat ESX Server and new, light ESXi).

Unfortunately ESXi can be installed only on certified hardware. Officially. Many people around the world have created a white-box list of systems (mainboards, controllers, etc.) capable running ESXi, so you can pick up a good, cheap piece of hardware and have really good virtualization at home (or company).

Before I started digging in JBoss-Cloud I had a wish to run it on ESXi (and VMware Infrastructure 3 too as formats are the same), so making JBoss-Cloud on ESXi working was my priority (VMware personal support was already done by Bob).

VMware disk types

For appliance image creation we use appliance-creator tool from Thincrust. Te default output format of this tool is a RAW disk. It's great for KVM, but not so good for VMware, or rather I thought so before... But, in turn.

VMware uses seven (sic!) disk types. We can exclude types which are breaking a disk in 2 GB files. We don't need them as we are using good filesystems, right? We don't need also physical disks. After excludes, we have still three types; two for VMware Personal: monolithicSparse, monolithicFlat and one for VMware Enterprise: vmfs.

BTW, I'm using the unofficial VMware Personal and Enterprise terms to distinguish VMware products intended to personal, home use (Server, Fusion, Workstation, Player) and enterprise, datacenter use (Infrastructure, ESXi).

So, back to disks. What's the main difference between monolithicSparse and monolithicFlat? It's simple: monolithicSparse is growing as there is more data to store on the disk and monolithicFlat allocates all disk size at the time of creation. Another difference is that monolithicSparse has a embedded disk descriptor, monolithicFlat has an external descriptor file.

Thincrust appliance-creator has support for various disk formats. How it is done? It creates a RAW disk image and, if needed, it converts it to a specified format using qemu-img. As qemu-img has a wide support for various formats, appliance-creator is a very handy tool, worth taking a look (or two)!

VMware disk support is also included in qemu-img. Unfortunately only monolithicSparse disk type is supported by this tool and we need vmfs. Second glitch: created disk is a IDE disk. It's fine for VMware Personal, but VMware Enterprise uses only SCSI disks. As the disk descriptor for monolithicSparse is embedded, there is no simple way to convert it to a SCSI disk (at least I don't know any simple method).

We need to boot it, now!

I understood that if I want to have JBoss-Cloud working on VMware Enterprise I must do it another way. After some time spent on vmfs disk format I realized that this is... simply a RAW disk! So, really good news, as we have a RAW disk already!

In VMware environment a disk needs also a disk descriptor file. For vmfs disk type the descriptor is fortunately an external, simple text file which can be edited by hand. I've created one for my disk with all needed information (disk size, geometry, SCSI controller etc.). It wouldn't be possible without a great site from Ulli Hankeln. Ulli has described the vmfs descriptor format and created also a disk geometry table for every disk size in the world. Thank you Ulli, great job!

After first run I saw the grub menu. I was happy, really happy. A few seconds later Fedora said, that it wouldn't boot. The problem was that the included in Fedora stable repository appliance-creator don't adds by default mptspi module to kernel at boot time. The module is required to make LSI Logic controller (default on VMware for SCSI disks) working. Fortunately there was a discussion on that on thincrust-devel list which has produced a patch for appliance-creator. Patched version is still in updates-testing repo. To make an update of appliance-tools (and livecd-tools on which relay they) I run:

yum --enablerepo=updates-testing update livecd-tools appliance-tools

After quick update and appliance recreation. I go a little step forward. Now I got an other error:

mount: error mounting /dev/root on /sysroot as ext3: No such file or directory

This is a well known bug described in Red Hat's Bugzilla #466607 (and in #471093). I found a solution for this problem in comments: add scsi_mod.scan=sync to kernel parameters at boot time. Kickstart file provides a simple way to do it, so I modified our kickstart file in bootloader line:

bootloader --timeout=1 --append="acpi=force scsi_mod.scan=sync"

After another recreation of images, Fedora booted just fine in my ESXi, mission was complete — VMware support was added. I deserve a beer, or not?


Atlanta SofaConf

I'm going to be in Atlanta for the Atlanta JUG's DevNexus conference, March 10-11.  I may or may not be speaking, but I'll be attending and helping with all things JBoss.

But why should you settle for simply attending the conference, when you could also have me sleep on your sofa? If you live in Atlanta and have a spare sofa or futon, here's your chance to spend some quality time with a JBoss developer.  Invite friends, we'll grill (if you have a grill) and have some beers.


To qualify, you must have a sofa capable of sleeping a 6'5" man.

Leave a comment explaining why I should select your sofa to host the First Atlanta Sofa Conf.  Factors may include who you are, what type of sofa you have, and proximity to the Vinings area, or anything else you deem appropriate.


Put Java in your Rails apps with Maven

I just knocked up a quick page on using Maven to build the Java portion of your JBoss-Rails app, if you're doing a hybrid multi-language app.

Anyhow, please check out Using Maven for your mixed-language project.


JBoss Cloud 1.0.0.Beta2 is out!

I'm happy to announce a new version of JBoss Cloud. This is my first release, so I would like to say hi to everyone!

This release contains three new major features (appliance-builder, meta-appliance and VMware ESX support) and a bunch of bug fixes.

Meta-appliance aka metappliance

If you don't want to create your own environment for building appliances on your system, you can use our meta-appliance. We provide it to you in three formats:

  • RAW — Ideally to run on KVM,
  • VMware Enterprise — Good for VMware ESX/ESXi,
  • VMware Personal — Best for VMware Server, Workstation, Fusion, Player etc.

Just grab best format for you from our server and use it. There is a page which describes how to use it.


Another big change is appliance-builder. It is a wizard for JBoss Cloud appliance building. Just run it from root folder of JBoss Cloud source and see it in action. In next releases there will be more and more features that will make appliance creation quicker and sweeter.

VMware ESX/ESXi support

Beginning with Beta2 JBoss Cloud has support for VMware ESX/ESXi. Yeah, that's true — you can run JBoss Cloud on VMware Infrastructure 3! Just build an VMware enterprise appliance (or grab it from our server!) and push it to VMware ESX/ESXi server via VI Client!

To build an appliance for VMware enterprise product just run:

./appliance-builder -V

Wizard will help you select appliance and best values for it.

Build process will take some time, so go get some beer or coffee. After your'e back, check directory $JBOSS_CLOUD_HOME/build/appliances/$ARCH/$APPLIANCE_NAME/vmware/enterprise/ for appliance.

Unfortunately ESX support requires two packages: livecd-tools-021-1.fc10 and appliance-tools-003.11-1.fc10 that aren't included in fedora stable repositories. New packages are available from updates-testing. Just run the command to update:

yum --enablerepo=updates-testing update livecd-tools appliance-tools

If you don't want to build VMware ESX appliances you can omit the update, of course.

Other stuff

Our yum repository has also a new structure. From Beta2 all appliances could be updated via yum update command!

Notice also that default password for all our appliances is from now oddthesis.

There was also some work on make appliances working in 64 bit environments. 64 bit appliances should work now.

Where can I get it?

Pre-built appliances are available for all supported output formats to download from our server. All appliances are built only for i386 architecture, sorry. If you really want 64 bit support — grab JBoss Cloud sources and build own appliances, that's really easy!

All VMware images are assuming, that you are running those in environment with a network connection named NAT. This is default in VMware personal environments and it should work out of-the-box. However if you want to run it in VMware ESX and NAT doesn't match your configuration (most likely) simply put your network name in nethernet0.networkName parameter in .vmx file.

I you aren't using VM2 for running appliances, you must set manually JBOSS_PROXY_LIST and JBOSS_GOSSIP_HOST in /etc/jboss-as5.conf file in jboss-as5-appliance to have a fully working JBoss AS 5 cluster.

Last words...

Don't forget to take a look at detailed list of tickets done in 1.0.0.Beta2! If you have found a bug or have a good idea how to make JBoss Cloud better — fill a ticket!

If you have any problems, questions on JBoss Cloud bits or just want tell us that you're using it, contact us via IRC or our mailing list. We're happy to hear from you!