JRun Release Notes

JRun 4 Updater 6

For Windows®, UNIX™, Linux™, and MacOSX™

Release Notes

Last Updated July 29, 2005

These Release Notes describe issues that have been resolved in Macromedia JRun 4 Updater 6 and contains the following information:


JRun 4 Updater 6 upgrades any existing JRun 4 installation (with or without Service Packs or prior Updaters).

Before running the Macromedia JRun 4 Updater 6 release, perform the following steps:

  1. Ensure that the default JDK installed on the system is version 1.3.1 or later (required by the installer).
  2. Stop all JRun 4 services. If all JRun processes are not stopped, the installation can fail. To determine if JRun services are still running:
    • On UNIX and Linux, view processes by entering the ps -ef or similar command. Stop any remaining JRun processes.
    • In Windows, press Control + Alt + Delete, and then select the Task Manager.
    • On the Processes tab, stop any remaining JRun processes. If JRun servers are installed as Windows services, stop them using the Services Control Panel.
  3. Stop all web servers connected to JRun. If IIS is your web server for JRun, stop the World Wide Web Publishing Service in the Services Control Panel.
  4. Make a note of your JRun 4 installation root directory location (for example, c:\jrun4).
  5. In Windows 2000, Window XP, and Windows 2003, stop the Windows Management Instrumentation Service to avoid locking some DLLs that the Updater will replace in {jrun.home}/bin.
  6. In Windows XP and Windows 2003, if JRun is uninstalled prior to running the Updater, the following registry key must be manually deleted or any full product or updater installation will fail:
[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Installer\Products\955648EA1E7DC4D4FA99677EE7413103]"ProductName"="Macromedia JRun 4"

For more information on editing the Windows registry, see your system documentation.

To upgrade your JRun 4 installation with the Updater 6:

  1. Download and run the EXE or BIN file for your operating system.
  2. Follow the instructions in the installation wizard, and let it run to completion.
  3. Delete the contents of the SERVER-INF/temp directory for each JRun server.
  4. After the installation is complete, restart JRun services and, if necessary, your web server.
  5. Some versions of Linux might require manual installation of the web server connector. For more information, see issue 50586 in JRun Updater 2 Known Issues.


  • JRun 4 Updater 6 creates a directory, {jrunroot}/updater6-backup, that contains a copy of all the files that the Updater overwrites.
  • For Mac OSX users, run the .bin from a shell. Stuffit cannot unpack this .bin and generates the following message: "Archive was compressed with an unknown compression method"
  • For RedHat AS 3.0 users, please be sure to apply the latest updates to your RedHat AS 3.0 operating system prior to updating to Updater 6 to avoid potential problems with the Jikes compiler. See bug 59348 in the known issues of Updater 5.
  • For RedHat AS 3.0 users, make sure the compatibility libraries (Legacy Applications) are installed to avoid Apache issues. See bug 59367 in known issues of Updater 5.
  • The JRun 4 Updater 4 workaround (in the jvm.config file) for JDK 1.5 compatibility must be removed before installing Updater 6:
  • For AIX users, before running the Updater 6, please be sure to run the 'slibclean' command to remove any currently unused modules in kernel and library memory.


