Coherence*Web Session clustering between WebSphere and WebLogic

Briefly describing the needed steps to share session information between WebSphere 6.x and WebLogic 10.x

Steps for WLS 

1. java -cp coherence.jar;coherence-web.jar com.tangosol.coherence.servlet.WebPluginInstaller [WLS_HOME] -install

2. java -jar webInstaller.jar SessionTest.war -inspect -server:WebLogic/10.x

3. Modify coherence-web.xml 
    <param-name>coherence-session-cookie-domain</param-name>
    <param-value>.test.com</param-value>

<param-name>coherence-session-cookie-path</param-name>
    <param-value>/</param-value>

<param-name>coherence-servletcontext-clustered</param-name>
    <param-value>true</param-value>

    <param-name>coherence-enable-sessioncontext</param-name>
    <param-value>true</param-value>

<param-name>coherence-scopecontroller-class</param-name>
    <param-value>
       com.tangosol.coherence.servlet.AbstractHttpSessionCollection$GlobalScopeController
    </param-value>
<param-name>coherence-session-id-length</param-name>
    <param-value>32</param-value>

3. java -jar webInstaller.jar SessionTest.war -install

4. Insert those two classes(MyCookieHelper, MyDefaultFactory) into the SessionTest.war file.
----------------------------------------------------
package com.tangosol.coherence.servlet.weblogic81;

import javax.servlet.ServletContext;
import javax.servlet.http.HttpServletRequest;

import com.oracle.FileLogWriter;
import com.tangosol.net.CacheFactory;
import com.tangosol.net.cache.LocalCache;

public class MyCookieHelper extends CookieHelper {
// protected static final char SUFFIX_SEPARATOR = 46;
private LocalCache m_cacheFailover;
private String m_sConfiguredJvmRoute;
private FileLogWriter fileWriter;
public MyCookieHelper(
com.tangosol.coherence.servlet.SessionHelper.Factory factory,
ServletContext ctx) {
this(factory, ctx, null);
}

public MyCookieHelper(
com.tangosol.coherence.servlet.SessionHelper.Factory factory,
ServletContext ctx, String sJvmRoute) {
super(factory, ctx);
fileWriter = new FileLogWriter();
m_cacheFailover = new LocalCache(128);
m_sConfiguredJvmRoute = sJvmRoute;
}

public String decodeCookie(HttpServletRequest req) {
String sSessionId = super.decodeCookie(req);
CacheFactory.log("before :" + sSessionId);
fileWriter.writeToFile("before :" + sSessionId);
// WebLogic Session
if (sSessionId != null) {
int ofSeparator = sSessionId.indexOf('!');
if (ofSeparator >= 0) {
String sServerSuffix = getWebLogicAffinitrySuffix();
String sSessionSuffix = sSessionId.substring(ofSeparator);
sSessionId = sSessionId.substring(0, ofSeparator);
if (!sSessionSuffix.equals(sServerSuffix))
m_cacheFailover.put(sSessionId, sSessionSuffix);
}
}

// WebSphere Session
if ((sSessionId != null) && (sSessionId.length() > 4) &&(sSessionId.startsWith("0000"))) {
sSessionId = sSessionId.substring("0000".length());

int ofSeparator = sSessionId.indexOf(getWebSphereAffinitySuffix());
if (ofSeparator >= 0) {
String sServerSuffix = getWebSphereAffinitySuffix();
String sSessionSuffix = sSessionId.substring(ofSeparator);
sSessionId = sSessionId.substring(0, ofSeparator);

if (!sSessionSuffix.equals(sServerSuffix)) {
this.m_cacheFailover.put(sSessionId, sSessionSuffix);
}
}
}
CacheFactory.log("after :" + sSessionId);
fileWriter.writeToFile("before :" + sSessionId);
return sSessionId;
}

public String decodeUrl(HttpServletRequest request) {
String sSessionId = super.decodeUrl(request);
CacheFactory.log("before :" + sSessionId);
fileWriter.writeToFile("before :" + sSessionId);
if (sSessionId != null) {
int ofSeparator = sSessionId.indexOf('!');
if (ofSeparator >= 0)
sSessionId = sSessionId.substring(0, ofSeparator);
}
   if ((sSessionId != null) && (sSessionId.length() > 4) && (sSessionId.startsWith("0000")))
   {
     sSessionId = sSessionId.substring("0000".length());

     int ofSeparator = sSessionId.indexOf(getWebSphereAffinitySuffix());
     if (ofSeparator >= 0)
     {
       sSessionId = sSessionId.substring(0, ofSeparator);
     }
   }
   CacheFactory.log("after :" + sSessionId);
   fileWriter.writeToFile("before :" + sSessionId);
return sSessionId;
}

public String getWebSphereAffinitySuffix() {
return ":";
}

public String getWebLogicAffinitrySuffix() {
return "!";
}
}
----------------------------------------------------
package com.tangosol.coherence.servlet.weblogic103;

