Java Object Cache in EBS

Java
Object Cache (Distributed Java Caching) in Oracle E-Business Suite 11i/R12

If you are upgrading your system (or planning to upgrade) to ATG roll up 4, 5 or 6 or using R12 (12.0.X to 12.1.X); beware of below common intermittent issues around Web
Server (Apache/Jserv/OC4J/JVM) for 11.5.10 and R12 
 
Responsibility not visible to users 
-NoCalssDef found error in JVM logs
-Intermittent hang in JVM (Jserv/Apache)
-Intermittent page not found while accessing/login apps ( 500 Internal Server Error)

Most (if not all) of these issues are around Distributed Java Cache feature of JVM in Oracle Apps 11i/R12, before going further let me ask you basic questions around Java Cache

Q. What is significance of wrapper.bin.parameters=-DLONG_RUNNING_JVM=FALSE in jserv.properties ?
Q. Why you need s_java_object_cache_port & s_fnd_cache_port_range in Context File ($SID_hostname.xml) ?
Q. What is $APPLRGF/javacache.log ?

 Good starting point to understand Java Caching in 11i/R12 is to go through Mike Shaw’s
post here

(参考链接:)

Lets now understand basics of Java Object Cache (JOC) or
Distributed Java Cache
which was introduced in apps from ATG RUP 3.

JVM – Java Virtual Machine : to execute Java Code in apps; JServ (for 11i) and OC4J (for R12) .

Caching in JVM: To improve performance, JVM’s cache data they extract from Database before passing it on to User(为了提高性能,JVM在将从数据库内提取的数据传给用户之前,自己先存放在自己的cache中).

Database Invalidation: This feature ensures that when the data in a database is updated, the corresponding cached data in the mid-tier is also updated. This is useful when the updates to the database bypass(绕过) the JVMS for example updates
through forms or sqlplus.

Distributed Java Caching: In a multiple JVM environment (multiple JVM on one or more middle tier or Single JVM on multiple Middle tier ),
Distributed caching allows one JVM to inform all the other JVMs about updates to any cached data. This ensures consistency of the cached data across all the JVMs.
               The updates and invalidations of
the objects in a distributed Component Cache are propagated(传播) to all the other JVMs that are running against the same database..

How data synchronization and invalidations handled in Distributed Java caching : In multi JVM environment;
a) First JVM to come online acts as Master Cache Controller and rest other JVMs
as client JVMs .
b) Upon startup, each JVM auto-registers the host it is running on in the database ( table name JTF_PREFAB_WSH_POES_B).
c) The Master cache controller listens for cache invalidation in the port specified by s_java_object_cache_port(default
is 12345) and the client JVMs will open client ports taken from the range established by s_fnd_cache_port_range (when specified – Default not set).
d)When an object gets invalidated or replaced in the cache, then invalidation message is sent to all other JVMs via Master
Cache Controller
.
 

If this Master JVM (acting as Master Cache Controller) dies gracefully or abnormally, then one of client JVM takes role of Master cache Controller (There are couple of Bugs around this issue)

.
Data Partition: This feature allows the cached data to be partitioned based on any partition keys. This is useful for JVMS in hosting environments running against a Virtual Private Database (VPD). The caching framework ensures that the cache
data is partitioned based on security group id.

.
How to disable distributed caching or enable local caching ?
Set s_long_running_jvm to false in context (xml) file and run autoconfig . <jms_cache oa_var=”s_long_running_jvm”>false</jms_cache>
This will update wrapper.bin.parameters=-DLONG_RUNNING_JVM to FALSE in jserv.properties

or

set wrapper.bin.parameters=-DCACHEMODE=LOCAL in jserv.properties (default is Distributed)

.
Checking Java Cache from front end
login to URL http://<machinename>:<port> /OA_HTML/jtflogin.jsp
sysadmin/<sysadmin_passwd> Performance -> Components

