/** {@inheritDoc} */ @Nullable @Override public GridDeployment explicitDeploy(Class<?> cls, ClassLoader clsLdr) throws GridException { try { // Make sure not to deploy peer loaded tasks with non-local class loader, // if local one exists. if (clsLdr.getClass().equals(GridDeploymentClassLoader.class)) clsLdr = clsLdr.getParent(); GridDeployment dep; synchronized (mux) { boolean deployed = spi.register(clsLdr, cls); if (deployed) { dep = getDeployment(cls.getName()); if (dep == null) { GridDeploymentResource rsrc = spi.findResource(cls.getName()); if (rsrc != null && rsrc.getClassLoader() == clsLdr) { dep = deploy( ctx.config().getDeploymentMode(), rsrc.getClassLoader(), rsrc.getResourceClass(), rsrc.getName()); } } if (dep != null) { recordDeploy(cls, cls.getName(), true); } } else { dep = getDeployment(cls.getName()); } } return dep; } catch (GridSpiException e) { recordDeployFailed(cls, clsLdr, true); // Avoid double wrapping. if (e.getCause() instanceof GridException) { throw (GridException) e.getCause(); } throw new GridException("Failed to deploy class: " + cls.getName(), e); } }