Re: Ptolemy running headless

2008-08-18 Thread Brian Hudson
I'd like to know if there is a standard way of doing this as well.

I've done something like this by looking for an Effigy/Tableau. In my case
there isn't an Effigy, but in yours you may have one or more Effigy's but
you shouldn't have any Tableau('s) (or at least any with non-null frames) if
you are running headless.

Brian

On Mon, Aug 18, 2008 at 1:36 PM, Paul Allen [EMAIL PROTECTED] wrote:

 Hi all, What's the easiest way to tell if Ptolemy/Kepler is running in
 headless mode? I have actors that want to customize what they do depending
 on whether we are in a headless or GUI environment.

 Thanks,
 -Paul




 
 Posted to the ptolemy-hackers mailing list.  Please send administrative
 mail for this list to: [EMAIL PROTECTED]



Re: Ptolemy running headless

2008-08-18 Thread Christopher Brooks
Hi Paul,
Offhand, I'm not sure.

There are really several different headless modes:

1) Run Ptolemy and do not invoke any classes that attempt to communicate
with the display.  This means that no gui classes in java are called
by Ptolemy.  This is what I usually call Headless.  

2) Run Ptolemy and use the Java headless facility:
http://java.sun.com/developer/technicalArticles/J2SE/Desktop/headless/
Here, Ptolemy can probably invoke methods in the Java gui classes.

3) Run Ptolemy and use a fake display.  We do this under Solaris
sometimes.

4) Run with a real display.  This is not headless. 


The problem with #1 is that I've not found an easy way to catch the
exception that occurs when a Java gui class tries to communicate with
the Display.  This could have changed, but below is a braindump:

If you run 
export JAVAFLAGS=-verbose
$PTII/bin/vergil
in a headless environment, say over ssh with X11 forwarding turned off,
then you can see what classses are loaded while trying to start

The issue is that VergilApplication.java imports 
javax.swing.SwingUtilities, which starts loading libraries
[Loaded ptolemy.vergil.VergilApplication$1 from 
file:/export/home1/cxh/src/ptII/]
[Loaded javax.swing.SwingConstants from /usr/jdk/jdk1.5.0_15/jre/lib/rt.jar]
[Loaded javax.swing.SwingUtilities from /usr/jdk/jdk1.5.0_15/jre/lib/rt.jar]
[Loaded java.awt.EventQueue from /usr/jdk/jdk1.5.0_15/jre/lib/rt.jar]
[Loaded sun.awt.DebugHelper from /usr/jdk/jdk1.5.0_15/jre/lib/rt.jar]
[Loaded sun.awt.NativeLibLoader from /usr/jdk/jdk1.5.0_15/jre/lib/rt.jar]
[Loaded sun.security.action.LoadLibraryAction from 
/usr/jdk/jdk1.5.0_15/jre/lib/rt.jar]
[Loaded java.awt.GraphicsEnvironment from /usr/jdk/jdk1.5.0_15/jre/lib/rt.jar]
[Loaded java.awt.GraphicsEnvironment$1 from /usr/jdk/jdk1.5.0_15/jre/lib/rt.jar]


The actual exception is:

Command failed
java.lang.Exception: Failed to parse 
at 
ptolemy.actor.gui.MoMLApplication.throwArgsException(MoMLApplication.java:584)
at ptolemy.actor.gui.MoMLApplication.init(MoMLApplication.java:245)
at ptolemy.vergil.VergilApplication.init(VergilApplication.java:98)
at ptolemy.vergil.VergilApplication$1.run(VergilApplication.java:141)
at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:209)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:461)
at 
java.awt.EventDispatchThread.pumpOneEventForHierarchy(EventDispatchThread.java:242)
at 
java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:163)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:157)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:149)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:110)
Caused by: java.awt.HeadlessException: 
No X11 DISPLAY variable was set, but this program performed an operation which 
requires it.
at 
java.awt.GraphicsEnvironment.checkHeadless(GraphicsEnvironment.java:159)
at java.awt.Window.init(Window.java:318)
at java.awt.Frame.init(Frame.java:419)
at java.awt.Frame.init(Frame.java:384)
at 
javax.swing.SwingUtilities$SharedOwnerFrame.init(SwingUtilities.java:1666)
at 
javax.swing.SwingUtilities.getSharedOwnerFrame(SwingUtilities.java:1743)
at javax.swing.JOptionPane.getRootFrame(JOptionPane.java:1624)
at javax.swing.JOptionPane.showOptionDialog(JOptionPane.java:836)
at 
ptolemy.vergil.VergilErrorHandler.handleError(VergilErrorHandler.java:133)
at ptolemy.moml.MoMLParser.startElement(MoMLParser.java:3248)


You could try doing a class lookup by calling Class.forName() on 
a swing class and see what happens.  Maybe you could query the display
for the width or something.

You could also try checking to see if the Swing Event Thread is
present.  One way to do this is to call
javax.swing.SwingUtilities.isEventDispatchThread().
However, I believe that at one time, merely loading
javax.swing.SwingUtilities would start up the entire display in
a way that would just crash the process if there was no display.

Let us know what you find out.  I suspect things have changed since
I last tried this.

_Christopher







Hi all, What's the easiest way to tell if Ptolemy/Kepler is running in 
headless mode? I have actors that want to customize what they do 
depending on whether we are in a headless or GUI environment.

Thanks,
-Paul



---
   -
Posted to the ptolemy-hackers mailing list.  Please send administrative
mail for this list to: [EMAIL PROTECTED]



Posted to the ptolemy-hackers mailing list.  Please send administrative
mail for this list to: [EMAIL PROTECTED]