We all love cache, as we think that it makes things quicker. Cache is the concept of moving things from the single source of truth in order to improve performance. Cache has an inherent problem of distancing itself from the single source of truth and therefore causing locking and concurrency issues.
JD Edwards has a number of difference caches. You need to do lots of digging to find out what cache you are dealing with. Data for the main part has two caches. JDBj service cache and database cache (kernels).
JDBj cache, this is easy. Available to clear in SM. If java code is running, it will look here for cached values.
The JDBj service cache is the important one, this is where the data is. Refer to the table below to see what tables are included in the JDBj Service Cache.
The service cache (JDBj)
Table | Table Name/Description | Others |
---|---|---|
F0004 | User Defined Code Types | & Database Cache |
F0005 | User Defined Codes | & Database Cache |
F0005D | User Defined Codes - Alternative Language | Only Service Cache (Not Database Cache) |
F0010 | Company Constants | & Database Cache |
F0013 | Currency Codes | & Database Cache |
F0025 | Ledger Type Master File | & Database Cache |
F0092 | Library List - User | Only Service Cache (Not Database Cache) |
F00941 | Environment Detail - OneWorld | Only Service Cache (Not Database Cache) |
F0111 | Address Book - Who's Who | Only Service Cache (Not Database Cache) |
F9500001 | CFR Configuration Table | Only Service Cache (Not Database Cache) |
F95921 | Role Relationship Table | Only Service Cache (Not Database Cache) |
F9861 | Object Librarian - Status Detail | Only Service Cache (Not Database Cache) |
Wouldn’t it be nice to be able to drill down into this cache and see the values? Well, nice for a nerd like me… Perhaps not everyone wants to see this.
Database Cache
This is the kernel cache. This seems to be in shared memory for all kernels of a logic data source, so all kernels refer to the same values in cache. If these are updated, then everyone on the server gets to enjoy this. Note that UBE’s create their own cache at the time of initialisation.
P98613 (Work With Database Caching) application will list all tables cached within your own environment because the tables defined can vary between EnterpriseOne versions and Tools Releases. Below is a basic list of tables where data are cached.
Note that P986116D can also help you clear a table at a time, but this is kernel cache (BSFN cache). This is not going to affect JAS!
Clear all database cache – P986116D – advanced
See the tables being cached
Clear a table at a time
run P986116D W986116DA in fast path
Choose the table that you want to clear the cache for.
The Dilemma
There are many scenarios that the cache clears need to be coordinated. For example, if you are in P0010 and you change the period of a company, he new functionality in 9.2.X will do the kernel cache clear – but guess what, it does not do the JDBj cache.
So… When you go to enter a journal, you get a period error – because the JDBj service cache does not refresh automatically. There is a bug currently due for fix in 9.2.1.1 Bug 24929695 : ISSUE WITH JDB_CLEARTABLECACHE which seems to indicate that there is going to be a link from JD Edwards runtime back to SM to enable the JDBj service cache to be cleared from JDE. This would be nice. It seems that the called clearTableCacheByEnvironmentMessage, but when I search my 9.2.1.0 source code and system/include – I don’t see any references to this.
I’m guessing that there is going to be a service entry or perhaps a PO that will define the SM URL and port so that automated cache clear can be triggered. They (oracle) might also use the AIS / rest based interface to SM to enable this functionality.
No comments:
Post a Comment