This Bugzilla instance is a read-only archive of historic NetBeans bug reports. To report a bug in NetBeans please follow the project's instructions for reporting issues.

View | Details | Raw Unified | Return to bug 197320
Collapse All | Expand All

(-)a/j2ee.earproject/nbproject/project.xml (-1 / +1 lines)
Lines 182-188 Link Here
182
                    <compile-dependency/>
182
                    <compile-dependency/>
183
                    <run-dependency>
183
                    <run-dependency>
184
                        <release-version>4</release-version>
184
                        <release-version>4</release-version>
185
                        <specification-version>1.75</specification-version>
185
                        <specification-version>1.79</specification-version>
186
                    </run-dependency>
186
                    </run-dependency>
187
                </dependency>
187
                </dependency>
188
                <dependency>
188
                <dependency>
(-)a/j2ee.earproject/src/org/netbeans/modules/j2ee/earproject/EarActionProvider.java (-3 / +17 lines)
Lines 59-64 Link Here
59
import org.netbeans.modules.j2ee.common.project.ui.DeployOnSaveUtils;
59
import org.netbeans.modules.j2ee.common.project.ui.DeployOnSaveUtils;
60
import org.netbeans.modules.j2ee.deployment.devmodules.api.Deployment;
60
import org.netbeans.modules.j2ee.deployment.devmodules.api.Deployment;
61
import org.netbeans.modules.j2ee.deployment.devmodules.api.J2eeModule;
61
import org.netbeans.modules.j2ee.deployment.devmodules.api.J2eeModule;
62
import org.netbeans.modules.j2ee.deployment.devmodules.spi.J2eeApplicationProvider;
62
import org.netbeans.modules.j2ee.deployment.devmodules.spi.J2eeModuleProvider;
63
import org.netbeans.modules.j2ee.deployment.devmodules.spi.J2eeModuleProvider;
63
import org.netbeans.modules.j2ee.deployment.plugins.api.InstanceProperties;
64
import org.netbeans.modules.j2ee.deployment.plugins.api.InstanceProperties;
64
import org.netbeans.modules.j2ee.deployment.plugins.api.ServerDebugInfo;
65
import org.netbeans.modules.j2ee.deployment.plugins.api.ServerDebugInfo;
Lines 77-82 Link Here
77
import org.openide.util.Exceptions;
78
import org.openide.util.Exceptions;
78
import org.openide.util.Lookup;
79
import org.openide.util.Lookup;
79
import org.openide.util.NbBundle;
80
import org.openide.util.NbBundle;
81
import org.openide.util.Task;
82
import org.openide.util.TaskListener;
80
83
81
/**
84
/**
82
 * Action provider of the Enterprise Application project.
85
 * Action provider of the Enterprise Application project.
Lines 192-202 Link Here
192
                if (p.keySet().size() == 0) {
195
                if (p.keySet().size() == 0) {
193
                    p = null;
196
                    p = null;
194
                }
197
                }
198
                final J2eeApplicationProvider app = EarActionProvider.this.project.getAppModule();
195
                try {
199
                try {
196
                    ActionUtils.runTarget(findBuildXml(), targetNames, p);
200
                    Deployment.getDefault().suspendDeployOnSave(app);
197
                }
201
                    ActionUtils.runTarget(findBuildXml(), targetNames, p).addTaskListener(new TaskListener() {
198
                catch (IOException e) {
202
203
                        @Override
204
                        public void taskFinished(Task task) {
205
                            Deployment.getDefault().resumeDeployOnSave(app);
206
                        }
207
                    });
208
                } catch (IOException e) {
209
                    Deployment.getDefault().resumeDeployOnSave(app);
199
                    Exceptions.printStackTrace(e);
210
                    Exceptions.printStackTrace(e);
211
                } catch (RuntimeException ex) {
212
                    Deployment.getDefault().resumeDeployOnSave(app);
213
                    throw ex;
200
                }
214
                }
201
            }
215
            }
202
        };
216
        };
(-)a/j2eeserver/nbproject/project.properties (-1 / +1 lines)
Lines 42-48 Link Here
42
42
43
is.autoload=true
43
is.autoload=true
44
javac.source=1.6
44
javac.source=1.6
45
spec.version.base=1.78.0
45
spec.version.base=1.79.0
46
46
47
javadoc.arch=${basedir}/arch.xml
47
javadoc.arch=${basedir}/arch.xml
48
javadoc.apichanges=${basedir}/apichanges.xml
48
javadoc.apichanges=${basedir}/apichanges.xml
(-)a/j2eeserver/src/org/netbeans/modules/j2ee/deployment/devmodules/api/Deployment.java (+22 lines)
Lines 131-136 Link Here
131
        return deploy(jmp, debug ? Mode.DEBUG : Mode.RUN, clientModuleUrl, clientUrlPart, forceRedeploy, logger);
131
        return deploy(jmp, debug ? Mode.DEBUG : Mode.RUN, clientModuleUrl, clientUrlPart, forceRedeploy, logger);
132
    }
132
    }
133
133
134
    /**
135
     * Suspends the deploy on save execution regardless of user selection.
136
     *
137
     * @param jmp java ee project representation
138
     * @since 1.79
139
     */
140
    public void suspendDeployOnSave(J2eeModuleProvider jmp) {
141
        DeployOnSaveManager.getDefault().suspendListening(jmp);
142
    }
143
    
144
    /**
145
     * Resumes the deploy on save execution. If it was not preceeded by
146
     * {@link #suspendDeployOnSave(org.netbeans.modules.j2ee.deployment.devmodules.spi.J2eeModuleProvider)}
147
     * it is noop.
148
     *
149
     * @param jmp java ee project representation
150
     * @since 1.79
151
     */
152
    public void resumeDeployOnSave(J2eeModuleProvider jmp) {
153
        DeployOnSaveManager.getDefault().resumeListening(jmp);
154
    }    
155
    
134
    public String deploy (J2eeModuleProvider jmp, Mode mode, String clientModuleUrl, String clientUrlPart, boolean forceRedeploy, Logger logger) throws DeploymentException {
156
    public String deploy (J2eeModuleProvider jmp, Mode mode, String clientModuleUrl, String clientUrlPart, boolean forceRedeploy, Logger logger) throws DeploymentException {
135
        
157
        
136
        DeploymentTarget deploymentTarget = new DeploymentTarget(jmp, clientModuleUrl);
158
        DeploymentTarget deploymentTarget = new DeploymentTarget(jmp, clientModuleUrl);
(-)a/j2eeserver/src/org/netbeans/modules/j2ee/deployment/impl/DeployOnSaveManager.java (-3 / +53 lines)
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;

Return to bug 197320