IT技术博客大学习 共学习 共进步

Microstrategy 8.1.2 Web Universal 集群及相关学习

淘宝数据平台团队 2010-09-09 22:00:48 浏览 2,882 次

    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技术介绍 (阅读 7,944)
  2. 解析Google集群资源管理系统Omega (阅读 5,744)
  3. 快速构建实时抓取集群 (阅读 5,084)
  4. Hadoop集群间Hadoop方案探讨 (阅读 4,444)
  5. “集群和负载均衡”的通俗版解释 (阅读 4,405)
  6. storm集群的监控 (阅读 4,185)
  7. “集群和负载均衡”在实战当中的运用技巧 (阅读 4,142)
  8. Ubuntu下PostgreSQL数据库集群(PL/Proxy)配置方法 (阅读 3,924)
  9. storm集群的监控 (阅读 3,544)
  10. 服务器集群架构的设计与选择 (阅读 3,524)