protected void validateServerStructure(IServer server) throws CoreException {
    IControllableServerBehavior jbsBehavior =
        JBossServerBehaviorUtils.getControllableBehavior(server);

    Trace.trace(Trace.STRING_FINEST, "Verifying server structure"); // $NON-NLS-1$
    JBossExtendedProperties props =
        ExtendedServerPropertiesAdapterFactory.getJBossExtendedProperties(server);
    IStatus status = props.verifyServerStructure();
    if (!status.isOK()) {
      ((ControllableServerBehavior) jbsBehavior).setServerStopped();
      throw new CoreException(status);
    }

    Trace.trace(
        Trace.STRING_FINEST, "Verifying jdk is available if server requires jdk"); // $NON-NLS-1$
    boolean requiresJDK = props.requiresJDK();
    if (requiresJDK) {
      IRuntime rt = server.getRuntime();
      IJBossServerRuntime rt2 = RuntimeUtils.getJBossServerRuntime(rt);
      IVMInstall vm = rt2.getVM();

      if (!JavaUtils.isJDK(vm)) {
        // JBIDE-14568 do not BLOCK launch, but log error
        Trace.trace(
            Trace.STRING_FINEST,
            "The VM to launch server '"
                + //$NON-NLS-1$
                server.getName()
                + "' does not appear to be a JDK: "
                + vm.getInstallLocation().getAbsolutePath()); // $NON-NLS-1$
        IStatus stat =
            new Status(
                IStatus.ERROR,
                JBossServerCorePlugin.PLUGIN_ID,
                NLS.bind(
                    Messages.launch_requiresJDK,
                    server.getName(),
                    vm.getInstallLocation().getAbsolutePath()));
        logStatus(server, stat);
      }
    }
  }
 public IJBossServerRuntime getRuntime() {
   return RuntimeUtils.getJBossServerRuntime(getServer());
 }