The JRun 4 Updater 6 includes the following enhancements:

  • Updated JDBC drivers - JRun 4 Updater 6 kit includes version 3.4 build 50 of the JRun JDBC drivers.
  • Connectors - Apache connector now supports the non-default Apache Multi-Processing Modules (MPMs) on Unix. Performance enhancements and improvements, especially for Microsoft IIS 6.0 (See also 59653)
  • JRun Web Server (JWS) - JWS now gives complete keep-Alive functionality. A new log level has been added to get a log specific to HTTP requests. See the Resolved Issues section for more details.
  • Windows support - JRun supports Windows 2003 and IIS 6 since Updater 3. JRun 4 is no longer supported on Windows 98 and Windows ME as of Updater 5.
  • HP-UX Support - JRun is supported on HP-UX PA-RISC (1.1 and 2.0) systems. Version 11.0 and 11i (11.11) are supported. Currently HP-UX IA64 is not supported.
  • Mac OS X support - JRun 4 Updater 6 supports Mac OS X 10.4 (Tiger). It also supports the JDK 1.5 on OS X 10.4. See the note below for Mac OS X.
  • Solaris Support - JRun 4 now supports Solaris 10.
  • IBM AIX Support - JRun 4 now supports IBM AIX 5.3.
  • Apache support - JRun supports Apache versions 1.3.2x-1.3.33, and Apache versions 2.043-2.054. Users with older versions of Apache 2.x must upgrade Apache before installing JRun 4 Updater 6.
  • Linux support - JRun 4 is now supported on RedHat 8, Redhat AS2.1, AS3.0 and AS 4.0, and Novell Suse Linux 8.0.
  • Sun JDK Support - JRun 4 now supports Sun JDK 1.5.0. JDK 1.5.0 is also supported on HP-UX PA-RISC (2.0 only, on 11.0 and 11i systems).

Complete Supported List

OS JDK Web Server
Windows 2000 SP 4 Sun JDK 1.3/1.4/1.5
IBM JDK 1.3/1.4
IIS 5, Apache 1.3/2.0, iPlanet 4.1/6.0, NES 6.0/6.1, SunONE Web Server 6.1
Windows XP Professional SP2 Sun JDK 1.3/1.4/1.5
IBM JDK 1.3/1.4
IIS 5.1, Apache 1.3/2.0, iPlanet 4.1/6.0, NES 6.0/6.1, SunONE Web Server 6.1
Windows 2003 Enterprise Sun JDK 1.3/1.4/1.5
IBM JDK 1.3/1.4
IIS 6, Apache 1.3/2.0, iPlanet 4.1/6.0, NES 6.0/6.1, SunONE Web Server 6.1
RedHat Linux 7/8/9 Sun JDK 1.3/1.4/1.5
IBM JDK 1.3/1.4
Apache 1.3/2.0 (Bundled as well as latest), iPlanet 4.1/6.0, NES 6.0/6.1, SunONE Web Server 6.1
RedHat AS 2.1/3.0/4.0 Sun JDK 1.3/1.4/1.5
IBM JDK 1.3/1.4
Apache 1.3/2.0 (Bundled as well as latest), iPlanet 4.1/6.0, NES 6.0/6.1, SunONE Web Server 6.1
Suse Linux 8.0, 9.3 Sun JDK 1.3/1.4/1.5 Apache 1.3/2.0
Turbo Linux Sun JDK 1.3/1.4/1.5 Apache 1.3/2.0 (Bundled as well as latest)
Solaris 7/8/9/10 (Sparc platform) Sun JDK 1.3/1.4/1.5 Apache 1.3/2.0, iPlanet 4.1/6.0, NES 6.0/6.1, SunONE Web Server 6.1
IBM AIX 4.3/5.0/5.1/5.2/5.3 Sun JDK 1.3/1.4/1.5
IBM JDK 1.3/1.4
Apache 1.3/2.0, iPlanet 4.1/6.0, NES 6.0/6.1, SunONE Web Server 6.1
HP-UX 11/11i (PA-RISC 1.1/2.0 only) Sun JDK 1.3/1.4/1.5 (1.5 is on PA-RISC 2.0 only) Apache 1.3/2.0, iPlanet 4.1/6.0, NES 6.0/6.1, SunONE Web Server 6.1
Mac OS X 10.2/10.3/10.4 Sun JDK 1.3/1.4/1.5 Apache 1.3/2.0

Note about 64-bit support

JRun currently supports 32-bit environments and 32-bit JVMs for both the JRun core server and the bundled web server connectors.

Full 64-bit environments are not supported (64-bit JVM on 64-bit kernel/OS on 64-bit hardware).

The only supported 64-bit configuration would be a 32-bit JRun environment running on a 64-bit OS / 64-bit hardware.

Note about Mac OS X and JDK version

