Package com.inet.report.cache
Class Cache
java.lang.Object
com.inet.report.cache.Cache
This class implements a cache for rendered data. The typical usage is:
Properties props = new Properties();
props.put( "report", "report1.rpt" );
props.put( "prompt0", "abc" );
Cache cache = Cache.getCache();
ReportCacheKey key = cache.getKey(props);
cache.getPageAndWait( key, 12, 5 * 60 * 1000 );
- Since:
- 4.0
-
Field Summary
Modifier and TypeFieldDescriptionstatic final int
Use a database as cache medium.static final int
Use harddisk as cache medium.static final int
Use memory as cache medium (default cache type). -
Constructor Summary
-
Method Summary
Modifier and TypeMethodDescriptionabstract void
addEngine
(Engine engine, ReportCacheKey key) Save a rendered Engine in the cache.abstract void
clear()
Removes all of the entries from this cache.abstract boolean
Deprecated.As of i-net Clear Reports 16.1createKey
(Properties props) This method is calling the method getKey() of the current EngineFactory only.@Nonnull ReportCacheKey
createKey
(Properties props, PropertiesChecker checker, EngineFactory factory, Object req) This method calls the methodEngineFactory.getKey(Properties)
.createKey
(Properties props, PropertiesChecker checker, Object req) This method is calling the method getKey() of the current EngineFactory only.abstract void
delete
(ReportCacheKey key) Removes one report from the cache.abstract void
Delete all reports with the name from the cache.abstract boolean
exists
(ReportCacheKey key) Verify if a ReportCacheKey exists in the cache.static @Nullable Cache
getCache()
Returns the singleton Cache instance.abstract @Nullable ReportGenerator
getEngine
(ReportCacheKey key) Returns the engine for the specified key in the specified cache if active rendering.static EngineFactory
Get the current EngineFactory.Returns the cause for the failure of the report.final byte[]
getGroupTreeAndWait
(ReportCacheKey key, int groupNumber, int requestType) FOR INTERNAL USE ONLY Returns the group tree which can be send to the java viewer bean.byte[]
getGroupTreeAndWait
(ReportCacheKey key, int groupNumber, int requestType, int timeout) FOR INTERNAL USE ONLY Returns the group tree which can be send to the java viewer bean.getKey
(Properties props) Create a ReportCacheKey and start rendering if report does not exist in the Cache.abstract @Nonnull ReportCacheKey
getKey
(Properties props, PropertiesChecker checker, EngineFactory factory, Object req) Create a ReportCacheKey and start rendering if report does not exist in the Cache.getKey
(Properties props, PropertiesChecker checker, Object req) Create a ReportCacheKey and start rendering if report does not exist in the Cache.abstract int
Get the amount of bytes used for cached reports in memory.abstract int
Get the size a report uses in memory.final byte[]
getPageAndWait
(ReportCacheKey key, int page) The method returns the binary data of pages of a report.abstract byte[]
getPageAndWait
(ReportCacheKey key, int page, int timeout) The method returns the binary data of pages of a report.final int
Returns the total count of pages and blocks until the rendering is finished.abstract int
getPageCountAndWait
(ReportCacheKey key, int timeout) Returns the total count of pages and blocks until the rendering is finished.static PropertiesChecker
Get the current PropertiesChecker.abstract @Nonnull List<ReportCacheKey>
Returns all reports that are currently listed in the Cache.abstract long
Get the total amount of bytes used on an external cache media.abstract long
Get the memory size a report uses on an external cache media.final int
Returns the total size of all pages inbytes
and blocks until the rendering is finished.abstract int
getTotalPageSizeAndWait
(ReportCacheKey key, int timeout) Returns the total size of all pages inbytes
and blocks until the rendering is finished.abstract int
getType()
Returns the defined Cache type.abstract boolean
Returns whether the report was rendered without errors.abstract boolean
isFinished
(ReportCacheKey key) Checks whether the rendering process is finished.
After rendering process is finished, all pages of the report are available.abstract boolean
Deprecated.As of i-net Clear Reports 16.1abstract boolean
Check if the rendering of the report ran into a page limit.abstract void
lock
(ReportCacheKey key) Lock the data in the cache and prevent it from modification.abstract void
Causes the timeout for the entry behind this key to be manually restarted.static void
setEngineFactory
(EngineFactory engineFactory) You can override the default EngineFactory.static void
shutdown()
FOR INTERNAL USE ONLY Shuts down the started cache and writerThread
s.abstract void
unlock
(ReportCacheKey key) Unlock the data in the cache.
-
Field Details
-
TYPE_MEMORY
public static final int TYPE_MEMORYUse memory as cache medium (default cache type).- Since:
- 6.0
- See Also:
-
TYPE_DATABASE
public static final int TYPE_DATABASEUse a database as cache medium. (i-net Clear Reports Plus only).- Since:
- 6.0
- See Also:
-
TYPE_HARDDISK
public static final int TYPE_HARDDISKUse harddisk as cache medium. (i-net Clear Reports Plus only).- Since:
- 6.0
- See Also:
-
-
Constructor Details
-
Cache
protected Cache()package Constructor- Since:
- 4.0
-
-
Method Details
-
getCache
Returns the singleton Cache instance.- Returns:
- the current Cache
- Since:
- 4.0
-
shutdown
public static void shutdown()FOR INTERNAL USE ONLY Shuts down the started cache and writerThread
s. -
setEngineFactory
You can override the default EngineFactory. An EngineFactory you can use if you want to create or modify the Engine via RDC at runtime. The default implementation is loading a template from a *.rpt file.- Parameters:
engineFactory
- the EngineFactory to set.- Throws:
IllegalArgumentException
- If the supplied EngineFactory is null.- Since:
- 4.0
- See Also:
-
getEngineFactory
Get the current EngineFactory.- Returns:
- the EngineFactory currently set for the cache.
- Since:
- 4.0
- See Also:
-
getPropertiesChecker
Get the current PropertiesChecker.- Returns:
- the PropertiesChecker currently set for the cache.
- Since:
- 17.0
- See Also:
-
getKey
Create a ReportCacheKey and start rendering if report does not exist in the Cache. The Cache needs the ReportCacheKey to find the report in the Cache. If you are using the default EngineFactory, every property in Properties is used to make the ReportCacheKey. The default EngineFactory needs the parameter "report". To render the report in a special format e.g. "pdf", set the "export_fmt" property. The supported output formats are listed in the class Engine. Internal work:- call EngineFactory.getKey(Properties)
- search whether the key exists in the cache
- if it does not exist then call EngineFactory.createEngine(Properties) and start rendering
- Parameters:
props
- The default Engine Factory need the parameter "report"- Returns:
- a unique key for the report
- Throws:
ReportException
- e.g. if the reportfile does not exist- Since:
- 4.0
- See Also:
-
getKey
public ReportCacheKey getKey(Properties props, PropertiesChecker checker, Object req) throws ReportException Create a ReportCacheKey and start rendering if report does not exist in the Cache. The Cache needs the ReportCacheKey, to find the report in the Cache. If you are using the default EngineFactory, every property in Properties is used to make the ReportCacheKey. The default EngineFactory needs the parameter "report". To render the report in a special format e.g. "pdf", set the "export_fmt" property. The supported output formats are listed in the class Engine. Internal work:- call PropertiesChecker.checkProperties(Properties, Object)
- create ReportCacheKey with EngineFactory.getKey(Properties)
- check if the key exists in the cache
- if it does not exist then call EngineFactory.createEngine(Properties)
- call PropertiesChecker.checkProperties(Engine, Properties, Object)
- start rendering
- Parameters:
props
- The default Engine Factory needs the parameter "report"checker
- an implementation of PropertiesChecker for validate the Properties. Can be null.req
- The HTTP servlet request, either null or HttpServletRequest- Returns:
- a unique key for the report
- Throws:
ReportException
- e.g. if the reportfile does not exist- Since:
- 4.0
- See Also:
-
getKey
@Nonnull public abstract @Nonnull ReportCacheKey getKey(Properties props, PropertiesChecker checker, EngineFactory factory, Object req) throws ReportException Create a ReportCacheKey and start rendering if report does not exist in the Cache. The Cache needs the ReportCacheKey, to find the report in the Cache. If you are using the default EngineFactory, every property in Properties is used to make the ReportCacheKey. The default EngineFactory needs the parameter "report". To render the report in a special format e.g. "pdf", set the "export_fmt" property. The supported output formats are listed in the class Engine. Internal work:- call PropertiesChecker.checkProperties(Properties, Object)
- create ReportCacheKey with EngineFactory.getKey(Properties)
- check if the key exists in the cache
- if it does not exist then call EngineFactory.createEngine(Properties)
- call PropertiesChecker.checkProperties(Engine, Properties, Object)
- start rendering
EngineFactory
instance to be used instead of the system-wide instance set insetEngineFactory(EngineFactory)
.- Parameters:
props
- The default Engine Factory needs the parameter "report"checker
- an implementation of PropertiesChecker for validate the Properties. Can be null.factory
-EngineFactory
instance to use instead of the system-wide one set insetEngineFactory(EngineFactory)
.req
- The HTTP servlet request, either null or HttpServletRequest- Returns:
- a unique key for the report
- Throws:
ReportException
- e.g. if the reportfile does not exist- Since:
- 9.2
- See Also:
-
getPageAndWait
public final byte[] getPageAndWait(ReportCacheKey key, int page) throws PageOutOfRangeException, KeyNotFoundException, ReportException The method returns the binary data of pages of a report. Set the ReportCacheKey to define the report from that the data have to received ans set the page number to specify the page. How many pages a report has depends on the report and on the export format. The first page has index 1. The last page is the value return formgetPageCountAndWait(ReportCacheKey, int)
If the page is not available yet then this method will wait until the page is available.
If executing the report failed because of an fatal error, this method will return a serializedException
Object. The methodCache.isFailedReport(ReportCacheKey)
will give the information whether report execution failed- Parameters:
key
- the unique key to find the report in the Cachepage
- the page number of the page, from which the binary data are returned. The first page has page number 1.- Returns:
- the binary data for the Java Report Viewer or the bytes of the exported file (page). In case of a failed report the binary data contain a serialized
Exception
Object. - Throws:
PageOutOfRangeException
- If the page is out of range after the report is finish rendered.KeyNotFoundException
- If the key does not exist in the cache. This can occur if the key has received its timeout and was removed from the cache. You can change the cache timeout in the Cache Config Dialog.ReportException
- e.g. if using DBCache and something went wrong with database connection- Since:
- 4.0
- See Also:
-
getPageAndWait
public abstract byte[] getPageAndWait(ReportCacheKey key, int page, int timeout) throws PageOutOfRangeException, KeyNotFoundException, ReportException The method returns the binary data of pages of a report. Set the ReportCacheKey to define the report from that the data have to received ans set the page number to specify the page. How many pages a report has depends on the report and on the export format. The first page has index 1. The last page is the value return formgetPageCountAndWait(ReportCacheKey, int)
If the page is not available yet then this method will wait until the page is available.
If executing the report failed because of an fatal error, this method will return a serializedException
Object. The methodCache.isFailedReport(ReportCacheKey)
will give the information whether report execution failed- Parameters:
key
- the unique key to find the report in the Cachepage
- the page number of the page, from which the binary data are returned. The first page has page number 1.timeout
- the maximum time that is wait in milli seconds, 0 means unlimited wait.- Returns:
- the binary data for the Java Report Viewer or the bytes of the exported file (page). In case of a failed report the binary data contain a serialized
Exception
Object. - Throws:
PageOutOfRangeException
- If the page is out of range after the report is finish rendered.KeyNotFoundException
- If the key does not exist in the cache. This can occur if the key has received its timeout and was removed from the cache. You can change the cache timeout in the Cache Config Dialog.ReportException
- e.g. if using DBCache and something went wrong with database connection- Since:
- 9.0
- See Also:
-
getGroupTreeAndWait
public final byte[] getGroupTreeAndWait(ReportCacheKey key, int groupNumber, int requestType) throws KeyNotFoundException, ReportException FOR INTERNAL USE ONLY Returns the group tree which can be send to the java viewer bean. The type can either be 2 or 3 and should correspond to the viewer parameter requestType=<requestType>. The value 2 is a request for an individual node where requestID describes the position of the node, value 3 is a request for the whole group tree. For the root of the tree specify a requestID -1.- Parameters:
key
- the key for that the grooup tree info is requestedgroupNumber
- -1 for complete group tree data.requestType
- 2 or 3- Returns:
- a bytearray of the group tree info
- Throws:
KeyNotFoundException
- If the key does not exist in the cache. This can occur if the key has received its timeout and was removed from the cache. You can change the cache timeout in the Cache Config Dialog.ReportException
- e.g. if using DBCache and something went wrong with database connection- Since:
- 4.0
-
getGroupTreeAndWait
public byte[] getGroupTreeAndWait(ReportCacheKey key, int groupNumber, int requestType, int timeout) throws KeyNotFoundException, ReportException FOR INTERNAL USE ONLY Returns the group tree which can be send to the java viewer bean. The type can either be 2 or 3 and should correspond to the viewer parameter requestType=<requestType>. The value 2 is a request for an individual node where requestID describes the position of the node, value 3 is a request for the whole group tree. For the root of the tree specify a requestID -1.- Parameters:
key
- the key for that the grooup tree info is requestedgroupNumber
- -1 for complete group tree data.requestType
- 2 or 3timeout
- the maximum time that is wait in milli seconds, 0 means unlimited wait.- Returns:
- a bytearray of the group tree info
- Throws:
KeyNotFoundException
- If the key does not exist in the cache. This can occur if the key has received its timeout and was removed from the cache. You can change the cache timeout in the Cache Config Dialog.ReportException
- e.g. if using DBCache and something went wrong with database connection- Since:
- 9.0
-
getPageCountAndWait
public final int getPageCountAndWait(ReportCacheKey key) throws KeyNotFoundException, ReportException Returns the total count of pages and blocks until the rendering is finished.- Parameters:
key
- the key of the report- Returns:
- the numbers of pages of a report
- Throws:
KeyNotFoundException
- If the key does not exist in the cache. This can occur if the key has received its timeout and was removed from the cache. You can change the cache timeout in the Cache Config Dialog.ReportException
- e.g. if using DBCache and something went wrong with database connection- Since:
- 4.0
- See Also:
-
getPageCountAndWait
public abstract int getPageCountAndWait(ReportCacheKey key, int timeout) throws KeyNotFoundException, ReportException Returns the total count of pages and blocks until the rendering is finished.- Parameters:
key
- the key of the reporttimeout
- the maximum time that is wait in milli seconds, 0 means unlimited wait.- Returns:
- the numbers of pages of a report
- Throws:
KeyNotFoundException
- If the key does not exist in the cache. This can occur if the key has received its timeout and was removed from the cache. You can change the cache timeout in the Cache Config Dialog.ReportException
- e.g. if using DBCache and something went wrong with database connection- Since:
- 9.0
- See Also:
-
getTotalPageSizeAndWait
public final int getTotalPageSizeAndWait(ReportCacheKey key) throws KeyNotFoundException, ReportException Returns the total size of all pages inbytes
and blocks until the rendering is finished.- Parameters:
key
- the key of the report- Returns:
- the size of all pages from the report together
- Throws:
KeyNotFoundException
- If the key does not exist in the cache. This can occur if the key has received its timeout and was removed from the cache. You can change the cache timeout in the Cache Config Dialog.ReportException
- e.g. if using DBCache and something went wrong with database connection- Since:
- 4.0
- See Also:
-
getTotalPageSizeAndWait
public abstract int getTotalPageSizeAndWait(ReportCacheKey key, int timeout) throws KeyNotFoundException, ReportException Returns the total size of all pages inbytes
and blocks until the rendering is finished.- Parameters:
key
- the key of the reporttimeout
- the maximum time that is wait in milli seconds, 0 means unlimited wait.- Returns:
- the size of all pages from the report together
- Throws:
KeyNotFoundException
- If the key does not exist in the cache. This can occur if the key has received its timeout and was removed from the cache. You can change the cache timeout in the Cache Config Dialog.ReportException
- e.g. if using DBCache and something went wrong with database connection- Since:
- 9.0
- See Also:
-
isPageLimitExceeded
public abstract boolean isPageLimitExceeded(ReportCacheKey key) throws KeyNotFoundException, ReportException Check if the rendering of the report ran into a page limit. This means does not all possible pages exist.- Parameters:
key
- the key of the report- Returns:
- true, if there is a limit and the report is finish
- Throws:
KeyNotFoundException
- If the key does not exist in the cache. This can occur if the key has received its timeout and was removed from the cache. You can change the cache timeout in the Cache Config Dialog.ReportException
- e.g. if using DBCache and something went wrong with database connection- Since:
- 10.0
-
lock
Lock the data in the cache and prevent it from modification. This is required if you stream a document like *.pdf in multiple parts.- Parameters:
key
- the key of the report- Throws:
KeyNotFoundException
- If the key does not exist in the cache. This can occur if the key has received its timeout and was removed from the cache. You can change the cache timeout in the Cache Config Dialog.ReportException
- e.g. if using DBCache and something went wrong with database connection- Since:
- 4.0
- See Also:
-
unlock
Unlock the data in the cache.- Parameters:
key
- the key of the report- Throws:
KeyNotFoundException
- If the key does not exist in the cache. This can occur if the key has received its timeout and was removed from the cache. You can change the cache timeout in the Cache Config Dialog.ReportException
- e.g. if using DBCache and something went wrong with database connection- Since:
- 4.0
- See Also:
-
clear
Removes all of the entries from this cache. The cache will be empty after this call returns.- Throws:
ReportException
- - e.g. if using DBCache and something went wrong with database connection- Since:
- 15.1
-
addEngine
Save a rendered Engine in the cache. This method can be used if you have created an Engine outside of the cache. A typical use is:Cache cache = Cache.getCache(); ReportCacheKey key = cache.createKey(props); if(!cache.exists(key)){ Engine engine = new Engine( Engine.NO_EXPORT ); engine.setReportName( props.get( "report" ); engine.execute(); cache.addEngine( engine, key ); } cache.getPageAndWait( key, 12 );
- Parameters:
engine
- the executed enginekey
- the key created for that report- Throws:
ReportException
- e.g. if there already exists a report in the cache for the key. Possible solution is to call Cache.createKey() with an additional Property or call Cache.delete() with reportname.- Since:
- 4.0
-
exists
Verify if a ReportCacheKey exists in the cache.- Parameters:
key
- the key of the report- Returns:
- true: the report exists in the cache.
false: the report does not exist in the cache - Since:
- 4.0
- See Also:
-
createKey
This method is calling the method getKey() of the current EngineFactory only. It is not starting a render job. The default Engine Factory needs the parameter "report"- Parameters:
props
- Properties for the report- Returns:
- the created key
- Throws:
ReportException
- will be thrown if no value for the key "report" can be found in Properties- Since:
- 4.0
- See Also:
-
createKey
public ReportCacheKey createKey(Properties props, PropertiesChecker checker, Object req) throws ReportException This method is calling the method getKey() of the current EngineFactory only. It is not starting a render job. If the property "cache.clearOnRequest" is true, the cache will be cleared first.- Parameters:
props
- Properties for the reportchecker
- an implementation of PropertiesChecker for validate the Properties. Can be null.req
- The HTTP servlet request, either null or HttpServletRequest- Returns:
- the created key to use with the cache
- Throws:
ReportException
- If an error occurred while checking the supplied properties by the PropertiesChecker or while creating the key in the EngineFactory of the cache.- Since:
- 7.0
- See Also:
-
createKey
@Nonnull public @Nonnull ReportCacheKey createKey(Properties props, PropertiesChecker checker, EngineFactory factory, Object req) throws ReportException This method calls the methodEngineFactory.getKey(Properties)
. Note it does not start the render job yet. This method also gives you the opportunity to provide your ownEngineFactory
instead of the system-wide one set insetEngineFactory(EngineFactory)
.- Parameters:
props
- Properties for the reportchecker
- an implementation of PropertiesChecker for validate the Properties. Can be null.factory
-EngineFactory
instance to use (can be different than the system-wide one set insetEngineFactory(EngineFactory)
req
- The HTTP servlet request, either null or HttpServletRequest- Returns:
- the created key to use with the cache
- Throws:
ReportException
- If an error occurred while checking the supplied properties by the PropertiesChecker or while creating the key in the EngineFactory of the cache.- Since:
- 9.2
- See Also:
-
delete
Delete all reports with the name from the cache. If one or more of the reports are locked the method will not return until it has deleted all of the reports. The deletion will be done sequentially, with no guaranteed ordering.- Parameters:
report
- name of the report- Throws:
ReportException
- e.g. if using DBCache and something went wrong with database connection- Since:
- 6.0
-
delete
Removes one report from the cache. If the key is locked, this method will not return until the key is unlocked.- Parameters:
key
- The ReportCacheKey of the report.- Throws:
ReportException
- e.g. if using DBCache and something went wrong with database connection- Since:
- 6.0
- See Also:
-
isFinished
Checks whether the rendering process is finished.
After rendering process is finished, all pages of the report are available.- Parameters:
key
- This key is checked- Returns:
true
if report is completely rendered.
false
if report is not completely rendered.- Throws:
ReportException
- e.g. if using DBCache and something went wrong with database connection- Since:
- 4.0
- See Also:
-
containsInRAM
Deprecated.As of i-net Clear Reports 16.1FOR INTERNAL USE ONLY -
getMemoryUsage
Get the size a report uses in memory.- Parameters:
key
- the report key- Returns:
- size in bytes, zero if not in memory.
- Since:
- i-net Clear Reports 14.0
-
getSwapSize
Get the memory size a report uses on an external cache media.- Parameters:
key
- the report key- Returns:
- size in bytes, zero if only in memory.
- Since:
- i-net Clear Reports 16.3
-
getSwapSize
public abstract long getSwapSize()Get the total amount of bytes used on an external cache media.- Returns:
- size in bytes, zero if only in memory.
- Since:
- i-net Clear Reports 16.3
-
getReports
Returns all reports that are currently listed in the Cache.- Returns:
- all reports that are currently listed in the Cache.
- Throws:
ReportException
- If an error has occurred during cache request- Since:
- 24.10
-
isFinishWrittenToStore
@Deprecated public abstract boolean isFinishWrittenToStore(ReportCacheKey key) throws ReportException, KeyNotFoundException Deprecated.As of i-net Clear Reports 16.1Asserts, whether the report is completly written into the store of the cache or not.
This method is only relevant if you're using DatabaseCache or Harddiskcache. The MemoryCache
does not have a store.
It's only necessary to wait ontrue
if you want to skip your application after writing a report in the cache.- Parameters:
key
- The ReportCacheKey for the report- Returns:
true
if the report for that key is completely written into the store or an error occur.- Throws:
KeyNotFoundException
- will be thrown if no report for that key exists in the cache.ReportException
- e.g. if using DBCache and something went wrong with database connection- Since:
- 4.0
- See Also:
-
isFailedReport
Returns whether the report was rendered without errors. Call this method after the report rendering has been finished.
If report execution failed, you can receive the exception object callinggetFailureCause(ReportCacheKey)
.- Parameters:
key
- The key belongs to the report.- Returns:
- If the report was rendered without errors.
- Throws:
ReportException
- If there is no respective report in the cache.- Since:
- 6.0
-
getFailureCause
Returns the cause for the failure of the report. This method should be called after the report rendering has beenfinished
. If the report execution failed this will return the cause for the failure. If the report execution finished without any error this will returnnull
.- Parameters:
key
- The key identifying the report.- Returns:
- The failure cause of the report execution or
null
if the report rendered successfully. - Throws:
ReportException
- If there is no respective report in the cache.- Since:
- 8.0
-
getType
public abstract int getType()Returns the defined Cache type. Possible return values are:
0 - Memory Cache
1 - Database Cache
2 - Harddisk Cache
The type of cache is defined in the configuration.
The parameter that define the cache type iscache.type
- Returns:
- the defined Cache type.
- Since:
- 6.0
- See Also:
-
getMemoryUsage
public abstract int getMemoryUsage()Get the amount of bytes used for cached reports in memory.- Returns:
- the number of bytes used for cached reports, can be zero.
- Since:
- i-net Clear Reports 14.0
-
resetCacheTimeout
Causes the timeout for the entry behind this key to be manually restarted. This method should be used to communicate that the cache entry behind the given key is still needed and should not yet be removed from the cache.If there is no entry associated with the given key, this will not restart creation of the entry.
- Parameters:
key
- Key of the entry whose cache timeout is to be reset.- Since:
- 7.0
-
getEngine
Returns the engine for the specified key in the specified cache if active rendering.- Parameters:
key
- the key- Returns:
- the engine or
null
if not found - Since:
- 16.1
-