Lines 63-68
Link Here
|
63 |
import org.netbeans.api.java.source.BuildArtifactMapper.ArtifactsUpdated; |
63 |
import org.netbeans.api.java.source.BuildArtifactMapper.ArtifactsUpdated; |
64 |
import org.netbeans.modules.j2ee.deployment.common.api.ConfigurationException; |
64 |
import org.netbeans.modules.j2ee.deployment.common.api.ConfigurationException; |
65 |
import org.netbeans.modules.j2ee.deployment.common.api.DatasourceAlreadyExistsException; |
65 |
import org.netbeans.modules.j2ee.deployment.common.api.DatasourceAlreadyExistsException; |
|
|
66 |
import org.netbeans.modules.j2ee.deployment.config.ConfigSupportImpl; |
66 |
import org.netbeans.modules.j2ee.deployment.devmodules.spi.ArtifactListener; |
67 |
import org.netbeans.modules.j2ee.deployment.devmodules.spi.ArtifactListener; |
67 |
import org.netbeans.modules.j2ee.deployment.devmodules.spi.ArtifactListener.Artifact; |
68 |
import org.netbeans.modules.j2ee.deployment.devmodules.spi.ArtifactListener.Artifact; |
68 |
import org.netbeans.modules.j2ee.deployment.devmodules.spi.J2eeApplicationProvider; |
69 |
import org.netbeans.modules.j2ee.deployment.devmodules.spi.J2eeApplicationProvider; |
Lines 71-76
Link Here
|
71 |
import org.netbeans.modules.j2ee.deployment.impl.ui.ProgressUI; |
72 |
import org.netbeans.modules.j2ee.deployment.impl.ui.ProgressUI; |
72 |
import org.openide.awt.StatusDisplayer; |
73 |
import org.openide.awt.StatusDisplayer; |
73 |
import org.openide.filesystems.FileObject; |
74 |
import org.openide.filesystems.FileObject; |
|
|
75 |
import org.openide.filesystems.FileSystem; |
76 |
import org.openide.filesystems.FileUtil; |
74 |
import org.openide.filesystems.URLMapper; |
77 |
import org.openide.filesystems.URLMapper; |
75 |
import org.openide.util.Exceptions; |
78 |
import org.openide.util.Exceptions; |
76 |
import org.openide.util.Lookup; |
79 |
import org.openide.util.Lookup; |
Lines 106-111
Link Here
|
106 |
private final WeakHashMap<J2eeModuleProvider, CompileOnSaveListener> compileListeners = new WeakHashMap<J2eeModuleProvider, CompileOnSaveListener>(); |
109 |
private final WeakHashMap<J2eeModuleProvider, CompileOnSaveListener> compileListeners = new WeakHashMap<J2eeModuleProvider, CompileOnSaveListener>(); |
107 |
|
110 |
|
108 |
private final WeakHashMap<J2eeModuleProvider, CopyOnSaveListener> copyListeners = new WeakHashMap<J2eeModuleProvider, CopyOnSaveListener>(); |
111 |
private final WeakHashMap<J2eeModuleProvider, CopyOnSaveListener> copyListeners = new WeakHashMap<J2eeModuleProvider, CopyOnSaveListener>(); |
|
|
112 |
|
113 |
private final WeakHashMap<J2eeModuleProvider, Object> suspended = new WeakHashMap<J2eeModuleProvider, Object>(); |
109 |
|
114 |
|
110 |
/** |
115 |
/** |
111 |
* We need a custom thread factory because the default one stores the |
116 |
* We need a custom thread factory because the default one stores the |
Lines 219-230
Link Here
|
219 |
} |
224 |
} |
220 |
} |
225 |
} |
221 |
} |
226 |
} |
|
|
227 |
|
228 |
public void suspendListening(J2eeModuleProvider provider) { |
229 |
synchronized (this) { |
230 |
suspended.put(provider, new Object()); |
231 |
LOGGER.log(Level.FINE, "Listening suspended for {0}", provider); |
232 |
} |
233 |
} |
234 |
|
235 |
public void resumeListening(J2eeModuleProvider provider) { |
236 |
Object prev = null; |
237 |
synchronized (this) { |
238 |
prev = suspended.remove(provider); |
239 |
} |
240 |
if (LOGGER.isLoggable(Level.FINE) && prev != null) { |
241 |
LOGGER.log(Level.FINE, "Resuming listening for {0}", provider); |
242 |
} |
243 |
} |
222 |
|
244 |
|
223 |
public static boolean isServerStateSupported(ServerInstance si) { |
245 |
public static boolean isServerStateSupported(ServerInstance si) { |
224 |
return si.isRunning() && !si.isSuspended(); |
246 |
return si.isRunning() && !si.isSuspended(); |
225 |
} |
247 |
} |
226 |
|
248 |
|
227 |
public void notifyInitialDeployment(J2eeModuleProvider provider) { |
249 |
public void notifyInitialDeployment(final J2eeModuleProvider provider) { |
|
|
250 |
boolean resume = false; |
251 |
synchronized (this) { |
252 |
resume = suspended.containsKey(provider); |
253 |
} |
254 |
|
255 |
// don't do resume unless it is really needed |
256 |
if (resume) { |
257 |
FileObject fo = ((ConfigSupportImpl) provider.getConfigSupport()).getProjectDirectory(); |
258 |
FileUtil.refreshAll(); |
259 |
try { |
260 |
fo.getFileSystem().runAtomicAction(new FileSystem.AtomicAction() { |
261 |
|
262 |
@Override |
263 |
public void run() throws IOException { |
264 |
resumeListening(provider); |
265 |
} |
266 |
}); |
267 |
} catch (IOException ex) { |
268 |
LOGGER.log(Level.INFO, null, ex); |
269 |
resumeListening(provider); |
270 |
} |
271 |
} |
272 |
|
228 |
synchronized (this) { |
273 |
synchronized (this) { |
229 |
if (compileListeners.containsKey(provider)) { |
274 |
if (compileListeners.containsKey(provider)) { |
230 |
// this is due to EAR childs :( |
275 |
// this is due to EAR childs :( |
Lines 242-249
Link Here
|
242 |
public void submitChangedArtifacts(J2eeModuleProvider provider, Iterable<Artifact> artifacts) { |
287 |
public void submitChangedArtifacts(J2eeModuleProvider provider, Iterable<Artifact> artifacts) { |
243 |
assert provider != null; |
288 |
assert provider != null; |
244 |
assert artifacts != null; |
289 |
assert artifacts != null; |
|
|
290 |
|
291 |
synchronized (this) { |
292 |
// TODO should go through deploy task and return from the notification task ? |
293 |
if (suspended.containsKey(provider)) { |
294 |
return; |
295 |
} |
245 |
|
296 |
|
246 |
synchronized (this) { |
|
|
247 |
Set<Artifact> preparedArtifacts = toDeploy.get(provider); |
297 |
Set<Artifact> preparedArtifacts = toDeploy.get(provider); |
248 |
if (preparedArtifacts == null) { |
298 |
if (preparedArtifacts == null) { |
249 |
preparedArtifacts = new HashSet<Artifact>(); |
299 |
preparedArtifacts = new HashSet<Artifact>(); |
Lines 264-270
Link Here
|
264 |
current = EXECUTOR.submit(new DeployTask(delayed)); |
314 |
current = EXECUTOR.submit(new DeployTask(delayed)); |
265 |
} |
315 |
} |
266 |
} |
316 |
} |
267 |
|
317 |
|
268 |
private static final class CompileOnSaveListener implements ArtifactsUpdated { |
318 |
private static final class CompileOnSaveListener implements ArtifactsUpdated { |
269 |
|
319 |
|
270 |
private final J2eeModuleProvider provider; |
320 |
private final J2eeModuleProvider provider; |