JRun now supports the latest Mac OS X 10.4 (Tiger). JRun also supports use of JDK 1.5 on this OS. JDK 1.5 doesn't come as standard installation on Mac OS X and it can be downloaded and installed on Mac. While choosing JVM on Mac, JRun will pick the VM that is pointed by /System/Library/Frameworks/JavaVM.framework/Versions/CurrentJDK symbolic link. On OS X, this link points to JDK 1.4.2 by default. To run JRun with JDK 1.5, one of the two things can be done:

  • Point the 'CurrentJDK' link to JDK1.5 directory by issuing the following commands

    % rm CurrentJDK
    % sudo ln -sfh 1.5.0 CurrentJDK
  • Set the JAVA_JVM_VERSION to the desired version
    % export JAVA_JVM_VERSION 1.5

Note that 'java.home' in jvm.config is not used for detecting the JVM on OS X.

Resolved issues in this release

The JRun 4 Updater 6 includes the following fixed bugs.

Built-in JDBC database drivers

The JRun 4 Updater 6 JDBC driver pack is 3.4 build 50. The SQL Server JDBC driver supports NT Authentication in this release.  See the TechNote Updated DataDirect JDBC Drivers (version 3.4) for details.

Problems fixed in this version:


  • 60039 - When SQLNET.AUTHENTICATION_SERVICES was disabled on the Oracle server, the driver was unable to connect.
  • 60019 - Time retrieved was one hour ahead of the database server time when on Eastern Standard Time.
  • 60066 - TIMSTAMP WITH LOCAL TIME ZONE  data type incorrectly reported as one hour behind the correct time on Daylight Savings Time.
  • 57661 - Expired password throws "Net8 protocol error".
  • 59202 - 16 second hang on resultset.close() when setMaxRows() is used.
  • 57263 - 16 second hang during clob retrieval on statement.close().
  • 54831,55217 - Oracle clob hang when trailing null in clob. (NLS_Characterset UTF8)
  • 55313 - Net8 Protocol error with incorrectly registered output param.
  • 54937 - "[Macromedia][Oracle JDBC Driver]Cannot establish socket to redirected host/port" not identifying host/port.
  • 54994 - Drivers return 16 bytes for char(8) on Oracle. (NLS_Characterset JA16SJIS)
  • 55605 - Cannot insert Japanese characters into a clob column. (NLS_Characterset UTF8)
  • 55308 - 2k limit for a LONG returned from a stored procedure (32k now).
  • 55546 - CFTRANSACTION throws ORA-01453.
  • 53182 - Clobs of around 3-6MB return 0 bytes.
  • 53366 - Charset "ELM8MSWIN1253" hang while retrieving CLOBs.
  • 53357 - Clob retrieval returns 0 bytes from EL8MSWIN1253 , JA16SJIS.
  • 52262 - Clob update with 2000+ chars fails with EL8MSWIN1253, JA16SJIS CharacterSets.
  • 53466 - Clob retrieval throws java.lang.ArrayIndexOutOfBoundsException. CharacterSet: JA16SJIS.
  • 53477 - "No more data available to read" connected to Oracle 9i JA16SJIS database.
  • 53758 - ArrayIndexOutOfBoundsException on clob retrieval Oracle9i CharacterSet:JA16SJIS.
  • 53752 - Hang with clob retrieve and WE8ISO8859P15 CharacterSet.
  • 53750 - Driver will not accept VARCHAR out params > 2000 char.
  • 53357 - Clob update fails with NLS_CharacterSet WE8ISO8859P15.
  • 49775 - Net8 Protocol error with large amounts of client variable data. (light load)

