coherence初识
近期,发现在预发布环境上的项目有些冲突,本着治病救人的原则,不得已要一步步剖析,苦逼的就是我们可爱可敬的程序员。
先介绍下大体情况,应用项目都是velocity+spring+mybatis,没什么好说的,spring配置了一个sso的filter,filter中使用了coherence3.5.3作为缓存,项目打成war包后部署在jboss eap 6.3域模式下(两台物理机,每个上起一个server实例,属于同一group),由于有些jar包是公用的,这些jar包作为jboss的module部署在jboss上,其中就包括coherence.jar。一个war包部上后是正常的,再部一个war,上一个war的ssofilter就出现异常,似乎缓存的东西没了。
开始找人来看,让我们换成Ehcache,好吧,换。。。,倒是好了,没想到过几天问题来了,ehcache都是local存储的,一个应用一个cache,原来的coherence会自动组群,删一次就ok了,现在要一个一个的删,不够nice,想想还是要弄明白coherence到底是怎么了?
注意力再次集中在coherence上,百度一下,没有答案,百度一下,没有答案。。。倒是看了一些介绍性的文章和翻译的中文文档,大体知道coherence可以通过组播地址自动组群,构成集群。再看我们的项目,coherence配置都是一样的,难道要区别?试试吧,折腾好半天没好,卸大半气了。一直以来怀疑是我们在jboss上部署的公共模块有问题,后来在本机上搭了个环境,各种奇淫技巧用上,看日志嘛,分析来分析去,发现如果两个war包部在两个jboss server上没有问题,第一个war会建一个集群,并把自己加进去,第二个war再部署,会自动加入第一个war建的集群中,正常啊。如果放在一个server中,第一个正常,第二个好像不是一个节点,没有coherence的日志,使用的应该是第一个war包创建的node,下图Id=1就是第一个war包的节点信息
然后,在jboss上replace第二个war包
可以看到Id=1(由第一个war创建)的节点left,第二个war产生一个Id=2的节点,如果操作第一个war包的cache,会出现类似下面的日志
出现这样的日志也与我们的项目有关,
public class NamedCacheFactoryBean implements FactoryBean<NamedCache>, InitializingBean, DisposableBean {
。。。。。
@Override
public void destroy() throws Exception {
if (this.ensureCluster) {
CacheFactory.shutdown();
}
} @Override
public void afterPropertiesSet() throws Exception {
if (this.ensureCluster) {
CacheFactory.ensureCluster();
}
this.cache = CacheFactory.getCache(this.cacheName);
for (MapListener mapListener : mapListeners) {
this.cache.addMapListener(mapListener);
}
}
。。。。。
}
第二个war包replace导致共享的node关闭,第二个war产生一个Id=2的节点仅第二个war包使用,第一个war包使用异常,估计是像CacheFactory.shutdown()这样操作的问题,只要保持各个war包独立就可以了吧,把coherence.jar从jboss公共模块上拉下来,打包到war里面,后来的测试很顺利,每个war包有单独的node
期间还发现一个问题:同样的配置coherence.jar作为公共模块,tangosol-coherence-override.xml配置不起作用,出现类似
Optional configuration override "coherence/preproduct/tangosol-coherence-override.xml" is not specified
的日志,而打包到coherence.jar中就可以,看来coherence找这个配置路径时是依赖class加载路径的,其实也可以把这些配置文件打包到jar包中,不过,这样的话就限制了这个jar的使用,不太好
参考文章:
2. Coherence Step by Step 第二篇 集群(二) 建立集群
coherence初识的更多相关文章
- coherence配置说明
经过上篇 coherence初识 ,最近算是和coherence杠上了,针对coherence3.5.3这个版本,把学到的东西整理下 1. 这个jar包有点大,4M多,首先打开coherence.ja ...
- Android动画效果之初识Property Animation(属性动画)
前言: 前面两篇介绍了Android的Tween Animation(补间动画) Android动画效果之Tween Animation(补间动画).Frame Animation(逐帧动画)Andr ...
- 初识Hadoop
第一部分: 初识Hadoop 一. 谁说大象不能跳舞 业务数据越来越多,用关系型数据库来存储和处理数据越来越感觉吃力,一个查询或者一个导出,要执行很长 ...
- python学习笔记(基础四:模块初识、pyc和PyCodeObject是什么)
一.模块初识(一) 模块,也叫库.库有标准库第三方库. 注意事项:文件名不能和导入的模块名相同 1. sys模块 import sys print(sys.path) #打印环境变量 print(sy ...
- 初识IOS,Label控件的应用。
初识IOS,Label控件的应用. // // ViewController.m // Gua.test // // Created by 郭美男 on 16/5/31. // Copyright © ...
- UI篇(初识君面)
我们的APP要想吸引用户,就要把UI(脸蛋)搞漂亮一点.毕竟好的外貌是增进人际关系的第一步,我们程序员看到一个APP时,第一眼就是看这个软件的功能,不去关心界面是否漂亮,看到好的程序会说"我 ...
- Python导出Excel为Lua/Json/Xml实例教程(一):初识Python
Python导出Excel为Lua/Json/Xml实例教程(一):初识Python 相关链接: Python导出Excel为Lua/Json/Xml实例教程(一):初识Python Python导出 ...
- 初识SpringMvc
初识SpringMvc springMvc简介:SpringMVC也叫Spring Web mvc,属于表现层的框架.Spring MVC是Spring框架的一部分,是在Spring3.0后发布的 s ...
- 初识redis数据类型
初识redis数据类型 1.String(字符串) string是redis最基本的类型,一个key对应一个value. string类型是二进制安全的.意思是redis的string可以包含任何数据 ...
随机推荐
- stdlib.h 头文件
stdlib 头文件即standard library标准库头文件.stdlib.h里面定义了五种类型.一些宏和通用工具函数. 类型例如size_t.wchar_t.div_t.ldiv_t和lldi ...
- POJ 2186 Popular Cows(强连通分量缩点)
题目链接:http://poj.org/problem?id=2186 题目意思大概是:给定N(N<=10000)个点和M(M<=50000)条有向边,求有多少个“受欢迎的点”.所谓的“受 ...
- C#学习笔记(六):可空类型、匿名方法和迭代器
可空类型 为啥要引入可空类型? 在数据库中,字段是可以为null值的,那么在C#中为了方便的操作数据库的值,微软引入了可空类型. 声明可空类型 我们可以使用两种方法声明一个可空类型: Nullable ...
- Spring3.0 AOP 详解
一.什么是 AOP. AOP(Aspect Orient Programming),也就是面向切面编程.可以这样理解,面向对象编程(OOP)是从静态角度考虑程序结构,面向切面编程(AOP)是从动态角度 ...
- Linux学习笔记----(2)
闲着无事,就敲起了Linux 命令,熟悉一下.记得昨天在书上看到了 find命令的用法,觉得挺神奇的. 其中 find 能够确定文件的查找深度 于是 敲了如下命令: #mkdir father #to ...
- Cocos2d-x——Cocos2d-x 屏幕适配新解 – 兼容与扩展【转载】
Cocos2d-x 屏幕适配新解 – 兼容与扩展 本文出自[无间落叶](转载请保留出处):http://blog.leafsoar.com/archives/2013/05-13-08.html 在读 ...
- Android布局优化之include、merge、ViewStub的使用
本文针对include.merge.ViewStub三个标签如何在布局复用.有效减少布局层级以及如何可以按需加载三个方面进行介绍的. 复用布局可以帮助我们创建一些可以重复使用的复杂布局.这种方式也意味 ...
- 【转】部署web项目到weblogic上启动错误
启动weblogic报错:java.lang.ClassCastException: com.sun.faces.application.WebappLifecycleListener cannot ...
- RFID与射频卡电器特性
电气特性: 容量为8K位EEPrOM: ● 分为16个扇区,每个扇区为4块,每块16个字节,以块为存取单位: ● 每个扇区有独立的一组密码及访问控制: ● 每张卡有唯一序列号,为32位: ● 具有防冲 ...
- Oracle 生成随机密码
需求:需要定期更改密码.要求是1.密码位数11位.2.必须包含大小写字母.数字.特殊字符.3.排除一些特殊字符如().@.& oracle数据库中有可已生成随机密码包dbms_random,但 ...