Forum Discussion

Doris_Ramirez_2's avatar
Doris_Ramirez_2
Icon for Nimbostratus rankNimbostratus
Aug 03, 2011

T3 Weblogics Protocol

Hi.. have you any guide for configuring weblogics T3 protocol? Thank You

3 Replies

  • I don't believe there are any public documents on the inner workings of T3. I have in the past simply configured cookie persist (if your app requires persistence) and used standard load balancing.
  • 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"]]]"

     

    }

     

    }

     

     

     

     

     

  • A couple comments/observations and a question about your agile 'java' service.

     

     

    I think your java service works because the listening port matches the port on all members of the weblogic service pool. that is, the weblogic client writes the port in the payload and it must match (there is another article on this--" replace port by other in TCP payload" dated 12/14/2010 at 02:27PM.

     

     

    we find that to be the case here too. if the F5 service port is different from the port in the members of the pool, the code will fail.

     

     

    now my question.

     

     

    the virtual server for the java does not have an persistence set on it. How is it persisting to the same pool member? we also found that the client would not work if we didn't provide persistence (or if the pool only had one member active). we are using source IP since it is a fast layer 4 type.

     

     

    note that we run the web service as standard port 80 / 443 with cookie persistence on the same IP.. Similar to what you listed in 1 except yours also used port 7001 on a different IP.

     

     

    thanks.