webcaching.guerrerotome.com

Just another WordPress weblog

Posted by Carlos Guerrero on February 22, 2010

How to start OAS Cache in linux

ORACLE_HOME=/home/carlos/OraHome_1/
export ORACLE_HOME
sudo /home/carlos/OraHome_1/bin/webcachects start

Posted by Carlos Guerrero on February 11, 2010

Configuring a proxy cache on OAScache 10g

1. Select the port where the cache is listening.

2. Set up the origin servers. The origin servers is where the applications are installed
guerrero.uib.es / 80 / ENABLE / 100 / 5/ - / 10 / HTTP

3. Site definition. The configuration on the cache of a concrete “web site”. It will be the URL the users will use to access to the system.

servidorcache.uib.es / 80 / - / - / - / Not required / Yes / N-A / None / N-A / N-A

The port number must be one of the established in point 1.

4. Site to server mapping. Maps the definition of a site (point 3) with the origin server that would answer the request over that site (point 2).

5. Caching personalization and rules. By default .php files are not cached. You must add them.

cache php files / File Extension / .php / GET, GET with query string / - / N-A / Cache / Off / Yes

6. By default the limit of cached object is set to 100KB. If you need to cache bigger elements change it in Resources limits.

Posted by Carlos Guerrero on February 11, 2010

How to install Oracle Application Server Cache 10g on Ubuntu systems

From:http://ubuntuforums.org/showthread.php?t=173639

Proved on Kubuntu 9.10

HowTo: Install Oracle Application Server CACHE 10g Release 2

1. Create an ‘oracle’ user and ‘oracle’ group.
2. For user ‘oracle’ add ‘root’ to secondary list of groups
3.

Code:
sudo chmod 775 /opt

4. Log out and log back in as oracle user
5. To fix a missing ‘ntcontab.o’, do the following:

Code:
sudo apt-get install gcc make manpages-dev autoconf automake libtool flex bison gdb gcc-2.95-doc gcc-doc binutils

6.

Code:
sudo apt-get install libdb1-compat

