Developer Documentation
PATH  WebObjects 4.0 Documentation > WebObjects Release Notes

WebObjects 4 Release Notes

Last Updated October 22, 1998

This document lists those problems known to exist in this release of WebObjects, and suggests ways to avoid or work around these problems. Please refer to the bug reference number if you need to contact Apple about a bug's status.

Release notes for Enterprise Objects Framework are listed separately, and can be found here.

Among the documention supplied with this release is "What's New in WebObjects 4", which details those features that are new or have substantially changed since the last release of WebObjects. As well, "WebObjects Post-Installation Instructions" details a number of important steps you may need to take--depending on your particular configuration--after installing WebObjects.

Known Problems in This Release


Windows NT Installation
Reference2253233
Problem machd and nmserver aren't always installed as NT services.
Description On some platforms, the Mach emulation Daemon and the Netname Server sometimes don't properly install themselves as NT services. Among other things, this will cause YellowBox apps (such as EOModeler, ProjectBuilder, and WebObjectsBuilder) to fail to launch; they will hang at the splash screen and complain that they cannot contact the window server.

Symptoms are as follows:

0) Install WebObjects.
1) Open the "Services" control panel. Check whether two services exist therein:

"Apple Mach Daemon"
"Apple NetName Server"
Workaround     In order to fix this, open up a Bourne shell and type the following:

1) cd $NEXT_ROOT/Library/System
2) ./machd.exe -install
3) ./nmserver.exe -install
  
Reference2252905
Problem Uninstalling from an account other than Administrator can result in some items not being removed
Description If you happen to uninstall WebObjects or Yellow Box from an account that doesn't have Administrator privileges, some items--such as the Start Menu items--will not be removed.
Workaround     Uninstall from the Administrator account, or from the account with administrator privileges that was used to install the product.
  
Reference2252815
Problem Existing Sybase environment variable is removed during installation of Sybase Client Libraries
Description If you choose to install the Sybase Client Libraries in the Yellow Box or WebObjects Installer, any existing Sybase environment variable will be replaced by a value that points to the newly-installed client libraries. After uninstalling Yellow Box or WebObjects, the Sybase variable is completely removed.
Workaround     Save your existing Sybase environment variable into another variable, such as Sybase_bak. After you uninstall set your Sybase environment variable back to the value saved in the Sybase_bak variable.
  
Reference2251852
Problem WebObjects uninstaller doesn't remove all files
Description Upon completion of the WebObjects uninstall there are still some files remaining in the install directory.
Workaround     After uninstalling you should restart your computer. Any files that still exist in the install directory are probably files that were modified or are new since the installation. They can be removed manually. There are also some extra files in the /Receipts directory that can be removed manually.
  
Reference2250013
Problem Incomplete uninstalls cause subsequent uninstalls to fail
Description If the NT uninstaller application is aborted or fails during the uninstall process it will cause subsequent uninstalls to fail.
Workaround     If uninstallation is aborted or fails, follow the steps outlined in the Readme.txt file in the Uninstall/UninstallWO4.0 directory on your CD.
  
Reference2235477
Problem Attempting to uninstall while WebObjects or Yellow Box applications are running can cause the uninstaller to hang
Description If you launch the uninstaller while WebObjects or Yellow Box applications are running in the background, the uninstaller is likely to hang.
Workaround     Close all WebObjects and Yellow Box applications before starting the uninstaller.
  
Reference2177001
Problem Installing WebObjects to the root of a drive causes problems
Description If you install WebObjects to the root of a drive, a number of installation and runtime problems will result.
Workaround     Do not install to the root of a drive. Select the default installation location, or install into any directory other than the root.
  
Reference2173328
Problem Installing WebObjects onto a machine that already has Yellow Box, OpenStep, or WebObjects installed can cause subsequent uninstalls to fail.
Description If you install WebObjects onto a machine with an existing version of WebObjects, Yellow Box, or OpenStep, it is possible that the uninstaller will be disabled. Some files shared by these releases will be removed by the uninstall, causing problems with the originally installed product.
Workaround     Uninstall any previous version of WebObjects, Yellow Box, or OpenStep before installing new versions of WebObjects or Yellow Box.
  
Reference2172707
Problem Installing into a deep directory structure may prevent the uninstaller from working.
Description If you install into a deep directory structure you may find that the uninstaller doesn't work. This is due to limitations in the file system path length.
Workaround     Don't install into directories that are more than two or three levels deep, and use short directory names.
  
Reference2172353
Problem Cannot use forward slashes when specifying path names in Windows NT installer.
Description When installing WebObjects on Windows NT, you are prompted for your server's cgi-bin and document root paths. If you choose to type in the path without going through the file system browser, you cannot type the path with forward slashes, as in C:/cgipath. If you do, the paths will become corrupted in the registry.
Workaround     Use backslashes when typing paths in the installer, as in C:\cgipath.
  
Reference2171931
Problem The "About Apple Software" application doesn't display product or version information
Description When the "About Apple Software" application is selected from the WebObjects Start Menu, the executable is launched but the product and version information isn't displayed.
Workaround     Log in as Administrator or using the account that was used to install WebObjects. "About Apple Software" will then display product and version information.
  
Reference1685375
Problem Installing WebObjects into the "Program Files" directory--or any directory with spaces in the directory name--causes problems in the installer
Description If you try to install WebObjects into a directory with spaces in the directory name, some of the installation scripts won't function properly. The result is that some of the services will not be started, documentation will not be indexed, and other necessary tasks will not be completed.
Workaround     Choose the default installation location, or install into a directory that doesn't have spaces in its name.
  

WebObjects Framework
Reference2282366
Problem Client-side component won't run multithreaded.
Description Running Client-side components with concurrent request handling enabled, raises an exception.
Workaround     None. Client-side components are not thread-safe in WebObjects 4.0. You will have to run with concurrent request handling disabled. However, you can safely run with WOWorkerThreadCount > 1.
  
Reference2178197
Problem Client-Side Component snapshotting doesn't work when caching is turned off
Description A WOApplet won't snapshot the component values when component definition caching is disabled (that is, the -c option was not specified on the command line, or the message [WOApp setCachingEnabled:NO] was sent). This means that a request initiated by a client-side component will result in a response that will contain all the key-value pairs even though some of these pairs may not have changed during the request. This may have some side effects. You should make sure that your client-side component behaves the same way when caching is turned on (since snapshotting will work when caching is turned on).
Workaround     Turn component-definition caching on in order to enable snapshotting.
  
Reference2279740
Problem When using Java, sessions don't seem to be deallocated when expected.
Description Due to the way Java manages memory, sessions can terminate (time out) without getting deallocated immediately. This is not a leak, since the session will eventually go away (usually on the next request).
Workaround     When debugging memory allocation, you can force synchronous garbage collection by running WOGarbageCollectionPeriod 1 (force garbage collection after each request) and then hit the WOStats page repeatedly (which will generate a new request, but not create a new session).
  
Reference2270875
Problem Applications freeze at start up on Solaris or HPUX.
Description Failure to start up machd and nmserver will cause WebObjects applications and some Apple applications to freeze shortly after starting. No output will be logged to the console. This behavior occurs because NSLog() is locked. The machd and nmserver are started up using the PDOEnable command.
Workaround     As root, enter the following commands, as per the Solaris and HPUX installer:

