Oracle应用服务器单个Container多Process(jvm)环境下,用Ormi和jms实现toplink会话缓存同步

Oracle应用服务器单个Container多Process(jvm)环境下,用Ormi和jms实现toplink会话缓存同步
在Oracle Application Server环境下OC4J Instance下的每个process的jvm的rmi端口是动态分配的,如果能解决这个动态的问题,就可以使用ORMI作为jndi的provider url。我们的OC4J Instance是有3个process(jvm)的:


如何固定OC4J Instance的端口呢?
1.修改opmn.xml, 我们把rmi端口固定在12405-12407三个端口之间,这样就保证了12405这个端口是肯定可以使用的,它必然会分配给一个process
\
  < process - type id = " OC4J_TTS "  module - id = " OC4J "  status = " enabled " >
               
< module - data >
                  
< category id = " start-parameters " >
                     
< data id = " java-options "  value = " -server -Djava.security.policy=$ORACLE_HOME/j2ee/OC4J_TTS/config/java2.policy -Djava.awt.headless=true -Dhttp.webdir.enable=false -Doc4j.jms.debug=true -Doc4j.jms.printStackTrace=true " />
                     
< data id = " oc4j-options "  value = " -userThreads " />
                  
</ category >
                  
< category id = " stop-parameters " >
                     
< data id = " java-options "  value = " -Djava.security.policy=$ORACLE_HOME/j2ee/OC4J_TTS/config/java2.policy -Djava.awt.headless=true -Dhttp.webdir.enable=false " />
                  
</ category >
               
</ module - data >
               
< start timeout = " 600 "  retry = " 2 " />
               
< stop timeout = " 120 " />
               
< restart timeout = " 720 "  retry = " 2 " />
               
< port id = " default-web-site "  range = " 12501-12600 "  protocol = " ajp " />
               
< port id = " rmi "  range = " 12405-12407 " />
               
< port id = " rmis "  range = " 12701-12800 " />
               
< port id = " jms "  range = " 12601-12700 " />
               
< process - set id = " default_group "  numprocs = " 3 " />
            
</ process - type >


2.配置同步策略sessions.xml
       < remote-command >
         
< commands >
            
< cache-sync > true </ cache-sync >
         
</ commands >
         
< transport  xsi:type ="jms-topic-transport" >
            
< topic-host-url > ormi://localhost:12405 </ topic-host-url >
            
< topic-connection-factory-name > TopicConnectionFactory </ topic-connection-factory-name >
            
< topic-name > jms/cachesyn </ topic-name >
            
< jndi-naming-service >
               
< url > ormi://localhost:12405 </ url >
               
< user-name > iasFW </ user-name >
               
< password > 2165EA174261FEADFEC371B11ACA8799 </ password >
               
< initial-context-factory-name > oracle.j2ee.rmi.RMIInitialContextFactory </ initial-context-factory-name >
            
</ jndi-naming-service >
         
</ transport >
      
</ remote-command >

3.初始化session时的注意点

(1) deploy时初始化
如果是deploy时初始化,可能需要等待,不能办证初始化session servlet的线程和jms server的线程完成的先后顺序,需要等待jmssever线程执行完毕,可以正确lookup出connection factory和topic

(2)第一次访问应用时初始化
这种方式初始化初始化的时候,JmsServer线程已经执行完毕,我们已经可以正常的进行cache同步了




你可能感兴趣的:(Oracle应用服务器单个Container多Process(jvm)环境下,用Ormi和jms实现toplink会话缓存同步)