7. Download the Oracle Application file ‘as_linux_x86_corecache_101202.cpio’ from oracle (
http://www.oracle.com/technology/software/products/ias/htdocs/101202.html)

8. Extract in local user directory

Code:
 cpio -i --file=/<path>/as_linux_x86_cache_101202.cpio -d

9.

Code:
 cd Disk1

10.

Code:
./runInstaller -ignoreSysPrereqs
11. At the end of the install near 95% if is says that it cannot verify that the instance is running(message: <path>/opmn/bin/opmnctl start), hit continue.
12. That’s it. Let it do it’s initialization process. When it is finished exit.
13. Go to http://localhost:1156 for the admin console.
14. There still needs to be an entry in /etc/intit.d but I have not done that yet. Soon, I will update the post with the file.
15. You will required to execute son sh scripts as root user (DO IT).
16. At the end of the installation process you can set up the proxy cache using a web browser (http://URLSERVER:9400) and the user name ias_admin and previously established password.
Posted by Carlos Guerrero on January 12, 2010

Gmail is faster thanks to Steve Souders

Extracted from: http://google.dirson.com/post/3986-gmail-rapido-steve-souders/

Desde hace unos días, los usuarios del servicio de correo Gmail están viendo cómo las páginas cargan más rápido que antes, debido a los cambios que han llevado a cabo sus ingenieros. Según se afirma en este post oficial, han estado analizando las peticiones HTTP que se estaban llevando a cabo por parte de los navegadores web, los han optimizado, y desde ahora se hacen menos peticiones en general (y son menos ‘pesadas’), y algunas de ellas son cacheadas por el navegador web. Además, ahora aparece una barra de progreso (ver captura) a la hora de acceder a nuestras cuentas, puesto que la primera carga suele ser más lenta.

Google fichó, hace unos meses, a Steve Souders, uno de los mayores expertos en tecnologías web, y creador de los útiles “Best Practices for Speeding Up Your Web Site” y de YSlow (antes trabajaba en Yahoo!). Desde entonces, varias herramientas de la compañía han visto cómo su velocidad de carga aumentaba. Así por ejemplo, tal y como se comentaba en nuestros foros hace unas semanas, se está utilizando la técnica de Spriting para llamar una sola vez a las imágenes, recortándolas posteriormente. Esta técnica también se utilizó en la página ‘code.google.com’, tal y como se detalló en este post oficial (en español, en ‘Climens Codelog‘).

Gracias a Miguel Espinoza y Jair Andrés Moreno por enviarnos la noticia.

Posted by Carlos Guerrero on November 23, 2009

Java: get the value of a parameter which name is in a string

I got this exemple to understand it:

import java.awt.Rectangle;
import java.lang.reflect.Field;

public class SampleGet {

public static void main(String[] args) {
Rectangle r = new Rectangle(100, 325);
printHeight(r);

}

static void printHeight(Rectangle r) {
Field heightField;
Integer heightValue;
Class c = r.getClass();
try {
heightField = c.getField(”height”);
heightValue = (Integer) heightField.get(r);
System.out.println(”Height: ” + heightValue.toString());
} catch (NoSuchFieldException e) {
System.out.println(e);
} catch (SecurityException e) {
System.out.println(e);
} catch (IllegalAccessException e) {
System.out.println(e);
}
}
}

And I finally get that:

private Double getStatsValue(Vector<Integer> v, String parameter){

java.lang.reflect.Field f;
double result =Double.MAX_VALUE;
try {

f = CharacterizationValues.class.getField(parameter);
double singleValue = 0.0;
double[] allValues = new double[v.size()];
//            System.out.println();
//            System.out.print(”@”);
for( int i=0; i<v.size() ; i ++ ){
Integer file = v.elementAt(i).intValue();
CharacterizationValues ch = elementsCharacterization.get(file);

singleValue = f.getDouble(ch);
//                System.out.print(singleValue+”;”);

allValues[i]=singleValue;
}
//            System.out.println();
result = StdStats.stddevP(allValues);

} catch (SecurityException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (NoSuchFieldException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalArgumentException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalAccessException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

return result;

}

Posted by Carlos Guerrero on October 16, 2009

HTTP Headers in a ESI web page

From: http://download.oracle.com/docs/cd/B15897_01/caching.1012/b14046/esi.htm

Oracle® Application Server Web Cache Administrator’s Guide
10g Release 2 (10.1.2)
Part No. B14046-01
Go To Documentation Library
Home
Go To Product List
Solution Area
Go To Table Of Contents
Contents
Go To Index
Index

Previous
Previous
Next
Next

16 Edge Side Includes (ESI) Language Tags

This chapter describes the Edge Side Includes (ESI) tags provided for content assembly of dynamic fragments.

This chapter contains these topics:

Overview of ESI

ESI is an open specification co-authored by Oracle. Its purpose is to develop a uniform programming model to assemble dynamic pages in a dynamic content cache deployed as a surrogate or proxy between browsers and origin servers.

ESI is an XML-like markup language that enables dynamic content assembly of fragments by OracleAS Web Cache. A template page is configured with ESI markup tags that fetch and include dynamic HTML fragments. The fragments themselves can also contain ESI markup. You can assign caching rules to the template page and HTML fragments. By enabling page assembly in OracleAS Web Cache rather than in the application Web server, you can increase cache hit rates and improve performance.

The following topics provide an overview of ESI usage:

Supported ESI Language Elements

To enable OracleAS Web Cache to process ESI tags, you set an HTTP Surrogate-Control response-header field in the HTTP response message of the pages that use ESI tags.

OracleAS Web Cache supports the ESI language tags, elements, and attributes listed in Table 16-1. The rightmost column specifies, for each ESI tag, attribute, or element, all the feature sets that support it. For example, the <esi:invalidate> tag is only supported by the "ESI-INV/1.0" feature set. To enable the correct processing in OracleAS Web Cache, specify all the feature sets that an ESI template uses in the content control directive of the Surrogate-Control response header. However, you do need to specify features sets used within an ESI fragment directly or indirectly included in the template. For example, if an ESI template uses an <esi:invalidate> and an <esi:environment> tag with an <esi:log> element, the content control directive must include "ESI-INV/1.0" and "ORAESI/9.0.4", as follows:

Surrogate-Control: content="ESI-INV/1.0 ORAESI/9.0.4"

See Also:

“Using the Surrogate-Control Response Headeras an Alternative to Caching Rules” for further information about configuring the Surrogate-Control response header

Table 16-1 ESI Language Features

ESI Language Feature See Also content=”value” Control Directive in Surrogate-Control Response Header Supporting Feature
<esi:choose> | <esi:when> | <esi:otherwise> tags “ESI choose | when | otherwise Tags” "ORAESI/9.0.4""ORAESI/9.0.2"

"ESI/1.0"

<esi:comment> tag “ESI comment Tag” "ORAESI/9.0.4""ORAESI/9.0.2"

"ESI/1.0"

<esi:environment> tag “ESI environment Tag” "ORAESI/9.0.4""ORAESI/9.0.2"
<esi:include> tag “ESI include Tag” "ORAESI/9.0.4""ORAESI/9.0.2"

"ESI/1.0"

<esi:environment> tag and <esi:include> tag attributes and elements
alt attribute “ESI include Tag” "ORAESI/9.0.4""ESI/1.0"
max-age attribute “ESI include Tag”“ESI environment Tag” "ORAESI/9.0.4""ORAESI/9.0.2"
onerror attribute “ESI include Tag” "ORAESI/9.0.4""ORAESI/9.0.2"

"ESI/1.0"

src attribute “ESI include Tag” "ORAESI/9.0.4""ORAESI/9.0.2"

"ESI/1.0"

timeout attribute “ESI include Tag”“ESI environment Tag” "ORAESI/9.0.4""ORAESI/9.0.2"
<esi:log> element “ESI include Tag”“ESI environment Tag” "ORAESI/9.0.4"
<esi:request_header> element “ESI include Tag”“ESI environment Tag” "ORAESI/9.0.4""ORAESI/9.0.2"
<esi:request_body> element “ESI include Tag”“ESI environment Tag” "ORAESI/9.0.4""ORAESI/9.0.2"
<esi:inline> tag “ESI inline Tag” "ORAESI/9.0.4""ORAESI/9.0.2"

"ESI-Inline/1.0"

"ESI/1.0"

name attribute “ESI inline Tag” "ORAESI/9.0.4""ORAESI/9.0.2"

"ESI-Inline/1.0"

"ESI/1.0"

fetchable attribute “ESI inline Tag” "ORAESI/9.0.4""ORAESI/9.0.2"

"ESI-Inline/1.0"

"ESI/1.0"

max-age attribute “ESI inline Tag” "ORAESI/9.0.4""ORAESI/9.0.2"
timeout attribute “ESI include Tag”“ESI environment Tag” "ORAESI/9.0.4""ORAESI/9.0.2"
<esi:invalidate> tag “ESI invalidate Tag” "ESI-INV/1.0"
<esi:remove> tag “ESI remove Tag” "ORAESI/9.0.4""ORAESI/9.0.2"

"ESI/1.0"

<esi:try> | <esi:attempt> | <esi:accept> tags “ESI try | attempt | except Tags” "ORAESI/9.0.4""ORAESI/9.0.2"

"ESI/1.0"

<esi:vars> tag “ESI vars Tag” "ORAESI/9.0.4""ORAESI/9.0.2"

"ESI/1.0"

<!--esi...---> tag “ESI <!–esi–>Tag” "ORAESI/9.0.4""ORAESI/9.0.2"

"ESI/1.0"

See Also:

http://www.esi.org/spec.html for the ESI Language Specification 1.0 and the Edge Architecture Specification

Syntax Rules

ESI elements and attributes adhere to XML syntax but can be embedded in other objects, such as HTML or XML objects. When OracleAS Web Cache processes the page, the ESI elements themselves are stripped from the output.

ESI syntax generally adheres to XML syntax rules. Keep the following in mind when using the tags:

  • ESI tags and attributes are case sensitive.

    They are generally lowercase.

  • Supported CGI environment variables are case sensitive.

    They are generally uppercase.

  • ESI does not support the use of whitespace next to the equal sign (=) or between the “<” and “esi:

    The following shows an invalid construction:

    <esi:include src = "www.foo.com"/>

The following shows the correct form:

<esi:include src="www.foo.com"/>

Nesting Elements

As shown in Example 16-1, an ESI tag can contain nested ESI elements and other HTML markup.

Example 16-1 Nested ESI Elements

<esi:choose>
  <esi:when test="$(HTTP_HOST) == 'www.company.com'">
    <esi:include src="/company.html" />
    <h4>Another</h4>
    <esi:include src="/another.html" />
  </esi:when>
  <esi:when test="$(HTTP_COOKIE{fragment) == 'First Fragment'">
    <esi:try>
      <esi:attempt>
        <esi:include src="/fragment1.html" />
      </esi:attempt>
      <esi:except>
        <esi:choose>
          <esi:when test="$(HTTP_COOKIE{otherchoice}) == 'image'" >
            <img src="/img/TheImage.gif">
          </esi:when>
          <esi:otherwise>
            The fragment is unavailable.
         </esi:otherwise>
        </esi:choose>
      </esi:except>
    </esi:try>
  </esi:when>
  <esi:otherwise>
   The default selection.
  </esi:otherwise>
</esi:choose>

Variable Expressions

ESI supports the HTTP request variables and environment variables used with the <esi:environment> tag.

This section contains the following topics:

Variable Usage

To refer to a variable, prefix it with a dollar sign and surround the variable name with parentheses:

$(VARIABLE_NAME)

For example:

$(HTTP_HOST)

Variables are accessed by a key as follows:

$(VARIABLE_NAME{key})

To access a variable’s substructure, append the variable name with braces containing the key which is being accessed. For example:

$(HTTP_COOKIE{username})

The key is case sensitive and optional. If a key is not specified, the environment variable returns the whole content of the environment fragment. Oracle advises specifying an environment variable without a key only for testing whether the environment is empty. In the following ESI markup, $(logindata) is a variable that is evaluated against a null value:

<esi:environment src="/getlogindata" name="logindata"/>
<esi:include src="/login/$(logindata{account})"/">
<esi:choose>
  <esi:when test="$(logindata) != null">
    <esi:include src="/login/$(logindata{account})"/>
 </esi:when>
 <esi:otherwise>
   <esi:include src="/login/guest.html"/>
 <esi:otherwise>
</esi:choose>

Variable Default Values

You can use the logical OR (|) operator to specify a default value in the following form:

$(VARIABLE|default)

A variable takes the default value only when the variable or its key does not exist. If it evaluates to an empty string, the empty string is returned, not the default value.

The following example results in OracleAS Web Cache fetching http://example.com/default.html if the cookie id is not in the request:

<esi:include src="http://example.com/$(HTTP_COOKIE{id}|default).html"/>

As with other literals, if whitespace needs to be specified, the default value must be single-quoted. For example:

$(HTTP_COOKIE{first_name}|'new user')

Note:

HTTP_HOST and HTTP_REFERER do not support default values.

HTTP Request Variables

Table 16-2 lists the HTTP request variables supported by ESI. Note the following:

  • Except for QUERY_STRING, the values for the variables are taken from HTTP request-header fields. In the case of QUERY_STRING, the value is taken from either the HTTP request body or the URL.
  • Variables are only interpreted when enclosed within ESI tags.
  • Variables with a substructure type of List or Dictionary are accessed by a key.
  • Variables identified with a substructure type of Dictionary make access to strings available through their appropriate keys.
  • Dictionary keys are case sensitive.
  • Variables identified with a substructure type of List return a Boolean value depending on whether the requested value is present.

Table 16-2 HTTP Request Variables Supported by ESI

Variable Name HTTP Header Field Substructure Type/Variable Type Description Example
$(HTTP_ACCEPT_LANGUAGE{language}) Accept-Language request-header fieldSpecifies the set of languages that are preferred as a response. The language is used as the key. List/Boolean Specifies the language to use as the key and evaluates to the language specified in the HTTP request header Variable Setting:$(HTTP_LANGUAGE{en-gb})

HTTP Request Header Contains:

Accept_Language:en-gb

Result: Returns en-gb.

$(HTTP_COOKIE{cookie}) Set-Cookie response-header field or Cookie request-header fieldSpecifies cookie name and value pairs. A cookie name is used as the key.

If the Cookie request-header and Set-Cookie response-header have different values for the same cookie name, the name value pair from the Set-Cookie response header is used.

Dictionary/String Specifies the cookie name to use as the key and returns that cookie’s value Variable Setting:$(HTTP_COOKIE{visits})

HTTP Request Header Contains:

Cookie:visits=42

Result: Returns 42.

$HTTP_HEADER{header}) Any HTTP request header Dictionary/String Specifies an HTTP request header name to use as the key and returns that header’s value Variable Setting:$(HTTP_HEADER{Referer})

HTTP Request Header Contains:

Referer: http://www.company.com:80

Result: Returns

http://www.company.com:80

$HTTP_HOST Host request-header fieldSpecifies the host name and port number of the resource. Port 80 is the default port number. Not Applicable/String Returns the value of the HOST header Variable Setting:$(HTTP_HOST)

HTTP Request Header Contains:

Host:http://www.company.com:80

Result: Returns

http://www.company.com:80

$HTTP_REFERER Referer request-header fieldSpecifies the URL of the reference resource Not Applicable/String Returns the value of the REFERER header Variable Setting:$(HTTP_REFERER)

HTTP Request Header Contains:

Referer: http://www.company.com:80

Result: Returns

http://www.company.com:80

$(HTTP_USER_AGENT{browser})$HTTP_USER_AGENT{version})

$HTTP_USER_AGENT{os})

User-Agent request-header fieldSpecifies the Web browser type, browser version, or operating system that initiated the request. Dictionary/String Specifies one of three keys: browser for browser type, version for browser version, and os for operating system Variable Setting:$(HTTP_USER_AGENT{browser})

HTTP Request Header Contains:

User-Agent:Mozilla/4.0 (compatible, MSIE 5.5, Windows)

Result: Returns MSIE

$(HTTP_USER_AGENT{version})

Result: Returns 4.0.

$(HTTP_USER_AGENT{os})

Result: Returns Windows

$(QUERY_STRING{parameter}) Not Applicable Dictionary/String Given a parameter name in a query string, returns the value of the parameter without URL encoding. The query string can be in an URL or a request body.See Also: http://www.rfc-editor.org/ for further information about URL encoding. Variable Setting:$(QUERY_STRING{CEO})

Query Request Contains:

CEO=Jane%20Doe&CFO=John%20Doe

Result: Returns the value of fullname decoded. In this example, CEO returns a value of Jane Doe.

$(QUERY_STRING) Not Applicable Not Applicable/String Specifies to return the entire query string encoded Variable Setting:$(QUERY_STRING)

Query Request Contains:

CEO=Jane%20Doe&CFO=John%20Doe

Result: Returns the entire query string encoded:

CEO=Jane%20Doe&CFO=John%20Doe

$(QUERY_STRING_ENCODED{parameter}) Not Applicable Dictionary/String Given a parameter name in a query string, returns the value of the parameter with URL encoding. The query string can be in an URL or a request body. Variable Setting:$(QUERY_STRING{fullname})

Query Request Contains:

fullname=Jane%20Doe

Result: Returns the value of fullname encoded:

Jane%20Doe

$(QUERY_STRING_ENCODED) Not Applicable Not Applicable/String The same as $(QUERY_STRING) Variable Setting:$(QUERY_STRING_ENCODED)

Query Request Contains:

fullname=Jane%20Doe

Result: Returns the entire query string encoded:

fullname=Jane%20Doe

$(QUERY_STRING_DECODED{parameter}) Not Applicable Dictionary/String The same as $(QUERY_STRING{parameter}) Variable Setting:$(QUERY_STRING_DECODED{CEO})

Query Request Contains:

fullname=Jane%20Doe

Result: Returns the value of fullname decoded. In this example, fullname returns a value of Jane Doe.

Exceptions and Errors

ESI uses several mechanisms to handle exceptions encountered during an ESI fragment request. In a given situation, you can make use of all mechanisms simultaneously, or use one at a time, depending on the business logic you are developing.

The first mechanism is found in the ESI language, which provides three specific elements for fine-grain control over content assembly in error scenarios:

  • The alt attribute of the <esi:include> tag
  • The onerror attribute of the <esi:include> tag
  • The try |attempt |except block
  • Default page in place of the fragment

When the fragment specified for the src attribute of the <esi:include> tag cannot be fetched, the fragment specified with the alt attribute is used as an alternative. If the alt attribute is not used or the fragment cannot be fetched, the onerror attribute is used. The onerror attribute is used before the try |attempt |except block. If the try |attempt |except block does not exist, the exception handling is propagated to the parent or template page. If all the ESI language controls fail, OracleAS Web Cache displays a default page in place of the fragment.

See Also:



ESI Tag Descriptions

This section describes the following ESI tags, which are used for partial page caching operations:



ESI choose | when | otherwise Tags

The <esi:choose>, <esi:when>, and <esi:otherwise> conditional tags provide the ability to perform logic based on Boolean expressions.

Syntax

<esi:choose>
  <esi:when test="BOOLEAN_expression">
    Perform this action
  </esi:when>
  <esi:when test="BOOLEAN_expression">
    Perform this action
  </esi:when>
  <esi:otherwise>
    Perform this other action
  </esi:otherwise>
</esi:choose>

Attributes

test—Specifies the Boolean operation

Usage

  • Each <esi:choose> tag must have a least one <esi:when> tag, and may optionally contain exactly one <esi:otherwise> tag.
  • OracleAS Web Cache will execute the first <esi:when> tag whose test attribute evaluates truthfully, and then exit the <esi:choose> tag. If no <esi:when> tag evaluates to true and an <esi:otherwise> tag is present, that element’s content will be executed.
  • Other HTML or ESI element can be included inside <esi:when> or <esi:otherwise> elements.

Boolean Expressions

The test attribute uses Boolean expressions to determine how to evaluate true or false logic. ESI supports the following Boolean operators:

  • == (equal to)
  • != (not equal to)
  • > (greater than)
  • < (less than)
  • >= (greater than or equal to)
  • <= (less than or equal to)
  • & (and)
  • | (or)
  • ! (not)

Note the following about the use of Boolean expressions:

  • Operands associate from left to right.

    Sub-expressions can be grouped with parentheses to explicitly specify association.

  • If both operands are numeric, then the expression is evaluated numerically.
  • If either operand is non-numeric, then both operands are evaluated as strings. For example, 'a'==3 evaluates to 'a'=='3', where 3 is evaluated as a string.
  • The comparison of two Boolean expressions results in an undefined operation.
  • If an operand is empty or undefined, then the expression always evaluates to false.
  • The logical operators (&, !, and|) are used to qualify expressions, but cannot be used to make comparisons.
  • Use single quotes (') for constant strings. For example, the following string is a valid construction:
    $(HTTP_COOKIE{name})=='typical'
  • Escaped single quotes (\') are not permitted. For example, the following is not supported:
    $(HTTP_COOKIE{'user\'s name'})=='typical'
  • Arithmetic operations and assignments are not permitted.
  • A null value evaluates whether or not a variable is empty.

    When a number is compared with null, that number is converted into an equivalent string and compared against an empty string. In the following ESI markup, $(logindata{name}) is a variable that provides access to the value of the name. If name is empty and evaluates to null, then the expression evaluates to true; if name is not empty and does not evaluate to null, then the expression evaluates to false.

    Note:

    If a variable exists but evaluates to an empty string, then the value is not considered null.

    <esi:choose>
      <esi:when test="$(logindata{name}) == null">
        <esi:include src=/login/$(logindata{name})"/>
     </esi:when>
     <esi:otherwise>
       <esi:include src=/login/guest.html"/>
     <esi:otherwise>
    </esi:choose>

The following expressions show correct usage of Boolean operators:

!(1==1)
!('a'<='c')
(1==1)|('abc'=='def')
(4!=5)&(4==5)

The following expressions show incorrect usage of Boolean operators:

(1 & 4)
("abc" | "edf")

Statements

Statements must be placed inside a <esi:when> or <esi:otherwise> subtag. Statements outside the subtags cannot be evaluated as conditions. Example 16-2 shows invalid placement of statements.

Example 16-2 Statement Placement

<esi:choose>
  This markup is invalid because any characters other than whitespace 
  are not allowed in this area.
  <esi:when test="$(HTTP_HOST) == 'www.company.com'">
    <esi:include src="/company.html" />
  </esi:when>
     This markup is invalid because any characters other than whitespace 
     are not allowed in this area.
  <esi:when test="$(HTTP_COOKIE{fragment) == 'First Fragment'">
    <img src="/img/TheImage.gif">
  </esi:when>
     This markup is invalid because any characters other than whitespace 
     are not allowed in this area.
   <esi:otherwise>
     The default selection.
  </esi:otherwise>
   This markup is invalid because any characters other than whitespace 
   are not allowed in this area.
</esi:choose>

Example

The following ESI markup includes advanced.html for requests that use the cookie Advanced and basic.html for requests that use the cookie Basic:

<esi:choose>
  <esi:when test="$(HTTP_COOKIE{group})=='Advanced'">
    <esi:include src="http://www.company.com/advanced.html"/>
  </esi:when>
  <esi:when test="$(HTTP_COOKIE{group})=='Basic User'">
    <esi:include src="http://www.company.com/basic.html"/>
  </esi:when>
  <esi:otherwise>
    <esi:include src="http://www.company.com/new_user.html"/>
  </esi:otherwise>
</esi:choose>



ESI comment Tag

The <esi:comment> tag enables you to comment ESI instructions, without making the comments available in the output.

Syntax

<esi:comment text="text commentary"/>

<esi:comment> is an empty element, and does not have an end tag.

Usage

The <esi:comment> tag is not evaluated by OracleAS Web Cache. If comments need to be visible in the HTML output, use standard XML/HTML comment tags.

Example

The following ESI markup provides a comment for an included GIF file:

<esi:comment text="the following animation will have a 24 hour TTL"/>
<esi:include src="http://wwww.company.com/logo.gif" onerror="continue" />



ESI environment Tag

The <esi:environment> tag enables you to include custom environment variables from included fragments. Once included, these variables can then be used with the other ESI tags.

Syntax

There are two forms of this tag. In the first form, <esi:environment> does not have a closing </esi:environment> tag:

<esi:environment src="environment_URL" name="environment_name"  [max-age="expiration_time [+ removal_time]]" [method="GET|POST"] [onerror="continue"] [timeout="fetch_time"]/>

In the second form with elements, <esi:environment> has a closing </esi:environment> tag:

<esi:environment src="environment_URL" name="environment_name"
   [max-age="expiration_time [+ removal_time]"] [method="GET|POST"]
   [onerror="continue"] [timeout="fetch_time"]>
  [<esi:request_header name="request_header" value="value"/>]
  [<esi:request_body value="value"/>]
  [<esi:log>log_message</esi:log>]
</esi:environment>

Attributes

  • src—Specifies the URL from which to obtain environment variables and their values.

    The URL can be either an absolute or relative URL. When specifying an absolute URL, use one of the following formats:

    • "http://host_name:port/path/filename"
    • "https://host_name:port/path/filename"

    If you specify the host name for an absolute URL, you must prefix it with http:// or https://. An HTML parser treats the host:80 in the following URL as a folder name rather than a host name:

    src="host:80/index.htm"

    To make this URL valid, you specify the following:

    src="http://host:80/index.htm"

    Relative URLs are resolved relative to the template page. The result sets the ESI environment for the current template.

    The source code of the URL requires the following XML format:

    <?xml version="1.0"?>
    <esi:environment esiversion="ORAESI/9.0.4">
      <variable_name>variable_value</variable_name>
      <variable_name>variable_value</variable_name>
    </esi:environment>
  • name—Specifies the name to use to refer to the environment variable.
  • method—Specifies the HTTP request method of the environment fragment. Valid values are GET or POST.
  • max-age—Specifies the time, in seconds, to expire the XML file, and optionally, specifies the time, in seconds, to remove the XML file after the expiration time.
  • timeout—Specifies the time, in seconds, for the fragment to be fetched. If the fragment has not been fetched within the time interval, the fetch is aborted.
  • onerror—Specifies that if the fetch failed on the src object, to ignore the ESI tag and serve the page.

Elements

  • request_body—Specifies the HTTP request body of the fragment.
  • request_header—Specifies an HTTP request header field and value for OracleAS Web Cache to use.
  • log—Specifies a log message of the fragment to be included in the access_log_file.fragment file when the x-esi-info log field is set. You can provide a descriptive text string that identifies the fragment and the application that generated the fragment. By providing descriptive text, you can easily identify the fragment in the log file, enabling you to determine how often the fragment is requested.

    See Also:

    Table 15-5 for further information about the x-esi-info log field

Syntax Usage

  • Specify only one <esi:environment> tag for each template page, before other ESI tags.
  • The attributes do not need to be in a particular order.
  • Do not specify more than one request_body element.
  • You can have zero or more request_header elements.

    Use multiple request_header elements to specify multiple HTTP request header fields:

    <esi:environment src="environment_URL"
       [max-age="expiration_time [+ removal_time]"][method="GET|POST"]
       [onerror="continue"] [timeout="fetch_time"]>
      <esi:request_header name="request_header" value="value"/>
      <esi:request_header name="request_header" value="value"/>
    </esi:environment>
  • If no request_header elements are specified, OracleAS Web Cache uses other request headers from the parent page.
  • Do not specify more than one log element.

    See Also:

Example

The following ESI output specifies logindata to refer to the environment variables stored in catalog.xml. The file catalog.xml enables access to the value of the vendorID environment variable, which is used as a parameter in the included URL:

<esi:environment src="/catalog.xml" name="logindata"/>
<esi:include src="http://provider.com/intranetprovider?vendorID=$(logindata{vendorID})"/>

The file catalog.xml has the following content:

<?xml version="1.0"?>
<esi:environment esiversion="ORAESI/9.0.4">
  <product_description>stereo</product_description>
  <vendorID>3278</vendorID>
  <partner1>E-Electronics</partner1>
  <partner2>E-City</partner2>
</esi:environment>

The following ESI output specifies logindata to refer to the environment variables stored in env.dat. The file env.dat enables access to the value of the env environment variable, which is used as a parameter in the included log message for dir1.txt. The log messages for dir1.txt and esi-log2.html are written to the access_log.fragment file when the x-esi-info log field is set and the fragments are requested.

<esi:environment src="/esi/env.dat" name="env">
  <esi:log>Used environment /esi/env.dat</esi:log>
</esi:environment>

<esi:include src="/cached/dir1.txt">
  <esi:log>Fragment:/cache/dir1.txt is included, by $(env{xl_name})</esi:log>
</esi:include>

<font color="red">Including /cgi-bin/esi-fetch.sh?/esi/esi-log2.html in esi-log1.html </font>
<esi:include src="/cgi-bin/esi-fetch.sh?/esi/esi-log2.html">
  <esi:log>Fragment: /cgi-bin/esi-fetch.sh?/esi/esi-log2.html is included
 </esi:log>



ESI include Tag

The <esi:include> tag provides syntax for including fragments.

See Also:

“Fragmentation with the Inline and Include Tags” for a comparison of <esi:inline> and <esi:include> usage

Syntax

There are two forms of this tag. In the first form, <esi:include> does not have a closing </esi:include> tag:

<esi:include src="URL_fragment" [alt="URL_fragment"]
[max-age="expiration_time [+removal_time]]" [method="GET|POST"] [onerror="continue"] [redirect=yes|no] [timeout="fetch_time"]/>

In the second form, with elements, <esi:include> has a closing </esi:include> tag:

<esi:include src="URL_fragment" [alt="URL_fragment"]
   [max-age="expiration_time[+removal_time]"] [method="GET|POST"]
   [onerror="continue"] [redirect=yes|no] [timeout="fetch_time"]>
  [<esi:request_header name="request_header" value="value"/>]
  [<esi:request_body value="value"/>]
  [<esi:log>log_message</esi:log>]
</esi:include>

Attributes

  • src—Specifies the URL of the fragment to fetch. The URL can be a literal string or it can include variables.

    The URL can either be an absolute or relative URL. When specifying an absolute URL, use one of the following formats:

    • "http://host_name:port/path/filename"
    • "https://host_name:port/path/filename"

    If you specify the host name for an absolute URL, you must prefix it with http:// or https://. An HTML parser treats the host:80 in the following URL as a folder name rather than a host name:

    src="host:80/index.htm"

    To make this URL valid, you specify the following:

    src="http://host:80/index.htm"

    Relative URLs are resolved relative to the template page. The included result replaces the element in the markup served to the browser.

    You can specify an XML fragment as long as the XML file fragment is valid XML. For example, the following specifies that OracleAS Web Cache use XSL Transformations (XSLT) to transform the XML into HTML using a stylesheet. The stylesheet maps XML formats to HTML formats:

    <?xml version="1.0"?>
    <?xml-stylesheet type="text/xml" href="stylesheet.xsl"?>

    Ensure that both the XML fragment and the XSL stylesheet response pages are configured with a Content-Type response-header field that includes text and XML media types. For example:

    Content-Type: text/xml

    See Also:

    http://www.xslt.com/ for complete information about XSLT

  • alt—Specifies an alternative resource if the src is not found. The requirements for the value are the same as those for src.
  • max-age—Specifies the time, in seconds, to expire the fragment, and optionally, specifies the time, in seconds, to remove the fragment after expiration time. Use this attribute if the template page has a higher tolerance for stale fragments than specified by the time-to-live parameters in fragment responses.
  • method—Specifies the HTTP request method of the fragment. Valid values are GET or POST.
  • onerror—Specifies that if the fetch failed on the src object to ignore the ESI tag and serve the page.
  • redirect—Specifies how to serve the fragment when the src fragment resides temporarily under a different URL. yes specifies that the URL be redirected and displayed; no specifies that the fragment URL not be redirected and an HTTP 302 Found status code be served in place of the fragment. yes is the default.
  • timeout—Specifies the time, in seconds, for the fragment to be fetched. If the fragment has not been fetched within the time interval, the fetch is aborted.

    See Also:

    “Exceptions and Errors” for usage notes on alt and onerror

Elements

  • request_body—Specifies the HTTP request body of the fragment.
  • request_header—Specifies an HTTP request header field and value for OracleAS Web Cache to use. You can specify multiple HTTP request headers. When this attribute is specified, all request headers from the parent fragment or template page are ignored.
  • log—Specifies a log message of the fragment to be included in the access_log.fragment file when the x-esi-info log field is set. You can provide a descriptive text string that identifies the fragment and the application that generated the fragment. By providing descriptive text, you can easily identify the fragment in the log file, enabling you to determine how often the fragment is requested.

    See Also:

    Table 15-5 for further information about the x-esi-info log field

Syntax Usage

  • <esi:include> supports up to three levels of nesting.
  • <esi:include> does not support escaped double quotes (\"). For example, the following is not supported:
    <esi:include src="file\"user.htm"/>
  • The attributes do not need to be in a particular order.
  • The src attribute supports both HTTP and HTTPS. OracleAS Web Cache permits the template and fragments to use different protocols. Note the following:
    • If the src attribute specifies a fragment’s relative path, such as src="/PersonalizedGreeting", the template’s protocol is used.
    • If the protocol used in the src attribute does not match the protocol specified in the Site-to-Server Mapping page (Origin Servers, Sites, and Load Balancing > Site-to-Server Mapping) of OracleAS Web Cache Manager, then OracleAS Web Cache uses the protocol configured for the origin server in the Site-to-Server Mapping page. OracleAS Web Cache also reports the following warning message to the event log:
      [Date] [warning 11250] [ecid: request_id, serial_number]
      ESI include fragment protocol does not match origin server protocol:
      Origin Server Protocol=protocol URL=URL

      For example, if the template page is configured with <esi:include> src="https://www.company.com:80/gifs/frag1.gif"/> and the site-to-server mapping specifies HTTP for the origin server, then http://www.company.com:80/gifs/frag1.gif is used and the following message appears in the event log:

      [03/Feb/2004:23:16:46 +0000] [warning 11250] [ecid: 90125204378,0]
      ESI include fragment protocol does not match origin server protocol:
      Origin Server Protocol=http URL=https://www.company.com:80/gifs/frag1.gif
  • Do not specify more than one request_body element.
  • You can have zero or more request_header elements.
  • Use multiple request_header elements to specify multiple HTTP request header fields:
    <esi:include src="URL_fragment"
      [max-age="expiration_time[+removal_time]"] [method="GET|POST"]
      [onerror="continue"] [timeout="fetch_time"]>
      <esi:request_header name="request_header" value="value"/>
      <esi:request_header name="request_header" value="value"/>
    </esi:include>
  • Do not specify more than one log element.

Usage

The <esi:include> tag instructs OracleAS Web Cache to fetch the fragment specified by the src attribute.

If the include is successful, the contents of the fetched src URL are displayed. The included object is included exactly at the point of the include tag. For example, if the include tag is in a table cell, the fetched object is displayed in the table cell.

The max-age control directive in the Surrogate-Control response-header field applies to the response; the max-age attribute applies only to that particular usage of the fragment response through the <esi:include> tag. If both the max-age control directive in the Surrogate-Control response-header field and the max-age attribute are set, then the effective expiration and removal time-to-live for this particular inclusion are the longest maximum age of the expiration and the removal time-to-live, respectively. If a particular page has a greater tolerance for staleness of a fragment, then set the max-age attribute to a longer time than the max-age control directive. Use the max-age attribute to increase cache hits by serving fragments stale until the removal time. max-age=infinity specifies that the object never expires.

If method is not set, then GET is assumed. However, if the request_body element is set, then POST is assumed.

OracleAS Web Cache generates the following HTTP request headers for all fragment requests:

  • Host
  • Content-Length
  • Surrogate-Capability
  • Connection

The request_header element enables you to control HTTP headers other than these. Do not specify these HTTP request headers as request_header attributes, as a conflict can affect the operation of OracleAS Web Cache.

If no request_header elements are specified, OracleAS Web Cache uses other request headers from the parent page.

See Also:

“Fragmentation with the Inline and Include Tags” for a comparison of <esi:inline> and <esi:include> usage

Examples

The following ESI markup includes a file named frag1.htm. The fragment must be fetched within 60 seconds. If the fetch fails, OracleAS Web Cache ignores the includes and serves the page. If the fetch succeeds, OracleAS Web Cache includes the fragment. OracleAS Web Cache expires the fragment after five minutes, and removes it after another eight minutes.

<esi:include src="/frag1.htm" timeout="60" maxage="300+480" onerror="continue"/>

The following ESI output includes the result of a dynamic query:

<esi:include src="/search?query=$QUERY_STRING(query)"/>

The following ESI output includes a personalized greeting, a Cookie HTTP request header, and an HTTP request body that includes the date. Log message "Fragment: /Personalized Greeting is included" is written to the access_log.fragment file when the x-esi-info log field is set and the fragment is requested.

<esi:include src="/PersonalGreeting">
  <esi:request_header name="Cookie" value="pname=Scott Tiger"/>
  <esi:request_body value="day=05, month=10, year=2001"/>
  <esi:log>Fragment: /Personalized Greeting is included</esi:log>
</esi:include>

See Also:

“Example of a Portal Site Implementation” for an extended example of <esi:include> usage



ESI inline Tag

The <esi:inline> tag marks a fragment as a separately cacheable fragment, embedded in the HTTP response of another object. OracleAS Web Cache stores and assembles these fragments independently as <esi:include> fragments.

See Also:

“Fragmentation with the Inline and Include Tags” for a comparison of <esi:inline> and <esi:include> usage

Syntax

<esi:inline name="URL" fetchable="yes|no"
 [max-age="expiration_time [+ removal_time]"] [timeout="fetch_time"]
 Embedded HTML code
</esi:inline>

Attributes

  • name—Specifies a unique name for the fragment in URL format.
  • fetchableyes specifies that OracleAS Web Cache fetches the fragment directly from the origin server when the fragment expires. If the fragment is in the cache, then OracleAS Web Cache displays both the template and fragment. no specifies that OracleAS Web Cache fetches the entire template from the origin server, and then tries to extract the fragment from the template.
  • max-age—Specifies the time, in seconds, to expire the fragment, and optionally, specifies the time, in seconds, to remove the fragment after the expiration time. Use this attribute if the template page has a higher tolerance for stale fragments than specified by the time-to-live parameters in fragment responses.
  • timeout—Specifies the time, in seconds, for the fragment to be fetched. If the fragment has not been fetched within the time interval, the fetch is aborted.

Usage

Some inline fragments are only delivered as part of an HTTP response for another object. These are not independently fetchable by OracleAS Web Cache the way <esi:include> fragments are. When a non-fetchable fragment is needed by OracleAS Web Cache, OracleAS Web Cache must request the object from which the inline fragment was extracted.

When a non-fetchable <esi:inline> fragment is not found in the cache, OracleAS Web Cache re-fetches the fragment’s parent template. This behavior implies that the parent cannot be another non-fetchable <esi:inline> fragment. If the parent is an <esi:inline> non-fetchable fragment, the response is returned to the browser is undefined.

Example

The following ESI output embeds financial headlines:

<esi:inline name="/Top_News_Finance">
Latest News for Finance
<TABLE>
  <TR>
    Blue-Chip Stocks Cut Losses; Nasdaq Up MO
    French rig factory with explosives New York Times
    Volkswagen faces Brazil strike CNN Europe
    Airbuss reliability record BBC
  </TR>
</TABLE>
</esi:inline>

See Also:

“Example of a Portal Site Implementation” for an extended example of <esi:inline> usage



ESI invalidate Tag

The <esi:invalidate> tag enables you to configure an invalidation request within the response of a browser page.

Syntax

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>
      <ACTION REMOVALTTL="TTL"/>
      <INFO VALUE="value"/>
      </OBJECT>
 </INVALIDATION>
</esi:invalidate>

Attributes

  • outputyes specifies that the invalidation result be included in the browser response, enclosed within comments <!--result-->. no specifies that the invalidation result not be displayed in the output. Specify a value of yes for a test environment; specify a value of no for a production environment.

Usage

Example



ESI remove Tag

The <esi:remove> tag allows for specification of non-ESI markup output if ESI processing is not enabled with the Surrogate-Control header or there is not an ESI-enabled cache.

Syntax

<esi:remove> HTML output...</esi:remove>

Usage

Any HTML or ESI elements can be included within this tag, except other <esi:remove> tags. Note that nested ESI tags are not processed.

Example

The following ESI markup includes http://www.company.com if the <esi:include> content cannot be included:

<esi:include src="http://www.company.com/ad.html"/>
<esi:remove>
  <A HREF="http://www.company.com">www.company.com</A>
</esi:remove>

Normally, when OracleAS Web Cache processes this example block, it fetches the ad.html file and includes it into the template page while silently discarding the <esi:remove> tag and its contents. If ESI processing is not enabled, all of the elements are passed through to browser, which ignores ESI markup. However, the browser displays the <A HREF=...> HTML link.



ESI try | attempt | except Tags

The <esi:try> tag provides for exception handling. The <esi:try> tag must contain exactly one instance of an <esi:attempt> tag and one or more <esi:except> tags.

See Also:

“Exceptions and Errors” for usage notes on alt and onerror

Syntax

In the following form, only one <esi:except> tag is supported:

<esi:try>
  <esi:attempt>
    Try this...
  </esi:attempt>
  <esi:except>
    If the attempt fails, then perform this action...
  </esi:except>
</esi:try>

In the following form, multiple <esi:except> tags with different types are supported:

<esi:try>
  <esi:attempt>
    Try this...
  </esi:attempt>
  <esi:except [type="type"]>
    If the attempt fails, then perform this action...
  </esi:except>
  <esi:except [type="type"]>
    Perform this action...
  </esi:except>
  <esi:except>
    If the attempt fails, then perform this action...
  </esi:except>
</esi:try>

Usage

OracleAS Web Cache first processes the contents of <esi:attempt>. A failed <esi:attempt> triggers an error and causes OracleAS Web Cache to process the contents of the <esi:except> tag.

Specify an <esi:except> tag without a type for general errors; specify an <esi:except> tag with a type for specific errors. The <esi:except> tag accepts the following case-insensitive types:

  • nestingtoodeep: An error occurs because the fragment include depth has exceeded the maximum include depth.
  • originserverbusy: An error occurs because the origin server for this fragment is busy and cannot accept new requests now. This is caused by OracleAS Web Cache-to-origin server request queue limit being reached.
  • noconnection: An error occurs because the cache is unable to connect to the origin server serving this fragment.
  • networktimeout: An error occurs because a fragment request to the origin server has timed out in the network connection.
  • httpclienterror: An error occurs because the origin server returns an HTTP 4xx status code, a client error, such as a malformed HTTP request or an unauthorized access.
  • httpservererror: An error occurs because the origin server returns an HTTP 5xx status code, a server error.
  • incompatiblefragmentversion: An error occurs because a fragment’s processing requirement is not supported or not compatible with the template. <!-- WEBCACHETAG–> and <!-- WEBCACHEEND–> processing in an ESI fragment is not compatible with ESI processing. A fragment may be plain data that does not need any processing in the cache, or it may be an ESI template itself that requires processing of ESI features supported in this release. The ESI features in use are specified by the Surrogate-Control content control directive.
  • incorrectresponseheader: An error occurs because the response headers for a fragment causes the error.
  • incorrectesifragment: An error occurs when OracleAS Web Cache tries to parse or process the ESI fragment response body due to errors in the body.
  • incorrectxmlfragment: An error occurs because there is an error in XSLT retrieval, parsing, or processing by OracleAS Web Cache.

Example

The following ESI markup attempts to fetch an advertisement. If the advertisement cannot be included, OracleAS Web Cache includes a static link instead.

<esi:try>
  <esi:attempt>
    <esi:comment text="Include an ad"/>
    <esi:include src="http://www.company.com/ad1.htm"/>
  </esi:attempt>
  <esi:except>
    <esi:comment text="Just write some HTML instead"/>
    <a href=www.company.com>www.company.com</a>
  </esi:except>
</esi:try>

The following ESI markup attempts to fetch a fragment. If the fragment cannot be included because of httpclienterror, then OracleAS Web Cache includes /cgi-bin/esi-fetch?/esi/tryNestL1.html instead.

<esi:try>
  <esi:attempt>
    <esi:include src="/frag.html"/>
  </esi:attempt>
  <esi:except type="httpclienterror">
    <esi:include src="/cgi-bin/esi-fetch?/esi/tryNestL1.html"/>
  </esi:except>
</esi:try>

The following <esi:try> attempts to include the fragment http://server.portal.com/pls/ppcdemo/!PCDEMO.wwpro_app_provider.execute_portlet/513104940/26 containing several HTTP request headers. If the fragment cannot be included because of various type errors, OracleAS Web Cache returns an Unknown ESI Exception error.

<esi:try>
  <esi:attempt>
    <esi:include src="http://server.portal.com/pls/ppcdemo/!PCDEMO.wwpro_app_provider.execute_portlet/513104940/26" timeout="15000" >
      <esi:request_header name="X-Oracle-Device.MaxDocSize" value="0"/>
      <esi:request_header name="Accept"
      value="text/html,text/xml,text/vnd.oracle.mobilexml"/>
      <esi:request_header name="User-Agent"
        value="Mozilla/4.0 (compatible; MSIE 5.5; Windows; YComp 5.0.0.0)
        RPT-HTTPClient/0.3-3"/>
      <esi:request_header name="Device.Orientation" value="landscape"/>
      <esi:request_header name="Device.Class" value="pcbrowser"/>
      <esi:request_header name="PORTAL-SUBSCRIBER" value="us"/>
      <esi:request_header name="Device.Secure" value="false"/>
      <esi:request_header name="PORTAL-SUBSCRIBER-DN"
         value="dc=us,dc=oracle,dc=com"/>
      <esi:request_header name="PORTAL-SUBSCRIBER-GUID"
         value="A5EE385440E6252BE0340800208A8B00"/>
      <esi:request_header name="Accept-Language" value="en-us"/>
      <esi:request_header name="PORTAL-USER-DN"
         value="cn=public,cn=users,dc=us,dc=oracle,dc=com"/>
      <esi:request_header name="PORTAL-USER-GUID"
         value="A5EE55B396E22651E0340800208A8B00"/>
      <esi:request_header name="Content-Type"
         value="application/x-www-form-urlencoded"/>
    </esi:include>
  </esi:attempt>
  <esi:except type="incompatiblefragmentversion" >
     This happens when a fragment's processing requirement is not supported
     or not compatible with the template.
  </esi:except>
  <esi:except type="noconnection" >
     The cache is unable to connect to the origin server serving this fragment.
  </esi:except>
  <esi:except type="nestingtoodeep" >
     The fragment include depth has exceeded the maximum include depth. The
     default value defined in Web Cache is 3.
  </esi:except>
  <esi:except type="httpservererror" >
     The origin server returns an HTTP 5xx status code, a server error.
  </esi:except>
  <esi:except type="httpclienterror" >
     The origin server returns an HTTP 4xx status code, a client error, such as
     a malformed HTTP request or an unauthorized access.
  </esi:except>
  <esi:except type="incorrectresponseheader" >
     This happens when the response headers for a fragment cause the error.
  </esi:except>
  <esi:except type="incorrectxmlfragment" >
     This happens when there is any kind of error in OracleAS Web Cache XSLT
     retrieval, parsing, or processing.
  </esi:except>
  <esi:except type="originserverbusy" >
     The origin server for this fragment is busy and cannot accept new requests
     now. This is caused by OracleAS Web Cache-to-origin server request queue
    limit.
  </esi:except>
  <esi:except type="networktimeout" >
     This is thrown by a fragment whose request to the origin server has timed
     out in the network connection.
  </esi:except>
  <esi:except type="incorrectesifragment" >
     An error is encountered when OracleAS Web Cache tries to parse or process
     the ESI fragment response body due to errors in the body.
  </esi:except>
  <esi:except>
     Unknown ESI Exception
  </esi:except>
</esi:try>



ESI vars Tag

The <esi:vars> tag enables you to use variables outside of ESI tags. For example, instead of specifying a variable inside a <esi:include> or <esi:choose> block, you can use the <esi:vars> tag to specify a variable inside HTML code.

Syntax

<esi:vars>Optional HTML code $(VARIABLE_NAME{key}) Optional HTML code</esi:vars>

Syntax Usage

  • If the variable does not use the complete $(VARIABLE_NAME{key}) format, OracleAS Web Cache reports the following error message to the event log:
    [Date] [error 12086] [ecid: request_id, serial_number]ESI syntax error. Unrecognized keyword keyword is at line line.
  • Do not nest the <esi:vars> tag within an HTML code line. The following is an example of incorrect syntax:
    HTML code <esi:vars>$(VARIABLE_NAME{key})</esi:vars>HTML code

    For example, the following is invalid:

    <IMG SRC="http://www.example.com/<esi:vars>$(HTTP_COOKIE{type})</esi:vars>/hello.gif"/>

Usage

See Also:

“Variable Expressions” and “ESI environment Tag” for usage of HTTP request variables and custom variables

Example

The following ESI markup includes the cookie type and its value as part of the included URL:

<esi:vars>
  <IMG SRC="http://www.example.com/$(HTTP_COOKIE{type})/hello.gif"/>
</esi:vars>

The following ESI output refers to logindata as part of the <A HREF=...> link for the Welcome page. logindata refers to an XML file that contains custom environment variables. The output also includes the user’s sessionID and category type cookie values as part of the other <A HREF=...> links.

<esi:vars>
  <A HREF="welcome.jsp?name=$(logindata{name})">
  <A HREF="/shopping.jsp?sessionID=$(QUERY_STRING{sessionID})&type=$(QUERY_STRING{type})">
  <IMG SRC="/img/shopping.gif">
  </A>
  <A HREF="/news.jsp?sessionID=$(QUERY_STRING{sessionID})&type=$(QUERY_STRING{type})">
  <IMG SRC="/img/news.gif">
  </A>
  <A HREF="/sports.jsp?sessionID=$(QUERY_STRING{sessionID})&type=$(QUERY_STRING{type})">
  <IMG SRC="/img/sports.gif">
  </A>
  <A HREF="/fun.jsp?sessionID=$(QUERY_STRING{sessionID})&type=$(QUERY_STRING{type})">
  <IMG SRC="/img/fun.gif">
  </A>
  <A HREF="/about.jsp?sessionID=$(QUERY_STRING{sessionID})&type=$(QUERY_STRING{type})">
  <IMG SRC="/img/about.gif">
  </A>
 </esi:vars>



ESI <!–esi–>Tag

The <!--esi...---> tag enables HTML marked up with ESI tags to display to the browser without processing the ESI tags. When a page is processed with this tag, OracleAS Web Cache removes the starting <!--esi and ending --> elements, while still processing the contents of the page. When the markup cannot be processed, this tag assures that the ESI markup will not interfere with the final HTML output.

Syntax

<!--esi
 ESI elements
-->

Usage

Any ESI or HTML elements can be included within this tag, except other <!--esi...--> tags.

Example

In the following ESI markup, the <!--esi and --> are removed in the final
output. The output displays the content generated by <p><esi:vars>Hello, $(HTTP_COOKIE{name})!</esi:vars></p>,
plus any surrounding text.

<!--esi
 <p><esi:vars>Hello, $(HTTP_COOKIE{name})!</esi:vars></p>
-->

If the ESI markup cannot be processed, then the <p><esi:vars>Hello, $(HTTP_COOKIE{name})!</esi:vars></p> is displayed in the HTML output.

Posted by Carlos Guerrero on October 7, 2009

La ciencia española no necesita tijeras

Posted by Carlos Guerrero on September 3, 2009

Web cache traces and tools

Cited from: www.web-caching.com

Rhinosoft’s AllegroSurf provides proxies for various protocols, including HTTP, and provides prefetching of page links.

Anonimizer provides anonymous web services including browsing, email, and publishing.

The Apache HTTP server has a caching module.

Kintronics offers the plug and play Avantis ContentCache proxy appliance, supporting remote administration of a network of proxies.

Intelogis offers the Avirt line of internet sharing and caching products for the home as well as small and medium-sized business use under Windows. [Product used to be called Spaghetti.]

Blue Coat’s proxy appliances provide visibility and control of Web communications to protect against risks from spyware, Web viruses, inappropriate Web surfing, instant messaging, video streaming and peer-to-peer file sharing - while improving Web performance through caching.

CacheXpress is a high performance proxy server for Windows environments supporting transparent and authenticated modes and WCCP 1 & 2.

NEC Solutions America released CachePortal, which accelerates corporate application performance.

The CERN/W3C HTTPd was the original proxy cache (actually a caching httpd server), developed initially at CERN and later maintained at the W3C.

The Cisco Cache Engine sits next to (mostly) Cisco routers and receives transparently redirected HTTP requests.

Digital Equipment Corp. Aug-Sep 1996 web proxy corporate lan users Weekly Access Logs at NLANR’s Proxy Caches IRCache Current Week web proxy upper level proxy anonymized daily Daily Access Logs from CA*netII’s Proxy Caches CA*netII November 1999 web proxy upper level proxy consistent ip hiding so logs may be concatenated Boeing Proxy Logs W3C WCA Repository Mar 1-5 1999 web proxy corporate firewall anonymized and consistent across proxies, but not across days Univ. of Pisa Seven month traces of from CS dept. email: cao@cs.wisc.edu (286MB too large for public access — any volunteers?) Sep 1996 - Mar 1997 ? CS dept. users URLs and client ids anonymized Virginia Tech’s Proxy Traces Virginia Tech Feb-Oct 1995 web proxy and client four sets; 25-61 workstations, 12k-227k requests Boston University CS Dept Client Traces Boston University CS Dept and Internet Traffic Archive Nov 1994 - May 1995 client 2 sets; 5-32 workstations, 17k-118k requests EPA-HTTP: a day of HTTP logs from a busy EPA WWW server. Internet Traffic Archive and Univ. of Wisconsin Aug 29, 1995 (24 hours) web server Internet users SDSC-HTTP: one day of HTTP logs from a busy San Diego Supercomputing Center web server Internet Traffic Archive and Univ. of Wisconsin Aug 22, 1995 web server Internet users Calgary-HTTP: a year of HTTP logs from a University CS department web server Internet Traffic Archive and Univ. of Wisconsin Oct 94 - Oct 95 web server Internet users ClarkNet-HTTP: two weeks of HTTP logs from a busy ISP Internet Traffic Archive and Univ. of Wisconsin Aug-Sep 1995 web server Internet users Saskatchewan-HTTP: Seven months of HTTP logs from a University web server Internet Traffic Archive and Univ. of Wisconsin Jun-Dec 1995 web server Internet users NASA-HTTP: Two months of HTTP logs from a busy NASA web server Internet Traffic Archive and Univ. of Wisconsin Jul-Aug 1995 web server Internet users Music Machines-HTTP: Two years and two months of HTTP logs from another web server University of Washington Sep-Oct 1997 or
Feb 1997-Apr 1999
web server Internet users Anonymized; web caching disabled; no sizes reported in initial portions Soccer World Cup 1998 Internet Traffic Archive and W3C WCA Repository Apr 30-Jul 26 1998 web server(s) Internet users Anonymized, 1.3 billion requests

Posted by Carlos Guerrero on September 2, 2009

Sites to improve your English

Extracted from: http://www.smashingmagazine.com/2009/06/28/50-free-resources-that-will-improve-your-writing-skills/

Effective writing skills are to a writer what petrol is to a car. Like the petrol and car relationship, without solid skills writers cannot move ahead. These skills don’t come overnight, and they require patience and determination. You have to work smart and hard to acquire them. Only with experience, you can enter the realm of effective, always-in-demand writers.

Of course, effective writing requires a good command of the language in which you write or want to write. Once you have that command, you need to learn some tips and tricks so that you can have an edge over others in this hard-to-succeed world of writers. There are some gifted writers, granted. But gifted writers also need to polish their skills frequently in order to stay ahead of competition and earn their livelihood.

We collected over 50 useful and practical tools and resources that will help you to improve your writing skills. You will find copywriting blogs, dictionaries, references, teaching classes, articles, tools as well as related articles from other blogs. Something is missing? Please let us know in the comments to this post!

1. Grammar, Punctuation & Co.

Ultimate Style: The Rules Of Writing
The web’s ultimate guide to grammar provides a database of topics and an easy-to-search A-Z list of common questions (via)

Screenshot

Use English Punctuation Correctly
A quick and useful crash course in English punctuation.

HyperGrammar
An extensive electronic grammar course at the University of Ottawa’s Writing Centre.

Grammar Girl
Mignon Fogarty’s quick and dirty tips for better writing. Grammar Girl provides short, friendly tips to improve your writing. Covering the grammar rules and word choice guidelines that can confound even the best writers, Grammar Girl makes complex grammar questions simple with memory tricks to help you recall and apply those troublesome grammar rules.

Screenshot

Better Writing Skills
This site contains 26 short articles with writing tips about ampersands, punctuation, character spacing, apostrophes, semicolons and commas, difference between i.e. and e.g. etc.

The Guide to Grammar and Writing
An older, yet very useful site that will help you to improve your writing on word & sentence level, paragraph level and also essay & research paper level.

HyperGrammar

Writer’s Block
A compact resource with over 20 articles that cover abbreviations, capitalization, numbers, punctuation, word usage and writing styles.

Paradigm Online Writing Assistant
This site contains some useful articles that explain common grammar mistakes, basic punctuation, basic sentence concepts etc. Worth visiting and reading. The Learning Centre contains similar articles, but with more examples.

Jack Lynch’s Guide to Grammar and Style
These notes are a miscellany of grammatical rules and explanations, comments on style, and suggestions on usage put by Jack Lynch, an Associate Professor in the English department of the Newark campus of Rutgers University, for his classes.

English Style Guide
This guide is based on the style book which is given to all journalists at The Economist. The site contains various hints on how to use metaphors, punctuation, figures, hyphens etc. Brief and precise.

HyperGrammar

Technical Writing
An extensive guidance on grammar and style for technical writing.

40+ Tips to Improve your Grammar and Punctuation
“Purdue University maintains an online writing lab and I spent some time digging through it. Originally the goal was to grab some good tips that would help me out at work and on this site, but there is simply too much not to share.”

2. Common mistakes and problems

Common Errors in English
A collection of common errors in English, with detailed explanations and descriptions of each error.

AskOxford: Better Writing
A very useful reference for classic errors and helpful hints with a terrible site navigation.

Screenshot

Dr. Grammar’s Frequently Asked Questions
Answers to common grammar questions related to English grammar, with examples and additional explanations.

English Grammar FAQ
A list of common English language problems and how to solve them. This list was compiled through an extensive archive of postings to alt.usage.english by John Lawler, Linguistics, U. Michigan, Ann Arbor.

3. General Writing Skills

Writer’s Digest
Writer’s Digest offers information on writing better and getting published. The site also includes community forums, blogs and huge lists of resources for writers (via)

Infoplease: General Writing Skills
Various articles that aim to teach students how to write better.

Infoplease

The Elements of Style
A freely available online version of the book “The Elements of Style” by William Strunk, Jr., the classic reference book.

Poynter Writing Tools
A blog dedicated to writers and journalists. Poynter also provides Fifty Writing Tools: Quick List, a collection of podcasts related to writing.

Poynter

learning lab / writing skills
This site offers over 20 .pdf-documents with main rules and common mistakes related to summarising, paraphrasing, referencing, sentences, paragraphs, linking words and business writing. Handy.

Using English
UsingEnglish.com provides a large collection of English as a Second Language (ESL) tools & resources for students, teachers, learners and academics. Browse our grammar glossary and references of irregular verbs, phrasal verbs and idioms, ESL forums, articles, teacher handouts and printables, and find useful links and information on English. Topics cover the spectrum of ESL, EFL, ESOL, and EAP subject areas.

Online Writing Courses
Free courses are a great way to improve your writing skills. The courses shown here focus on several types of creative writing, including poetry, essay writing and fiction writing.

4. Practical Guides To Better Writing Skills

Copywriting 101: An Introduction to Copywriting
This tutorial is designed to get you up and running with the basics of writing great copy in ten easy lessons. Afterwards, you’ll get recommendations for professional copywriting training, plus links to tutorials on SEO copywriting and writing killer headlines.

Screenshot

A Guide to Writing Well
“This guide was mainly distilled from On Writing Well by William Zinsser and The Elements of Style by Strunk and White. Other sources are listed in the bibliography. My memory being stubborn and lazy, I compiled this so I could easily refresh myself on writing well. I hope it will also be helpful to others.”

Online Copywriting 101: The Ultimate Cheat Sheet
The ultimate cheat sheet with various Web copy resources that copywriters can use to lean the best writing tips and ideas. More copywriting cheat sheets.

Headlines and Trigger Words

Common mistakes and errors

Writing tips from experts

Practical tips

5. Copywriting Blogs

CopyBlogger
Now that blogging has become the smartest strategy for growing an authoritative web site, it’s your copywriting skills that will set you apart and help you succeed. And this is where Copyblogger comes into play. Brian Clark’s popular blog covers useful copywriting tips, guidelines and ideas.

Screenshot

Write to Done
Leo Babuta’s blog about the craft and the art of writing. The blog covers many topics: journalism, blog writing, freelance writing, fiction, non-fiction, getting a book deal, the business of writing, the habit of writing. Updated twice weekly.

Problogger
Darren Rowse’s blog helps bloggers to add income streams to their blogs – among other things, Darren also has hundreds of useful articles related to copy writing.

Screenshot

Men with Pens
A regularly updated blog with useful tips for writers, freelancers and entrepreneurs.

Time to Write
Jurgen Wolff’s tips, ideas, inspirations for writers and would-be writers and other creative people.

Daily Writing Posts
“Whether you are an attorney, manager, student or blogger, writing skills are essential for your success. Considering the rise of the information age, they are even more important, as people are surrounded by e-mails, wikis, social networks and so on.

“It can be difficult to hone one’s writing skills within this fast paced environment. Daily Writing Tipsis a blog where you will find simple yet effective tips to improve your writing.”

CopyWriting
Copywriting website is jam-packed with useful information, articles, resources and services geared to show you how to write mouth-watering, profit-generating copy. Copy that changes minds and dramatically boosts your results. So come right in… you’re going to like what you see! It has copywriting courses, tools, articles and much more.”

CopyWriting

Dumb Little Man: Writing
Jay White provides a handful of tips that may increase your productivity and improve your skills. You’ll find many tips and ideas for better writing in his archive category “Writing”.

Dumb Little Man

The Copywriter Underground
A copywriting blog by the freelance writer Tom Chandler.

Lifehack: Writing
This collection of resources includes links to 30 posts on Lifehack that may help you to improve your writing skills.

6. Tools

OneLook Dictionary Search
More than 13,5 million words in more than 1024 online dictionaries are indexed by the OneLook search engine. You can find, define, and translate words all at one site.

One Look Dictionary Search

Definr
A fast, suggest-as-you-type dictionary which you can add to your Firefox search box or use in bookmarklet form (see this post) (via Lifehacker).

Screenshot

Visuwords
Look up words to find their meanings and associations with other words and concepts. Produce diagrams reminiscent of a neural net. Learn how words associate.

Screenshot

Merriam Webster: Visual Dictionary
The Visual Dictionary Online is an interactive dictionary with an innovative approach. From the image to the word and its definition, the Visual Dictionary Online is an all-in-one reference. Search the themes to quickly locate words, or find the meaning of a word by viewing the image it represents. What’s more, the Visual Dictionary Online helps you learn English in a visual and accessible way.

Screenshot

OneLook Reverse Dictionary
OneLook’s reverse dictionary lets you describe a concept and get back a list of words and phrases related to that concept. Your description can be a few words, a sentence, a question, or even just a single word.

Online Spell Checker
Free online spell checker that provides you with quick and accurate results for texts in 28 languages (German, English, Spanish, French, Russian, Italian, Portuguese etc.). An alternative tool: Spelljax.

Screenshot

GNU Aspell
GNU Aspell is a Free and Open Source spell checker designed to eventually replace Ispell. It can either be used as a library or as an independent spell checker. Its main feature is that it does a superior job of suggesting possible replacements for a misspelled word than just about any other spell checker out there for the English language.

WordWeb
A one-click English thesaurus and dictionary for Windows that can look up words in almost any program. It works off-line, but can also look up words in web references such as the Wikipedia encyclopedia. Features of the free version include definitions and synonyms, proper nouns, 150 000 root words and 120 000 synonym sets.

Screenshot

write rhymes
As you write, hold the alt key and click on a word to find a rhyme for it.

Screenshot

Verbix
This English conjugator will help you to determine how to use verbs in the proper tense.

Wordcounter
Wordcounter ranks the most frequently used words in any given body of text. Use this to see what words you overuse or maybe just to find some keywords from a document. Text Statistics Generator is an alternative tool: it gives you a quick analysis of number of word occurrences.

Advanced Text Analyzer (requires registration)
This free tool analyzes texts, calculating the number of words, lexical density, words per sentence, character per word and the readability of the text as well as word analysis, phrase analysis and graded analysis. Useful! Alternative tool.

Screenshot

Graviax Grammar Checker
Grammar rules (XML files containing regular expressions) and grammar checker. Currently only for the English language, although it could be extended. Unit tests are built into the rules. Might form the basis of a grammar checker for OpenOffice.

txt2tags
Txt2tags is a document generator. It reads a text file with minimal markup as **bold** and //italic// and converts it to the formats HTML, LaTeX, MediaWiki, Google Code Wiki, DokuWiki, Plain text and more.

Markdown
Markdown is a text-to-HTML conversion tool for web writers. Markdown allows you to write using an easy-to-read, easy-to-write plain text format, then convert it to structurally valid XHTML (or HTML). Requires Perl 5.6.0 or later.

7. Further Resources

50 Useful Open Source Resources For Writers and Writing Majors
And if you’re a writing major, why not take advantage of all the opportunities to get great free and open source resources that can help you to write, edit and organize your work? Here’s a list of fifty open source tools that you can use to make your writing even better.

English Forums
If you have a question related to English Grammar, join these forums to get advice from others who know the language better or can provide you with some related information.

Screenshot

The Ultimate Writing Productivity Resource
A round-up of applications, services, resources, tools, posts and communities for writers and bloggers who want to improve their writing skills.

100 Useful Web Tools for Writers
100 useful Web tools that will help you with your career, your sanity and your creativity whenever your write. More useful round-ups.

Posted by Carlos Guerrero on August 27, 2009

Generic classes in Java

For my case I need a generic type for a private object created in the constructor of the class.

public class Matrix <T>{
private T [][] dataMatrix;

public Matrix (int nNew, int mNew){
dataMatrix = (T[][]) new Object[n][m];
}

}

If I need to use the same Generic Class in some variable definition in other method I will use the same tricky of casting an instance of Object. For exemple:

public void addRow (int pos, T value){
T [][] newMatrix = (T[][]) new Object[n+1][m];
n++;
for (int i=0;i<n;i++){
for (int j=0;j<m;j++){
if (i<pos)  newMatrix[i][j]=getMij(i,j);
if (i==pos) newMatrix[i][j]=value;
if (i>pos)  newMatrix[i][j]=getMij(i-1,j);
}
}
dataMatrix = newMatrix;
}

From the wikipedia:

Generic class definitions

Here is an example of a generic class:

public class Pair<T, S>
{
  public Pair(T f, S s)
  {
    first = f;
    second = s;
  }

  public T getFirst()
  {
    return first;
  }

  public S getSecond()
  {
    return second;
  }

  public String toString()
  {
    return "(" + first.toString() + ", " + second.toString() + ")";
  }

  private T first;
  private S second;
}

This generic class can be used in the following way:

Pair<String, String> grade440 = new Pair<String, String>("mike", "A");
Pair<String, Integer> marks440 = new Pair<String, Integer>("mike", 100);
System.out.println("grade:" + grade440.toString());
System.out.println("marks:" + marks440.toString());

Generic method definitions

Here is an example of a generic method using the generic class above:

public <T> Pair<T,T> twice(T value)
{
   return new Pair<T,T>(value,value);
}

In many cases the user of the method need not indicate the type parameters, as they can be inferred:

Pair<String, String> pair = twice("Hello");

The parameters can be explicitly added if needed:

Pair<String, String> pair = this.<String>twice("Hello");

Generics in throws clause

Although exceptions themselves cannot be generic, generic parameters can appear in a throws clause:

public <T extends Throwable> void throwMeConditional
      (boolean conditional, T exception) throws T
{
   if(conditional)
     throw exception;
}