I'm looking for existing middleware solutions that address aspects of service clustering/distribution for load-balancing and availability. I'm looking into building up my own infrastructure for this based on a messaging system (more specifically, JMS). However, if possible I'd rather use something which already exists.
The system should have the ability to run various services on a number of computers. Based on service descriptions, the system should be able to figure out how many instances of a specific service to start in the cluster. Based on pending service requests, it should dynamically adjust the number of services running. Monitoring services and deploying new versions of services should also be handled by the system.
By services, I mean "independent units of functionality" that has a predefined interface. Clients would just know the interface and the middleware should take care of making sure that the service is running on enough nodes in order to answer incoming requests made through the interface.
It should be something that integrates well with Java. Some of my services are implemented as native code but I have a good solution for wrapping those into a Java based service.
I've looked at some middleware/ESB solutions like ICE and Mule but I didn't find them to address the aspects of dynamic load service provisioning which I described above very well (if at all). So I'm wondering what else might be out there that somebody here would want to recommend taking a look at...