The cache can and should run inside your application running in tomcat.
It's used by your application.  Think of it as something like a super
hashtable with more features.  The only thing that can run on its own is
the remote server, which you won't use if you are using the lateral
auxiliary.  

The cache.ccf should be in the classpath.

The servers entry for the lateral cache in the cache.ccf file should
include the addresses of other lateral caches that you want to connect
to.  You can have 1 or more, it doesn't matter.  The delimiter is a
comma.  The format is ip:port,ip:port, . . . or
hostname:port,hostname:port, . . . 

If you have three machines or application you want to connect and their
addresses are A, B, and C.  The A should have B and C.  B should have A
and C.  C should have A and B.  You want them to talk to each other.

A B and C can listen on the same port if they are on different machines.
If you are running more than one server on 1 machine which is probably
unlikely, but it could happen if you have some goofy ssl configuration
or if you are testing, then each lateral must listen on a different
port.  This may be so obvious that saying it makes things confusing.  If
so, ignore this paragraph.

Aaron



> -----Original Message-----
> From: Yomesh Panchal [mailto:[EMAIL PROTECTED]
> Sent: Tuesday, December 02, 2003 2:15 AM
> To: [EMAIL PROTECTED]
> Subject: Problem configuring Lateral TCP Cache
> 
> Hi All,
> 
> I am trying to configure Lateral TCP Cache. I have some questions and
a
> problem which i am not able to solve.
> 
> Questions:
> 1) cache.ccf file should be there in classpath of idividual server or
jcs
> client who is accessing jcs.
> 2) Client hast to run on the same jvm of tomcat servers or it can be
> standalone java client.
> 3) What value should be given to following property in cache.ccf file
>     -
>
jcs.auxiliary.LTCP.attributes.TcpServers=10.1.35.167:8090,10.1.35.167:80
80
>     - jcs.auxiliary.LTCP.attributes.TcpListenerPort=1110
> Or
> If some one can give steps of configuring Lateral TCP Cache on more
than
> one server.
> 
> 
> Problem:
> 
> I am running an example with following setting. Two tomcat servers are
> running on two different port localhost:8080 and localhost:8090. Now i
am
> running the example  but i am getting following error:
> 
> D:\Yomesh\JBProjects\Caching\classes>java
> com.genericbookstore.data.BookVObjMana
> ger ..\cache.ccf
> Creating cache manager from config file: ..\cache.ccf
> Nov 24, 2003 2:21:30 PM
> org.apache.jcs.engine.control.CompositeCacheConfigurator
>  setDefaultAuxValues
> INFO: setting defaults to LTCP
> Nov 24, 2003 2:21:30 PM
> org.apache.jcs.engine.control.CompositeCacheConfigurator
>  setDefaultCompositeCacheAttributes
> INFO: setting defaultCompositeCacheAttributes to [ useLateral = true,
> useRemote
> = true, useDisk = true, maxObjs = 2000 ]
> Nov 24, 2003 2:21:30 PM
> org.apache.jcs.engine.control.CompositeCacheConfigurator
>  setDefaultElementAttributes
> INFO: setting defaultElementAttributes to [ IS_LATERAL = false,
IS_SPOOL =
> false
> , IS_REMOTE = false, IS_ETERNAL = false, MaxLifeSeconds = 2400,
IdleTime =
> 1800,
>  CreateTime = 1069663890818, LastAccessTime = 1069663890818,
> getTimeToLiveSecond
> s() = 2399985, createTime = 1069663890818 ]
> Nov 24, 2003 2:21:30 PM
org.apache.jcs.engine.memory.lru.LRUMemoryCache
> initiali
> ze
> INFO: initialized LRUMemoryCache for JCSTest$Dog
> Nov 24, 2003 2:21:30 PM org.apache.jcs.engine.control.CompositeCache
> <init>
> INFO: Constructed cache with name: JCSTest$Dog
> Nov 24, 2003 2:21:30 PM
> org.apache.jcs.auxiliary.lateral.socket.tcp.LateralTCPLi
> stener$ListenerThread run
> INFO: Listening on port 1110
> Nov 24, 2003 2:21:31 PM
org.apache.jcs.engine.memory.lru.LRUMemoryCache
> initiali
> ze
> INFO: initialized LRUMemoryCache for bookCache
> Nov 24, 2003 2:21:31 PM org.apache.jcs.engine.control.CompositeCache
> <init>
> INFO: Constructed cache with name: bookCache
> Nov 24, 2003 2:21:31 PM
org.apache.jcs.engine.memory.lru.LRUMemoryCache
> initiali
> ze
> INFO: initialized LRUMemoryCache for JCSTest$Cat
> Nov 24, 2003 2:21:31 PM org.apache.jcs.engine.control.CompositeCache
> <init>
> INFO: Constructed cache with name: JCSTest$Cat
> Book cache is NOT null
> Nov 24, 2003 2:21:41 PM
> org.apache.jcs.auxiliary.lateral.socket.tcp.LateralTCPSe
> nder sendAndReceive
> SEVERE: Could not open ObjectInputStream to
> Socket[addr=/10.1.35.167,port=8090,l
> ocalport=1929]
> java.net.SocketTimeoutException: Read timed out
>         at java.net.SocketInputStream.socketRead0(Native Method)
>         at java.net.SocketInputStream.read(SocketInputStream.java:129)
>         at
> java.io.ObjectInputStream$PeekInputStream.read(ObjectInputStream.java
> :2150)
>         at
> java.io.ObjectInputStream$PeekInputStream.readFully(ObjectInputStream
> .java:2163)
>         at
> java.io.ObjectInputStream$BlockDataInputStream.readShort(ObjectInputS
> tream.java:2631)
>         at
> java.io.ObjectInputStream.readStreamHeader(ObjectInputStream.java:734
> )
>         at
java.io.ObjectInputStream.<init>(ObjectInputStream.java:253)
>         at
> org.apache.jcs.auxiliary.lateral.socket.tcp.LateralTCPSender.sendAndR
> eceive(LateralTCPSender.java:229)
>         at
> org.apache.jcs.auxiliary.lateral.socket.tcp.LateralTCPService.get(Lat
> eralTCPService.java:196)
>         at
> org.apache.jcs.auxiliary.lateral.LateralCache.get(LateralCache.java:1
> 25)
>         at
> org.apache.jcs.auxiliary.lateral.LateralCacheNoWait.get(LateralCacheN
> oWait.java:76)
>         at
> org.apache.jcs.auxiliary.lateral.LateralCacheNoWaitFacade.get(Lateral
> CacheNoWaitFacade.java:74)
>         at
> org.apache.jcs.engine.control.CompositeCache.get(CompositeCache.java:
> 533)
>         at
> org.apache.jcs.engine.control.CompositeCache.get(CompositeCache.java:
> 440)
>         at org.apache.jcs.access.CacheAccess.get(CacheAccess.java:236)
>         at
> com.genericbookstore.data.BookVObjManager.getBookVObj(BookVObjManager
> .java:85)
>         at
> com.genericbookstore.data.BookVObjManager.getBookVObj(BookVObjManager
> .java:70)
>         at
> com.genericbookstore.data.BookVObjManager.main(BookVObjManager.java:2
> 03)
> vObj is null. loading vObj
> Author name is Yomesh
> Removing vObj
> Nov 24, 2003 2:21:52 PM
> org.apache.jcs.auxiliary.lateral.socket.tcp.LateralTCPSe
> nder sendAndReceive
> SEVERE: Could not open ObjectInputStream to
> Socket[addr=/10.1.35.167,port=8090,l
> ocalport=1929]
> java.net.SocketTimeoutException: Read timed out
>         at java.net.SocketInputStream.socketRead0(Native Method)
>         at java.net.SocketInputStream.read(SocketInputStream.java:129)
>         at
> java.io.ObjectInputStream$PeekInputStream.read(ObjectInputStream.java
> :2150)
>         at
> java.io.ObjectInputStream$PeekInputStream.readFully(ObjectInputStream
> .java:2163)
>         at
> java.io.ObjectInputStream$BlockDataInputStream.readShort(ObjectInputS
> tream.java:2631)
>         at
> java.io.ObjectInputStream.readStreamHeader(ObjectInputStream.java:734
> )
>         at
java.io.ObjectInputStream.<init>(ObjectInputStream.java:253)
>         at
> org.apache.jcs.auxiliary.lateral.socket.tcp.LateralTCPSender.sendAndR
> eceive(LateralTCPSender.java:229)
>         at
> org.apache.jcs.auxiliary.lateral.socket.tcp.LateralTCPService.get(Lat
> eralTCPService.java:196)
>         at
> org.apache.jcs.auxiliary.lateral.LateralCache.get(LateralCache.java:1
> 25)
>         at
> org.apache.jcs.auxiliary.lateral.LateralCacheNoWait.get(LateralCacheN
> oWait.java:76)
>         at
> org.apache.jcs.auxiliary.lateral.LateralCacheNoWaitFacade.get(Lateral
> CacheNoWaitFacade.java:74)
>         at
> org.apache.jcs.engine.control.CompositeCache.get(CompositeCache.java:
> 533)
>         at
> org.apache.jcs.engine.control.CompositeCache.get(CompositeCache.java:
> 440)
>         at org.apache.jcs.access.CacheAccess.get(CacheAccess.java:236)
>         at
> com.genericbookstore.data.BookVObjManager.storeBookVObj(BookVObjManag
> er.java:151)
>         at
> com.genericbookstore.data.BookVObjManager.main(BookVObjManager.java:2
> 10)
> vObj is successfuly removed
> Author name is Sachin
> Author name has already changed
> .
> 
> 
> 
> The cache.ccf file
> 
> # DEFAULT CACHE REGION
> 
> # sets the default aux value for any non configured caches
> jcs.default=LTCP
>
jcs.default.cacheattributes=org.apache.jcs.engine.CompositeCacheAttribut
es
> jcs.default.cacheattributes.MaxObjects=2000
>
jcs.default.cacheattributes.MemoryCacheName=org.apache.jcs.engine.memory
.l
> ru.LRUMemoryCache
> jcs.default.elementattributes=org.apache.jcs.engine.ElementAttributes
> jcs.default.elementattributes.IsEternal=false
> jcs.default.elementattributes.MaxLifeSeconds=2400
> jcs.default.elementattributes.IdleTime=1800
> jcs.default.elementattributes.IsSpool=false
> jcs.default.elementattributes.IsRemote=false
> jcs.default.elementattributes.IsLateral=false
> 
> 
>
jcs.auxiliary.LTCP=org.apache.jcs.auxiliary.lateral.LateralCacheFactory
>
jcs.auxiliary.LTCP.attributes=org.apache.jcs.auxiliary.lateral.LateralCa
ch
> eAttributes
> jcs.auxiliary.LTCP.attributes.TransmissionTypeName=TCP
>
jcs.auxiliary.LTCP.attributes.TcpServers=10.1.35.167:8090,10.1.35.167:80
80
> jcs.auxiliary.LTCP.attributes.TcpListenerPort=1110
> jcs.auxiliary.LTCP.attributes.PutOnlyMode=false
> 
> 
> #Book Cache
> jcs.region.bookCache=LTCP
>
jcs.region.bookCache.cacheattributes=org.apache.jcs.engine.CompositeCach
eA
> ttributes
> jcs.region.bookCache.cacheattributes.MaxObjects=4000
>
jcs.region.bookCache.cacheattributes.MemoryCacheName=org.apache.jcs.engi
ne
> .memory.lru.LRUMemoryCache
> jcs.region.bookCache.cacheattributes.UseMemoryShrinker=true
> jcs.region.bookCache.cacheattributes.MaxMemoryIdleTimeSeconds=3600
> jcs.region.bookCache.cacheattributes.ShrinkerIntervalSeconds=600
>
jcs.region.bookCache.elementattributes=org.apache.jcs.engine.ElementAttr
ib
> utes
> jcs.region.bookCache.elementattributes.IsEternal=false
> jcs.region.bookCache.elementattributes.MaxLifeSeconds=2400
> jcs.region.bookCache.elementattributes.IdleTime=180
> jcs.region.bookCache.elementattributes.IsSpool=false
> jcs.region.bookCache.elementattributes.IsRemote=false
> jcs.region.bookCache.elementattributes.IsLateral=true
> 
> ===============
> 
> The code is
> 
> // java com.genericbookstore.data.BookVObjManager
> package com.genericbookstore.data;
> 
> import org.apache.jcs.JCS;
> // in case we want to set some special behavior
> import org.apache.jcs.engine.behavior.IElementAttributes;
> import org.apache.jcs.engine.control.CompositeCacheManager;
> import java.io.*;
> import java.util.*;
> 
> /**
>  * <p>Title: </p>
>  * <p>Description: </p>
>  * <p>Copyright: Copyright (c) 2003</p>
>  * <p>Company: </p>
>  * @author not attributable
>  * @version 1.0
>  */
> 
> public class BookVObjManager {
>   private static BookVObjManager instance;
>   private static int checkedOut = 0;
>   private static JCS bookCache;
> 
>   private BookVObjManager() {
>     try {
>       bookCache = JCS.getInstance("bookCache");
>       if (bookCache == null) {
>         System.out.println("Book cache is null");
>       }
>       else {
>         System.out.println("Book cache is NOT null");
>       }
> 
>     }
>     catch (Exception e) {
>       // Handle cache region initialization failure
>       System.out.println("Error in creating object");
>       e.printStackTrace();
>     }
> 
>     // Do other initialization that may be necessary, such as getting
>     // references to any data access classes we may need to populate
>     // value objects later
>   }
> 
>   /**
>    * Singleton access point to the manager.
>    */
>   public static BookVObjManager getInstance() {
>     if (instance == null) {
>       synchronized (BookVObjManager.class) {
>         if (instance == null) {
>           instance = new BookVObjManager();
>         }
>       }
>     }
> 
>     synchronized (instance) {
>       instance.checkedOut++;
>     }
> 
>     return instance;
>   }
> 
>   /**
>    * Retrieves a BookVObj.  Default to look in the cache.
>    */
>   public BookVObj getBookVObj(int id) {
>     return getBookVObj(id, true);
>   }
> 
>   /**
>    * Retrieves a BookVObj. Second argument decides whether to look
>    * in the cache. Returns a new value object if one can't be
>    * loaded from the database. Database cache synchronization is
>    * handled by removing cache elements upon modification.
>    */
>   public BookVObj getBookVObj(int id, boolean fromCache) {
>     BookVObj vObj = null;
> 
>     // First, if requested, attempt to load from cache
> 
>     if (fromCache) {
>       vObj = (BookVObj) bookCache.get("BookVObj" + id);
>     }
> 
>     // Either fromCache was false or the object was not found, so
>     // call loadBookVObj to create it
> 
>     if (vObj == null) {
>       System.out.println("vObj is null. loading vObj");
>       vObj = loadBookVObj(id);
> 
>     }
> 
>     return vObj;
>   }
> 
>   /**
>    * Creates a BookVObj based on the id of the BOOK table.  Data
>    * access could be direct JDBC, some or mapping tool, or an EJB.
>    */
>   public BookVObj loadBookVObj(int id) {
>     BookVObj vObj = new BookVObj();
> 
>     vObj.bookID = id;
>     vObj.author = "Yomesh";
> 
>     try {
>       boolean found = false;
> 
>       // load the data and set the rest of the fields
>       // set found to true if it was found
> 
>       found = true;
> 
>       // cache the value object if found
> 
>       if (found) {
>         // could use the defaults like this
>         // bookCache.put( "BookVObj" + id, vObj );
>         // or specify special characteristics
> 
>         // put to cache
> 
>         bookCache.put("BookVObj" + id, vObj);
>       }
> 
>     }
>     catch (Exception e) {
>       // Handle failure putting object to cache
>     }
> 
>     return vObj;
>   }
> 
>   /**
>    * Stores BookVObj's in database.  Clears old items and caches
>    * new.
>    */
>   public int storeBookVObj(BookVObj vObj) {
>     try {
>       // since any cached data is no longer valid, we should
>       // remove the item from the cache if it an update.
> 
>       if (vObj.bookID != 0) {
>         bookCache.remove("BookVObj" + vObj.bookID);
>         System.out.println("Removing vObj");
> 
>         BookVObj aObj = (BookVObj) bookCache.get("BookVObj" +
> vObj.bookID);
>         if (aObj == null) {
>           System.out.println("vObj is successfuly removed");
>           // put the new object in the cache
>           bookCache.put("BookVObj" + vObj.bookID, vObj);
>         }
>         else {
>           System.out.println("Could not remove vObj");
>         }
>       }
> 
>     }
>     catch (Exception e) {
>       // Handle failure removing object or putting object to cache.
>     }
>     return vObj.bookID;
>   }
> 
>   public static void configure(String propFile) {
>     System.out.println("Creating cache manager from config file: " +
> propFile);
>     Properties props = new Properties();
> 
>     InputStream is = null;
>     try {
>       //Check to see if we can get the file in propFile from the
claspath.
> 
>       is = new FileInputStream(new File(propFile));
>       props.load(is);
> 
>     }
>     catch (IOException ex) {
>       System.out.println("Failed to load properties");
>       ex.printStackTrace();
>       throw new IllegalStateException(ex.getMessage());
>     }
>     finally {
>       try {
>         is.close();
>       }
>       catch (Exception ignore) {
>         // Ignored
>       }
>     }
> 
>     CompositeCacheManager cm =
> CompositeCacheManager.getUnconfiguredInstance();
>     cm.configure(props);
>   }
> 
>   public static void main(String args[]) {
>     configure(args[0]);
> 
>     BookVObjManager mb = BookVObjManager.getInstance();
>     BookVObj obj = mb.getBookVObj(20);
>     System.out.println("Author name is " + obj.author);
>     if (obj.author.equals("Sachin")) {
>       System.out.println("Author name has already changed");
>     }
>     else {
>       obj.author = "Sachin";
>       mb.storeBookVObj(obj);
>     }
>     obj = mb.getBookVObj(20);
>     System.out.println("Author name is " + obj.author);
>     if (obj.author.equals("Sachin")) {
>       System.out.println("Author name has already changed");
>     }
>     else {
>       System.out.println("Author name has not changed");
>     }
> 
>   }
> }
> 
> ======
> The data class is
> 
> package com.genericbookstore.data;
> 
> import java.io.Serializable;
> import java.util.Date;
> /**
>  * <p>Title: </p>
>  * <p>Description: </p>
>  * <p>Copyright: Copyright (c) 2003</p>
>  * <p>Company: </p>
>  * @author not attributable
>  * @version 1.0
>  */
> 
> public class BookVObj implements Serializable
> {
>     public int bookID = 0;
>     public String title;
>     public String author;
>     public String ISBN;
>     public String price;
>     public Date publishDate;
> 
>     public BookVObj()
>     {
>     }
> }
> =====================
> 
> 
> 
> DISCLAIMER:
> 
> Information contained and transmitted by this E-MAIL is proprietary to
> Hexaware Technologies Limited and is intended for use only by the
> individual or entity to which it is addressed and may contain
information
> that is privileged, confidential or exempt from disclosure under
> applicable law. If this is a forwarded message, the content of this
E-MAIL
> may not have been sent with the authority of the Company. If you are
not
> the intended recipient, an agent of the intended recipient or a person
> responsible for delivering the information to the named recipient, you
are
> notified that any use, distribution, transmission, printing, copying
or
> dissemination of this information in any way or in any manner is
strictly
> prohibited. If you have received this communication in error, please
> delete this mail & notify us immediately at [EMAIL PROTECTED]
> 
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: [EMAIL PROTECTED]
> For additional commands, e-mail:
[EMAIL PROTECTED]


---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to