An upgrade of Mac OS X broke your deployed applications.
You thought Apple knew what it is doing and accepted a Software Update. Hopefully you did this on a testing server before you did it on something that people depend on. And hopefully you had made a copy of your httpd.conf file before you did anything, or have a backup of that file available. There are a few things that may have happened. First, it may have nothing whatsoever to do with WebObjects. Do a google search for news about the update and see if there are fixes to any issues. For example, doing an upgrade around 10.6.4 or 10.6.5 would break /usr/bin/apachectl, which is a script, but the fix was pretty trivial.
Second, did Apple mess up your ScriptAlias directive? Look at occurrence of the ScriptAlias directive if your httpd.conf file. Apple changes the value, pretty much whenever it does an update, that disables the use of WebObjects. Undo this and send a thank you note to Apple.
Third, did Apple mess with, munge, or otherwise destroy your WOAdaptor plugin? Look at the bottom of the httpd.conf file that you now have. People either explicitly use an "Include" directive or they rely on the "automatic include" directory. You may see:
Include "/etc/apache2/sites/*.conf" Include /System/Library/WebObjects/Adaptors/Apache2.2/apache.conf
Is the "apache.conf" file where this line says it is? If it does not specify, is there something like a webobjects.conf in the /etc/apache2/sites/ directory? Note that this may also be at /etc/httpd/other....
If you look at the top of the conf file, you will see a line like:
LoadModule WebObjects_module /System/Library/WebObjects/Adaptors/Apache2.2/mod_WebObjects.so
Is the mod_WebObjects.so file still where this line says it is? If not, you may have to hunt around to find another copy.
If these steps fail, check in with the mailing list. Explain what you have done and what you are seeing. And explain that the wiki was incredibly useful and more stuff should be documented!
ERXExtensions have not been initialized.
When your application starts running you might get the message:
ERXExtensions have not been initialized. Please report the classpath and the rest of the bundles to the Wonder mailing list:
Remaining [WONDER:JavaXML, JavaFoundation, ERJars, JavaEOControl, JavaWOExtensions, JavaEOAccess, JavaJDBCAdaptor, JavaWOSMIL, ERExtensions, JavaWebObjects]
Fix 1
Check your main routine - it should be:
public static void main (String argv []) { // Do not put any calls to Wonder code here. ERXApplication.main (argv, Application.class); }
You can have other code in here before the call to ERXApplication, but you can't have calls to any Wonder stuff before the call to ERXApplication.main. This interferes with the order in which Wonder frameworks are loaded, which causes the above problem.
4 Comments
Farrukh Ijaz
In my case, I observed this problem when I tried to place my framework in a folder which does not have the same name as the framework's name. E.g. I had a framework called "KlokDB" and I placed in a folder "KlokDB/trunk" or "KlokDB/trunk/KlokDB1", I got "ERXExtensions have not been initialized." exception. The moment I moved my framework to "KlokDB" or "KlokDB/trunk/KlokDB", it worked.
Baiss Eric Magnusson
The most common problem seems to be:
1) java.lang.NoClassDefFoundError:com/webobjects/appserver/WOApplication
but I don't see the problem discussed this way.
2) Suggestion: Add notes saying where LOCALROOT and WOROOT are defined, and what files need to be there, etc.
Pascal Robert
The best way to NOT have this issue is to embedded the frameworks into the application bundle.
Baiss Eric Magnusson
The best way to start solving these problems is to launch the application from the command line.
Navigate in terminal to the .woa folder and then type,
./YourWOApplicationName