import com.tangosol.coherence.servlet.SessionHelper;
import com.tangosol.coherence.servlet.weblogic81.MyCookieHelper;
import javax.servlet.ServletContext;
import com.tangosol.net.CacheFactory;

public class MyDefaultFactory  extends DefaultFactory {

    public SessionHelper instantiateSessionHelper(ServletContext ctx) {
        CacheFactory.log(toString() + ": creating SessionHelper");
        azzert(ctx != null);
        azzert(getServletContext() == null && getSessionHelper() == null);
        String sJvmRoute = System.getProperty("jvmRoute", (String)ctx.getAttribute("coherence-jvmroute"));
        MyCookieHelper helper = new MyCookieHelper(this, ctx, sJvmRoute);
        setServletContext(ctx);
        setSessionHelper(helper);
        return helper;
    }
}
----------------------------------------------------

5. Modify the web.xml.
<param-name>coherence-factory-class</param-name>
    <param-value>com.tangosol.coherence.servlet.weblogic103.MyDefaultFactory</param-value>

Steps for WebSphere

Basically steps are very similar with WebLogic part except helper classes.

1. java -jar webInstaller.jar SessionTest.war -inspect -server:WebSphere/6.x

2. Modify coherence-web.xml
    <param-name>coherence-session-cookie-domain</param-name>
    <param-value>.test.com</param-value>

<param-name>coherence-session-cookie-path</param-name>
    <param-value>/</param-value>

<param-name>coherence-servletcontext-clustered</param-name>
    <param-value>true</param-value>

    <param-name>coherence-enable-sessioncontext</param-name>
    <param-value>true</param-value>

<param-name>coherence-scopecontroller-class</param-name>
    <param-value>
       com.tangosol.coherence.servlet.AbstractHttpSessionCollection$GlobalScopeController
    </param-value>
<param-name>coherence-session-id-length</param-name>
    <param-value>32</param-value>

3. java -jar webInstaller.jar SessionTest.war -install

4. Insert those two classes(MyCookieHelper, MyDefaultFactory) into the SessionTest.war file.
----------------------------------------------------
package com.tangosol.coherence.servlet.websphere60;

import javax.servlet.ServletContext;
import javax.servlet.http.HttpServletRequest;
import com.oracle.FileLogWriter;
import com.tangosol.net.CacheFactory;
import com.tangosol.net.cache.LocalCache;