ApplePDO enable
ApplePDO start
  
Reference2265729
Problem .woo file entries from 3.5.1 cause weird initial values in WebObjects 4
Description Old .woo files from a 3.5.1 project have lists of known page instance variables. These .woo files typically have key/value pairs where each key is an instance variable name and the corresponding value is a dictionary:

someIvar = {AutoInitialized = 1; TypeName = Object;};

At runtime this causes undesirable behavior: those instance variables are populated with "AutoInitialized = 1" in the WO4 user interface.
Workaround     Manually edit all .woo files to remove all instance definitions of the form "someIvar =".
  
Reference2252841
Problem Java JIT compiler is disabled by default
Description Due to a bug in the version of the Sun Just In Time java compiler available at the time of this release, some apps with wrapped Java crash when run with the JIT compiler enabled. No exception is thrown. Instead, the app exits and no stack trace is available. We have disabled the JIT by moving it into a "disabled" directory in $NEXT_ROOT/JDK/bin.
Workaround     None (until a more stable JIT is released).
  
Reference2282347
Problem Apache web server may not work out-of-the-box with the CGI adaptor
Description Out of the box, Apache web servers won't work with the way WebObjects installs the CGI WOAdaptor. The problem is that the web server is not enabled to run CGI programs during default configuration.
Workaround     Two files in your web server's configuration directory need to be changed: access.conf and srm.conf. The access.conf configuration file in the installed web server by default looks something like this:

<Directory /usr/local/apache/cgi-bin>
AllowOverride None
Options None
</Directory>

Since the WebObjects installer on Solaris and HP-UX creates a symbolic link from the actual CGI WOAdaptor executable in the WebObjects installation directory structure to the cgi-bin directory specified during installation, this item needs to have the "FollowSymLinks" option in order to allow users to connect to applications via the sym-linked-in CGI adaptor. It should thus look something like this:

<Directory /usr/local/apache/cgi-bin>
AllowOverride None
Options FollowSymLinks
</Directory>

Further, the default srm.conf has a line that looks something like the following:

#ScriptAlias /cgi-bin/ /usr/local/apache/cgi-bin/

This line needs to be uncommented.

After you've made both of these changes, stop and restart the web server. The CGI WOAdaptor should then work correctly.
  
Reference2268619
Problem Application instance numbers must be greater than zero, and unique per application name
Description Zero was a legal application instance number in previous versions of WebObjects. In WebObjects 4, application instance numbers must be both greater than zero and unique for each application name. Although Monitor follows this rule, if you hand-enter an instance number of zero in your public WebObjects.conf file, strange behavior will result. The adaptor will load balance to the application with instance number zero, but won't insert the instance number into the request. This will cause the application to respond with a page containing URLs without instance numbers. If you then click on a link in this page, you'll most likely load balance to another application instance, and get a session timeout error.
Workaround     Start your applications with instance numbers greater than zero.
  
Reference2174404
Problem WebObjects log file is not updated.
Description This bug occurs for NSAPI adaptors on all platforms and the ISAPI adaptor on Windows NT.
For performance reasons, when the adaptor receives its first log function call, it sets a global "attempted logging flag" to YES and checks to see if there is a logWebObjects file in the temporary directory (usually /tmp on UNIX platforms and c:\temp on Windows NT). If the file exists, it sets a global "log flag" to YES. If the file doesn't exist, it sets the "log flag" to NO. On subsequent log function calls, the adaptor will only log a message if both the "attempted logging flag" and the "log flag" are YES.

The problem arises from the fact that these flags are global variables. In threaded API servers, if one thread has set the "log flag" to NO, there is no way it will be turned back to YES.
Workaround     Do the following:

- Create the logWebObjects file in the temporary directory.
- Restart your server.
- If you remove the logWebObjects file, you should restart your server afterward.

This workaround will work as long as the server keeps using the current thread for the API adaptor.
  
Reference2173679
Problem Can't run two WebObjects adaptors on the same machine with two different web servers.
Description If you attempt to run two WebObjects adaptors on the same machine with two different web servers, the adaptors share the public WebObjects.conf file, allowing applications to be visible on both web servers.
Workaround     There is a #define that sets the location of the configuration directory in Apple/Developer/Examples/WebObjects/Source/Adaptors/Adaptor/woconfig.h. Change this #define and recompile the adaptor. Now you can have several web servers running adaptors that do not share the same applications.
  
Reference2276414
Problem Sessions are not dealloced with WOAditionalAdaptors
Description If you attempt to use the WOAdditionalAdaptors feature, sessions may not timeout.
Workaround     None.
  
Reference2273821
Problem The session size numbers on the WOStats page appear to be too large.
Description The session size numbers are only an indication of the actual size of the session. When an application has finished initializing, its memory size is noted. The session size that is reported is based on the memory increase since startup, and is divided by the current number of active sessions. The memory increase includes any cached data and/or data initialized after startup, skewing the size computation.
Workaround     None.
  
Reference2260519
Problem [WOApplication port] returns a nonsense result
Description If your user defaults have WOPort=-1, then [[WOApplication application] port] will return -1.
Workaround     Access the port number directly from the adaptor via:

WOApplication.application().adaptors().objectAtIndex(0).port();
  
Reference2181730
Problem WOStats memory statistics are missing on HP-UX
Description There is no memory information available in the WOStats component or the WOStatisticsStore object on HP-UX.
Workaround     None.
  
Reference2219521
Problem My DirectAction raises when I trigger it
Description I added a DirectAction to my project and trying to access it from the browser causes a:
Oct 21 14:29:58 TestD2W2L2[2539] <WODirectActionRequestHandler>: NSInvalidArgumentException exception occurred while handling request:
_BRIDGEUnmappedInitMethodImp: the java class da does not implement any constructor that maps to the Objective C method initWithRequest:
Workaround     Your DirectAction has to implement a constructor which takes a WORequest as an argument:

