private boolean hasParentInServer(IProject project, IServer server, IProgressMonitor pm) { IModule[] modules = ServerUtil.getModules(project); if (modules == null || modules.length == 0) { return false; } IModule[] parents = null; boolean parentFound = false; for (IModule module : modules) { try { parents = server.getRootModules(module, pm); } catch (CoreException e) { org.eclipse.jst.j2ee.internal.plugin.J2EEPlugin.logError(e); } if (parents == null || parents.length == 0) { return false; } for (IModule parent : parents) { if (!parent.equals(module) && ServerUtil.containsModule(server, parent, pm)) { parentFound = true; break; } } } return parentFound; }
public static DeployableServerBehavior getServerBehavior(ILaunchConfiguration configuration) throws CoreException { IServer server = ServerUtil.getServer(configuration); DeployableServerBehavior jbossServerBehavior = (DeployableServerBehavior) server.getAdapter(DeployableServerBehavior.class); return jbossServerBehavior; }
public void configureLaunch(final ILaunch launch) throws CoreException { final IServer server = ServerUtil.getServer(configuration); server.addServerListener( new IServerListener() { IModule[] modules = server.getModules(); private boolean modulesChanged(IModule[] modules, IModule[] modules2) { if (CoreUtil.isNullOrEmpty(modules) && CoreUtil.isNullOrEmpty(modules2)) { return true; } if (CoreUtil.isNullOrEmpty(modules) || CoreUtil.isNullOrEmpty(modules2)) { return true; } if (modules.length != modules2.length) { return true; } for (int i = 0; i < modules.length; i++) { if (!modules[i].equals(modules2[i])) { return true; } } return false; } public synchronized void serverChanged(ServerEvent event) { if ((event.getKind() & ServerEvent.MODULE_CHANGE) > 0) { IModule[] newModules = event.getServer().getModules(); if (modulesChanged(modules, newModules)) { try { final PortalSourceLookupDirector director = (PortalSourceLookupDirector) launch.getSourceLocator(); director.initializeDefaults(configuration); } catch (Exception e) { LiferayServerCore.logError( "Unable to update source containers for server", e); // $NON-NLS-1$ } modules = newModules; } } } }); final ISourcePathComputer sourcePathComputer = getLaunchManager().getSourcePathComputer(this.sourceComputerId); this.setSourcePathComputer(sourcePathComputer); this.initializeDefaults(configuration); launch.setSourceLocator(this); }
public void launch( ILaunchConfiguration configuration, String mode, ILaunch launch, IProgressMonitor monitor) throws CoreException { IServer server = ServerUtil.getServer(configuration); if (LaunchCommandPreferences.isIgnoreLaunchCommand(server)) { return; } beforeVMRunner(configuration, mode, launch, monitor); actualLaunch(configuration, mode, launch, monitor); afterVMRunner(configuration, mode, launch, monitor); }
/* * (non-Javadoc) * @see org.jboss.ide.eclipse.as.wtp.core.server.launch.AbstractJavaServerLaunchDelegate#overrideHotcodeReplace(org.eclipse.debug.core.ILaunchConfiguration, org.eclipse.debug.core.ILaunch) */ protected boolean overrideHotcodeReplace(ILaunchConfiguration configuration, ILaunch launch) throws CoreException { boolean added = super.overrideHotcodeReplace(configuration, launch); IServer server = ServerUtil.getServer(configuration); IControllableServerBehavior jbsBehavior = JBossServerBehaviorUtils.getControllableBehavior(server); if (added) { jbsBehavior.putSharedData(HOTCODE_REPLACE_OVERRIDDEN, added); // $NON-NLS-1$ } return added; }
private IServer getServerFromLaunchConfig(ILaunch launch) { ILaunchConfiguration launchConfig = launch.getLaunchConfiguration(); if (launchConfig == null) { return null; } IServer server = null; try { server = ServerUtil.getServer(launchConfig); } catch (CoreException e) { logError("getServerFromLaunchConfig: Getting the WTP server error.", e); return null; } return server; }
@Test public void testMetadataWithCustomModule() { try { // Create the server IServer s = ServerCreationTestUtils.createMockServerWithRuntime(serverType, serverType); IServerWorkingCopy wc = s.createWorkingCopy(); wc.setAttribute(IDeployableServer.DEPLOY_DIRECTORY_TYPE, IDeployableServer.DEPLOY_METADATA); s = wc.save(true, null); // Create the project projNum++; String projName = "Project" + projNum; IDataModel dm = CreateProjectOperationsUtility.getWebDataModel( projName, null, null, null, null, JavaEEFacetConstants.WEB_24, false); try { OperationTestCase.runAndVerify(dm); } catch (Exception e) { fail("Unable to create test web project: " + e.getMessage()); } IProject p = ResourceUtils.findProject(projName); assertTrue(p.exists()); IModule projMod = ServerUtil.getModule(p); // Set the custom setting. For now, just override output name wc = s.createWorkingCopy(); AbstractPublishingTest.setCustomDeployOverride(wc, projMod, "newName.war", null, null); s = wc.save(true, null); // verify no change vs standard metadata String[] folders = getAdditions().getDeployLocationFolders(s); assertEquals(1, folders.length); assertTrue(folders[0].contains("metadata")); // Change it to now make some other output folder wc = s.createWorkingCopy(); AbstractPublishingTest.setCustomDeployOverride( wc, projMod, "newName.war", "/home/user/deploy", null); s = wc.save(true, null); folders = getAdditions().getDeployLocationFolders(s); assertEquals(2, folders.length); assertTrue(folders[0].contains("metadata")); assertTrue(folders[1].equals("/home/user/deploy")); } catch (CoreException ce) { fail("Unable to save changes to server"); } }
@Override public boolean preLaunchCheck( ILaunchConfiguration configuration, String mode, IProgressMonitor monitor) throws CoreException { IServer server = ServerUtil.getServer(configuration); IStatus s = server.canStart(mode); Trace.trace(Trace.STRING_FINEST, "Ensuring Server can start: " + s.getMessage()); // $NON-NLS-1$ if (!s.isOK()) throw new CoreException(s); IControllableServerBehavior jbsBehavior = JBossServerBehaviorUtils.getControllableBehavior(server); if (LaunchCommandPreferences.isIgnoreLaunchCommand(server)) { Trace.trace( Trace.STRING_FINEST, "Server is marked as ignore Launch. Marking as started."); //$NON-NLS-1$ ((ControllableServerBehavior) jbsBehavior).setRunMode(mode); ((ControllableServerBehavior) jbsBehavior).setServerStarting(); boolean attachDebugger = server.getAttribute(RemoteDebugUtils.ATTACH_DEBUGGER, true); if ("debug".equals(mode) && attachDebugger) { // add a listener which will run the debugger once server is started IServerListener listener = createAttachDebuggerListener(); server.addServerListener(listener); } initiatePolling(server); return false; } validateServerStructure(server); Trace.trace( Trace.STRING_FINEST, "Checking if similar server is already up on the same ports."); //$NON-NLS-1$ IStatus startedStatus = isServerStarted(server); boolean started = startedStatus.isOK(); if (started) { Trace.trace( Trace.STRING_FINEST, "A server is already started. Now handling the already started scenario."); //$NON-NLS-1$ return handleAlreadyStartedScenario(server, startedStatus); } Trace.trace(Trace.STRING_FINEST, "A full launch will now proceed."); // $NON-NLS-1$ return true; }
private IStatus updateServerRefs( IModule[] modulesToRemove, IServer affectedServer, IProgressMonitor monitor) throws CoreException { if (modulesToRemove == null || modulesToRemove.length == 0) { return Status.OK_STATUS; } monitor.beginTask(MODS_FROM_SERVERS, modulesToRemove.length * 100); for (int j = 0; j < modulesToRemove.length; j++) { IServerWorkingCopy wc = null; try { wc = affectedServer.createWorkingCopy(); List list = Arrays.asList(affectedServer.getModules()); if (list.contains(modulesToRemove[j])) { ServerUtil.modifyModules(wc, null, new IModule[] {modulesToRemove[j]}, null); } } catch (CoreException ce) { // Add it to a multistatus list? throw ce; // J2EEPlugin.logError(ce); } finally { try { if (wc != null) { IServer newServer = wc.saveAll(true, null); int state = newServer.getServerState(); if (state == IServer.STATE_STARTED) { newServer.publish( IServer.PUBLISH_INCREMENTAL, new NullProgressMonitor()); // TODO use child progress? } } } catch (CoreException ce) { throw ce; } } } return Status.OK_STATUS; }
public void launch( ILaunchConfiguration configuration, String mode, ILaunch launch, IProgressMonitor monitor) throws CoreException { IServer server = ServerUtil.getServer(configuration); if (server == null) { Trace.trace(Trace.FINEST, "Launch configuration could not find server"); // throw CoreException(); return; } if (server.shouldPublish() && ServerCore.isAutoPublishing()) server.publish(IServer.PUBLISH_INCREMENTAL, monitor); PreviewServerBehaviour previewServer = (PreviewServerBehaviour) server.loadAdapter(PreviewServerBehaviour.class, null); int size = REQUIRED_BUNDLE_IDS.length; String[] jars = new String[size]; for (int i = 0; i < size; i++) { Bundle b = Platform.getBundle(REQUIRED_BUNDLE_IDS[i]); IPath path = null; if (b != null) path = PreviewRuntime.getJarredPluginPath(b); if (path == null) throw new CoreException( new Status( IStatus.ERROR, PreviewPlugin.PLUGIN_ID, "Could not find required bundle " + REQUIRED_BUNDLE_IDS[i])); jars[i] = path.toOSString(); } // Appending the bin onto the classpath is to support running from the workbench // when org.eclipse.wst.server.preview is checked out Trace.trace(Trace.FINEST, jars[CLASSPATH_BIN_INDEX_PREVIEW_SERVER] + File.separator + "bin"); if (new File(jars[CLASSPATH_BIN_INDEX_PREVIEW_SERVER] + File.separator + "bin").exists()) jars[CLASSPATH_BIN_INDEX_PREVIEW_SERVER] = jars[CLASSPATH_BIN_INDEX_PREVIEW_SERVER] + File.separator + "bin"; IVMInstall vm = verifyVMInstall(configuration); IVMRunner runner = vm.getVMRunner(mode); if (runner == null) runner = vm.getVMRunner(ILaunchManager.RUN_MODE); File workingDir = verifyWorkingDirectory(configuration); String workingDirName = null; if (workingDir != null) workingDirName = workingDir.getAbsolutePath(); // Program & VM args String pgmArgs = "\"" + previewServer.getTempDirectory().append("preview.xml").toOSString() + "\""; // getProgramArguments(configuration); String vmArgs = getVMArguments(configuration); String[] envp = getEnvironment(configuration); ExecutionArguments execArgs = new ExecutionArguments(vmArgs, pgmArgs); // VM-specific attributes Map vmAttributesMap = getVMSpecificAttributesMap(configuration); // Classpath String[] classpath2 = getClasspath(configuration); String[] classpath = new String[classpath2.length + REQUIRED_BUNDLE_IDS.length]; System.arraycopy(jars, 0, classpath, 0, REQUIRED_BUNDLE_IDS.length); System.arraycopy(classpath2, 0, classpath, REQUIRED_BUNDLE_IDS.length, classpath2.length); // Create VM config VMRunnerConfiguration runConfig = new VMRunnerConfiguration(MAIN_CLASS, classpath); runConfig.setProgramArguments(execArgs.getProgramArgumentsArray()); runConfig.setVMArguments(execArgs.getVMArgumentsArray()); runConfig.setWorkingDirectory(workingDirName); runConfig.setEnvironment(envp); runConfig.setVMSpecificAttributesMap(vmAttributesMap); // Bootpath String[] bootpath = getBootpath(configuration); if (bootpath != null && bootpath.length > 0) runConfig.setBootClassPath(bootpath); setDefaultSourceLocator(launch, configuration); // Launch the configuration previewServer.setupLaunch(launch, mode, monitor); if (ILaunchManager.PROFILE_MODE.equals(mode)) ServerProfilerDelegate.configureProfiling(launch, vm, runConfig, monitor); try { runner.run(runConfig, launch, monitor); previewServer.addProcessListener(launch.getProcesses()[0]); } catch (Exception e) { // ignore - process failed } }
protected void afterVMRunner( ILaunchConfiguration configuration, String mode, ILaunch launch, IProgressMonitor monitor) throws CoreException { IProcess[] processes = launch.getProcesses(); final IServer server = ServerUtil.getServer(configuration); IControllableServerBehavior beh = JBossServerBehaviorUtils.getControllableBehavior(configuration); if (processes != null && processes.length >= 1 && processes[0] != null) { ProcessTerminatedDebugListener debug = new ProcessTerminatedDebugListener(ServerUtil.getServer(configuration), processes[0]) { protected void handleEarlyTermination() { cancelPolling(server); IStatus status = new Status( IStatus.INFO, ASWTPToolsPlugin.PLUGIN_ID, IEventCodes.BEHAVIOR_PROCESS_TERMINATED, Messages.TERMINATED, null); logStatus(server, status); } }; if (beh != null) { final IProcess launched = processes[0]; beh.putSharedData(PROCESS, launched); beh.putSharedData(DEBUG_LISTENER, debug); final IServer ser = beh.getServer(); // During some niche cases, a server may be set to stopped, // but the process may not be shutting down. For example if two // conflicting servers were launched using the same ports. // This is a cleanup thread that waits a significant amount of time // that should be suitable for all genuine shutdowns, and then // force terminates the process. IServerListener list = new IServerListener() { public void serverChanged(ServerEvent event) { final IServerListener list2 = this; int eventKind = event.getKind(); if ((eventKind & ServerEvent.SERVER_CHANGE) != 0) { // server change event if ((eventKind & ServerEvent.STATE_CHANGE) != 0) { if (ser.getServerState() == IServer.STATE_STOPPED) { new Thread() { public void run() { // wait 7 seconds try { Thread.sleep(getProcessTerminationDelay()); } catch (InterruptedException ie) { // do nothing } if (!launched.isTerminated()) { // Alert user Object result = getPrompter() .promptUser(UserPrompter.EVENT_CODE_PROCESS_UNTERMINATED, ser); if (result == null || (result instanceof Boolean && ((Boolean) result).booleanValue())) { // force terminate this process try { launched.terminate(); } catch (DebugException de) { ASWTPToolsPlugin.log(de); } } } ser.removeServerListener(list2); } }.start(); } } } } }; ser.addServerListener(list); } DebugPlugin.getDefault().addDebugEventListener(debug); } initiatePolling(server); }
/** * Possibly start the GWT Super Dev Mode CodeServer. <br> * <br> * This starts as separate process, which allows for custom args modification. It adds a launcher * id to both processes for reference. 1. Get it from classic launch config 2. Get it from server * VM properties */ protected void posiblyLaunchGwtSuperDevModeCodeServer(DebugEvent event) { RuntimeProcess runtimeProcess = (RuntimeProcess) event.getSource(); ILaunch launch = runtimeProcess.getLaunch(); ILaunchConfiguration launchConfig = launch.getLaunchConfiguration(); String launchMode = launch.getLaunchMode(); IServer server = null; try { server = ServerUtil.getServer(launchConfig); } catch (CoreException e) { logError("posiblyLaunchGwtSuperDevModeCodeServer: Could get the WTP server.", e); return; } if (server == null) { logMessage("posiblyLaunchGwtSuperDevModeCodeServer: No WTP server found."); return; } IProject project = getProject(server); if (project == null) { logMessage("posiblyLaunchGwtSuperDevModeCodeServer: Couldn't find project."); return; } if (!GwtFacetUtils.hasGwtFacet(project)) { logMessage("posiblyLaunchGwtSuperDevModeCodeServer: Does not have a GWT Facet."); return; } if (GWTProjectProperties.getFacetSyncCodeServer(project) != null && GWTProjectProperties.getFacetSyncCodeServer(project) == false) { logMessage( "posiblyLaunchGwtSuperDevModeCodeServer: GWT Facet project properties, the code server sync is off."); return; } /** Get the war output path for the `-launcherDir` in SDM launcher */ String launcherDir = null; // Get the the war output path from classic launch configuration working directory // Also used GaeServerBehaviour.setupLaunchConfig(...) try { launcherDir = launchConfig.getAttribute( IJavaLaunchConfigurationConstants.ATTR_WORKING_DIRECTORY, (String) null); } catch (CoreException e) { logMessage( "posiblyLaunchGwtSuperDevModeCodeServer: Couldn't get working directory from launchConfig IJavaLaunchConfigurationConstants.ATTR_WORKING_DIRECTORY."); } // Get the war output path from Server VM properties for working directory if (launcherDir == null || launcherDir.isEmpty()) { launcherDir = getLauncherDirFromServerLaunchConfigAttributes(server, launchConfig); } // Exit on error if (launcherDir == null || launcherDir.isEmpty()) { logError( "posiblyLaunchGwtSuperDevModeCodeServer: No -launcherDir arg is available, EXITING. launcherDir=" + launcherDir); return; } // Add server urls to DevMode view for easy clicking on addServerUrlsToDevModeView(launch); // LauncherId used to reference and terminate the the process String launcherId = setLauncherIdToWtpRunTimeLaunchConfig(launchConfig); logMessage( "posiblyLaunchGwtSuperDevModeCodeServer: Launching GWT Super Dev Mode CodeServer. launcherId=" + launcherId + " launcherDir=" + launcherDir); // Just in case if (launchMode == null) { launchMode = "run"; } if (launcherId == null) { logMessage("posiblyLaunchGwtSuperDevModeCodeServer: No launcherId."); } // Creates ore launches an existing Super Dev Mode Code Server process GwtSuperDevModeCodeServerLaunchUtil.launch(project, launchMode, launcherDir, launcherId); }
@Override public String[] getClasspathAdditions(TestServerConfiguration config) { List<String> entries = new ArrayList<String>(2); String entry = ClasspathUtil.getClasspathEntry("org.eclipse.edt.ide.deployment.core"); // $NON-NLS-1$ if (entry != null) { entries.add(entry); } entry = ClasspathUtil.getClasspathEntry("org.eclipse.edt.ide.deployment.services"); // $NON-NLS-1$ if (entry != null) { entries.add(entry); } entry = ClasspathUtil.getClasspathEntry("org.eclipse.edt.runtime.java"); // $NON-NLS-1$ if (entry != null) { entries.add(entry); } entry = ClasspathUtil.getClasspathEntry("com.ibm.icu"); // $NON-NLS-1$ if (entry != null) { entries.add(entry); } DDUtil.addJDBCJars( config.getProject(), new HashSet<IProject>(), new HashSet<IResource>(), entries); // Add a Tomcat runtime if one's available, so that JNDI can use connection pooling. IRuntime bestTomcat = null; for (IRuntime rt : ServerUtil.getRuntimes(null, null)) { if (rt.getRuntimeType().getName().toLowerCase().contains("tomcat")) { // $NON-NLS-1$ if (bestTomcat == null) { bestTomcat = rt; } else if (bestTomcat .getRuntimeType() .getVersion() .compareTo(rt.getRuntimeType().getVersion()) < 0) { bestTomcat = rt; } } } if (bestTomcat != null) { RuntimeClasspathProviderWrapper rcpw = JavaServerPlugin.findRuntimeClasspathProvider(bestTomcat.getRuntimeType()); if (rcpw != null) { entries.add( "<?xml version=\"1.0\" encoding=\"UTF-8\"?><runtimeClasspathEntry containerPath=\"" //$NON-NLS-1$ + RuntimeClasspathContainer.SERVER_CONTAINER + "/" + rcpw.getId() + "/" + bestTomcat.getId() // $NON-NLS-1$ //$NON-NLS-2$ + "\" path=\"3\" type=\"4\"/>"); //$NON-NLS-1$ } } return entries.toArray(new String[entries.size()]); }