package org.cyclopsgroup.jmxterm.cc;
import org.apache.commons.lang.SystemUtils;
import org.cyclopsgroup.jmxterm.JavaProcessManager;
import org.cyclopsgroup.jmxterm.jdk5.Jdk5JavaProcessManager;
import org.cyclopsgroup.jmxterm.jdk6.Jdk6JavaProcessManager;
import org.cyclopsgroup.jmxterm.pm.JConsoleClassLoaderFactory;
import org.cyclopsgroup.jmxterm.pm.UnsupportedJavaProcessManager;
/**
* Internal factory class to create JPM instance
*
* @author <a href="mailto:jiaqi.guo@gmail.com">Jiaqi Guo</a>
*/
public class JPMFactory
{
private final JavaProcessManager jpm;
/**
* Default constructor that figures out an implementation of JPM
*/
public JPMFactory()
{
if ( !SystemUtils.isJavaVersionAtLeast( 150 ) )
{
jpm =
new UnsupportedJavaProcessManager( "JDK version " + SystemUtils.JAVA_RUNTIME_VERSION
+ " doesn't support this command" );
return;
}
JavaProcessManager j;
try
{
ClassLoader cl = JConsoleClassLoaderFactory.getClassLoader();
if ( SystemUtils.IS_JAVA_1_5 )
{
j = new Jdk5JavaProcessManager( cl );
}
else
{
j = new Jdk6JavaProcessManager( cl );
}
}
catch ( ClassNotFoundException e )
{
j =
new UnsupportedJavaProcessManager( e.getMessage() + ", operation on this JDK("
+ SystemUtils.JAVA_RUNTIME_VERSION + ") isn't fully supported", e );
}
catch ( Exception e )
{
j = new UnsupportedJavaProcessManager( e );
}
jpm = j;
}
/**
* @return Java process manager instance
*/
final JavaProcessManager getProcessManager()
{
return jpm;
}
}