public class MyDirectAction extends WODirectAction {
public MyDirectAction(WORequest r) {
super(r);
...
}

this is the constructor used by WOF during request handling
  
Reference2248739
Problem WOApplet "code" attribute doesn't appear to support package syntax
Description Direct connect isn't supported with third party Java applets. Direct connect can only locate things which are managed by ProjectBuilder and can be found under a .woa or .framework, or under their corresponding project. Resources which can only be located under the doc root of the webserver are not supported by direct connect.
Workaround     Don't use direct connect--use a web server.
  
Reference2164906
Problem WOCheckbox checked attribute doesn't work as expected
Description WOCheckBox's checked attribute should return YES or NO as specified in the API, but it actually returns self or nil.
Workaround     Test the checked attribute for nil or non-nil values instead of NO or YES. You may also want to write your own checkbox component that returns YES or NO instead of self or nil.
  
Reference2280169
Problem FDF1040EZ on Solaris: UnsatisfiedLinkError exception on clicking a link
Description Exception occured on hitting 'here' link after launching the app on Solaris.
Errors:
java/lang/UnsatisfiedLinkError exception occurred while handling request:
java/lang/UnsatisfiedLinkError: no net in shared library path
Stack Trace:
java.lang.UnsatisfiedLinkError: no net in shared library path
at java.lang.Runtime.loadLibrary(Runtime.java)
at java.lang.System.loadLibrary(System.java)
at
at pdf.PDFStaticComponent.appendFdfToResponse(PDFStaticComponent.java:92)
at pdf.PDFStaticComponent.appendToResponse(PDFStaticComponent.java:55)
Workaround     You need to set the LD_LIBRARY_PATH to include:
${NEXT_ROOT}/Library/Executables:${NEXT_ROOT}/Library/JDK/lib/sparc/native_threads
  
Reference2267387
Problem Old style WebObjects can confuse the HTML parser.
Description The old HTML parser used to accept

<WEBOBJECT condition=showResults name=foo
wbwebobjectclass=WOConditional>

The current parser only accepts <WEBOBJECT name=foo>
Workaround     Override the -[WOApplication requiresWOF35TemplateParser] to return YES. Alternatively, clean out all unsupported strings from your <webobject> tags.
  
Reference2178762
Problem WOActiveImage should have a name attribute even when not in a form
Description WOActiveImage's name attribute is useful for doing JavaScript tricks, but doesn't appear if the WOActiveImage isn't in a form.
Workaround     Use a generic element as a hyperlink around a WOImage instead of a WOActiveImage. For example:

JSActiveButton.wod:
JSActiveButton: WOHyperlink {
action = action;
alt = message;
onMouseOver = activateImageScript;
onMouseOut = deactivateImageScript;
};

ButtonImage: WOImage {
src = imagePath;
name = imageName;
width = width;
height = height;
border = 0;
};

JSActiveButton.wos:

id imageName;
id message;
id toPage;
id width;
id height;

// Private vars
id activateImage;
id deactivateImage;
id includeScript;

- script {
// It's just too trivial to warrant another file !
return @"function setButtonImage(imageName, imagePath) { document.images[imageName].src = imagePath; }";
}

- activateImageScript {
if (! activateImage) {
activateImage = [NSString stringWithFormat:@"setButtonImage('%@', '%@'); window.status='%@';return true;", imageName, [self highlightedImagePath], message];
}
return activateImage;
}

- deactivateImageScript {
if (! deactivateImage) {
deactivateImage = [NSString stringWithFormat:@"setButtonImage('%@', '%@'); window.status='';", imageName, [self imagePath]];
}
return deactivateImage;
}
  
Reference2282368
Problem Java Inner classes can create retain cycles resulting in leaked sessions and pages.
Description If you are using inner classes in your session and/or pages, be aware that non-static inner classes have a hidden pointer to their owning class. This make it easy to get into situation where a mixed objC-Java retain cycle is created, preventing the deallocation of all objects on that cycle. For example, if you pass an instance of an inner class of a page to one of its subcomponents, you get the following cycle:

yourSubcomponent > theInnerClassInstance > (through the hidden ivar) theTopLevelPage > (through normal objC containment) > yourSubComponent
Workaround     One possible way to break the cycle is to use a *static* inner class, which does not have this hidden ivar.
  
Reference2275083
Problem I can't set the Garbage Collection period.
Description I am calling setGarbageCollectionPeriod(n) in the constructor of my app but it doesn't do anything
Workaround     None needed! only the log displayed is incorrect, your new period is taken into account.
  
Reference2265298
Problem tops conversion tool fails with "Unterminated character constant" message.
Description The tops conversion tool expects character constants in code to be one character long, (e.g., 'a'). Constants like '\u0048' causes tops to report an error like

***Unterminated character constant at line X
***Lexing error at line X
Workaround     Comment out the line with the long character constant, run tops, uncomment the line, and do the necessary conversion(s) on the line by hand
  
Reference2179756
Problem Archiving of Java Objects does not work
Description In WebObjects 4.0, archiving of Java objects is achieved through the use of the java Serializable API (as opposed to the NSCoding protocol). However the implementation of the mapping between the serializable API and NSCoding-based archiving is incomplete at this time, which prevents archiving of your session if *any* Java object (either pure or wrapped) can be reached from your session.
Workaround     The state accessible from your session has to be all Objective-C. If you have a fairly stateless application (using DirectActions) you can override initWithCoder: and encodeWithCoder: to possibly archive only an NSDictionary of state associated with the Session rather than the Session instance itself.
  
Reference2279567
Problem WOComponent's templateWithName: method is incorrectly documented
Description In the WOComponent class reference documentation, the method description for templateWithName: states that "you identify the template by specifying the component directory, which consists of the component name plus the "wo" extension..." In actual fact, it doesn't need the ".wo" extension and will return nil if you supply it.
Workaround     Omit the ".wo" extension when invoking templateWithName:.
  
Reference2282167
Problem Cannot use <img ...> tags in Direct Connect mode
Description If you have an HTML image tag such as <img src="/WebObjects/Images/MyImage.gif"> and you're using DirectConnect, the request will come through as unrecognized, the default request handler will be chosen, and it will attempt to return a new Main page and create a new session. This will happen once for each image on the page.
Workaround     Use a web server to do all of your testing, or replace all <img> tags with WOImage elements and use the filename/framework attributes.
  
Reference2282001
Problem The current context and the current request aren't accessible from within a WOSession initializer
Description WOSession's initializer doesn't set its context instance variable, so it isn't possible to access either the current context or the current request for use in your WOSession subclass initializer.
Workaround     There are two ways to work around this problem. The simplest is to implement awake() on your session. At this point, the context instance variable is set. Since awake() is invoked for every request, though, you'll have to protect your code so it is executed only once in awake() (if it is initialization code, it most likely needs to happen only once). A better solution, assuming you only need the request object, is to implement createSessionForRequest() in your subclass of WOApplication:

public WOSession createSessionForRequest(WORequest aRequest) {
Session session = (Session)super.createSessionForRequest(aRequest);
// put your custom initialization that needs the request object here.
return session;
}
  
Reference2279933
Problem WOF is not thread safe when WOCachingEnabled == NO
Description If you attempt to stress test your multi-threaded WOF app (i.e., where allowsConcurrentRequestHandling returns YES) without setting WOCachingEnabled to YES, you will probably experience unstable behavior. WOF is not designed to be thread safe with caching disabled.
Workaround     set WOCachingEnabled YES before performing stress testing.
  
Reference2274427
Problem WOLoadFrameworks does not work with my frameworks containing client side java classes.
Description If you use WOLoadFrameworks to add functionality to your application and the frameworks added contain client side java classes, the application will refuse to serve the client side java classes in direct connect mode. By the time the extra frameworks are loaded, the resource manager has finished initializing the internal java classpath for the application. Loading new frameworks with new java classes will not change it.
Workaround     in the -init method of your principal class of your framework, add the line :
[[WOApplication application] setResourceManager:[[[WOResourceManager alloc] init] autorelease]];
  
Reference2270322
Problem Localization doesn't work smoothly with dialects.
Description The built in support for localization is limited to the standard language definitions (i.e., the 2-char symbols from the ISO 639 spec).
Workaround     Extend the Languages.plist in:

<NEXT_ROOT>/Library/Frameworks/WebObjects.framework/Resources

and add any language string you want. The left side is what will be sent by the browser and the right side is the name of your .lproj directory. You can also extend ProjectBuilder's languages plist so you can more easily add resources to the lproj of your choosing. See:

<NEXT_ROOT>/Library/Frameworks/ProjectBuilder.framework/Resources/MainInfo.table

and add your language to the HumanLanguages entry.
  
Reference2269517
Problem Rapid turnaround doesn't seem to work for aggregates
Description The default NSProjectSearchPath '(../..)' doesn't work for aggregates because the .woa is built into the top level of the aggregate.
Workaround     Change the user default for your application to point either to the aggregate itself or to "..". For example:

defaults write MyApplication NSProjectSearchPath '("~/projects/MyAggregate")'

or

defaults write MyApplication NSProjectSearchPath '("..")'
  
Reference2181995
Problem Java ResourceManager method pathForResourceNamedInFramework returns empty string instead of null
Description In some rare circumstances, the Java version of the ResourceManager method pathForResourceNamedInFramework returns an empty string when it should be returning null.
Workaround     Test for both null and "" to know if a resource has been found.
  
Reference2270501
Problem setValue:NO forBinding:x behaves unexpectedly from WebScript
Description When sending takeValue:NO forBinding:@"xx" from WebScript to a Java component, the Java component will receive takeValue:nil forKey:@"yy". An exception will be raised if "yy" refers to a boolean variable.
Workaround     Use zero (0) instead of NO. For example: [self setValue:0 forBinding:@"xx"];
  
Reference2179411
Problem WebScript categories don't work unless component-definition caching is turned on.
Description If you define a category in a component's .wos file, you will receive an error at runtime like the following:

Errors parsing script file '/NextLibrary/WebServer/htdocs/WebObjects/MyWebStuff/MyApp.woa/MyComponent.wo/MyComponent.wos' into class 'WOScriptedClass(/WebObjects/MyWebStuff/MyApp.woa/MyComponent.wo/MyComponent)' with superclass 'WOComponent':
Exception while executing statement :
- methodInCategory {
...

where methodInCategory is a method defined in the category. The problem arises because the script file is read more than once when component-definition caching is turned off. The first time the script is read, the category method is added to the runtime. The second time the script is read, the runtime considers the method a duplicate and produces an error.
Workaround     Turn on component-definition caching with the -WOCachingEnabled command line option.
  
Reference2167852
Problem WebScript cannot talk to NSProxies
Description If you obtain a proxy in WebScript and try to send messages to the proxy, you will get the error message "Unknown type 16."
Workaround     Use Objective-C instead of WebScript.
  
Reference2280236
Problem Exception handling in WebScript doesn't support VALUERETURN() the way that Objective-C does
Description In Objective-C, the VALUERETURN() macro accepts two arguments: the return value and the type. The WebScript version of VALUERETURN() only accepts one argument: the return value.
Workaround     In WebScript, don't supply a type to VALUERETURN().
  
Reference2282426
Problem NSProjectSearchPath is incorrectly documented in WebObjects Developer's Guide
Description The Debugging chapter of the WebObjects Developer's Guide incorrectly states that you set your NSProjectSearchPath as follows:

% defaults write NSGlobalDomain NSProjectSearchPath @("someDirectory","someOtherDirectory", ...)

The "@" character is incorrect. The portion in parenthesis should instead be enclosed in single quotes, like this:

% defaults write NSGlobalDomain NSProjectSearchPath '("someDirectory","someOtherDirectory", ...)'
Workaround     Use the correct format, as described in the problem description, above.
  
Reference2281191
Problem WebScript class files are no longer stored under the component
Description In the "Clearing the Guest List" section of the GuestBookPlus tutorial, it states:
"For WebScript components, the script files are stored under the component, rather than in the Classes bucket." In WebObjects 4.0, this is no longer the case.
Workaround     None.
  
Reference2280453
Problem Application-cached components must be manually awakened
Description If your application retains a component or page in an instance variable of your session, your application, or one of your pages, and you intend to interact with that component or page, the page will not be properly awakened and the context will not be properly set. Interacting with this component (sending it messages in order to set or get values) may yield undefined results. It must first be awakened (see the workaround, below).

Note that any component which is returned from an "action" method will automatically be awakened. However, if you need to interact with the component before returning it, or if you're not returning the component but have retained it in an instance variable, you are responsible for awakening the component.
Workaround     Send the component an -ensureAwakeInContext: message. Use the current context, which can either be obtained from your session or from the current component. Note that this method "ensures" that the component is awake: it won't do anything if the component has already been awakened.
  
Reference2279328
Problem WOResourceManager may leak for dynamic resources if 'key' attribute is not used.
Description If you use WOImage like
MyImage : WOImage {
data = someData;
mimeType = "image/gif";
}
This can potentially leak as the data will be kept in memory under a random key. Some browsers don't ever load the resource. Playback clients will not load the resource either. In such cases, WOResourceManager will cache copies of it indefinitely.
Workaround     Use the 'key' attribute to cache the same image over and over and save memory. Or call 'flushDataCache' on WOResourceManager.
  
Reference2278460
Problem Java WOComponent constructors must be public
Description If your WOComponent constructors aren't explicitly declared public, whenever pageWithName() is called on one of these pages, you'll get an IllegalAccessException, usually on the bridge.
Workaround     Ensure that your component constructors are declared to be public.
  
Reference2276012
Problem Using alloc/init with WOComponent crashes without good feedback
Description If you mistakenly use [[MyComponent alloc] init] to create a component, your application will crash without any indication of what happened.
Workaround     Always use -[WOComponent pageWithName:]
  
Reference2275286
Problem Java programs on Solaris that don't use WOApplicationMain() may malfunction due to garbage collection problems
Description All NSThreads and cthreads need to make their stack base addresses available to the bridge so that the Java garbage collector can execute successfully. This issue is dealt with transparently in the bridge for all the cthreads and NSThreads created. However, in the case of the main thread, the cthreads layer does not detect a new thread being created. As a result, it cannot, on its own, supply an accurate stack base address to the Java VM. You need to write code in the main function of your program to supply this address. Note that WebObjects applications come with their own main function (WOApplicationMain) which takes the necessary steps. For other types of applications (EOF applications, for example) that do not supply a "main" function, see the Workaround, below.
Workaround     Add these lines in your main function, immediately following the variable declaration block:

#if defined(__svr4__)
unsigned long java_reserved[16];
void cthread_set_java_vm_stack_base(void *);
cthread_set_java_vm_stack_base(java_reserved);
#endif
  
Reference2261627
Problem finalize() must call super on hybrid objects
Description Very strange, difficult to debug problems can occur if your Java subclasses of Objective-C classes implement finalize() and fail to call super.finalize(). The most common manifestations of this problem are 1) objects of this class will not be deallocated, 2) these objects may be swapped in for other (unrelated) objects that cross the bridge.
Workaround     If you implement finalize() you absolutely MUST (1) be sure to call super.finalize() and (2) never "reconstitute" the Java object from the finalize() method (by assigning a reference to it from another object).
  
