Oracle Application Server Web Cache Administrator's Guide 10g (9.0.4) Part Number B10401-01 |
|
This chapter explains how to send invalidation requests to OracleAS Web Cache.
This chapter contains these topics:
To invalidate documents in the cache, send an HTTP POST
message from the invalidator
or administrator
account through an invalidation listening port.
The invalidator
account is an administrator authorized to send invalidation messages. In a cache hierarchy of OracleAS Web Cache servers, the central cache or provider cache uses the invalidator
account name and password of the remote or subscriber OracleAS Web Cache server. The invalidation request specifies the documents to invalidate, as well as the site host name of the documents. The site host name is compared with the IP address of the cache from which the invalidation request propagated. If there is a match, the cache processes the invalidation request. Otherwise, the request is rejected.
While the administrator
typically sends configuration and operational requests to OracleAS Web Cache, it can also send invalidation requests. Because the administrator
account is authorized with more privileges than the invalidator
account, an invalidation request sent by an administrator
account does not need to specify the site host name. Invalidation messages sent with OracleAS Web Cache Manager use the administrator
account.
Note:
For automatic propagation of invalidation messages, OracleAS Web Cache passes the encoded
|
Invalidation requests are HTTP POST
requests written in Extensible Markup Language (XML) syntax. The contents of the XML request body instructs the cache which URLs to mark as invalid. As shown in Figure 11-1, invalidation requests can be sent using one of the following methods:
telnet
This section describes how to send invalidation requests using one of the following methods:
When you send an invalidation request with an HTTP POST
request, you specify the host name of OracleAS Web Cache, the invalidation listening port number, and the invalidation request.
For example, if you are using telnet
, you send an invalidation request using the following procedure:
telnet web_cache_host invalidation_port
POST
message header and authenticate the invalidator
account using Base64 encoding string with the following syntax:
POST /x-oracle-cache-invalidate http/1.0|1 Authorization: BASIC <base64 encoding of invalidator:invalidator_password
> content-length:#bytes
The following shows an example of the Authorization
line:
Authorization: BASIC aW52YWxpZGF0b3I6aW52YWxpZGF0b3I=
In this example, aW52YWxpZGF0b3I6aW52YWxpZGF0b3I=
is the invalidator user name and password (invalidator:invalidator
) encoded.
See Also:
|
Invalidation request syntax is described in the following sections:
Use the following syntax to invalidate documents contained within an exact URL that includes the complete path and file name:
<?xml version="1.0"?>
<!DOCTYPE INVALIDATION SYSTEM "internal:///WCSinvalidation.dtd">
<INVALIDATION VERSION="WCS-1.1">
<SYSTEM>
<SYSTEMINFO NAME="name" VALUE="value"/>
</SYSTEM>
<OBJECT>
<BASICSELECTOR URI="URL"/>
<ACTION REMOVALTTL="TTL"/>
<INFO VALUE="value
"/>
</OBJECT>
</INVALIDATION>
Use the following syntax to invalidate documents based on more advanced invalidation selectors:
<?xml version="1.0"?> <!DOCTYPE INVALIDATION SYSTEM "internal:///WCSinvalidation.dtd"> <INVALIDATION VERSION="WCS-1.1"> <SYSTEM> <SYSTEMINFO NAME="name" VALUE="value"/> </SYSTEM> <OBJECT> <ADVANCEDSELECTOR URIPREFIX="prefix" URIEXP="URL_expression" HOST="host_name
:
port
" METHOD="HTTP_request_method" BODYEXP="HTTP_body
"/> <COOKIE NAME="cookie_name" VALUE="value"/> <HEADER NAME="HTTP_request_header" VALUE="value"/> <OTHER NAME="URI|BODY|QUERYSTRING_PARAMETER|SEARCHKEY" TYPE="SUBSTRING|REGEX" VALUE="value"/> </ADVANCEDSELECTOR> <ACTION REMOVALTTL="TTL"/> <INFO VALUE="value"/> </OBJECT> </INVALIDATION>
The body of a valid invalidation request must begin with the following:
<?xml version="1.0"?> <!DOCTYPE INVALIDATION SYSTEM "internal:///WCSinvalidation.dtd">
The first line denotes version 1.0 of XML. The second line denotes that the request is an invalidation request using the WCSinvalidation.dtd
file as the XML document type. WCSinvalidation.dtd
is the Document Type Definition (DTD) that defines the grammar of invalidation requests and responses.
Note the following:
<?xml
".
"internal:///WCSinvalidation.dtd"
with the following path:
"http://www.oracle.com/webcache/90400/WCSinvalidation.dtd"
The root element INVALIDATION
contains one or more of the attributes and elements described in Table 11-1.
Invalidation Element/Attribute | Description |
---|---|
|
Required attribute in the
Denote the version of the
For versions 9.0. |
|
Optional element in the |
Required element in the
The possible
|
|
|
Required element in the invalidation request. You can specify more than one |
|
|
The prefix is interpreted literally, including reserved regular expression characters. These characters include periods ( |
|
Regular expression characters are permitted. To interpret these characters literally, escape them with a backslash ( Notes:
|
|
|
|
|
|
Note: When the invalidation request is sent, OracleAS Web Cache performs a regular expression match of |
|
Optional element in the invalidation request. Use the following attributes:
|
|
Optional element in the invalidation request. Use the following attributes: |
|
Optional element in the invalidation request. Use the following attributes:
See Also:
|
|
|
Required element in the invalidation request
|
|
Optional element in the invalidation request
Required attribute of the [13/Dec/2002:19:26:46 +0000] [notification 11748] [invalidation] [ecid: 21085932167,0] Invalidation with INFO 'INFO_comment' has returned with status 'status'; number of documents invalidated: 'number'. |
See Also:
"Invalidation Request and Response DTD" for further information about invalidation request syntax |
Invalidation responses are returned in the following format for BASICSELECTOR
invalidation requests:
<?xml version="1.0"?>
<!DOCTYPE INVALIDATIONRESULT SYSTEM "internal:///WCSinvalidation.dtd">
<INVALIDATIONRESULT VERSION="WCS-1.1">
<SYSTEM>
<SYSTEMINFO NAME="name" VALUE="value"/>
</SYSTEM>
<OBJECTRESULT>
<BASICSELECTOR URI="URL">
</BASICSELECTOR>
<RESULT ID="ID" STATUS="status" NUMINV="number"/>
<INFO VALUE="value
"/>
</OBJECTRESULT>
</INVALIDATIONRESULT>
Invalidation responses are returned in the following format for ADVANCEDSELECTOR
invalidation requests:
<?xml version="1.0"?> <!DOCTYPE INVALIDATIONRESULT SYSTEM "internal:///WCSinvalidation.dtd"> <INVALIDATIONRESULT VERSION="WCS-1.1"> <SYSTEM> <SYSTEMINFO NAME="name" VALUE="value"/> </SYSTEM> <OBJECTRESULT> <ADVANCEDSELECTOR URIPREFIX="prefix" URIEXP="URL_expression" HOST="host_name
:
port
" METHOD="HTTP_request_method" BODYEXP="HTTP_body
"/> <COOKIE NAME="cookie_name" VALUE="value"/> <HEADER NAME="HTTP_request_header" VALUE="value"/> <OTHER NAME="URI|BODY|QUERYSTRING_PARAMETER|SEARCHKEY" TYPE="SUBSTRING|REGEX" VALUE="value"/> </ADVANCEDSELECTOR> <RESULT ID="ID" STATUS="status" NUMINV="number"/> <INFO VALUE="value
"/> </OBJECTRESULT> </INVALIDATIONRESULT>
The body of a valid invalidation response begins with the following:
<?xml version="1.0"?> <!DOCTYPE INVALIDATIONRESULT SYSTEM "internal:///WCSinvalidation.dtd">
The first line denotes version 1.0 of XML. The second line denotes the response is an invalidation response using the WCSinvalidation.dtd
file as the XML document type.
The root element INVALIDATIONRESULT
contains one or more of the attributes and elements described in Table 11-2. BASICSELECTOR
and ADVANCEDSELECTOR
are described in Table 11-1.
See Also:
"Invalidation Request and Response DTD" for further information about invalidation response syntax |
To test invalidation, use the following syntax to preview the list of BASICSELECTOR
documents to be invalidated:
<?xml version="1.0"?> <!DOCTYPE INVALIDATIONPREVIEW SYSTEM "internal:///WCSinvalidation.dtd"> <INVALIDATIONPREVIEW VERSION="WCS-1.1" STARTNUM="start_number" MAXNUM="max_ number"> <BASICSELECTOR URI="URL"/> </INVALIDATIONPREVIEW>
Use the following syntax to preview the list of ADVANCEDSELECTOR
documents to be invalidated:
<?xml version="1.0"?> <!DOCTYPE INVALIDATIONPREVIEW SYSTEM "internal:///WCSinvalidation.dtd"> <INVALIDATIONPREVIEW VERSION="WCS-1.1" STARTNUM="start_number" MAXNUM="max_ number"> <ADVANCEDSELECTOR URIPREFIX="prefix" URIEXP="URL_expression" HOST="host_name
:
port
" METHOD="HTTP_request_method" BODYEXP="HTTP_body
" <COOKIE NAME="cookie_name" VALUE="value"/> <HEADER NAME="HTTP_request_header" VALUE="value"/> <OTHER NAME="URI|BODY|QUERYSTRING_PARAMETER|SEARCHKEY" TYPE="SUBSTRING|REGEX" VALUE="value"/> </ADVANCEDSELECTOR> </INVALIDATIONPREVIEW>
The body of a valid invalidation preview request must begin with the following:
<?xml version="1.0"?> <!DOCTYPE INVALIDATIONPREVIEW SYSTEM "internal:///WCSinvalidation.dtd">
The first line denotes version 1.0 of XML. The second line denotes the request is an invalidation preview request using the WCSinvalidation.dtd
file as the XML document type.
The root element INVALIDATIONPREVIEW
contains one or more of the attributes described in Table 11-3. BASICSELECTOR
and ADVANCEDSELECTOR
are described in Table 11-1.
Invalidation preview responses for preview requests are returned in the following format:
<?xml version="1.0"?> <!DOCTYPE INVALIDATIONPREVIEWRESULT SYSTEM "internal:///WCSinvalidation.dtd"> <INVALIDATIONPREVIEWRESULT VERSION="WCS-1.1" STATUS="status" NUMURLS="number" TOTALNUMURLS="total_number"> <SELECTURL VALUE="URL"> </SELECTEDURL> </INVALIDATIONPREVIEWRESULT>
The body of a valid invalidation preview response begins with the following:
<?xml version="1.0"?> <!DOCTYPE INVALIDATIONPREVIEWRESULT SYSTEM "internal:///WCSinvalidation.dtd">
The first line denotes version 1.0 of XML. The second line denotes that the response is an invalidation preview response using the WCSinvalidation.dtd
file as the XML document type.
Note the following:
<?xml
".
"internal:///WCSinvalidation.dtd"
with the following path:
"http://www.oracle.com/webcache/90400/WCSinvalidation.dtd"
The root element INVALIDATIONPREVIEWRESULT
contains one or more of the attributes and elements described in Table 11-4. BASICSELECTOR
and ADVANCEDSELECTOR
are described in Table 11-1.
OracleAS Web Cache Manager provides an easy-to-use interface for invalidating cached objects. The message mechanics are much like the telnet
example. The advantage of using OracleAS Web Cache Manager is that the administrator is isolated from the intricacies of the HTTP and XML formats, and consequently, there is less chance for error. The administrator need only specify which objects to invalidate and how invalid those objects should be.
To send a basic invalidation request using OracleAS Web Cache Manager:
The Basic Content Invalidation page appears in the right pane.
Note: Because OracleAS Web Cache escapes the following characters, you can enter them in this field: ampersand (&
), greater than sign (>
), less than sign (<
), double quotes ("
), and single quotes (').
If fewer documents than the number specified meet the invalidation criteria, OracleAS Web Cache lists the URLs for only those documents that meet the criteria.
If more documents than the number specified meet the invalidation criteria, OracleAS Web Cache lists the URLs for the number of documents requested. It also returns the total number of documents that meet the invalidation criteria. To obtain the list of URLs for addition documents, send another preview request with a different From number that specifies the start of the next set of documents.
OracleAS Web Cache displays the Invalidation Preview Results message box, which lists the documents that meet the invalidation criteria. OracleAS Web Cache Manager lists only those documents that are valid. Although the cache may contain documents that are expired or that have been invalidated, those documents are not listed.
If the documents listed are those that you want to invalidate, continue with the next step. If they are not, modify the invalidation criteria and preview the list again.
OracleAS Web Cache processes the invalidation request, and returns the Cache Cleanup Result dialog box that the shows the invalidation status and the number of objects invalidated. The following figure shows the dialog box:
In a cache cluster environment, if Propagate Invalidation is enabled, OracleAS Web Cache sends the invalidation request to one cluster member who acts as the invalidation coordinator. The coordinator propagates the invalidation request to other cluster members. When the invalidation has been completed for all cluster members, OracleAS Web Cache returns a Cache Cleanup box, that lists, for each cluster member, the cache name, the status of the invalidation request, and the number of objects invalidated.
See Also:
|
To send an advanced invalidation request using OracleAS Web Cache Manager:
The Advanced Content Invalidation page appears in the right pane.
http|https://
host_name
:
port
/
path
/
filename
or with "/
" and end with "/
".
host_name
:
port
is optional. You can also specify the site host name and port in the Host Name field.
The prefix is interpreted literally, including reserved regular expression characters. These characters include periods (.
), question marks (?
), asterisks (*
), brackets ([]
), curly braces ({}
), carets (^
), dollar signs ($
), and backslashes (\
).
host_name
:
port
). Port 80 is the default port for HTTP.
This field is required if the URL Path Prefix does not include http|https://
host_name
:
port
/
path
/
filename
.
GET
or POST
) of the documents to be invalidated. The default value is GET
.
If no value is entered, everything under the URL Path Prefix is matched.
POST
body of the objects to be invalidated, and then specify how to match by selecting either substring for a substring string match or regular expression for a regular expression match.
Surrogate-Key
response-header field used by the objects to be invalidated in the Key field.
If fewer documents than the number specified meet the invalidation criteria, OracleAS Web Cache lists the URLs for only those documents that meet the criteria.
If more documents than the number specified meet the invalidation criteria, OracleAS Web Cache lists the URLs for the number of documents requested. It also returns the total number of documents that meet the invalidation criteria. To obtain the list of URLs for addition documents, send another preview request with a different From number that specifies the start of the next set of documents.
OracleAS Web Cache displays the Invalidation Preview Results message box, which lists the documents that meet the invalidation criteria. OracleAS Web Cache Manager lists only those documents that are valid. Although the cache may contain documents that are expired or that have been invalidated, those documents are not listed.
If the documents listed are those that you want to invalidate, continue with the next step. If they are not, modify the invalidation criteria and preview the list again.
OracleAS Web Cache processes the invalidation request, and returns a Cache Cleanup dialog box that the shows the invalidation status and the number of objects invalidated.
Invalidation requests can originate from a Web site's underlying application logic or from the content management application used to design Web pages.
OracleAS Web Cache ships with the following Application Program Interfaces (APIs) that you can implement:
jawc.jar
for a Java invalidation API
wxvutil.sql
and wxvappl.sql
for a PL/SQL invalidation API
These APIs are located in the $ORACLE_HOME/webcache/toolkit
directory on UNIX and ORACLE_HOME
\webcache\toolkit
directory on Windows
See Also:
|
OracleAS Web Cache also ships with the following sample code for generating invalidation requests. You can create invalidation tools following these examples and use them with your applications.
EncodeBase64.java
for encoding the password using Base 64 encoding
invalidate.c
for C source
Invalidate.java
or WCSInvalidate.java
for Java source
invalidate.sh
for a shell script that invalidates documents with a telnet
session
invalidate.pl
for PERL source
Invalidate.sql
for PL/SQL source
These files are located in the $ORACLE_HOME/webcache/examples
directory on UNIX and ORACLE_HOME
\webcache\examples
directory on Windows.
Database triggers are procedures that are stored in the database and activated ("fired") when specific conditions occur, such as adding a row to a table. You can use triggers to send invalidation requests. To do this, use the UTL_TCP
Oracle supplied package to send invalidation requests through database triggers.
Many Web sites use scripts for uploading new content to databases and file systems. A large online book retailer, for instance, might run a PERL script once a day to bulk load new book listings and price changes into its catalog database. The retailer would want the price changes and availability listings to be reflected in the item views and search results currently cached in OracleAS Web Cache. To achieve this, the PERL script can be modified such that when the bulk loading operation has completed, the script will send an invalidation request to the cache invalidating all catalog views and search results. (Note that the invalidation request need not list every individual search page or item view that might be effected by the data change.) The performance assurance feature of OracleAS Web Cache enables administrators to use broad brush strokes when invalidating content, making it safe to invalidate all catalog content even if only a fraction of that content has changed.
This section contains the following invalidation request examples:
The examples in this section require using the POST
method which also requires sending the number of bytes (or characters) in the content_length:
#bytes
portion of the header. Please note that one carriage return is required after the content_length:
#bytes
line and before the XML request or BODY
information.
The following request invalidates the file /images/logo.gif
:
<?xml version="1.0"?> <!DOCTYPE INVALIDATION SYSTEM "internal:///WCSinvalidation.dtd"> <INVALIDATION VERSION="WCS-1.1"> <OBJECT> <BASICSELECTOR URI="http://www.company.com:80/images/logo.gif"/> <ACTION/> </OBJECT> </INVALIDATION>
Invalidation response:
<?xml version="1.0"?> <!DOCTYPE INVALIDATIONRESULT SYSTEM "internal:///WCSinvalidation.dtd"> <INVALIDATIONRESULT VERSION="WCS-1.1"> <OBJECTRESULT> <BASICSELECTOR URI="http://www.company.com:80/images/logo.gif"/> <RESULT ID="1" STATUS="SUCCESS" NUMINV="1"/> </OBJECTRESULT> </INVALIDATIONRESULT>
The following request invalidates a document exactly matching /contacts/contacts.html
using the BASICSELECTOR
element:
<?xml version="1.0"?> <!DOCTYPE INVALIDATION SYSTEM "internal:///WCSinvalidation.dtd"> <INVALIDATION VERSION="WCS-1.1"> <OBJECT> <BASICSELECTOR URI="http://www.company.com:80/contacts/contacts.html"/> <ACTION REMOVALTTL="0"/> </OBJECT> </INVALIDATION>
This request is equivalent to the following request using the ADVANCEDSELECTOR
element. This request specifies the site information in the HOST
attribute.
<?xml version="1.0"?> <!DOCTYPE INVALIDATION SYSTEM "internal:///WCSinvalidation.dtd"> <INVALIDATION VERSION="WCS-1.1"> <OBJECT> <ADVANCEDSELECTOR URIPREFIX="/contacts/" URIEXP="^/contacts/contacts\.html$" HOST="www.company.com:80"/> <ACTION REMOVALTTL="0"/> </OBJECT> </INVALIDATION>
The second request specifies the site information in the URIPREFIX
attribute:
<?xml version="1.0"?> <!DOCTYPE INVALIDATION SYSTEM "internal:///WCSinvalidation.dtd"> <INVALIDATION VERSION="WCS-1.1"> <OBJECT> <ADVANCEDSELECTOR URIPREFIX="http://www.company.com/contacts/" URIEXP="^/contacts/contacts\.html$"/> <ACTION REMOVALTTL="0"/> </OBJECT> </INVALIDATION>
The ADVANCEDSELECTOR
element uses the URIPREFIX
attribute. This attribute is used to traverse the directory structure. The quicker invalidation reaches the right tree level, the quicker the invalidation process is done. The request with the BASICSELECTOR
element is the more efficient of the two examples because there is no directory structure traversal involved.
The following request invalidates two different objects, summary.jsp
and summary.gif
. In addition, the request provides the comments "summary.jsp"
and "summary.gif"
to be included in the invalidation result and event log.
<?xml version="1.0"?> <!DOCTYPE INVALIDATION SYSTEM "internal:///WCSinvalidation.dtd"> <INVALIDATION VERSION="WCS-1.1"> <OBJECT> <ADVANCEDSELECTOR URIPREFIX="/global/sales/" URIEXP="summary.jsp\?year=2001" HOST="www.company.com:80"/> <COOKIE NAME="group" VALUE="asia"/> </ADVANCEDSELECTOR> <ACTION /> <INFO VALUE="summary.jsp"/> </OBJECT> <OBJECT> <ADVANCEDSELECTOR URIPREFIX="/image/" URIEXP="summary.*\.gif$" HOST="www.company.com:80"/> <INFO VALUE="summary.gif"/> <ACTION /> </OBJECT> </INVALIDATION>
Invalidation response:
<?xml version="1.0"?> <!DOCTYPE INVALIDATIONRESULT SYSTEM "internal:///WCSinvalidation.dtd"> <INVALIDATIONRESULT VERSION="WCS-1.1"> <OBJECTRESULT> <ADVANCEDSELECTOR URIPREFIX="/global/sales/" URIEXP="summary.jsp\?year=2001" HOST="www.company.com:80"/> <COOKIE NAME="group" VALUE="asia" /> </ADVANCEDSELECTOR> <RESULT ID="1" STATUS="SUCCESS" NUMINV="2"/> <INFO VALUE="summary.jsp"/> </OBJECTRESULT> <OBJECTRESULT> <ADVANCEDSELECTOR URIPREFIX="/image/" URIEXP="summary.*\.gif$" HOST="www.company.com:80"/> </ADVANCEDSELECTOR> <RESULT ID="2" STATUS="SUCCESS" NUMINV="14"/> <INFO VALUE="summary.gif"/> </OBJECTRESULT> </INVALIDATIONRESULT>
The following messages are written to the event log:
[13/Dec/2002:19:26:46 +0000] [notification 11748] [invalidation] [ecid: 21085932167,0] Invalidation with INFO 'summary.jsp' has returned with status 'SUCCESS'; number of documents invalidated: '2'. . . . [13/Dec/2002:19:26:46 +0000] [notification 11748] [invalidation] [ecid: 21085932167,0] Invalidation with INFO 'summary.gif' has returned with status 'SUCCESS'; number of documents invalidated: '14'.
The following request invalidates all documents under the /images/
directory:
<?xml version="1.0"?> <!DOCTYPE INVALIDATION SYSTEM "internal:///WCSinvalidation.dtd"> <INVALIDATION VERSION="WCS-1.1"> <OBJECT> <ADVANCEDSELECTOR URIPREFIX="/images/" HOST="www.company.com:80"/> <ACTION REMOVALTTL="0"/> </OBJECT> </INVALIDATION>
Invalidation response:
<?xml version="1.0"?> <!DOCTYPE INVALIDATIONRESULT SYSTEM "internal:///WCSinvalidation.dtd"> <INVALIDATIONRESULT VERSION="WCS-1.1"> <OBJECTRESULT> <ADVANCEDSELECTOR URIPREFIX="/images/" HOST="www.company.com:80"/> <RESULT ID="1" STATUS="SUCCESS" NUMINV="125"/> </OBJECTRESULT> </INVALIDATIONRESULT>
The following request invalidates all documents under the /contacts/
directory whose file names end in .html
and uses cookie name cust
with a value of oracle
:
<?xml version="1.0"?> <!DOCTYPE INVALIDATION SYSTEM "internal:///WCSinvalidation.dtd"> <INVALIDATION VERSION="WCS-1.1"> <OBJECT> <ADVANCEDSELECTOR URIPREFIX="/contacts/" URIEXP="\.html$" HOST="www.company.com:80"/> <COOKIE NAME="cust" VALUE="oracle"/> </ADVANCEDSELECTOR> <ACTION REMOVALTTL="0"/> </OBJECT> </INVALIDATION>
Invalidation response:
<?xml version="1.0"?> <!DOCTYPE INVALIDATIONRESULT SYSTEM "internal:///WCSinvalidation.dtd"> <INVALIDATIONRESULT VERSION="WCS-1.1"> <OBJECTRESULT> <ADVANCEDSELECTOR URIPREFIX="/contacts"/> URIEXP="\.html$" HOST="www.company.com:80"/> <COOKIE NAME="cust" VALUE="oracle"/> </ADVANCEDSELECTOR> <RESULT ID="1" STATUS="SUCCESS" NUMINV="45"/> </OBJECTRESULT> </INVALIDATIONRESULT>
The following request invalidates all documents under /
.
<?xml version="1.0"?> <!DOCTYPE INVALIDATION SYSTEM "internal:///WCSinvalidation.dtd"> <INVALIDATION VERSION="WCS-1.1"> <OBJECT> <ADVANCEDSELECTOR URIPREFIX="/" HOST="www.company.com:80"/> <ACTION REMOVALTTL="0"/> </OBJECT> </INVALIDATION>
Invalidation response:
<?xml version="1.0"?> <!DOCTYPE INVALIDATIONRESULT SYSTEM "internal:///WCSinvalidation.dtd"> <INVALIDATIONRESULT VERSION="WCS-1.1"> <OBJECTRESULT> <ADVANCEDSELECTOR URIPREFIX="/" HOST="www.company.com:80"/> <RESULT ID="1" STATUS="SUCCESS" NUMINV="17"/> </OBJECTRESULT> </INVALIDATIONRESULT>
To better understand the relationship of the URIPREFIX
and URIEXP
attributes, consider the examples that follow.
The following syntax invalidates sample.gif
files within the /cec/cstage/graphic*
directories:
<ADVANCEDSELECTOR URIPREFIX="/cec/cstage/"
URIEXP="graphic.*/sample\.gif">
</ADVANCEDSELECTOR>
Note that ".*" in "graphic.*/sample\.gif
" are regular expression characters that match all directories starting with graphic
. The ".
" in "sample\.gif
" is escaped for a literal interpretation.
The following syntax instructs OracleAS Web Cache to locate a directory named graphic*
:
<ADVANCEDSELECTOR URIPREFIX="/cec/cstage/graphic*/" URIEXP="sample\.gif"
HOST="www.company.com:80"/>
</ADVANCEDSELECTOR>
The following syntax invalidates documents contained within /cec/cstage?ecaction=viewitem
:
<ADVANCEDSELECTOR URIPREFIX="/cec/" URIEXP="c
stage\?ecaction=viewitem"
HOST="www.company.com:80"/>
</ADVANCEDSELECTOR>
Note that "?
" is escaped with a backslash.
URLs such as /cec/cstage?ecaction=viewitem&zip=94405
and /cec/cstage?ecaction=viewitem&zip=94305
match and are invalidated, but /usa/cec/cstage?ecaction=viewitem&zip=94209
does not match and is not invalidated.
The following request invalidates all documents under /
matching the substrings /post/
and htm
. In addition, the request provides the comment "remove-htm-under-all-post-dir"
to be included in the invalidation result and event log.
<?xml version="1.0"?> <!DOCTYPE INVALIDATION SYSTEM "internal:///WCSinvalidation.dtd"> <INVALIDATION VERSION="WCS-1.1"> <OBJECT> <ADVANCEDSELECTOR URIPREFIX="/" HOST="www.company.com:80"> <OTHER NAME="URI" TYPE="SUBSTRING" VALUE="/post/"/> <OTHER NAME="URI" TYPE="SUBSTRING" VALUE="htm"/> </ADVANCEDSELECTOR> <ACTION REMOVALTTL="0" /> <INFO VALUE="remove-htm-under-all-post-dir"/> </OBJECT> </INVALIDATION>
Invalidation response:
<?xml version="1.0"?> <!DOCTYPE INVALIDATIONRESULT SYSTEM "internal:///WCSinvalidation.dtd"> <INVALIDATIONRESULT VERSION="WCS-1.1"> <OBJECTRESULT> <ADVANCEDSELECTOR URIPREFIX="/" HOST="www.company.com:80"/> <OTHER NAME="URI" TYPE="SUBSTRING" VALUE="/post/"/> <OTHER NAME="URI" TYPE="SUBSTRING" VALUE="htm"/> <RESULT ID="1" STATUS="SUCCESS" NUMINV="52"/> <INFO VALUE="remove-htm-under-all-post-dir"/> </OBJECTRESULT> </INVALIDATIONRESULT>
The following message is written to the event log:
[13/Dec/2002:19:26:46 +0000] [notification 11748] [invalidation] [ecid: 21085932167,0] Invalidation with INFO 'remove-htm-under-all-post-dir has returned with status 'SUCCESS'; number of documents invalidated: '12'.
The following request invalidates all documents under /corporate/asp/
, matching the substring /view_building.asp
and the embedded URL parameter value pairs of building=8
and floor=10
. In addition, the request provides the comment "remove-view-building8-10th-floor"
to be included in the invalidation result and event log.
<?xml version="1.0"?> <!DOCTYPE INVALIDATION SYSTEM "internal:///WCSinvalidation.dtd"> <INVALIDATION VERSION="WCS-1.1"> <OBJECT> <ADVANCEDSELECTOR URIPREFIX="/corporate/asp/" HOST="www.company.com:80"> <OTHER NAME="URI" TYPE="SUBSTRING" VALUE="/view_building.asp"/> <OTHER NAME="QUERYSTRING_PARAMETER" TYPE="SUBSTRING" VALUE="building=8"/> <OTHER NAME="QUERYSTRING_PARAMETER" TYPE="SUBSTRING" VALUE="floor=10"/> </ADVANCEDSELECTOR> <ACTION REMOVALTTL="0" /> <INFO VALUE="remove-view-building8-10th-floor"/> </OBJECT> </INVALIDATION>
Invalidation response:
<?xml version="1.0"?> <!DOCTYPE INVALIDATIONRESULT SYSTEM "internal:///WCSinvalidation.dtd"> <INVALIDATIONRESULT VERSION="WCS-1.1"> <OBJECTRESULT> <ADVANCEDSELECTOR URIPREFIX="/" HOST="www.company.com:80"/> <OTHER NAME="URI" TYPE="SUBSTRING" VALUE="/view_building.asp"/> <OTHER NAME="QUERYSTRING_PARAMETER" TYPE="SUBSTRING" VALUE="building=8"/> <OTHER NAME="QUERYSTRING_PARAMETER" TYPE="SUBSTRING" VALUE="floor=10"/> <RESULT ID="1" STATUS="SUCCESS" NUMINV="3"/> <INFO VALUE="remove-view-building8-10th-floor"/> </OBJECTRESULT> </INVALIDATIONRESULT>
The following message is written to the event log:
[13/Dec/2002:19:26:46 +0000] [notification 11748] [invalidation] [ecid: 21085932 167,0] Invalidation with INFO 'remove-view-building8-10th-floor' has returned with status 'SUCCESS'; number of documents invalidated: '3'.
See Also:
"Enhance Query String Invalidations" to optimize invalidations using |
The following request invalidates all objects under /pls/publicuser/
, matching the following:
/pls/publicuser/!MODULE.wwpob_page.show
x-oracle-cache-user
and value PUBLICUSER
Surrogate-Key
response-header field containing a search key of template_id=33,31345.
<?xml version="1.0"?> <!DOCTYPE INVALIDATION SYSTEM "internal:///WCSinvalidation.dtd"> <INVALIDATION VERSION="WCS-1.1"> <OBJECT> <ADVANCEDSELECTOR URIPREFIX="/pls/publicuser/" HOST="www.company.com:80" METHOD="POST"> <OTHER NAME="SEARCHKEY" VALUE="template_id=33,31345"/> <HEADER NAME="x-oracle-cache-user" VALUE="PUBLICUSER"/> <OTHER NAME="URI" TYPE="SUBSTRING" VALUE="/pls/publicuser/!MODULE.wwpob_page.show"/> </ADVANCEDSELECTOR> <ACTION REMOVALTTL="0"/> </OBJECT> </INVALIDATION>
Invalidation response:
<?xml version="1.0"?> <!DOCTYPE INVALIDATIONRESULT SYSTEM "internal:///WCSinvalidation.dtd"> <INVALIDATIONRESULT VERSION="WCS-1.1"> <OBJECTRESULT> <ADVANCEDSELECTOR URIPREFIX="/pls/publicuser/" HOST="www.company.com:80" METHOD="POST"> <OTHER NAME="SEARCHKEY" VALUE="template_id=33,31345"/> <HEADER NAME="x-oracle-cache-user" VALUE="PUBLICUSER"/> <OTHER NAME="URI" TYPE="SUBSTRING" VALUE="/pls/publicuser/!MODULE.wwpob_page.show"/> <RESULT ID="1" STATUS="SUCCESS" NUMINV="3"/> </OBJECTRESULT> </INVALIDATIONRESULT>
In a cache cluster, you can enable or disable the propagation of invalidation requests to all cluster members. You specify the setting on the Clustering page (Properties > Clustering) of OracleAS Web Cache Manager.
You can override the setting by using a pair of name/value attributes of the SYSTEMINFO
element. If NAME
is set to WCS_PROPAGATE
and VALUE
is set to TRUE
, it overrides the setting specified in OracleAS Web Cache Manager. If NAME
is set to WCS_PROPAGATE
and VALUE
is set to FALSE
, it reads the setting specified in OracleAS Web Cache Manager.
The following request invalidates the file /images/logo.gif
and propagates the request to all cluster members. In this example, there are three cluster members:
<?xml version="1.0"?> <!DOCTYPE INVALIDATION SYSTEM "internal:///WCSinvalidation.dtd"> <INVALIDATION VERSION="WCS-1.1"> <SYSTEM> <SYSTEMINFO NAME="WCS_PROPAGATE" VALUE="TRUE"/> </SYSTEM> <OBJECT> <BASICSELECTOR URI="/hostname:port/images/logo.gif"/> <ACTION/> </OBJECT> </INVALIDATION>
Invalidation response:
<?xml version="1.0"?> <!DOCTYPE INVALIDATIONRESULTDETAIL SYSTEM "internal:///WCSinvalidation.dtd"> <INVALIDATIONRESULTDETAIL VERSION="WCS-1.1"> <INVALIDATIONRESULT VERSION="WCS-1.1"> <SYSTEM> <SYSTEMINFO NAME="WCS_CACHE_NAME" VALUE="Cache_A"/> </SYSTEM> <OBJECTRESULT> <BASICSELECTOR URI="http://www.company.com:80/images/logo.gif"/> <RESULT ID="1" STATUS="SUCCESS" NUMINV="1"/> </OBJECTRESULT> </INVALIDATIONRESULT> <INVALIDATIONRESULT VERSION="WCS-1.1"> <SYSTEM> <SYSTEMINFO NAME="WCS_CACHE_NAME" VALUE="Cache_B"/> </SYSTEM> <OBJECTRESULT> <BASICSELECTOR URI="http://www.company.com:80/images/logo.gif"/> <RESULT ID="1" STATUS="SUCCESS" NUMINV="1"/> </OBJECTRESULT> </INVALIDATIONRESULT> <INVALIDATIONRESULT VERSION="WCS-1.1"> <SYSTEM> <SYSTEMINFO NAME="WCS_CACHE_NAME" VALUE="Cache_C"/> </SYSTEM> <OBJECTRESULT> <BASICSELECTOR URI="http://www.company.com:80/images/logo.gif"/> <RESULT ID="1" STATUS="SUCCESS" NUMINV="1"/> </OBJECTRESULT> </INVALIDATIONRESULT> </INVALIDATIONRESULTDETAIL>
The following request previews up to 50 documents ending in *.htm
:
<?xml version="1.0"?> <!DOCTYPE INVALIDATIONPREVIEW SYSTEM "internal:///WCSinvalidation.dtd"> <INVALIDATIONPREVIEW VERSION="WCS-1.1" STARTNUM="0" MAXNUM="50"> <ADVANCEDSELECTOR URIPREFIX="http://company-sun/" URIEXP=".*\.htm" > </ADVANCEDSELECTOR> </INVALIDATIONPREVIEW>
Invalidation response:
"<?xml version="1.0"?> <!DOCTYPE INVALIDATIONPREVIEWRESULT SYSTEM "internal:///WCSinvalidation.dtd"> <INVALIDATIONPREVIEWRESULT VERSION="WCS-1.1" STATUS="SUCCESS" STARTNUM="0" NUMURLS="2" TOTALNUMURLS="2"> <SYSTEM> <SYSTEMINFO NAME="WCS_CACHE_NAME" VALUE="server-cache"/> </SYSTEM> <SELECTEDURL VALUE="/company-sun:80/index.htm "/> <SELECTEDURL VALUE="/company-sun:80/dtd.htm "/> </INVALIDATIONPREVIEWRESULT>
Inline invalidation is implemented as part of Edge Side Includes (ESI) and provides a useful way for origin servers to "piggyback" invalidation messages on transactional responses sent to Web Cache. For instance, when a customer purchases a vegetarian cookbook on an e-commerce site, the confirmation response could contain instructions for invalidating all catalog pages related to the book, its author and vegetables. The ability to send invalidation message inline reduces the connection overhead associated with sending out-of-band invalidations and is a useful tool for ESI developers.
To configure inline invalidation:
Surrogate-Control
response-header field that includes content="ESI-INV/1.0"
:
Surrogate-Control: content="ESI-INV/1.0"
<esi:invalidate>
tag to insert either a basic or advanced inline invalidation request.
You can insert an inline invalidation request anywhere in the ESI template. You can insert more than one, but only the first one will be processed. The execution of the inline invalidation is blocking. That is, if the ESI template contains other ESI features, inline invalidation will be executed first.
Basic invalidation syntax:
<esi:invalidate [output="yes"]>
<?xml version="1.0"?>
<!DOCTYPE INVALIDATION SYSTEM "internal:///WCSinvalidation.dtd">
<INVALIDATION VERSION="WCS-1.1">
<SYSTEM>
<SYSTEMINFO NAME="name" VALUE="value"/>
</SYSTEM>
<OBJECT>
<BASICSELECTOR URI="URL"/>
<ACTION REMOVALTTL="TTL"/>
<INFO VALUE="value
"/>
</OBJECT>
</INVALIDATION>
</esi:invalidate>
Advanced invalidation syntax:
<esi:invalidate [output="yes"]> <?xml version="1.0"?> <!DOCTYPE INVALIDATION SYSTEM "internal:///WCSinvalidation.dtd"> <INVALIDATION VERSION="WCS-1.1"> <SYSTEM> <SYSTEMINFO NAME="name" VALUE="value"/> </SYSTEM>
<OBJECT> <ADVANCEDSELECTOR URIPREFIX="prefix" URIEXP="URL_expression" HOST="host_name
:
port
" METHOD="HTTP_request_method" BODYEXP="HTTP_body
"/> <COOKIE NAME="cookie_name" VALUE="value"/> <HEADER NAME="HTTP_request_header" VALUE="value"/> <OTHER NAME="URI|BODY|QUERYSTRING_PARAMETER|SEARCHKEY" TYPE="SUBSTRING|REGEX" VALUE="value"/> </ADVANCEDSELECTOR> </OBJECT></INVALIDATION> </esi:invalidate>
See Also:
|
Following is an example about an online bike shop using inline invalidation in their simple Web application. It has two CGI scripts written in Perl. show_bike.pl
displays how many bikes of a certain model are in stock. Since it involves database query and its result remains the same until a purchase occurs, show_bike.pl
is cached. buy_bike.pl
is used by customers to buy a bike. Once this page is requested, show_bike.pl
is no longer valid--an invalidation is needed.
Example 11-1 shows the code for show_bike.pl
.
#!/usr/local/bin/perl # first, retrieve how many bikes are in stock # and assign it to $nBikes (omitted!) print <<END; Content-Type: text/html Cache-Control: private Surrogate-Control: max-age=3600 <html> <body> <h1>Bike: model 2002</h1> <p>There are $nBikes bike(s) in stock for purchase!</p> <p>Click <a href="/cgi/buy_bike.pl">here</a> to purchase a bike.</p> </body> </html> END
Note that max-age=3600
informs OracleAS Web Cache to only cache this page for up to an hour.
Example 11-2 shows the code for buy_bike.pl
with an inline invalidation request.
#!/usr/local/bin/perl print <<END; Content-Type: text/html Cache-Control: private Surrogate-Control: content="ESI/1.0 ESI-INV/1.0" <html> <body> <h1>Thank you for purchasing bike model 2000.</h1> <p>Click <a href="/cgi/show_bike.pl">here</a> to read more about this model.</p><esi:invalidate>
<?xml version="1.0"?> <!DOCTYPE INVALIDATION SYSTEM "internal:///WCSinvalidation.dtd"> <INVALIDATION VERSION="WCS-1.1"> <OBJECT> <BASICSELECTOR URI="/cgi/show_bike.pl"/> <ACTION REMOVALTTL="0"/> </OBJECT> </INVALIDATION></esi:invalidate>
<p>Thanks again!</p> </body> </html> END
The ESI-INV/1.0
token in Surrogate-Control
instructs OracleAS Web Cache to process the <esi:invalidate>
tag.
Example 11-3 shows the browser response for buy_bike.pl
. Because OracleAS Web Cache has already processed the inline invalidation request, the inline invalidation is not present in the response.
Content-Type: text/html Cache-Control: private Surrogate-Control: content="ESI/1.0 ESI-INV/1.0" <html> <body> <h1>Thank you for purchasing bike model 2000.</h1> <p>Click <a href="/cgi/show_bike.pl">here</a> to read more about this model.</p> <p>Thanks again!</p> </body> </html>
To facilitate debugging, the application developer can perform the following:
Surrogate-Capability
request header that includes "ESI-INV/1.0"
:
Surrogate-Capability: content="ESI-INV/1.0"
When the Surrogate-Capability
request header is added for inline invalidation, OracleAS Web Cache includes the invalidation request in the response.
output
attribute of the <esi:invalidate>
tag.
When the output
attribute is enabled, OracleAS Web Cache includes the invalidation result in the response enclosed within comments <!--
result
-->
.
Example 11-4 shows the browser response of buy_bike.pl
when both the Surrogate-Capability
request header is enabled for the inline invalidation and the output
attribute of the <esi:invalidate>
tag is enabled.
Content-Type: text/html Cache-Control: private Surrogate-Control: content="ESI/1.0 ESI-INV/1.0" <html> <body> <h1>Thank you for purchasing bike model 2000.</h1> <p>Click <a href="/cgi/show_bike.pl">here</a> to read more about this model.</p><esi:invalidate output="yes">
<?xml version="1.0"?> <!DOCTYPE INVALIDATION SYSTEM "internal:///WCSinvalidation.dtd"> <INVALIDATION VERSION="WCS-1.1"> <OBJECT> <BASICSELECTOR URI="/cgi/show_bike.pl"/> <ACTION REMOVALTTL="0"/> </OBJECT> </INVALIDATION></esi:invalidate>
<!--
<?xml version="1.0"?> <!DOCTYPE INVALIDATIONRESULT SYSTEM "internal:///WCSinvalidation.dtd"> <INVALIDATIONRESULT VERSION="WCS-1.1"> <OBJECTRESULT> <BASICSELECTOR URI="/cgi/show_bike.pl/> <RESULT ID="1" STATUS="SUCCESS" NUMINV="1"/> </OBJECTRESULT> </INVALIDATIONRESULT>-->
<p>Thanks again!</p> </body> </html>
When OracleAS Web Cache receives an advanced invalidation request, it traverses the contents of the cache to locate the objects to invalidate. Depending on the structure and number of objects cached, it can take time for OracleAS Web Cache to invalidate content. Here are some ways you can expedite cache content traversal:
When you need to invalidate one object in the cache, send a basic rather than an advanced invalidation request to avoid cache traversal.
To send a basic invalidation request, use the Basic Content Invalidation page (Operations > Basic Content Invalidation) in OracleAS Web Cache Manager or specify the BASICSELECTOR
element. For example, the following request invalidates a document exactly matching /contacts/contacts.html
using the BASICSELECTOR
element:
<?xml version="1.0"?> <!DOCTYPE INVALIDATION SYSTEM "internal:///WCSinvalidation.dtd"> <INVALIDATION VERSION="WCS-1.1"> <OBJECT> <BASICSELECTOR URI="http://www.company.com:80/contacts/contacts.html"/> <ACTION REMOVALTTL="0"/> </OBJECT> </INVALIDATION>
Advanced invalidation requests should be reserved for invalidation of multiple objects. To send an advanced invalidation request, use the Advanced Content Invalidation page or specify the ADVANCEDSELECTOR
element.
When multiple objects share a common URL, request POST
body, or an embedded URL parameter, you can express the common elements in multiple ways:
For the quickest invalidation, Oracle Corporation recommends using the OTHER
element to specify a substring for literal matching rather than regular expression for pattern matching.
To send an advanced invalidation request with substring matching, use either XML message syntax or OracleAS Web Cache Manager. Table 11-5 compares the steps for each.
For example, the following request searches for any documents below http://www.company.com:1100/pls/portal/!PORTAL.wwpro_app_provider.execute_portlet/595897563/
, that match the following criteria:
POST
request method.
URI
contains the substring showPortlet.Show.
POST
body contains the substring _language=EN-US.
x-oracle-cache-user
and x-oracle-cache-subid
with respective values of PORTAL
and 1.
_portlet_id
and _provider_id.
<?xml version="1.0"?> <!DOCTYPE INVALIDATION SYSTEM "http://www.oracle.com/webcache/90400/WCSinvalidation.dtd"> <INVALIDATION VERSION="WCS-1.1"> <OBJECT> <ADVANCEDSELECTOR URIPREFIX="/pls/portal/!PORTAL.wwpro_app_provider.execute_portlet/595897563/" HOST="wc-cluster.company.com:1100" METHOD="POST"> <OTHER NAME="QUERYSTRING_PARAMETER" TYPE="SUBSTRING" VALUE="_portlet_id=2"/> <OTHER NAME="QUERYSTRING_PARAMETER" TYPE="SUBSTRING" VALUE="_provider_id=595897563"/> <HEADER NAME="x-oracle-cache-user" VALUE="PORTAL"/> <HEADER NAME="x-oracle-cache-subid" VALUE="1"/> <OTHER NAME="BODY" TYPE="SUBSTRING" VALUE="_language=EN-US"/> <OTHER NAME="URI" TYPE="SUBSTRING" VALUE="showPortlet.Show"/> </ADVANCEDSELECTOR> <ACTION REMOVALTTL="0"/> <INFO VALUE="Invalidate an old portlet based on portlet ID and provider ID"/> </OBJECT> </INVALIDATION>
If you are using the QUERYSTRING_PARAMETER
in an invalidation request, it can take additional processing time for OracleAS Web Cache to match and invalidate the objects.
To optimize the invalidation process for query string invalidations:
webcache.xml
file.
SECURITY
and WATCHDOG
elements:
... <SECURITY> <USER .../> <USER .../> <SECURESUBNET ...> </SECURESUBNET> <DEBUGINFO HEADER="YES" BODY="NO"/> </SECURITY> <WATCHDOG ENABLE="YES"/> ...
SECURITY
and WATCHDOG
elements, add an INVALIDATIONINDEX
element in the following format:
<SECURITY> ... </SECURITY> <INVALIDATIONINDEX> <INDEXPARAM VALUE="NAME_OF_QUERYSTRING_PARAMETER
"/> <INDEXPARAM VALUE="NAME_OF_QUERYSTRING_PARAMETER
"/> </INVALIDATIONINDEX> <WATCHDOG ENABLE="YES|NO"/>
opmnctl restartproc ias-component=WebCache
The following example request invalidates all documents under /corporate/asp/
matching the substring /view_building.asp
and the embedded URL parameter value pairs of building=8
and floor=10
. In addition, the request provides the comment "remove-view-building8-10th-floor"
to be included in the invalidation result and event log.
<?xml version="1.0"?> <!DOCTYPE INVALIDATION SYSTEM "internal:///WCSinvalidation.dtd"> <INVALIDATION VERSION="WCS-1.1"> <OBJECT> <ADVANCEDSELECTOR URIPREFIX="/corporate/asp/" HOST="www.company.com:80"> <OTHER NAME="URI" TYPE="SUBSTRING" VALUE="/view_building.asp"/> <OTHER NAME="QUERYSTRING_PARAMETER" TYPE="SUBSTRING" VALUE="building=8"/> <OTHER NAME="QUERYSTRING_PARAMETER" TYPE="SUBSTRING" VALUE="floor=10"/> </ADVANCEDSELECTOR> <ACTION REMOVALTTL="0" /> <INFO VALUE="remove-view-building8-10th-floor"/> </OBJECT> </INVALIDATION>
To optimize this search, update webcache.xml
file with the following:
... <SECURITY> ... </SECURITY> <INVALIDATIONINDEX> <INDEXPARAM VALUE="building"/> <INDEXPARAM VALUE="floor"/> </INVALIDATIONINDEX> <WATCHDOG ENABLE="YES"/> ...
See Also:
|
You can base invalidation on one or more search keys used in the Surrogate-Key
response-header field of objects in the cache.
To enable this feature:
Surrogate-Key
response-header field as follows:
Surrogate-Key: search-key=("key
" "key
" "key
" ...)
See Also:
"Surrogate-Key Response-Header Field" for a complete description of the |
By default, OracleAS Web Cache supports up to 20 search keys. To increase the limit:
webcache.xml
file.
MAXSEARCHKEYSPERDOC
in the SEARCHKEYOPTIONS
element:
<SEARCHKEYOPTIONS ENABLE="YES" MAXSEARCHKEYSPERDOC="20"/>
The following example shows a search key limit of 35.
... <GLOBALCACHINGRULES TREATPARAMETERSASSET="YES"> <SEARCHKEYOPTIONS ENABLE="YES" MAXSEARCHKEYSPERDOC="35"/> <URLREWRITERULE ...
OTHER
element in a manual XML invalidation request to use the ADVANCEDSELECTOR
element, and specify the NAME
and VALUE
attributes to use SEARCHKEY
and the search key value, respectively.
See Also:
|
Copyright © 2002, 2003 Oracle Corporation. All Rights Reserved. |
|