For Cloned Instances
Nodes registered for Java Caching and the cache configuration details are stoerd in table  JTF_PREFAB_WSH_POES_B, its good idea to truncate
this table on cloned instance (If entry contains source instance nodes) and restart Apache to re-register target instance nodes in table JTF_PREFAB_WSH_POES_B

相关阅读:http://docs.oracle.com/cd/B25221_04/web.1013/b14427/joc.htm#sthref706

时间: 2024-10-04 00:44:48

Java Object Cache in EBS的相关文章

java Object.clone()的效果

调用Object.clone()时,实际发生的是什么事情呢?当我们在自己的类里覆盖clone()时,什么东西对于super.clone()来说是最关键的呢?根类中的clone()方法负责建立正确的存储容量,并通过"按位复制"将二进制位从原始对象中复制到新对象的存储空间.也就是说,它并不只是预留存储空间以及复制一个对象--实际需要调查出欲复制之对象的准确大小,然后复制那个对象.由于所有这些工作都是在由根类定义之clone()方法的内部代码中进行的(根类并不知道要从自己这里继承出去什么),

java-关于Java object的用法

问题描述 关于Java object的用法 class Student { String name; int age; public boolean equals (Object obj) { Student st = null; if(obj instanceof Student) st =(Student)obj; else return false; if(st.name==this.name&&st.age==this.age) return true; else return f

java object 之clone方法全面解析_java

 1 protected native Object clone() throws CloneNotSupportedException;  1.方法由native关键字修饰 java中的native关键字表示这个方法是个本地方法,[java native说明].而且native修饰的方法执行效率比非native修饰的高. 2.方法由protected修饰 一个类在覆盖clone()方法时候,需要修改成public访问修饰符,这样才能保证其他所有的类都能够访问这个类的这个方法. 3.方法抛出Cl

java object用法-Java中object类的用法

问题描述 Java中object类的用法 class Student { String name; int age; public boolean equals (Object obj) { Student st = null; if(obj instanceof Student) st =(Student)obj; else return false; if(st.name==this.name&&st.age==this.age) return true; else return fa

java object c-java中将对象序列化后存入数据库中,IOS系统如何读取

问题描述 java中将对象序列化后存入数据库中,IOS系统如何读取 以前开发Android系统,java语言中将一些对象以序列化形式存入了网站的数据库中,这样用户手机如果是Android的话不会有任何问题.现在开发IOS系统,这样出现的一个难题就是在Object_c语言中如何将原来的已序列化的数据读入到IOS系统中.有什么好的方法及思路,请指教.QQ:102697532mail:mingqixu1@163.com

[Java] Object有哪些公用方法?

版权声明:请尊重个人劳动成果,转载注明出处,谢谢! 官方文档 http://docs.oracle.com/javase/8/docs/api/   protected Object clone()  创建并返回此对象的一个副本. boolean equals(Object obj)  指示其他某个对象是否与此对象"相等". protected void finalize()  当垃圾回收器确定不存在对该对象的更多引用时,由对象的垃圾回收器调用此方法. Class getClass()

Java Object类型与值类型之间的相互转化

public static void main(String[] args) { boolean var = true; foo((Object)var); } public static void foo(Object value) { boolean var = (boolean)value; System.out.println(var); } 如上方代码所示,函数foo会传递一个Object类型的变量value过来(传递进来的值确实是布尔值,不要问我为什么不直接在foo函数中将Objec

40.2. Squid - Internet Object Cache (WWW proxy cache)

如果apache 安装了gzip,deflate需要开启cache_vary cache_vary on 40.2.1. 源码安装 wget http://www.squid-cache.org/Versions/v2/2.6/squid-2.6.STABLE13.tar.gz ./configure --prefix=/usr/local/squid-2.6 make all make install mkdir -p /usr/local/squid-2.6/var/cache chown

java object and class design 问题

问题描述 Question:Writeaprogramthatconsistsofthefollowingclassestodemonstratetheconceptofcomposition.classFactorwithamethodisFactor()whichisusedtotaketwovaluesxandyandreturntrueifyisafactorofx,falseifitisnot.classPerfectwithamethodisPerfect()whichisusedt