Reference2256925
Problem NSDate's distantPast method shouldn't be used to set cookie expiration dates
Description If you want to set a past date on the expires attribute of WOCookie, do not use [NSDate distantPast]. distantPast returns a date from the year 1 AD, and some browsers interpret this incorrectly as the year 2001.
Workaround     Use a recent date in the past.
  
Reference2256058
Problem Removing elements from a WORepetition's list raises an exception
Description Binding a mutable array to a WORepetition's list attribute and removing elements from the mutable array during the WORepetition's iteration (e.g., during an action), may cause the iteration to access elements beyond the bounds of the array.
Workaround     Ensure that the mutable array bound to the list attribute is not altered during iteration. Alternatively, bind an immutable copy of the array to the WORepetition list attribute.
  
Reference2181630
Problem refuseNewSessions:YES may cause endless redirects if only one instance is running
Description If an application has programmatically been set to refuse new sessions, the application is run without using Monitor, and only a single instance of the application is running, it causes endless redirects. The application redirects the request back to the WOAdaptor, which tries to pick another instance, but since there is only one instance running, it will pick that instance again.
Workaround     Use the Monitor application to deploy the application. Monitor will detect that there are no non-refusing instances running and return an error page.
  

WebObjects Builder
Reference2281669
Problem The Java parser used by WebObjectsBuilder does not recognize international characters.
Description Java variables and methods containing international characters do not appear in the WebObjectsBuilder browser.
Workaround     Don't use international characters when naming Java methods or variables.
  