SQL Server

  • 59000 - AlternateServers failover doesn't work with SQL Server when a database is offline.
    58950 - Windows-specific (Type 2) Windows authentication failed with branded drivers with "cannot find DDJDBCAuth.DLL"
  • 56302 - @@Nestlevel inside stored procedure always returns 3.
  • 57050 - Certain collations (210-217) not supported.
  • 51266 - Misleading 'No more data available to read' error when database maximum connections reached.
  • 52851 - CPU spins when SQL server unexpectedly closes a connection.
  • 53556,53280 - ArrayIndexOutOfBoundsException on 2,048 char SQL Statement.


  • 53223 - Date retrieval 'String to date conversion error' fixed by new DBDATE URL parameter.   See TechNote 1a3c2ad0 for details.
  • 53592 - Informix SELECT INTO TEMP fails.


  • 57539 - Qualifying a stored procedure name with the database name throws error.


  • 54536 - Unable to connect to database with Cp1114 encoding.
  • 53347 - "StripNewLines" for DB2 not handling white space.
  • 53442 - "StripNewLines" with Tabs.

All Drivers

  • 54937 - Modified connection exception to identify relevant host and port.
  • 54826 - ArrayIndexOutOfBounds if columns aren't specified in an INSERT.
  • 53947 - CFQUERY timeout in tight query loop under load causes too many worker monitor threads.

Web Server Connectors

SunOne, Netscape, and IPlanet connectors

The NSAPI modules now use the latest libraries. Individual modules based on different web server versions have been consolidated into one module for each major platform. UNIX and Linux modules are The Windows module is jrun_nsapi.dll.

Apache Connectors

Apache connector now supports the non-default Apache Multi-Processing Modules (MPMs) on Unix.

Other bug fixes

  • 56736 - When running wsconfig with these switches, -DWSConfig.PortScanStartPort=2901 & -DWSConfig.PortScanCount=2, the actual start port differs between Windows and Solaris. On Windows, the scan will start on port 2901 go to 2902 and then stop. On Solaris, the scan will start on port 2901 and then scan ports 2902 and 2903.
  • 59653 - IIS 6.0 Supports VectorSend, which allows an ISAPI extension to specify a vector of buffers and file handles for sending responses to requests for data stored in more than one file or buffer thereby improving performance.
  • 59720 - When the JRun server is stopped and a user makes a request to http://localhost/index.jsp, the user gets different results on Window 2003 vs. WinXP/2000. On Win2003, the connector returns 503 error. On XP/2000, the browser will timeout the request. The connector now correctly returns 503 on all Windows systems.
  • 59858 - If the web server starts up first and a request comes in after the JRun server starts up but before it finishes loading a web application, mappings will not be loaded when mapCheck=0 - even after JRun restarts.
  • 60181 - Inline PDF downloads are logging 200, instead of 206, for the partial content portions in the IIS logfiles when the ColdFusion Wildcard handler and an ISAPI filter is loaded (site or global level).
  • 60584 - The updater installation does not upgrade the connector module on SunONE, Netscape and IPlanet connectors. The connector module must be upgraded manually after the updater install by running the Web Server Config tool and uninstalling and re-installing the connector.

JSP / Servlet / Web Engine

JWS and keep-alive

JWS now supports keep-alive connections even with the dynamic contents (JSP/Servlets). Prior version supported only static content.

To enable the keep-alive functionality, edit the 'Web Service' in jrun.xml as

<service class="jrun.servlet.http.WebService" name="WebService">
   <attribute name="keepAlive">true</attribute>
   <attribute name="chunkedEncoding">true</attribute>

The 'chunkedEncoding' attribute is required to support dynamic content. chunkedEncoding must be set to 'true' if 'keepAlive' is 'true' for dynamic content. The following table explains the behavior of JWS:

Request Contents keepAlive chunkedEncoding Connection Response Remarks
HTTP 1.0 Static false N/A close HTTP 1.0 Chunked encoding doesn't apply for HTTP 1.0
HTTP 1.0 Static True N/A keep-alive HTTP 1.0  
HTTP 1.0 Dynamic false N/A close HTTP 1.0  
HTTP 1.0 Dynamic True N/A close HTTP 1.0 Since chunked encoding is not available for HTTP 1.0, the connection will be closed and hence keepAlive will not be available.
HTTP 1.1 Static false N/A close HTTP 1.0 chunked encoding is not required if keepAlive is off
HTTP 1.1 Static True * keep-alive HTTP 1.0 A Content-Length header will be sent, so value of chunkedEncoding will be ignored.
HTTP 1.1 Dynamic false N/A close HTTP 1.0  
HTTP 1.1 Dynamic True false keep-alive HTTP 1.0 This is not a suggested setting as the browser will spin.
HTTP 1.1 Dynamic True True keep-alive HTTP 1.1 A HTTP 1.1 response header will be sent.  chunkedEncoding works only with HTTP 1.1

