I don't have a guide - but this layout worked for me.
Weblogic 10.3
Application is Oracle Agile PLM
Agile has two clients, web and java. The latter proved to be the sticky wicket.
Two Virtual Servers
1. vs_agile_7001
address: xxx.xxx.255.111
port: 7001
Type: Standard
pool: po_agile_7001
persistence profile: cookie
irule: weblogic_jsession_peristence (printed below)
Without the irule clients would not function correctly. Java client users would not automatically login to the web client when the picked menu items requiring the web client. There were other problems.
This rule required (I think) an HTTP profile BUT the only Type we could have set that worked with the Java client was 'Performance Layer 4'. The two requirements led to creating a second Virtual Server / IP for Java clients ...
2. vs_agile_java
address: xxx.xxx.255.161
Port: 7001
Type: Performance Layer 4.
Protocol Profile: fastl4
pool: po_agile_7001
3. What we did was create a DNS entry for xxx.xxx.255.161, agile-java.domain.com. Put _that_ in the appropriate entries in the client .JNLP file and we're set.
3.5 Of course all this took weeks and weeks of back and forthing between Oracle, F5, the systems integrator and myself. Hopefully this can save other people some time and frustration.
3.75 If anyone has suggestions for making this better, I'm listening.
4. weblogic_jsession_peristence irule
when HTTP_REQUEST {
Log details for the request
set log_prefix "[IP::client_addr]:[TCP::client_port]"
log local0. "$log_prefix: Request to [HTTP::uri] with cookie: [HTTP::cookie value JSESSIONID]"
Check if there is a JSESSIONID cookie
if {[HTTP::cookie "JSESSIONID"] ne ""}{
Persist off of the cookie value with a timeout of 1 hour (3600 seconds)
persist uie [string tolower [HTTP::cookie "JSESSIONID"]] 3600
Log that we're using the cookie value for persistence and the persistence key if it exists.
log local0. "$log_prefix: Used persistence record from cookie. Existing key? [persist lookup uie [string tolower [HTTP::cookie "JSESSIONID"]]]"
} else {
Parse the jsessionid from the path. The jsessionid, when included in the URI, is in the path,
not the query string: /path/to/file.ext;jsessionid=1234?param=value
set jsess [findstr [string tolower [HTTP::path]] "jsessionid=" 11]
Use the jsessionid from the path for persisting with a timeout of 1 hour (3600 seconds)
if { $jsess != "" } {
persist uie $jsess 3600
Log that we're using the path jessionid for persistence and the persistence key if it exists.
log local0. "$log_prefix: Used persistence record from path: [persist lookup uie $jsess]"
}
}
}
when HTTP_RESPONSE {
Check if there is a jsessionid cookie in the response
if {[HTTP::cookie "JSESSIONID"] ne ""} {
Persist off of the cookie value with a timeout of 1 hour (3600 seconds)
persist add uie [string tolower [HTTP::cookie "JSESSIONID"]] 3600
log local0. "$log_prefix: Added persistence record from cookie: [persist lookup uie [string tolower [HTTP::cookie "JSESSIONID"]]]"
}
}