[jbosstools-dev] [Fwd: [jbosstools-commits] JBoss Tools SVN: r2207 - in trunk/as/plugins/org.jboss.ide.eclipse.as.core: META-INF and 2 other directories.]

Marshall Culpepper marshall.culpepper at redhat.com
Mon Jul 2 12:34:25 EDT 2007


The remote JMX interface to JBoss hasn't changed for a good while... 
though it might be prudent to use both the RMIAdaptor and the new(ish?) 
remoting method .. I think the RMIAdaptor might have been deprecated in 
a recent release.. Rob any ideas about this?

Max Rydahl Andersen wrote:
>> The twiddle launch was a *very* heavy thing. Sure, it'd only run a 
>> quick JMX client to poll the server, but it'd do this 10 times or 
>> more before the server was actually started. Each time it did it, it 
>> would spawn a new process, with all the overhead of a new VM etc, 
>> just to do what is really a few lines of JMX code.
>
> fair enough.
> Is the api we use portable enough for working with 4.x ?
>
> /max
>
>
>> I removed the hard-coded stuff within an hour of committing it ;)  
>> But I'm glad you're being diligent in communicating here.
>>
>> You're right in that my new Poller doesn't clean up its class loader. 
>  I'll have to look into that.
>>
>> Overall I think it was a necessary change. yes it was heavy.
>>
>> Max Rydahl Andersen wrote:
>>> Just noticed this one in commits:
>>>
>>> No longer launches twiddle as its own process.
>>>
>>> and the code is now using classloaders inside the eclipse process to 
>>> get the launch going.
>>>
>>> I know this is tempting to do (I did it myself in hibernate tools) 
>>> BUT I wan't to remove it again simply because it very easily result 
>>> in leaks.
>>>
>>> e.g. the current code does not use a finally block to clean up its 
>>> classloader (p.s. it also seem to use hardcoded paths to the jbossas 
>>> server?!)
>>>
>>> Was the twiddle launch really a heavy thing or ?
>>>
>>> /max
>>>
>>> ------------------------------------------------------------------------ 
>>>
>>>
>>> Subject:
>>> [jbosstools-commits] JBoss Tools SVN: r2207 - in 
>>> trunk/as/plugins/org.jboss.ide.eclipse.as.core: META-INF and 2 other 
>>> directories.
>>> From:
>>> jbosstools-commits at lists.jboss.org
>>> Date:
>>> Thu, 28 Jun 2007 20:19:55 -0400
>>> To:
>>> jbosstools-commits at lists.jboss.org
>>>
>>> To:
>>> jbosstools-commits at lists.jboss.org
>>>
>>>
>>> Author: rob.stryker at jboss.com
>>> Date: 2007-06-28 20:19:55 -0400 (Thu, 28 Jun 2007)
>>> New Revision: 2207
>>>
>>> Added:
>>>    trunk/as/plugins/org.jboss.ide.eclipse.as.core/getopt.jar
>>> Modified:
>>>    trunk/as/plugins/org.jboss.ide.eclipse.as.core/.classpath
>>>    trunk/as/plugins/org.jboss.ide.eclipse.as.core/META-INF/MANIFEST.MF
>>>    trunk/as/plugins/org.jboss.ide.eclipse.as.core/build.properties
>>>    
>>> trunk/as/plugins/org.jboss.ide.eclipse.as.core/jbosscore/org/jboss/ide/eclipse/as/core/runtime/server/polling/TwiddlePoller.java 
>>>
>>>    
>>> trunk/as/plugins/org.jboss.ide.eclipse.as.core/jbosscore/org/jboss/ide/eclipse/as/core/server/JBossServerBehavior.java 
>>>
>>> Log:
>>> More efficient polling mechanism added. No longer launches twiddle 
>>> as its own process.
>>>
>>> Modified: trunk/as/plugins/org.jboss.ide.eclipse.as.core/.classpath
>>> ===================================================================
>>> --- trunk/as/plugins/org.jboss.ide.eclipse.as.core/.classpath    
>>> 2007-06-28 17:15:47 UTC (rev 2206)
>>> +++ trunk/as/plugins/org.jboss.ide.eclipse.as.core/.classpath    
>>> 2007-06-29 00:19:55 UTC (rev 2207)
>>> @@ -1,9 +1,11 @@
>>>  <?xml version="1.0" encoding="UTF-8"?>
>>>  <classpath>
>>>      <classpathentry kind="src" path="jbosscore"/>
>>> +    <classpathentry exported="true" kind="lib" path="getopt.jar"/>
>>>      <classpathentry exported="true" kind="lib" 
>>> path="dom4j-1.6.1.jar"/>
>>>      <classpathentry exported="true" kind="lib" 
>>> path="jaxen-1.1-beta-6.jar"/>
>>>      <classpathentry kind="con" 
>>> path="org.eclipse.pde.core.requiredPlugins"/>
>>>      <classpathentry kind="con" 
>>> path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
>>> +    <classpathentry kind="lib" 
>>> path="C:/Training/jboss-4.x/lib/getopt.jar"/>
>>>      <classpathentry kind="output" path="bin"/>
>>>  </classpath>
>>>
>>> Modified: 
>>> trunk/as/plugins/org.jboss.ide.eclipse.as.core/META-INF/MANIFEST.MF
>>> ===================================================================
>>> --- 
>>> trunk/as/plugins/org.jboss.ide.eclipse.as.core/META-INF/MANIFEST.MF    
>>> 2007-06-28 17:15:47 UTC (rev 2206)
>>> +++ 
>>> trunk/as/plugins/org.jboss.ide.eclipse.as.core/META-INF/MANIFEST.MF    
>>> 2007-06-29 00:19:55 UTC (rev 2207)
>>> @@ -36,4 +36,5 @@
>>>   org.jboss.ide.eclipse.as.core.util
>>>  Bundle-ClassPath: dom4j-1.6.1.jar,
>>>   jaxen-1.1-beta-6.jar,
>>> - jbossascore.jar
>>> + jbossascore.jar,
>>> + getopt.jar
>>>
>>> Modified: 
>>> trunk/as/plugins/org.jboss.ide.eclipse.as.core/build.properties
>>> ===================================================================
>>> --- 
>>> trunk/as/plugins/org.jboss.ide.eclipse.as.core/build.properties    
>>> 2007-06-28 17:15:47 UTC (rev 2206)
>>> +++ 
>>> trunk/as/plugins/org.jboss.ide.eclipse.as.core/build.properties    
>>> 2007-06-29 00:19:55 UTC (rev 2207)
>>> @@ -6,5 +6,6 @@
>>>                 jaxen-1.1-beta-6.jar,\
>>>                 dom4j-1.6.1.jar,\
>>>                 plugin.properties,\
>>> -               schema/
>>> +               schema/,\
>>> +               getopt.jar
>>>  source.jbossascore.jar = jbosscore/
>>>
>>> Added: trunk/as/plugins/org.jboss.ide.eclipse.as.core/getopt.jar
>>> ===================================================================
>>> (Binary files differ)
>>>
>>>
>>> Property changes on: 
>>> trunk/as/plugins/org.jboss.ide.eclipse.as.core/getopt.jar
>>> ___________________________________________________________________
>>> Name: svn:mime-type
>>>    + application/octet-stream
>>>
>>> Modified: 
>>> trunk/as/plugins/org.jboss.ide.eclipse.as.core/jbosscore/org/jboss/ide/eclipse/as/core/runtime/server/polling/TwiddlePoller.java 
>>>
>>> ===================================================================
>>> --- 
>>> trunk/as/plugins/org.jboss.ide.eclipse.as.core/jbosscore/org/jboss/ide/eclipse/as/core/runtime/server/polling/TwiddlePoller.java    
>>> 2007-06-28 17:15:47 UTC (rev 2206)
>>> +++ 
>>> trunk/as/plugins/org.jboss.ide.eclipse.as.core/jbosscore/org/jboss/ide/eclipse/as/core/runtime/server/polling/TwiddlePoller.java    
>>> 2007-06-29 00:19:55 UTC (rev 2207)
>>> @@ -21,9 +21,25 @@
>>>   */
>>>  package org.jboss.ide.eclipse.as.core.runtime.server.polling;
>>>  
>>> +import java.io.IOException;
>>> +import java.net.MalformedURLException;
>>> +import java.net.URL;
>>> +import java.net.URLClassLoader;
>>>  import java.util.Date;
>>> +import java.util.Properties;
>>>  
>>> -import org.eclipse.debug.core.model.IProcess;
>>> +import javax.management.AttributeNotFoundException;
>>> +import javax.management.InstanceNotFoundException;
>>> +import javax.management.MBeanException;
>>> +import javax.management.MBeanServerConnection;
>>> +import javax.management.MalformedObjectNameException;
>>> +import javax.management.ObjectName;
>>> +import javax.management.ReflectionException;
>>> +import javax.naming.InitialContext;
>>> +import javax.naming.NamingException;
>>> +
>>> +import org.eclipse.debug.core.ILaunchConfigurationWorkingCopy;
>>> +import org.eclipse.jdt.launching.IJavaLaunchConfigurationConstants;
>>>  import org.eclipse.wst.server.core.IServer;
>>>  import org.jboss.ide.eclipse.as.core.model.EventLogModel;
>>>  import org.jboss.ide.eclipse.as.core.model.ServerProcessModel;
>>> @@ -32,7 +48,7 @@
>>>  import 
>>> org.jboss.ide.eclipse.as.core.runtime.server.IServerStatePoller;
>>>  import 
>>> org.jboss.ide.eclipse.as.core.server.JBossServerLaunchConfiguration;
>>>  import org.jboss.ide.eclipse.as.core.server.TwiddleLauncher;
>>> -import 
>>> org.jboss.ide.eclipse.as.core.server.TwiddleLauncher.ProcessData;
>>> +import org.jboss.ide.eclipse.as.core.util.ArgsUtil;
>>>  import org.jboss.ide.eclipse.as.core.util.SimpleTreeItem;
>>>  
>>>  public class TwiddlePoller implements IServerStatePoller {
>>> @@ -66,44 +82,61 @@
>>>      private class PollerRunnable implements Runnable {
>>>          private TwiddleLauncher launcher;
>>>          public void run() {
>>> -            String args = "get \"jboss.system:type=Server\" Started";
>>> -            while( !canceled && !done ) {
>>> -                // are start processes still going?
>>> -                ServerProcessModelEntity ent = 
>>> ServerProcessModel.getDefault().getModel(server.getId());
>>> -                IProcess[] processes = 
>>> ent.getProcesses(JBossServerLaunchConfiguration.START);
>>> -                if( 
>>> ServerProcessModel.allProcessesTerminated(processes)) {
>>> -                    done = true;
>>> -                    started = 0;
>>> -                    eventAllProcessesTerminated();
>>> -                } else {
>>> -                    launcher = new TwiddleLauncher();
>>> -                    ProcessData[] datas = 
>>> launcher.getTwiddleResults(server, args, true);
>>> -                    if( datas.length == 1 ) {
>>> -                        ProcessData d = datas[0];
>>> -                        String out = d.getOut();
>>> -                        if( out.startsWith("Started=true")) {
>>> -                            started = STATE_STARTED;
>>> -                        } else if(out.startsWith("Started=false")) {
>>> -                            started = STATE_TRANSITION; // it's 
>>> alive and responding
>>> -                        } else if( 
>>> out.indexOf("java.lang.SecurityException") != -1 ) {
>>> -                            // throw exception 
>>> -                            securityException = true;
>>> -                        } else {
>>> -                            started = STATE_STOPPED; // It's fully 
>>> down
>>> -                        }
>>> -                       -                        if( started == 1 && 
>>> expectedState == SERVER_UP ) {
>>> +            ClassLoader currentLoader = 
>>> Thread.currentThread().getContextClassLoader();
>>> +            ClassLoader twiddleLoader = getClassLoader();
>>> +            if( twiddleLoader != null ) {
>>> +                
>>> Thread.currentThread().setContextClassLoader(twiddleLoader);
>>> +                System.out.println("here we go");
>>> +               +                Properties props = new Properties();
>>> +                props.put("java.naming.factory.initial", 
>>> "org.jnp.interfaces.NamingContextFactory");
>>> +                
>>> props.put("java.naming.provider.url","jnp://localhost:1099");
>>> +                
>>> props.put("java.naming.factory.url.pkgs","org.jboss.naming:org.jnp.interfaces"); 
>>>
>>> +                +                while( !done && !canceled ) {
>>> +                    InitialContext ic;
>>> +                    try {
>>> +                        ic = new InitialContext(props);
>>> +                        Object obj = 
>>> ic.lookup("jmx/invoker/RMIAdaptor");
>>> +                        ic.close();
>>> +                        System.out.println(obj);
>>> +                        if( obj instanceof MBeanServerConnection ) {
>>> +                                MBeanServerConnection connection = 
>>> (MBeanServerConnection)obj;
>>> +                                Object attInfo = 
>>> connection.getAttribute(new ObjectName("jboss.system:type=Server"), 
>>> "Started");
>>> +                                boolean b = 
>>> ((Boolean)attInfo).booleanValue();
>>> +                                started = b ? STATE_STARTED : 
>>> STATE_TRANSITION;
>>> +                                if( b && expectedState )
>>> +                                    done = true;
>>> +                        }
>>> +                    } catch (NamingException e) {
>>> +                        // should give up now
>>> +                    } catch( SecurityException se ) {
>>> +                        securityException = true;
>>> +                    } catch( Exception e ) {
>>> +                        System.out.println("exception: " + 
>>> e.getMessage());
>>> +                        e.printStackTrace();
>>> +                        started = STATE_STOPPED;
>>> +                        if( !expectedState )
>>>                              done = true;
>>> -                        } else if( started == 0 && expectedState == 
>>> SERVER_DOWN) {
>>> -                            done = true;
>>> -                        }                      }
>>> -                }
>>> -                if( !canceled )
>>> -                    eventTwiddleExecuted();
>>> +
>>> +                } // end while
>>>              }
>>> +           +            
>>> Thread.currentThread().setContextClassLoader(currentLoader);
>>> +
>>>          }
>>> -
>>> +        protected ClassLoader getClassLoader() {
>>> +            try {
>>> +                URL url = new 
>>> URL("file:///C:/apps/jboss/4.2.ga.src/build/output/jboss-4.2.0.GA/client/jbossall-client.jar"); 
>>>
>>> +                URL url2 = new 
>>> URL("file:///C:/apps/jboss/4.2.ga.src/build/output/jboss-4.2.0.GA/bin/twiddle.jar"); 
>>>
>>> +                URLClassLoader loader = new URLClassLoader(new 
>>> URL[] {url, url2}, Thread.currentThread().getContextClassLoader());
>>> +                return loader;
>>> +            } catch( MalformedURLException murle) {
>>> +                murle.printStackTrace();
>>> +            }
>>> +            return null;
>>> +        }
>>>          public void setCanceled() {
>>>              if( launcher != null ) {
>>>                  launcher.setCanceled();
>>>
>>> Modified: 
>>> trunk/as/plugins/org.jboss.ide.eclipse.as.core/jbosscore/org/jboss/ide/eclipse/as/core/server/JBossServerBehavior.java 
>>>
>>> ===================================================================
>>> --- 
>>> trunk/as/plugins/org.jboss.ide.eclipse.as.core/jbosscore/org/jboss/ide/eclipse/as/core/server/JBossServerBehavior.java    
>>> 2007-06-28 17:15:47 UTC (rev 2206)
>>> +++ 
>>> trunk/as/plugins/org.jboss.ide.eclipse.as.core/jbosscore/org/jboss/ide/eclipse/as/core/server/JBossServerBehavior.java    
>>> 2007-06-29 00:19:55 UTC (rev 2207)
>>> @@ -45,6 +45,7 @@
>>>              private PollThread pollThread = null;
>>> +        public JBossServerBehavior() {
>>>          super();
>>>      }
>>> @@ -87,14 +88,18 @@
>>>      }
>>>          protected void forceStop() {
>>> +        forceStop(true);
>>> +    }
>>> +    protected void forceStop(boolean addEvent) {
>>>          // just terminate the processes. All of them
>>>          try {
>>>              
>>> ServerProcessModel.getDefault().getModel(getServer().getId()).clearAll(); 
>>>
>>>              process = null;
>>>              setServerStopped();
>>> -            EventLogTreeItem tpe = new ForceShutdownEvent();
>>> -            EventLogModel.markChanged(tpe.getEventRoot());
>>> -
>>> +            if( addEvent ) {
>>> +                EventLogTreeItem tpe = new ForceShutdownEvent();
>>> +                EventLogModel.markChanged(tpe.getEventRoot());
>>> +            }
>>>          } catch( Throwable t ) {
>>>              t.printStackTrace();
>>>          }
>>> @@ -131,7 +136,7 @@
>>>                      for (int i = 0; i < size; i++) {
>>>                          if (process != null && 
>>> process.equals(events[i].getSource()) && events[i].getKind() == 
>>> DebugEvent.TERMINATE) {
>>>                              
>>> DebugPlugin.getDefault().removeDebugEventListener(this);
>>> -                            forceStop();
>>> +                            forceStop(false);
>>>                          }
>>>                      }
>>>                  }
>>>
>>> _______________________________________________
>>> jbosstools-commits mailing list
>>> jbosstools-commits at lists.jboss.org
>>> https://lists.jboss.org/mailman/listinfo/jbosstools-commits
>>>   
>>> ------------------------------------------------------------------------ 
>>>
>>>
>>> _______________________________________________
>>> jbosstools-dev mailing list
>>> jbosstools-dev at lists.jboss.org
>>> https://lists.jboss.org/mailman/listinfo/jbosstools-dev
>
> _______________________________________________
> jbosstools-dev mailing list
> jbosstools-dev at lists.jboss.org
> https://lists.jboss.org/mailman/listinfo/jbosstools-dev


-- 
Marshall Culpepper
Redhat Dev Studio, JBoss Tools
-
http://jboss.org/tools
email: marshall at jboss.org
skype: marshall.culpepper 




More information about the jbosstools-dev mailing list