Running wotaskd as root not appserver

John Pollard <[email protected]> Fri, 4 Feb 2005 12:26:31 +0000
Newsgroups gmane.comp.web.webobjects.admin
Message-ID <[email protected]>
When deploying on Mac OS X Server, the WO apps are now run as the  
appserver user.

I have a problem that I have read will be solved by running the WO apps  
as the root user.

I thought this would be easy by editing  
/System/Library/StartupItems/WebObjects to comment out the line that  
supposedly runs the apps as appserver and to uncomment the line that  
runs them as root. Annoyingly the apps are still run by appserver and I  
just can't see how.

In the WebObjects startup file, I see:

WOSERVICE="/System/Library/WebObjects/JavaApplications/wotaskd.woa/ 
Contents/Resources/javawoservice.sh"

which is run like this:

"$WOSERVICE" -appPath "$WOTASKD" >/var/log/webobjects.log 2>&1 &

I know that the WebObjects startup script itself is run by root, I  
checked. But javawoservice.sh is running under the appserver user; I  
have no idea how or why.

The problem that causes me to want to run the apps as root is the  
following error, triggered when I am using a Jasper Reports class - I  
know this works when the apps are run as root:

java.lang.InternalError: Can't connect to window server - not enough  
permissions.
         at java.lang.ClassLoader$NativeLibrary.load(Native Method)
         at java.lang.ClassLoader.loadLibrary0(ClassLoader.java:1473)
         at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1389)
         at java.lang.Runtime.loadLibrary0(Runtime.java:788)
         at java.lang.System.loadLibrary(System.java:832)
         at  
sun.security.action.LoadLibraryAction.run(LoadLibraryAction.java:50)
         at java.security.AccessController.doPrivileged(Native Method)
         at java.awt.Toolkit.loadLibraries(Toolkit.java:1401)
         at java.awt.Toolkit.<clinit>(Toolkit.java:1422)
         at java.awt.Color.<clinit>(Color.java:250)
         at  
dori.jasper.engine.base.JRBaseElement.<init>(JRBaseElement.java:109)
         at  
dori.jasper.engine.design.JRDesignElement.<init>(JRDesignElement.java: 
83)
         at  
dori.jasper.engine.design.JRDesignTextElement.<init>(JRDesignTextElement 
.java:108)
         at  
dori.jasper.engine.design.JRDesignTextField.<init>(JRDesignTextField.jav 
a:85)
         at  
dori.jasper.engine.xml.JRTextFieldFactory.createObject(JRTextFieldFactor 
y.java:98)
         at  
org.apache.commons.digester.FactoryCreateRule.begin(FactoryCreateRule.ja 
va:291)
         at org.apache.commons.digester.Rule.begin(Rule.java:200)
         at  
org.apache.commons.digester.Digester.startElement(Digester.java:1268)
         at  
org.apache.crimson.parser.Parser2.maybeElement(Parser2.java:1490)
         at org.apache.crimson.parser.Parser2.content(Parser2.java:1779)
         at  
org.apache.crimson.parser.Parser2.maybeElement(Parser2.java:1507)
         at org.apache.crimson.parser.Parser2.content(Parser2.java:1779)
         at  
org.apache.crimson.parser.Parser2.maybeElement(Parser2.java:1507)
         at org.apache.crimson.parser.Parser2.content(Parser2.java:1779)
         at  
org.apache.crimson.parser.Parser2.maybeElement(Parser2.java:1507)
         at  
org.apache.crimson.parser.Parser2.parseInternal(Parser2.java:500)
         at org.apache.crimson.parser.Parser2.parse(Parser2.java:305)
         at  
org.apache.crimson.parser.XMLReaderImpl.parse(XMLReaderImpl.java:442)
         at  
org.apache.commons.digester.Digester.parse(Digester.java:1562)
         at  
dori.jasper.engine.xml.JRXmlLoader.loadXML(JRXmlLoader.java:387)
         at dori.jasper.engine.xml.JRXmlLoader.load(JRXmlLoader.java:371)
         at dori.jasper.engine.xml.JRXmlLoader.load(JRXmlLoader.java:339)
         at dori.jasper.engine.xml.JRXmlLoader.load(JRXmlLoader.java:323)
         at  
dori.jasper.engine.JasperCompileManager.compileReportToFile(JasperCompil 
eManager.java:121)
         at  
dori.jasper.engine.JasperManager.compileReportToFile(JasperManager.java: 
907)
         at  
mp.reports.TransactionReport.generateReport(TransactionReport.java:195)
         at Session.clientSideRequestTransactionReport(Session.java:251)

Thanks
John