public class MyCookieHelper extends com.tangosol.coherence.servlet.websphere60.CookieHelper {
protected static final char SUFFIX_SEPARATOR = 46;
private LocalCache m_cacheFailover;
private String m_sConfiguredJvmRoute;
private FileLogWriter fileWriter;
public MyCookieHelper(
com.tangosol.coherence.servlet.SessionHelper.Factory factory,
ServletContext ctx) {
this(factory, ctx, null);
}

public MyCookieHelper(
com.tangosol.coherence.servlet.SessionHelper.Factory factory,
ServletContext ctx, String sJvmRoute) {
super(factory, ctx);
fileWriter = new FileLogWriter();
m_cacheFailover = new LocalCache(128);
m_sConfiguredJvmRoute = sJvmRoute;
}

public String decodeCookie(HttpServletRequest req) {
String sSessionId = super.decodeCookie(req);
CacheFactory.log("before :" + sSessionId);
fileWriter.writeToFile("before :" + sSessionId);
// WebLogic Session
if (sSessionId != null) {
int ofSeparator = sSessionId.indexOf('!');
if (ofSeparator >= 0) {
String sServerSuffix = getWebLogicAffinitrySuffix();
String sSessionSuffix = sSessionId.substring(ofSeparator);
sSessionId = sSessionId.substring(0, ofSeparator);
if (!sSessionSuffix.equals(sServerSuffix))
m_cacheFailover.put(sSessionId, sSessionSuffix);
}
}

// WebSphere Session
if ((sSessionId != null) && (sSessionId.length() > 4) && (sSessionId.startsWith("0000"))) {
sSessionId = sSessionId.substring("0000".length());

int ofSeparator = sSessionId.indexOf(getWebSphereAffinitySuffix());
if (ofSeparator >= 0) {
String sServerSuffix = getWebSphereAffinitySuffix();
String sSessionSuffix = sSessionId.substring(ofSeparator);
sSessionId = sSessionId.substring(0, ofSeparator);

if (!sSessionSuffix.equals(sServerSuffix)) {
this.m_cacheFailover.put(sSessionId, sSessionSuffix);
}
}
}
CacheFactory.log("after :" + sSessionId);
fileWriter.writeToFile("before :" + sSessionId);
return sSessionId;
}

public String decodeUrl(HttpServletRequest request) {
String sSessionId = super.decodeUrl(request);
CacheFactory.log("before :" + sSessionId);
fileWriter.writeToFile("before :" + sSessionId);
if (sSessionId != null) {
int ofSeparator = sSessionId.indexOf('!');
if (ofSeparator >= 0)
sSessionId = sSessionId.substring(0, ofSeparator);
}
   if ((sSessionId != null) && (sSessionId.length() > 4) && (sSessionId.startsWith("0000")))
   {
     sSessionId = sSessionId.substring("0000".length());

     int ofSeparator = sSessionId.indexOf(getWebSphereAffinitySuffix());
     if (ofSeparator >= 0)
     {
       sSessionId = sSessionId.substring(0, ofSeparator);
     }
   }
   CacheFactory.log("after :" + sSessionId);
   fileWriter.writeToFile("before :" + sSessionId);
return sSessionId;
}

public String getWebSphereAffinitySuffix() {
return ":";
}

public String getWebLogicAffinitrySuffix() {
return "!";
}
}
----------------------------------------------------
package com.tangosol.coherence.servlet.websphere60;

import javax.servlet.ServletContext;

import com.tangosol.coherence.servlet.SessionHelper;
import com.tangosol.coherence.servlet.websphere60.DefaultFactory;
import com.tangosol.coherence.servlet.websphere60.MyCookieHelper;
import com.tangosol.net.CacheFactory;

public class MyDefaultFactory   extends com.tangosol.coherence.servlet.websphere60.DefaultFactory {
public MyDefaultFactory() {
}
    public SessionHelper instantiateSessionHelper(ServletContext ctx) {
        CacheFactory.log(toString() + ": creating SessionHelper");
        azzert(ctx != null);
        azzert(getServletContext() == null && getSessionHelper() == null);
        String sJvmRoute = System.getProperty("jvmRoute", (String)ctx.getAttribute("coherence-tomcat-jvmroute"));
        MyCookieHelper helper = new MyCookieHelper(this, ctx, sJvmRoute);
        setServletContext(ctx);
        setSessionHelper(helper);
        return helper;
    }
}
----------------------------------------------------

5. Modify the web.xml. 
    <param-name>coherence-factory-class</param-name>
    <param-value>com.tangosol.coherence.servlet.websphere60.MyDefaultFactory</param-value>


Comments:

Post a Comment:
  • HTML Syntax: NOT allowed
About

Solution & Technology Architect, Asia Pacific

Search

Archives
« April 2014
SunMonTueWedThuFriSat
  
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
   
       
Today