This change separates the package resource into an implementation class following the composite class pattern. In addition, the _real variables have been removed to prevent confusion. The validation functions have been updated to support a more clear regular expression. The debian package names are different, so conditional logic is required to set a debian based distro specific variable for the Java distribution name. While the puppet resources work, there is currently an issue on Lucid where the package REQUIRES interactive installation to accept the license agreement. This will need to be fixed for fully automated deployment on apt based systems.
The top level java module was declaring classes depending on what Java distribution is required. Similar to the issues encountered with service and configuration class ordering, the composed classes did not have an established relationship with other things that require the module. This change brings all resources into a single top level java class and eliminates class composition within the module entirely.
The stages feature of stdlib is turning out to be more trouble than it's worth. Integrating the changes from Cody and Gary results in the entire mcollective class being in the main stage. We've already found is preferable to have stages after main rather than before to avoid dependency cycles. This only works if all modules use stages. The first module to not use stages will create a cycle if it requires and modules who do use stages and the stages come after main.
Dan raised the comment in the previous patch set that it doesn't make sense to provide two options and four states when there are really only two possibilities; install the jre or the jdk. This change removes the jdk and jre class parameters and replaces them with a single distribution parameters.