技术头条 - 一个快速在微博传播文章的方式     搜索本站
您现在的位置首页 --> 系统架构 --> Microstrategy 8.1.2 Web Universal 集群及相关学习

Microstrategy 8.1.2 Web Universal 集群及相关学习

浏览:2032次  出处信息

    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节点,这样一来很多要获取相关属性的操作就需要再经过一次处理。

    以上就是近期对二次开发的一些学习和见解,希望能给大家提供一定的帮助,旨在相互学习探讨。

建议继续学习:

  1. HBase技术介绍    (阅读:6768)
  2. 解析Google集群资源管理系统Omega    (阅读:4598)
  3. 快速构建实时抓取集群    (阅读:4377)
  4. Hadoop集群间Hadoop方案探讨    (阅读:3747)
  5. “集群和负载均衡”的通俗版解释    (阅读:3527)
  6. storm集群的监控    (阅读:3390)
  7. “集群和负载均衡”在实战当中的运用技巧    (阅读:3375)
  8. Ubuntu下PostgreSQL数据库集群(PL/Proxy)配置方法    (阅读:2955)
  9. 服务器集群架构的设计与选择    (阅读:2918)
  10. MySQL Cluster集群探索与实践    (阅读:2830)
QQ技术交流群:445447336,欢迎加入!
扫一扫订阅我的微信号:IT技术博客大学习
© 2009 - 2024 by blogread.cn 微博:@IT技术博客大学习

京ICP备15002552号-1