in plugins/org.apache.karaf.eik.workbench/src/main/java/org/apache/karaf/eik/workbench/internal/KarafMBeanProviderWorkbenchService.java [179:276]
public List<String> getVMArguments(
final KarafWorkingPlatformModel platformModel,
final ILaunchConfiguration configuration) throws CoreException
{
final String memento = configuration.getMemento();
mbeanProviderDataMap.put(memento, new KarafMBeanProviderEntry());
final List<String> arguments = new ArrayList<String>();
/*
* Ensure the Remote JMX connector port is unique
*/
final int jmxPort = SocketUtil.findFreePort();
if (jmxPort == -1) {
throw new CoreException(new Status(IStatus.ERROR, KarafWorkbenchActivator.PLUGIN_ID,
"Could not find suitable TCP/IP port for JMX connection"));
}
arguments.add(
KarafCorePluginUtils.constructSystemProperty(
"com.sun.management.jmxremote.authenticate", //$NON-NLS-1$
"false")); //$NON-NLS-1$
arguments.add(
KarafCorePluginUtils.constructSystemProperty(
"com.sun.management.jmxremote.ssl", //$NON-NLS-1$
"false")); //$NON-NLS-1$
arguments.add(
KarafCorePluginUtils.constructSystemProperty(
"com.sun.management.jmxremote.port", //$NON-NLS-1$
new Integer(jmxPort).toString()));
final MBeanServerConnectionJob mbeanConnectionJob;
try {
final JMXServiceURL standardJmxConnection = new JMXServiceURL(
"service:jmx:rmi:///jndi/rmi://localhost:" + jmxPort + "/jmxrmi"); //$NON-NLS-1$ $NON-NLS-2$
final JMXServiceDescriptor descriptor = new LocalJMXServiceDescriptor(
configuration.getName(),
platformModel,
standardJmxConnection,
null,
null,
JMX_JMXRMI_DOMAIN);
mbeanConnectionJob = new MBeanServerConnectionJob(configuration.getName(), descriptor);
mbeanProviderDataMap.get(memento).setMbeanConnectionJob(mbeanConnectionJob);
mbeanProviderDataMap.get(memento).setJmxServiceDescriptor(descriptor);
jmxServiceManager.add(descriptor);
} catch(final MalformedURLException e) {
KarafWorkbenchActivator.getLogger().error("Unable to connect to JMX endpoint on Karaf instance", e);
throw new CoreException(new Status(IStatus.ERROR, "", "")); //$NON-NLS-1$ $NON-NLS-2$
}
final IJobChangeListener listener = new JobChangeAdapter() {
@Override
public void done(final IJobChangeEvent event) {
final IStatus result = event.getResult();
if (result == null || !result.isOK()) {
// TODO: Log something
return;
}
if (!mbeanConnectionJob.isConnected()) {
// TODO: Log something
return;
}
final KarafMBeanProvider mbeanProvider;
try {
final JMXServiceDescriptor jmxServiceDescriptor = mbeanProviderDataMap.get(memento).getJmxServiceDescriptor();
mbeanProvider = new LocalKarafMBeanProvider(jmxServiceDescriptor, mbeanConnectionJob.getJmxClient(), platformModel);
mbeanProvider.open(memento);
mbeanProviderDataMap.get(memento).setMbeanProvider(mbeanProvider);
mbeanProviderManager.add(mbeanProvider);
} catch (final IOException e) {
KarafWorkbenchActivator.getLogger().error("Unable to create MBeanProvider from JMXConnector", e);
return;
}
final KarafRuntimeDataProvider runtimeDataProvider = new KarafRuntimeDataProvider(configuration.getName(), mbeanProvider);
runtimeDataProvider.start();
mbeanProviderDataMap.get(memento).setRuntimeDataProvider(runtimeDataProvider);
runtimeDataProviderManager.add(runtimeDataProvider);
}
};
mbeanConnectionJob.addJobChangeListener(listener);
mbeanConnectionJob.schedule(MBeanServerConnectionJob.DEFAULT_INITIAL_SCHEDULE_DELAY);
return arguments;
}