? src/org/netbeans/modules/j2ee/server/DebuggerInfoFactory.java Index: src/org/netbeans/modules/j2ee/impl/DefaultExecPerformer.java =================================================================== RCS file: /cvs/j2eeserver/src/org/netbeans/modules/j2ee/impl/Attic/DefaultExecPerformer.java,v retrieving revision 1.10.2.3 diff -c -r1.10.2.3 DefaultExecPerformer.java *** src/org/netbeans/modules/j2ee/impl/DefaultExecPerformer.java 4 Apr 2003 00:48:14 -0000 1.10.2.3 --- src/org/netbeans/modules/j2ee/impl/DefaultExecPerformer.java 10 Oct 2003 16:50:45 -0000 *************** *** 23,28 **** --- 23,29 ---- import org.netbeans.modules.j2ee.server.*; import org.netbeans.modules.j2ee.server.web.*; import org.netbeans.modules.j2ee.server.datamodel.*; + import org.openide.ErrorManager; /** * *************** *** 91,96 **** --- 92,118 ---- return; // abort processing; see IN=4492 } DefaultServerInstanceManager.serverInstanceStartDebugging(inst, stopOnMain, this); + } + } + + /** + * Special version of startDebugging for J2EE Debugger *only* + */ + public final void startJ2eeDebugging(boolean stopOnMain, DebuggerInfoFactory fact) { + // ensure that only the J2EEDebugger can use this method! + String cName = fact.getClass().getName(); + if ( ! cName.equals("com.sun.forte4j.j2ee.debugger.J2EEDebuggerType$DIFactory") ) { // NOI18N + throw new RuntimeException("unexpected subclass of DebuggerInfoFactory: " + cName); // NOI8N + } + synchronized (DefaultExecPerformer.class) { + ServerInstance inst = getServerInstance(); + if (inst == null) { + DialogDisplayer.getDefault().notify( + new NotifyDescriptor.Message( + NbBundle.getMessage(DefaultExecPerformer.class, "MSG_NoServerInstanceForApp"))); //NOI18N + return; // abort processing; see IN=4492 + } + DefaultServerInstanceManager.serverInstanceStartJ2eeDebugging(inst, stopOnMain, this, fact); } } Index: src/org/netbeans/modules/j2ee/impl/DefaultServerInstanceManager.java =================================================================== RCS file: /cvs/j2eeserver/src/org/netbeans/modules/j2ee/impl/Attic/DefaultServerInstanceManager.java,v retrieving revision 1.18.2.3 diff -c -r1.18.2.3 DefaultServerInstanceManager.java *** src/org/netbeans/modules/j2ee/impl/DefaultServerInstanceManager.java 4 Apr 2003 00:48:14 -0000 1.18.2.3 --- src/org/netbeans/modules/j2ee/impl/DefaultServerInstanceManager.java 10 Oct 2003 16:50:45 -0000 *************** *** 510,515 **** --- 510,613 ---- } } } + + // ------------- special methods for use of J2EEDebugger *only*! --------- + + public final void deactivateJ2ee(DebuggerInfoFactory fact) { + // ensure that only the J2EEDebugger can use this method! + String cName = fact.getClass().getName(); + if ( ! cName.equals("com.sun.forte4j.j2ee.debugger.J2EEDebuggerType$DIFactory") ) { // NOI18N + throw new RuntimeException("unexpected subclass of DebuggerInfoFactory: " + cName); // NOI8N + } + + if (activation) { + activation = false; + goJ2ee(fact); + } + } + private final void goJ2ee(DebuggerInfoFactory fact) { + synchronized (DefaultServerInstanceManager.this) { + if (debug) { + connectJ2eeDebugger(fact); + clearCopyMaker(); + createCopyMaker(); + } else { + createExecutorTask(); + clearCopyMaker(); + createCopyMaker(); + } + } + } + + } + + // ------------- special methods for use of J2EEDebugger *only*! --------- + + static protected final void serverInstanceStartJ2eeDebugging(ServerInstance serverInstance, + boolean stopOnMain, + DefaultExecPerformer ep, + DebuggerInfoFactory fact) { + // ensure that only the J2EEDebugger can use this method! + String cName = fact.getClass().getName(); + if ( ! cName.equals("com.sun.forte4j.j2ee.debugger.J2EEDebuggerType$DIFactory") ) { // NOI18N + throw new RuntimeException("unexpected subclass of DebuggerInfoFactory: " + cName); // NOI8N + } + prepareServerInstanceManagerMap(serverInstance); + DefaultServerInstanceManager serverInstanceManager = ((DefaultServerInstanceManager)serverInstanceManagerMap.get(serverInstance)); + + serverInstanceManager.startJ2eeDebugger(ep, stopOnMain, fact); + } + + private final void startJ2eeDebugger(DefaultExecPerformer ep, + boolean stopOnMain, + DebuggerInfoFactory fact) { + try { + // compile first, bug 31261 + DataObject objectToCompile = ep.getObjectToCompile(); + if (!compile(objectToCompile)) { + return; + } + + serverInstance.setMode(ServerInstance.MODE_DEBUG); + debug = true; + copyMakerServerInstanceListener.prepare(); + ProgressObject po = doDeploy(ep, ep.tryIncremental()); + if (po != null && po.checkCancelled()) + return; + serverInstance.ensureAvailable(po); + po.finished(); + copyMakerServerInstanceListener.deactivateJ2ee(fact); + ep.startClient(); + } catch (Exception e) { + ErrorManager.getDefault().log(ErrorManager.WARNING, e.getMessage()); + } + } + + private final void connectJ2eeDebugger(DebuggerInfoFactory fact) { + try { + DebugInfo debugInfo = serverInstance.getDebugInfo(); + DebuggerInfo debuggerInfo = fact.getDebuggerInfo(debugInfo); + Debugger debugger = (Debugger)Lookup.getDefault().lookup(Debugger.class); + debugger.addPropertyChangeListener(new DebuggerPropertyChangeListener(debuggerInfo)); + //try to connect + int time = 100; // 100 ms + int cycles = 7; + for (int i=0; i