JWS and HTTP request logging

A new feature has been added in Updater 6 to log the HTTP requests served by the JRun Web Server. This feature is very helpful in doing access analysis. By default this feature is off. To log access details do the following:

  1. Set 'accessEnabled' to true in jrun.xml 'LoggerService' section and uncomment the 'accessFormat' attribute to set the format parameters. All valid format parameters have been listed in the jrun.xml file. A combination of these parameters can be used. JRun uses a default access format if none is specified.
  2. Ensure the 'filename' attribute has {log.level} specified instead of a hardcoded value like 'event' etc.
<service class="jrunx.logger.LoggerService" name="LoggerService">
<attribute name="accessEnabled">true</attribute>
<attribute name="filename">{jrun.rootdir}/logs/{}-{log.level}.log</attribute>

A log called <server>-access.log (example - default-access.log) file will be created containing HTTP request details.

JRun and <load-system-classes-first> setting in jrun-web.xml

The parameter <load-system-classes-first> in the jrun-web.xml defines where the classes will be loaded for the web application.

If the value is 'true', the system classpath is given preference over the web-app's classpath.

If the value is 'false', the local web-app classpath is used to load a class or resource first and if it is not found there, then the system class path is searched.

The default value is 'true'. This is very useful when a web-app is carrying classes/resources which can be there in the system class path too (for example, in jrun.jar).

One such scenario is: JRun comes pre-bundled with Axis web service that has a version of Log4j. If a web-app needs a different version of Log4j, set <load-system-classes-first> to 'false'.

There are two bugs which are fixed in this area:

  • 51723 - Apache Log4J multi-configure file feature doesn't work in JRun4.
  • 59842 - Apache log4j/commons.logging should be renamed in the jrun.jar, so customers can use their own.

Other bug fixes

  • 46136 - ClassCastException in jsp:useBean while helper class is recompiled.
  • 48334 - Include files sometimes fail shortly after server startup throwing random errors. Some includes display the included html in the wrong place on the page.
  • 49197 - Files with extensions other than .jsp, .html and .txt cannot be dynamically included (jsp:include)in a jsp page. The static include(<@include>) works fine.
  • 49287 - If <jsp:include> includes a jsp or servlet, and the JSP or Servlet has RequestDispatcher.forward(), forward is broken and nothing returns. JRun throws no error.
  • 50364 - JRun4 jsp:forward tag causes IllegalStateException on page control-refresh or POST action when the target page is an html page.
  • 50436 - Trying to include a html page using request dispatcher throws an illegal state exception. Including a jsp page works.
  • 50471 - cgi.remote_host returns an IP address instead of the server name. (only remote_address should return an IP)
  • 50959 - Multiple calls to HttpServletResponse.setLocale causes multiple Content-Language lines to appear in the HTTP header.
  • 53072 - When a JSP forward forwards to a servlet and the servlet gets the output stream, JRun throws an illegal state exception.
  • 54348 - Headers not set correctly (including the Content-Type’s charset) when response.setLocale() is called.
  • 55876 - java.lang.IllegalStateException when using jsp:include to a servlet that then calls a RequestDispatch.forward()
  • 58765 - If a request is forwarded to a servlet that calls response.getOutputStream and then closes the stream, JRun will throw ClosedIOExcpetion "Response has already been closed" error and IllegalStateException. The code finishes properly though.
  • 59049 - JRun creates multiple instances of a servlet class even the servlet doesn't implement the SingleThreadModel. This happens when init() takes a long time to complete.
  • 59255 - request.setAttribute() method accepts and sets attributes with 'null' values. The servlet specification states if the value of the attribute is 'null', the attribute should not be set and if it already exists, it should be removed from the request.
  • 59396 - A request for any servlet that does not exist correctly throws a 404. If the servlet is then put in the required location, and 'reload' is true for the web-app, it is not served unless the server is restarted. It always returns 404.
  • 59729 - JRun4 servlet mapping isn't compliant with servlet spec and fails to let explicit mappings take precedence over implicit mapping.
  • 59857 - JWS stops responding when keep-alive is enabled. (See the note above for JWS and keep-alive)
  • 59884 - According to J2EE/Servlet 2.3 specs if a Filter (a class that implements javax.servlet.Filter) throws an Exception in the init() method, the filter should be disabled (and removed from the filter chain). JRun doesn't remove the filter from the filter chain, but at that point the filter has not being initialized correctly and it may not work.
  • 60167 - lastAccessTime is not set properly for HTTP Session.
  • 60464 - Class Cast Exception is thrown when a dependent class is changed in the JSP.
  • 60573 - JRun does not compile the java files when called from a jsp using javac from Sun JDK.
  • 60574 - JRun does not give priority to the 'java.home' setting in the jvm.config while making a decision on the compiler.
  • 60375 - JDBC Session Persistence fails with MySQL databases.