Reference2275047
Problem WebObjectsBuilder can't parse fully declared WebScript files
Description If you have a wos file which uses @interface/@implementation to declare its class, the builder will not parse it correctly. You won't see the proper keys in the object browser and code generation will fail.
Workaround     If you need to use @interface/@implementation (for example, if you need to subclass an existing component), convert your wos file to compiled Objective-C.
  
Reference2254085
Problem WebObjects Builder requires a referenced framework to be installed before it will notice the classes and resources it contains
Description If you reference a framework in your project, WebObjects Builder requires that framework to be built and installed. Frameworks that have been uninstalled won't be noticed by the WebObjects Builder parser.
Workaround     None.
  
Reference2174247
Problem WebObjects Builder and Project Builder don't notify each other when application files are edited.
Description WebObjects Builder does not notice any changes made in Project Builder to source code files, HTML files, or .wod files until you save. Likewise, Project Builder does not notice files that you edit in WebObjects Builder until you save.
Workaround     Save the edited files before switching applications.
  
Reference2270740
Problem Localizing components in Project Builder removes them from the Global suitcase.
Description If you choose the language for a component, the component will be removed from the top-level suitcase and will only appear in the chosen language suitcase(s).
Workaround     Open the PB.project file with a text editor, and add the component to the WO_COMPONENTS list.
  
Reference2280939
Problem Unsynchronized files servers may cause WebObjects Builder to display a spurious revert panel
Description If you create a web component on a file server whose clock is out of sync with your system, WebObjects Builder may think that the file has been modified when it hasn't. This will cause WebObjects Builder to display a revert panel when none is needed.
Workaround     Running a network time protocol on your local machine will prevent this problem. Otherwise, saving the file will reset WebObjects Builder's internal modification times.E
  
Reference2279307
Problem WebObjectsBuilder pastes into WOHyperlinks incorrectly.
Description Pasting anything into the interior of a WOHyperlink will split it into two WOHyperlinks with the pasted content in between.
Workaround     Do not use paste in this situation. If you must use paste, assemble the full text of the WOHyperlink (including the pasted content) *outside* of any WOHyperlink. Then select it all, and wrap it in a WOHyperlink by clicking the WOHyperlink toolbar button.
  
Reference2274651
Problem In WebObjects Builder, opening a file for which you do not have read permission presents a blank document; no warning is generated
Description Attempting to open a file for which you do not have read permission will result in a new blank document. This could result in the false perception that the component is actually blank, which may not be the case.
Workaround     Make sure permissions are set correctly for projects you are working on and copy any read-only examples to your own directory.
  
Reference2263884
Problem WebObjects Builder has no UI to give a representative image to a shared component
Description If you include a D2WQuery WebObject in your component, it will display using a custom graphic that both looks nice and hides the internal complexity of the shared component. When you make your own shared components, there is no user interface in WebObjects Builder to assign a representative image of this sort.
Workaround     The representative image resides inside the .wo wrapper of the shared component, and has the same name (but not the same extension) as the component. For example, a shared component called Shared.wo could have Shared.tiff (or Shared.gif, or Shared.bmp) inside the Shared.wo wrapper, and that image would be displayed in place of the component. Simply copy a correctly-named image to that spot in the file system, and after you quit and relaunch WebObjects Builder the image will be properly displayed.
  
Reference2230032
Problem You can't change the document root in WebObjects Builder's preferences panel.
Description WebObjects Builder provides no UI to set the document root default.
Workaround     Use "defaults write WebObjectsBuilder DocumentRoot <directory>" from the shell.
  
Reference2256367
Problem Configuration of WODisplayGroups in WebObjects Builder is not undoable.
Description WebObjects Builder won't undo any changes made to a WODisplayGroup via the configuration panel.
Workaround     Changes can be reverted before dismissing the panel. Otherwise, you must restore the desired settings by hand.
  
Reference2240571
Problem Moving, copying, or deleting a component no longer moves, copies, or deletes associated WebScript or .api files
Description In WebObjects 4.0 WebScript, .api, .java, and .h/.m files live outside the component. Because of this, moving or copying, or deleting a component no longer moves, copies, or deletes the WebScript, .api, .java, and .h/.m files.
Workaround     Copy or delete the associated files by hand.
  
Reference2279837
Problem Deleting the name underneath one of the items in a custom palette causes the palette to become corrupted.
Description Custom palette items must have either a name or an associated image. WebObjects Builder allows you to associate an image with a custom palette item by dragging an image file onto the item, automatically deleting the item's name. WebObjects Builder should not allow you to delete the name without associating an image with the item.
Workaround     Once your palette has become corrupted, you will need to remake it from scratch. To create a palette item without a name, give it an image.
  
Reference2257008
Problem In WebObjects Builder, after creating a Custom WebObject and setting its class the WebObject doesn't "behave" like the class it has been set to
Description Create a Custom WebObject and set its class in the inspector to be WOString (or any other class). It won't redisplay the way a WOString object normally displays. This can cause problems in some cases. It can be especially troublesome in the case of WOComponentContent, since another component which includes your component won't "recognize" the WOComponentContent, and won't provide a place in that other component to enter the component content.
Workaround     Switching to source mode (using the pop-up button at the left edge of the toolbar) and then back to GUI mode will make the WebObject "recognize" the object, after which it will behave correctly.
  
Reference2227032
Problem WebObjects Builder crashes trying to add WOBody
Description If you use the "Add WebObject..." item in the Tools menu to add a WebObject with a class of WOBody, WOB will crash.
Workaround     Use the "Make Dynamic" button in the inspector to convert a static Body to a WOBody.
  
Reference2180253
Problem WebObjects Builder does not validate keys and values in the bindings inspector
Description WebObjects Builder lets you write illegal values (such as values with unrecognized characters) for binding attributes and values. These values are written to your .wod file without validation, so your .wod file will not be correct.
Workaround     Don't set your bindings to such values. If you do, close the component and reopen it. WebObjects Builder displays a parse error and puts you in source editing mode, where you can fix the corrupted bindings.
  
Reference2179462
Problem A horizontal scroller doesn't appear when the HTML content is wider than the window
Description When an HTML element such as a table, horizontal rule, or image is wider than the window in which it is displayed, a horizontal scroller does not automatically appear. This means that some areas of the page's content are not visible.
Workaround     If you don't wish to resize the window to accommodate the wide element, you can set your "Canvas Width" in the Preferences/Options panel to be a particular width in pixels. If that width exceeds the width of the window, a horizontal scroller will appear.
  
