The WebSphere® Java Persistence API (WSJPA) extension
to OpenJPA provides a read-only ObjectCache that can improve performance
in certain use cases. By default, the data in the cache is loaded
in a lazy method, which means that individual entities are loaded
into memory when they are requested by an application. If you want
to load all the entities from the beginning, though, you can configure
the application server to preload all of the entities from the database
that are configured in the ObjectCache. Pre-loading the ObjectCache
will allow you to cache entities that would otherwise be restricted
when if you load the ObjectCache through the lazy method.
About this task
When you enable automatic loading of the ObjectCache, the
JPA environment will automatically size and preload the ObjectCache
instead of waiting on single entities to be requested by applications.
When the application server creates the first EntityManager, the pre-loading
process will start, and the application server will preload all entities
from the database that are configured in the ObjectCache. This pre-loading
process will happen asynchronously in a separate processing thread.
Avoid trouble: Be aware of the following information:
- For entities that are configured to be in the ObjectCache, you
also need to configure all eager relationships in the ObjectCache;
any lazy relationships will not be available.
- While the application server is pre-loading the ObjectCache, entities
will be fetched from the database. The application server will not
add any entities to the ObjectCache that are loaded by other methods.
- Auto loading the cache can take a very long time if your object
graph is complex.
- Be careful when you enable this feature, because it could consume
all of the available memory. For this function to work, the JPA environment
needs to have the complete set of data in memory.
gotcha
When the pre-loading process is complete, you will
see an informational message similar to this:
Successfully loaded the ObjectCache with [...] Entities in [...] seconds.
Procedure
- Set the MaxSize property to auto for
the ObjectCache. For example, include the following
entry in your .properties file:
<property name="wsjpa.ObjectCache" value=”true(Types=com.ibm.wsjpa.Foo; com.ibm.wsjpa.Bar, MaxSize=auto)”/>
The default value for the MaxSize property is 1000, but when
you set the MaxSize property to auto the pre-loading
mechanism will be enabled.
- Optional: Review the value you set for the
EvictionSchedule property, which is explained in the Configuring WSJPA ObjectCache to improve performance topic. When you
use the EvictionSchedule property in conjunction with the MaxSize=auto
setting, the EvictionSchedule property is implemented differently
from the default behavior: instead of clearing the ObjectCache on
the configured schedule, the ObjectCache will be automatically reloaded.
Example
The following examples show how to configure the ObjectCache
to be loaded automatically:
- The following property specifies that the ObjectCache will be
automatically loaded when the application server creates the first
EntityManager:
<property name=" wsjpa.ObjectCache" value=”true(Types=com.ibm.wsjpa.Foo; com.ibm.wsjpa.Bar, MaxSize=auto)”/>
- The following property specifies that the ObjectCache will be
automatically loaded when the application server creates the first
EntityManager, and the ObjectCache will be reloaded every 20 minutes:
<property name=" wsjpa.ObjectCache" value=”true(Types=com.ibm.wsjpa.Foo; com.ibm.wsjpa.Bar,
MaxSize=auto, EvictionSchedule=+20)”/>