[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