Reference2182195
Problem Dragging a color to selected text does not change the text's color
Description Dragging a color (from the Color panel, for instance) to some selected HTML text in order to change its color does not work in WebObjects Builder. You may observe strange user-interface feedback, after which it eventually works.
Workaround     After selecting the text, click on the color well in the window's toolbar. This will bring up a color panel which is "linked" to the color of the selected text; the color you choose will be assigned to that text.
  
Reference2181346
Problem Centering several list items at once splits the list
Description If you center a single list item, the list item properly places a paragraph around its text and centers the paragraph, leaving the list itself intact. However, if you select several list items and center them, the list will be split at the selection boundaries, and the selected pieces will be centered.
Workaround     Center each list item independently.
  
Reference2274918
Problem Components which reference other components (frames, shared components) display incorrect content, cause errors, or exhibit other bad behaviors.
Description This can happen when the referenced component has some kind of error and the HTML preferences are set to "Stop and display first error". WebObjects Builder tries to load the referenced component, is stopped by the error it encounters, and fails silently.
Workaround     Correct the error in the referenced component. Close the component and reopen it. WebObjects Builder will tell you the error in the component and leave you in source mode to correct it. Alternatively, you could change your HTML preferences to "Repair HTML automatically".
  
Reference2278982
Problem Opening components with very large tables causes WebObjects Builder to hang or crash.
Description A component containing a very large table (several thousand pixels by several thousand pixels, for example) will overtax WebObjects Builder, causing it to hang or crash.
Workaround     Basically none. Make the table smaller or edit the table with a machine that has more memory.
  
