Microstrategy 8.1.2 Web Universal 集群及相关学习
1 web服务器集群的使用和设置方法就不在这里重复了,这些东西随处都可以搜索的到。要说的是在Microstrategy 8.1.2 Web Universal中,使用集群要注意的几个方面。
首先,状态的存取方式问题,可以使用session、也可以使用cookie。大部分是用的都是cookie存取,session存取是需要关注集群的session同步问题的,而cookie保存在客户端,没有太多的限制,比较方便。
在管理员web设置的安全性选项中,默认会话信息是保存在Web Server上的,其实跟session原理是相同的;由于web服务器的设置限制,所以淘数据集群采用的为cookie保存,这样需要勾选 MicroStrategy Intelligence Server会话信息保存在临时cookies中,而不是Web Server上 这一个选项。在MicroStrategy\\WEB-INF\\xml\\sys_defaults.properties选项中对应的选项为useSessionCookie=1,设置好以后就可以采用web集群了。
其次,在web集群设置完成后的测试过程中发现,报表导出excel功能不正确,由于会话信息保存在web server时功能正常,而保存在客户端cookie时出现异常,判断为导出操作时取得会话信息出现错误。会话信息的cookie存储是在/MicroStrategy/servlet/路径下,name为mstrSmgr,但是执行导出Excel时会有一条新的cookie信息在/MicroStrategy/export/路径下,name为mstrSmgr,并且会去再取出原来会话信息来进行校验处理,但由于这2个路径下的cookie值不同的原因,因此会出现历史会话信息不存在的BUG。
解决方法,在导出操作时复制/MicroStrategy/servlet/路径下name为mstrSmgr的cookie至/MicroStrategy/export/即可。
如果用自定义的类来管理登录的话,public class CustomDefaultExternalSecurity extends com.microstrategy.web.app.AbstractExternalSecurity,可以在isRequestAuthorized方法中检测修复此BUG
public boolean isRequestAuthorized(RequestKeys reqKeys, ContainerServices cntSvcs,
WebIServerSession webIServerSession) {
// 事件检测处理,修复状态保存至客户端Cookie时,导出Excel会出错的BUG
String evt = reqKeys.getValue(“evt”);
if (null != evt) {
// 导出事件处理
if (“3068″.equals(evt)) {
String mstrSmgr = reqKeys.getValue(“mstrSmgr”);
if (null != mstrSmgr) {
GenericCookie genericCookie = cntSvcs.newCookie(“mstrSmgr”, mstrSmgr);
genericCookie.setMaxAge(-1);
genericCookie.setPath(“MicroStrategy/export/”);
cntSvcs.addCookieToResponse(genericCookie);
}
}
}
return true;
}
错误前的Cookie信息
正确导出的Cookie信息
2 对于程序二次开发深入的学习
首先声明的是深入探究二次开发是为了学习好的软件架构、好的设计理念、为自己的环境提供更好的服务,但是任何二次开发不可用于商业上的任何用途。
其次,同是MVC的web框架,基本原理我想开发人员都是明白清楚地,但是如何去符合原软件的框架来添加自己的业务需求,是需要我们对一些关键的类进行深入研究的。同时,由于版本的限制,很多有BUG的地方需要我们自己去解决,因此二次开发又是势在必行的。SDK上提供的开发文档虽然全面但是不细,因此很多东西需要我们自己去试验和学习。
最后,二次开发难点并不是完成什么样的需求,而是与源程序保持紧密型、一致性的程度,这是技术框架中始终要遵循的准则。
开发感触:
1 web端没有必要加入对license检测,直接在IServer中做限制就好了,在web中所有的类都有固定的出口(get、set),如果对关键类直接进行属性值的定义,那么所有的检测就是无用功。
2 很多接口的实现方法都是为了同时适应新版本和旧版本而写的,不免看起来让人觉得比较多余和重复,例如有些方法对默认值的定义采用这样的方法
public void abc() {
abc(false);
}
public void abc(boolean flag) {
if(flag) {} else{}
}
3 本身程序存在的一些细节问题,例如displayName的问题,很多ObjectInfo对象的displayName的值都为null,但是displayXML的中确存在displayName节点,这样一来很多要获取相关属性的操作就需要再经过一次处理。
以上就是近期对二次开发的一些学习和见解,希望能给大家提供一定的帮助,旨在相互学习探讨。
建议继续学习:
- HBase技术介绍 (阅读:6736)
- 解析Google集群资源管理系统Omega (阅读:4577)
- 快速构建实时抓取集群 (阅读:4355)
- Hadoop集群间Hadoop方案探讨 (阅读:3738)
- “集群和负载均衡”的通俗版解释 (阅读:3482)
- storm集群的监控 (阅读:3377)
- “集群和负载均衡”在实战当中的运用技巧 (阅读:3335)
- Ubuntu下PostgreSQL数据库集群(PL/Proxy)配置方法 (阅读:2943)
- 服务器集群架构的设计与选择 (阅读:2905)
- MySQL Cluster集群探索与实践 (阅读:2803)
扫一扫订阅我的微信号:IT技术博客大学习
- 作者:zifeng 来源: 淘宝数据平台团队
- 标签: Microstrategy 集群
- 发布时间:2010-09-09 22:00:48
- [69] 如何拿下简短的域名
- [67] Go Reflect 性能
- [63] Oracle MTS模式下 进程地址与会话信
- [60] IOS安全–浅谈关于IOS加固的几种方法
- [60] 【社会化设计】自我(self)部分――欢迎区
- [59] 图书馆的世界纪录
- [57] android 开发入门
- [55] 视觉调整-设计师 vs. 逻辑
- [48] 界面设计速成
- [47] 读书笔记-壹百度:百度十年千倍的29条法则