Fixes are available
7.0.0.9: WebSphere Application Server V7.0 Fix Pack 9 for IBM i
7.0.0.9: WebSphere Application Server V7.0 Fix Pack 9 for Windows
7.0.0.9: WebSphere Application Server V7.0 Fix Pack 9 for AIX
7.0.0.9: WebSphere Application Server V7.0 Fix Pack 9 for HP-UX
7.0.0.9: Java SDK 1.6 SR7 Cumulative Fix for WebSphere Application Server
7.0.0.9: WebSphere Application Server V7.0 Fix Pack 9 for Solaris
7.0.0.9: WebSphere Application Server V7.0 Fix Pack 9 for Linux
7.0.0.11: WebSphere Application Server V7.0 Fix Pack 11 for IBM i
7.0.0.11: WebSphere Application Server V7.0 Fix Pack 11 for Windows
7.0.0.11: WebSphere Application Server V7.0 Fix Pack 11 for HP-UX
7.0.0.11: WebSphere Application Server V7.0 Fix Pack 11 for AIX
7.0.0.11: Java SDK 1.6 SR7 Cumulative Fix for WebSphere Application Server
7.0.0.11: WebSphere Application Server V7.0 Fix Pack 11 for Solaris
7.0.0.11: WebSphere Application Server V7.0 Fix Pack 11 for Linux
6.1.0.29: Java SDK 1.5 SR11 Cumulative Fix for WebSphere Application Server
6.1.0.31: Java SDK 1.5 SR11 FP1 Cumulative Fix for WebSphere Application Server
6.1.0.33: Java SDK 1.5 SR12 FP1 Cumulative Fix for WebSphere
7.0.0.13: WebSphere Application Server V7.0 Fix Pack 13 for AIX
7.0.0.13: WebSphere Application Server V7.0 Fix Pack 13 for HP-UX
7.0.0.13: WebSphere Application Server V7.0 Fix Pack 13 for IBM i
7.0.0.13: WebSphere Application Server V7.0 Fix Pack 13 for Linux
7.0.0.13: WebSphere Application Server V7.0 Fix Pack 13 for Solaris
7.0.0.13: WebSphere Application Server V7.0 Fix Pack 13 for Windows
7.0.0.13: Java SDK 1.6 SR8FP1 Cumulative Fix for WebSphere Application Server
6.1.0.35: Java SDK 1.5 SR12 FP2 Cumulative Fix for WebSphere
7.0.0.15: WebSphere Application Server V7.0 Fix Pack 15 for AIX
7.0.0.15: Java SDK 1.6 SR9 Cumulative Fix for WebSphere Application Server
7.0.0.15: WebSphere Application Server V7.0 Fix Pack 15 for HP-UX
7.0.0.15: WebSphere Application Server V7.0 Fix Pack 15 for IBM i
7.0.0.15: WebSphere Application Server V7.0 Fix Pack 15 for Linux
7.0.0.15: WebSphere Application Server V7.0 Fix Pack 15 for Solaris
7.0.0.15: WebSphere Application Server V7.0 Fix Pack 15 for Windows
6.1.0.37: Java SDK 1.5 SR12 FP3 Cumulative Fix for WebSphere
7.0.0.17: WebSphere Application Server V7.0 Fix Pack 17
7.0.0.17: Java SDK 1.6 SR9 FP1 Cumulative Fix for WebSphere Application Server
7.0.0.19: WebSphere Application Server V7.0 Fix Pack 19
7.0.0.21: WebSphere Application Server V7.0 Fix Pack 21
7.0.0.23: WebSphere Application Server V7.0 Fix Pack 23
7.0.0.25: WebSphere Application Server V7.0 Fix Pack 25
7.0.0.27: WebSphere Application Server V7.0 Fix Pack 27
7.0.0.29: WebSphere Application Server V7.0 Fix Pack 29
6.1.0.47: WebSphere Application Server V6.1 Fix Pack 47
7.0.0.31: WebSphere Application Server V7.0 Fix Pack 31
7.0.0.27: Java SDK 1.6 SR13 FP2 Cumulative Fix for WebSphere Application Server
7.0.0.33: WebSphere Application Server V7.0 Fix Pack 33
7.0.0.35: WebSphere Application Server V7.0 Fix Pack 35
6.1.0.39: Java SDK 1.5 SR12 FP4 Cumulative Fix for WebSphere Application Server
6.1.0.41: Java SDK 1.5 SR12 FP5 Cumulative Fix for WebSphere Application Server
6.1.0.43: Java SDK 1.5 SR13 Cumulative Fix for WebSphere Application Server
6.1.0.45: Java SDK 1.5 SR14 Cumulative Fix for WebSphere Application Server
6.1.0.47: Java SDK 1.5 SR16 Cumulative Fix for WebSphere Application Server
7.0.0.19: Java SDK 1.6 SR9 FP2 Cumulative Fix for WebSphere Application Server
7.0.0.21: Java SDK 1.6 SR9 FP2 Cumulative Fix for WebSphere
7.0.0.23: Java SDK 1.6 SR10 FP1 Cumulative Fix for WebSphere
7.0.0.25: Java SDK 1.6 SR11 Cumulative Fix for WebSphere Application Server
7.0.0.27: Java SDK 1.6 SR12 Cumulative Fix for WebSphere Application Server
7.0.0.29: Java SDK 1.6 SR13 FP2 Cumulative Fix for WebSphere Application Server
7.0.0.45: Java SDK 1.6 SR16 FP60 Cumulative Fix for WebSphere Application Server
7.0.0.31: Java SDK 1.6 SR15 Cumulative Fix for WebSphere Application Server
7.0.0.35: Java SDK 1.6 SR16 FP1 Cumulative Fix for WebSphere Application Server
7.0.0.37: Java SDK 1.6 SR16 FP3 Cumulative Fix for WebSphere Application Server
7.0.0.39: Java SDK 1.6 SR16 FP7 Cumulative Fix for WebSphere Application Server
7.0.0.41: Java SDK 1.6 SR16 FP20 Cumulative Fix for WebSphere Application Server
7.0.0.43: Java SDK 1.6 SR16 FP41 Cumulative Fix for WebSphere Application Server
APAR status
Closed as program error.
Error description
An SQL call is made for each call to the javax.ejb.Timer interface as per the Enterprise JavaBeans (EJB) Specification. This is to ensure that the EJB Timer is using the most current EJB Timer data which is stored in a database. However, this can result in a lot of SQL calls if a user iterates over, and makes calls to, their EJB Timers. As stated, this is a requirement of the EJB Specification and to deviate from it would be a violation of the EJB Specification. However, should a user be willing to accept an EJB Specification violation at the benefit of a reduction in SQL statements, such a feature should be provided. That is, data for an EJB Timer should be cached in the EJB Timer object itself.
Local fix
Problem summary
**************************************************************** * USERS AFFECTED: Users of IBM? WebSphere? Application * * Server V6.1.0, V6.1.0 Feature Pack * * for Enterprise JavaBeans 3.0, and V7.0.0 * * who make use of Enterprise JavaBeans Timers.* **************************************************************** * PROBLEM DESCRIPTION: A request has been made to provide a * * mechanism to reduce the number of SQL * * calls for EJB Timer data. * **************************************************************** * RECOMMENDATION: * **************************************************************** The javax.ejb.Timer interface has the following methods: - TimerHandle getHandle() - Serializable getInfo() - Date getNextTimeout() - Long getTimeRemaining() The EJB Specification mandates that when any of these methods are called, the EJB Container must make a call to the Database which contains the timer data in order to retrieve the most current data for the EJB Timer. If these methods are called often, or the user has many EJB Timers (Timers for short hereafter) which call any one of these methods, many SQL statements can be generated in a very short amount of time. Even though the SQL call is a requirement of the EJB Specification, some users may find the SQL calls too expensive with respect to performance. For example, imagine the case where a timer only expires every Sunday night at midnight. For a whole week, calling any of the methods on the Timer interface will return the same data and will result in an SQL call. Furthermore, when a Timer's 'ejbTimeout' method is called, the data associated with the timer can not change. That is, the data in the Database for a Timer can not be updated while a Timer's 'ejbTimeout' method is running. Therefore, the SQL generated for a call to one of the Timer methods during a Timer's 'ejbTimeout' is a wasted trip to the Database.
Problem conclusion
This APAR allows the user to minimize the number of SQL statements generated for calls to the methods on the Timer interface by caching Timer data. When the code for this APAR is enabled, data for the Timer will be cached in the Timer object when the Timer object is created. When one of the Timer methods is called which allows for the use of cached Timer data, the cached data will be used, thus reducing an SQL statement. This does however lead to the potential for a Timer to use stale data. Cached Timer data will become stale after the next expiration of the timer. For example, take a Timer which is defined to expire every hour. When creating the Timer object, if a user saves the resultant Timer object, the cached data within it is current for one hour (i.e. the cached Timer data is the same as that stored in the Database). If the user calls any of the Timer methods within the first hour, the Timer data is current. It is only after an hour passes, and hence the Timer expired, that the cached Timer data becomes stale. Continuing this example, if after 1.5 hrs the user queries the EJB Container for all Timers, they would get back a new Timer object which will contain cached data that will be current for 30 minutes (i.e. at hour 2 the timer will expire again, thus making my cached data stale). It is very important to note that when enabled, this function is not EJB Specification compliant and is a violation of the EJB Specification. To enable the code of this APAR, the user must set a JVM system property; the property name is: com.ibm.websphere.ejbcontainer.allowCachedTimerDataFor. The syntax of the value which this property takes is in the following form: *[=<integer>]|<application_name>#<module_name>#<enterprisebean_n ame>[=<integer>][:<application_name>#<module_name>#<enterprisebe an_name>[=<integer>]]... This syntax will now be described in detail: The values this property takes allows a user to specify the EJB(s) for which the property applies, as well as the method(s) on the Timer interface for which the property applies. To specify which EJB(s) this property applies to, the value used would be in the form "<application_name>#<module_name>#<enterprisebean_name>" where: <application_name> is the application name, as defined in the application archive (.ear) file deployment descriptor, for the bean which the property applies. <module_name> is the .jar file name of the EJB module for the bean which the property applies. <bean_name> is the Enterprise Bean name, as defined in the EJB module deployment descriptor, for the bean which the property applies. Note that more than one EJB name can be specified by separating each EJB name with a ':'. For example: com.ibm.websphere.ejbcontainer.allowCachedTimerDataFor=MyApp1#My EJBModule1#MyTimerBean1:MyApp2#MyEJBModule2#MyTimerBean2. To apply this property to all EJBs installed on the server, a '*' can be assigned to the property. To specify which Timer method(s) this property applies to, the value takes an integer ("<integer>") which has been assigned to a/an method(s) on the Timer interface. The following Timer methods can be configured to return cached data by using the integer value, to the left of the Timer method, assigned to it: 1 - getHandle() 2 - getInfo() 4 - getNextTimeout() 8 - getTimeRemaining() This allows for very fine grain control over which methods on the Timer interface allow cached data to be used. This integer is assigned on a per bean basis (or all beans if '*' is used). The user can apply this property to any individual methods listed above, using the assigned integer value, or they can apply it to a combination of these methods. For example, to apply this property to the 'getHandle' method and 'getTimeRemaining', the user would sum the integer value for the two methods: 9 (1+8). To apply the property to all four methods, the user would use the value 15 (1+2+4+8), or the user could simply not specify an integer, that is, by default when this property is set, it will be applied to all methods. Finally, to illustrate the values this property can take, some examples will now be shown. For the examples assume the following: - there are two applications, one named app1 and the other named app2. - each application has a module; app1 contains a module named EJBJar1.jar and app2 contains a module named EJBJar2.jar. - each module contains a Timer, EJBJar1.jar contains a Timer named EJBTimer1 and EJBJar2.jar contains a Timer named EJBTimer2. Example 1: to apply this property to the 'getInfo' method on EJBTimer1 and to 'getNextTimeout' and 'getTimeRemaining' on EJBTimer2, the following value would be used: com.ibm.websphere.ejbcontainer.allowCachedTimerDataFor=App1#EJBJ ar1.jar#EJBTimer1=2:App2#EJBJar2.jar#EJBTimer2=12 Example 2: to apply this property to all methods on all Timers on all apps, the following value would be used: com.ibm.websphere.ejbcontainer.allowCachedTimerDataFor=*=15, or simply com.ibm.websphere.ejbcontainer.allowCachedTimerDataFor=* Example 3: to apply this property to 'getInfo' on all Timer on all apps, the following value would be used: com.ibm.websphere.ejbcontainer.allowCachedTimerDataFor=*=2 Example 4: to apply this property to 'getHandle' and 'getNextTimeout' on EJBTimer2, the following value would be used: com.ibm.websphere.ejbcontainer.allowCachedTimerDataFor=App2#EJBJ ar2.jar#EJBTimer2=5 To set the property and its value use the Administrative Console as follows: 1) Open the Administrative Console. 2) Click Servers. 3) Click Application Servers. 4) Click the server you want to configure. 5) In the Server Infrastructure area, select Java and Process Management. 6) In the Server Infrastructure area, select Process Definition. 7) In the Additional Properties area, select Java Virtual Machine. 8) In the Additional Properties area, select Custom Properties. 9) Select the New box. 10) In the Name entry field, type com.ibm.websphere.ejbcontainer.allowCachedTimerDataFor 11) In the Value entry field, type the value 12) Select OK and save the changes. 13) Restart the Application Server. The fix for this APAR is currently targeted for inclusion in Service Levels (Fix Packs) 6.1.0.29, Enterprise JavaBeans 3.0 Feature Pack Fix Pack 29 (6.1.0.29), and 7.0.0.9 of WebSphere Application Server versions 6.1.0, and 7.0.0. Please refer to the recommended updates page for delivery information: http://www.ibm.com/support/docview.wss?rs=180&uid=swg27004980
Temporary fix
Comments
APAR Information
APAR number
PK98504
Reported component name
WEBSPHERE APP S
Reported component ID
5724J0800
Reported release
61W
Status
CLOSED PER
PE
NoPE
HIPER
NoHIPER
Special Attention
NoSpecatt
Submitted date
2009-10-13
Closed date
2009-10-20
Last modified date
2009-10-20
APAR is sysrouted FROM one or more of the following:
APAR is sysrouted TO one or more of the following:
Fix information
Fixed component name
WEBSPHERE APP S
Fixed component ID
5724J0800
Applicable component levels
R61A PSY
UP
R61H PSY
UP
R61I PSY
UP
R61P PSY
UP
R61S PSY
UP
R61W PSY
UP
R61Z PSY
UP
R700 PSY
UP
Document Information
Modified date:
29 December 2021