Reference2223160
Problem In WebObjects Builder, editing the contents of an empty table cell can be difficult or impossible
Description Once a table cell becomes empty, the table will often (depending upon the sizing attributes set on it) resize so that the empty cell has zero width, making it difficult or impossible to click in it. Since it can't be selected, it can't be edited, making it difficult to get out of this situation.
Workaround     One solution is to go to source mode (using the pop-up menu at the left edge of the window's toolbar) and add content to the cell directly in the HTML source. Then, switch back to GUI mode. An alternate solution is to change the table's size parameters so that the problem cell has a non-zero width.
  

EO Java Client
Reference2273285
Problem Most objects on the client in a Java Client application are never garbage collected.
Description Registering with notification mechanisms such as NSNotificationCenter, EOObserverCenter or AWT event listening creates static references to your objects, especially your business objects, control layer objects like EOEditingContext and UI elements.
Workaround     There is not really a workaround. You usually can get rid of business objects if you explicitly ask the EOEditingContext to forget them and make sure that the business objects are not in an EODisplayGroup.
  
Reference2261908
Problem Can't use custom value classes on the client when using Java Client Distribution
Description In order to use a custom value class in your enterprise objects, you must use the same coding/decoding scheme that we use in the framework. This coder is not documented because it's likely to change for the next revision of our software.
Workaround     None.
  
Reference2268426
Problem The Java Client version of EOEditingContext doesn't implement revert()
Description In a Java Client application, there is no single method that will cause all of your EO's to throw away their changes and return to their inital state, since the Java Client version of EOEditingContext doesn't implement revert().
Workaround     The following code will cause all of your EO's to be refaulted. Then, once they are accessed, they will request their values from their parent object store.

ec.invalidateObjectsWithGlobalIDs(ec.registeredGlobalIDs());
  
Reference2281716
Problem Java Client applets can use the wrong session on the application server
Description Web browsers don't usually start a new Java VM when a new applet is started. The Java Client applet stores some information about the session in static variables--these variables may be reused if a second Java Client applet is started in the same VM. If the original session has already timed out by the time you display the second applet, you'll get a "your session timed out" error message. Otherwise, the second applet will use the original applet's session on the server, instead of the current one.
Workaround     Run the client as an application, or restart the Web browser between uses of a Java Client applet.
  
Reference2275922
Problem Browser (Internet Explorer and Netscape) implementations of AWT are not sufficient.
Description On Windows, if you run Java Client applets in browsers, they might not work correctly without Sun's Java Plug-in. In Netscape, Java Client applications do not work at all without the plug-in. In Internet Explorer, combo boxes do not work properly, and modal "Save" dialogs that appear when closing an interface controller's window often hang the application.

Under MacOS, running Java Client (Swing) applets requires MRJ 2.1.
Workaround     Run the client as an application (in the java interpreter) or use the Java Plug-in.
  
Reference2271417
Problem Increasing the size of a Java Client's main window yields a clipped Applet interface
Description When a Java Client's main window is resized in InterfaceBuilder, the size of its containing WOJavaClientApplet remains unchanged, clipping the interface when run as an Applet.
Workaround     Using WebObjects Builder or a text editor, edit the component (.wo) to update the width and height parameters of the WOJavaClientApplet to match the new window size.
  
Reference2271249
Problem Java Client numeric formatter doesn't accept negative numbers
Description In Java Client applications, numeric formats are taken literally. A format specifying a dollar sign demands one and those specifying color or parentheses are essentially read-only.
Workaround     Enter a dollar sign when one is specified, and avoid the use of parentheses or color in formatters.
  
Reference2271048
Problem The EODisplayGroup validateChangesImmediately checkbox in InterfaceBuilder has no effect on client-side validation
Description Even when the validateChangesImmediately checkbox is checked, validateValueForKey is not invoked at runtime.
Workaround     Connect the EODisplayGroup to an EOInterfaceController outlet and invoke setValidateChangesImmediately within the controller's constructor.
  
Reference2251786
Problem Bold and italic traits applied to Java Client interface controls do not appear at runtime.
Description Traits set and visible in InterfaceBuilder are absent from the client interface.
Workaround     Connect the control to an EOInterfaceController outlet and programmatically set its font within the controller's constructor.
  
Reference2269932
Problem Adding a subproject of type EOJavaClientSubproject does not add the EOJavaClient.framework to the project's frameworks.
Description If you create Java Client interface controllers and interface files (nib files) in a Java Client subproject, you have to add the EOJavaClient.framework to the root project's frameworks. Otherwise you can't compile the client-side classes and you can't run the application.
Workaround     Add the EOJavaClient.framework by hand.
  
Reference2261318
Problem WebObjects Java Client wizards always use the package name "<application name>.client".
Description The Java Client wizards create interface controllers and interface files for the client side. The Java classes are always placed in a package named "<application name>.client".
Workaround     The first time a Java Client wizard is used, it inserts a special key named EOJAVACLIENT_WIZARD_PACKAGE into the PB.project of the topmost non-aggregate project (usually the application project). By editing the value of this key by hand you can change the package name used by the wizard. To edit the value, close the project in ProjectBuilder, open the PB.project file in a text editor (for example TextEdit), change the value, save the PB.project file and reopen it in ProjectBuilder.
  

Direct to Web
Reference2282046
Problem The Live Assistant won't launch under Netscape 4
Description Attempting use the Live Assistant under Netscape 4.0x on NT or MacOS using the customize button produces a java security exception. This is caused by the fact that Netscape 4.0x does not implement the complete 1.1 Java specification
Workaround     Use Netscape 4.5, Internet Explorer 4.0 or 3.0, or appletviewer to connect to the Live Assistant.
  
Reference2181763
Problem Web Assistant may overwrite existing component files.
Description When you choose to generate a component using the Web Assistant, the Assistant does not check to see if the component already exists, and it does not prompt you to make sure that you really want to overwrite any existing component with the same name.
Workaround     Make sure that you aren't overwriting anything you want to keep before you choose to generate a page.
  
Reference2181189
Problem When reloading a page that shows the Web Assistant, Web Assistant appears twice
Description If you display a page in Direct to Web, display the Web Assistant for that page, and then click the browser reload button, two Web Assistants are displayed.
Workaround     The Web Assistant lives in the bottom frame; you should only reload the top frame (right-click on that frame).
  
Reference2281169
Problem Changes to project resources seemingly aren't detected in rapid turnaround mode
Description If your NSProjectSearchPath resolves to a directory in which there are multiple projects with the same name (that is, the PROJECTNAME attributes in the PB.project files are the same), the first project it encounters will be chosen. If the chosen copy of the project isn't the one you're working on, it will appear as if changes you're making are not having any effect.
Workaround     Move backup copies of your projects to a different directory. Don't give the same name to both Framework and Application projects.
  
Reference2182075
Problem Direct to Web cannot display attributes of type NSData
Description Direct to Web does not know how to represent attributes of type NSData when generating HTML. NSData objects could be images or other types of data. The raw hexadecimal representation is usually not interesting, so it is not displayed.
Workaround     None
  
Reference2181248
Problem Direct to Web DisplayImage component can only use images contained in the application itself
Description The images have to be in the resources of the application for the DisplayImage component to be able to find them.
Workaround     Add images to the project using Project Builder.
  
Reference2282335
Problem Some query components are incorrectly generated on keypath properties
Description If you generate a query page for which one of the properties is a keypath and you use a QueryDateRange, QueryDateOperator, QueryNumberOperator, or QueryDateOperator component, the generated page won't perform the appropriate query on the property. This is because the generated bindings erroneously contain only the last element of your keypath, instead of the full keypath. For example, on a query for Rentals page, using the unit.unitID keypath, the WOPopupButton reads

selection = displayGroup.queryOperator.unitID;

when it should read:

selection = displayGroup.queryOperator.unit.unitID;
Workaround     Manually fix those bindings that are missing the beginning of the keypath.
  
Reference2282049
Problem Exceptions are raised when using the Live Assistant stand-alone
Description After launching the LiveAssistant stand-alone (that is, in AppletViewer), com.apple.yellow.directtoweb.D2WModelException exceptions are logged to the console when navigating on some pages.
Workaround     None needed. In this particular situation, you can safely ignore these exceptions.
  
Reference2281768
Problem Expanding a DisplayToManyBrowser loses edits
Description When using the collapse option for a property on my edit pages, I lose my edit when clicking on the triangle to expand the property.
Workaround     Use the Live Assistant and disable thecollapse option on your edit pages.
  
Reference2280472
Problem In DirectToWeb, a newly-created object isn't listed
Description Create a new instance from a List page. After clicking save in the edit page, the list page is again displayed, but the new object is missing. The object is in fact properly created and saved, but the list page doesn't refresh its query when it is redisplayed and therefore isn't aware of the new object.
Workaround     Freeze the list page, and force it to refetch in appendToResponse:

public void appendToResponse(WOResponse r, WOContext c) {
displayGroup.fetch();
super.appendToResponse(r,c);
}
  
Reference2274611
Problem DirectToWeb raises on custom or non-existent keys
Description Either due to a mistyped key in the Live Assistant or the removal or renaming of an attribute or relationship in EOModeler, an EOUnknownKey exception can be raised when you run a DirectToWeb application.
Workaround     Using the Live Assistant's expert mode, select the task/entity couple for which you're getting an exception and hide the key that is causing the problem.
  
Reference2274181
Problem DisplayHyperlink does not work properly with incomplete URL's.
Description When using the DisplayHyperlink component, the properties are incomplete URL's missing the "http://", and the generated HTML is incorrect.
Workaround     Generate the page and modify the WOString in the HREF so that "http://" is added if needed. This is the quick and dirty solution.

A cleaner solution is to generate a custom class for your EO that contains the hyperlink. In that custom class, add a custom method (e.g., 'absoluteURL') that returns the proper value (i.e., adding "http://" if needed). From the live assistant, hide the property key is generating the
incorrect url, click on the add button, and enter 'absoluteURL' in the dialog box. Then select 'absoluteURL' in the property key list and DisplayHyperlink for its component.
  
Reference2271945
Problem IE4 sometimes displays the EditRelationshipPage incorrectly
Description Sometimes the query button at the bottom of the EditRelationshipPage of the WebObjects look is not displayed, even though it is present in the HTML.
Workaround     Resizing the window makes the button appear. This looks like a bug in Internet Explorer. Netscape does not have the same problem
  
Reference2271698
Problem Cannot override *all* rules in DirectToWeb's Live Assistant
Description Declare some settings on '<MyEntity> for *all* tasks', such as the displayName for some property. Next, try to override that with '<MyEntity> for inspect'. The Live Assistant won't accept the new settings.
Workaround     Generate the page for which you want different settings, then modify the name by hand.
  
Reference2265285
Problem The style of embedded DirectToWeb component pages cannot be changed.
Description Changing the page type from a list page to master detail page (DisplayToManyBrowser) using the LiveAssistant does not work. The master detail page setting is not supported in this release.
Workaround     none.
  
Reference2258117
Problem Page not refreshed automatically after update
Description Launch the live assistant in applet viewer and use a separate browser to see a DirectToWeb application. After clicking on update in the Live Assistant, the page is not always refreshed with the new settings.
Workaround     If Java was disabled in your browser, enable it. If your browser doesn't support Java, hitting refresh, or in some cases re-navigating to a new instance of the same page, will display the new settings.
  
Reference2256365
Problem DirectToWeb applications crash when allowsConcurrentRequestHandling is set to YES.
Description DirectToWeb applications are not thread-safe when modifying the database, i.e., editing or creating objects. DirectToWeb uses peer and nested editing contexts, and fails to lock and unlock them.
Workaround     run with allowsConcurrentRequestHandling turned off. Note: setting WOWorkerThreadCount > 1 will still work.
  
Reference2253962
Problem Newly-created DirectToWeb projects sometimes come up empty
Description If you create a new DirectToWeb project in ProjectBuilder and point the wizard at an existing model, the project may come up empty. This can happen if you don't have read permission in the file system for the .eomodeld directory or for the files inside.
Workaround     Use a model for which you have read access.
  
Reference2251538
Problem The Live Assistant does not work under Netscape 4
Description Attempting to get the LiveAssistant by clicking 'Customize' in Netscape 4 results in a security exception being raised. This appears to be due to Netscape's AWT implementation being not totally 1.1 compatible.
Workaround     Use Microsoft's Internet Explorer 4 browser instead.
  
Reference2250606
Problem DirectToWeb complains that it can't find the user.d2wmodel
Description Adding DirectToWeb to an existing application can cause an exception at launch time indicating that DirectToWeb cannot find the user.d2wmodel.
Workaround     Create a new WebObjects Application-DirectToWeb project and add the user.d2wmodel found in that new project to your project.
  
Reference2201189
Problem DirectToWeb does not handle queries custom data types
Description If one of your attributes has a custom data types (i.e. not one of the built-in types such as NSDumber, NSDecimalNumber, NSDate, NSCalendateDate..) can can get an exception when DirectToWeb is trying to display it.
Workaround     Using the Live Assistant, navigate to the faulty query page in expert mode and hide the property that has a custom type.
  
Reference2182327
Problem Creating a D2W project with the rentals model raises
Description The rentals models has cross-model relationships with the movies model. The wizard does not not notice this and fails to pull both models in the project by default. This results in runtime errors when the destination of the cross-model relationships cannot be resolved.
Workaround     Everything works fine if you drag a copy of both models in the newly created project.
  
Reference2181971
Problem Cannot start the Web Assistant on Solaris.
Description If you try to start the Web Assistant for a Direct to Web application on Solaris, you receive a log similar to the following:

Oct 16 02:31:45 d2walpha[4181] waiting for requests...
ld.so.1: ./d2walpha: fatal: libnet.so: can't open file: errno=2 (libnet.so)
java.lang.UnsatisfiedLinkError: no net in shared library path
at java.lang.Runtime.loadLibrary(Runtime.java)
at java.lang.System.loadLibrary(System.java)
at
at java.net.ServerSocket.<init>(ServerSocket.java:57)
...
Workaround     Make sure libnet.so is in your path
  
Reference2181929
Problem userPresentableDescription is listed as an attribute to query on
Description When you inspect a to-one relationship in the Web Assistant, the Web Assistant lists the attributes of the object that you can use to query the relationship. userPresentableDescription is erroneously listed as one of these attributes. If you select it, the Web Assistant will perform the query using the primary key.
Workaround     Select another attribute in the Web Assistant.
  

Playback
Reference2282569
Problem Applications with dynamic images may leak them.
Description If you are testing such an application with the playback tool, the tool will not do the necessary callbacks to retrieve dynamic images. Therefore, these images will stay in the data cache of the app and never be released. Same can happen once deployed, as clients disable image loading from their browser. You will see your application leaking when it is not really, it is just waiting indefinitely for someone to come ask for an image.
Workaround     When using the data, mimeType bindings for dynamic images, try to use the key binding as well. With the key binding set to employee.picture, only once will the picture be saved in memory and stay there, limiting the amount of data leaked. Otherwise, you can always use the -flushCache call on WOResourceManager regularly. This clears out everything from the data cache, so this may impact currently connected users.
  
Reference2282378
Problem WORecording stops working when using OBLite
Description OpenBase Lite changes your current working directory under you. Because of this, if you specified the argument after -WORecordingPath as a relative path, your recording will be saved in the database directory once the database adaptor has been loaded.
Workaround     Specify a complete path as the argument to -WORecordingPath when recording.
  
Reference2282010
Problem The playback tool doesn't send my direct action request
Description If the first request in your recording is a direct action, when playing back the recording the playback tool will remove everything after the .woa in the URL.
Workaround     Ensure that the first request in each of your recordings is a request for the default page (that is, a URL that ends with the application name).E
  
Reference2276650
Problem PlaybackManager mailing of results fails completely, or sends emails with broken images.
Description PlaybackManager has an improved implementation of the WOMailDelivery feature: it is able to send mails containing images. However, these images are not inlined as mail attachments to the mailed page. Instead, they require a callback to the web application that sent the mail. This has two limitations:

- the PlaybackManager application has to be running when the email recipients first read their email, so it can serve the dynamic image requests.

- the PlaybackManager application has to be started with the -WOCGIAdaptorURL flag correctly set, so that the URL's to call back and retrieve the images are constructed correctly.
Workaround     Start the PlaybackManager with the correct CGIAdaptorURL specified. For example: PlaybackManager -WOCGIAdaptorURL http://gluon:1234/scripts/WebObjects.dll
Leave the PlaybackManager application running as long as you expect people to read the email.
  
Reference2260759
Problem PlaybackManager uses a Sybase database configuration.
Description PlaybackManager's eomodel is preconfigured for a Sybase database. It won't work with an ORACLE database (because it uses multiple BLOB columns per row).
Workaround     If you can't use Sybase, open the PlaybackManager eomodel in EOModeler and switch the adaptor to OpenBaseLite or, if you are on Windows NT, to ODBC.
  
Reference2253802
Problem PlaybackManager's rsh to UNIX clients results in 'permission denied'
Description PlaybackManager uses rsh to start clients on remote hosts. UNIX hosts may prevent rsh commands from being executed on them.
Workaround     UNIX hosts should be configured by your System Administrator so that the client host's rsh daemon accepts rsh commands from the PlaybackManager host and user.
  
Reference2251966
Problem Playback Manager can't connect to remote hosts
Description Connection failures are typically due to security checks from the applet viewer tool. This tool has very restrictive rules when it accesses the network. WebObjects has no control over this tool, as it is distributed with each Java VM.
Workaround     Follow the instructions in the ReadMe.html file located in the PlaybackManager.woa/Resources directory. The steps in the "Security Issues" paragraph are particularly important.
  
Reference2246048
Problem The Playback Manager's client applet doesn't work in Netscape's browsers
Description Netscape's Java VM is much less reliable than Microsoft's. Only simple applets will run effectively in Netscape's browser.
Workaround     Don't use Netscape with playback manager if you intend to use the "start a simple playback" feature. Use Microsoft's Internet Explorer instead.
  

Examples
Reference 2282241
Problem 'Rent this movie' link in ThinkMovies example fails on Windows.
Description The method rentalStoreURL in DisplayVideoPage.wos in the ThinkMovies example does not work correctly on Windows. The resulting URL is incorrect.
Workaround     Replace the method with the following implementation:

- (NSString *) rentalStoreURL {
id cgiStr = [[NSUserDefaults standardUserDefaults] stringForKey:@"WOCGIAdaptorURL"];
id cgiURL = [NSURL URLWithString: cgiStr];
id cgiPath = [cgiURL path];
// NSURL returns backslashes in the path for Windows so we have to
// work around the problem here...
if (! [[cgiPath substringToIndex:1] isEqual:@"/"]) {
// replace Windows path with generic URL path...
cgiPath = [cgiStr substringFromIndex:([cgiStr length] - [cgiPath length] - 1)];
}
return [cgiPath stringByAppendingString:@"/RentalStore.woa/wa/AddMovieToShoppingBasket"];
}

  
Reference2257255
Problem Client Side Components in ElementTour are broken when WODirectConnectEnabled is NO
Description If you launch ElementCircus with -WODirectConnectEnabled NO, the applets on the client side components page don't launch correctly.
Workaround     Use DirectConnect to connect to this example.
  
Reference2178914
Problem FDF Example: Exceptions are raised when loading some PDF pages
Description When WebObjects loads certain PDF pages, a "PDF exception, expecting x fields, found y" exception is raised. This exception occurs because the PDF parser included in WebObjects expects only optimized PDF files.
Workaround     Ensure that all PDF files present in .wo directories are optimized. You can do this for a given PDF file by opening it in Acrobat Exchange and using the Save As command.
  
WebObjects 4   Copyright 1998 by Apple Computer, Inc. All Rights Reserved.