Connection pooling

  • 52855- JDBC connections are not allocated properly when using them from standalone client. More than one open connection in the client code have the same physical connection associated with them. When two connections are opened and the first is closed, a "Connection Closed" exception is thrown while trying to close second connection.


  • 53355 - Updates to the database are occuring prior to ejbStore in 1.1 CMP. (observed with SQL Server)


JRun Windows Service and OS shutdown/reboot

  • 56758 - JRun Windows services (jrunsvc.exe) build 80735 does not stop JRun gracefully when a windows machine is rebooted.

The Shutdown notification is handled correctly now.

NOTE: On some systems, where JRun server(s) take a long time to shut down, Window's own service timeout mechanism will kill the JRun process. In this case, the user can change the Windows services time limit by modifying theWaitToKillServiceTimeout value in the following registry key:


The default is 20 seconds. Changing this value can affect system shutdown and reboot performance.

Other Bug Fixes

  • 54079 - Server startup fails with IBM 1.4.1 JVM on Windows looking for a Sun-specific class.
  • 57058 - The server sometimes stops writing metrics to the metrics.log and standard output.

    A new attribute has been added to the SchedulerService.
    <service class="jrunx.scheduler.SchedulerService" name="SchedulerService">
    <attribute name="bindToJNDI">true</attribute>
    <!-- This is the time after which the scheduler service should try
      to reschedule any tasks due to non availability of Active Handler
      Threads. The default value is 60 seconds -->
    <attribute name="droppedTaskRescheduleTime">[time in seconds] </attribute>
    The SchedulerService 'maxHandlerThreads' should be never more than the 'activeHandlerThreads since the threads spawned by the SchedulerService during heavy load do not die when they are idle. These idle threads take up system resources.
  • 58303 - The admin can register a remote JRun server on RedHat EL 3.0 or 2.1 but cannot retrieve any server information. The status for these remote servers shows "not running" when the /etc/hosts file is not properly configured. There are 2 ways to solve the problem:
    1. Ensure that /etc/hosts file has the following entries: localhost.localdomain localhost
      <IP> <hostname>

      Note - replace <IP> with the server machine's IP and <hostname> with server machine's hostname
    2. If (1) doesn't solve the problem:

      Add the following arguments to the jvm.config file:

      -Xms32m -Xmx128m
      Then register the remote server using the 'hostname' or 'IP' specified in jvm.config file.
  • 59885 - The launcher strips off jvm.config java.args arguments when used with wsconfig (which is used without -start, -ntservice arguments).
  • 59886 - JRun Role Based Authorization works only with the primary domain.  Support has been added for authorization using local domain.