1. <mark id="ghavm"><button id="ghavm"></button></mark>

      <listing id="ghavm"><strong id="ghavm"></strong></listing>
      <code id="ghavm"></code><rt id="ghavm"><label id="ghavm"><legend id="ghavm"></legend></label></rt>
      1. <tt id="ghavm"><button id="ghavm"></button></tt>

        随笔-75  评论-193  文章-5  trackbacks-0
          2013年1月28日
        var fixgeometry = function() {
            /* Some orientation changes leave the scroll position at something
             * that isn't 0,0. This is annoying for user experience. */
            scroll(0, 0);
            /* Calculate the geometry that our content area should take */
            var header = $(".header:visible");
            var footer = $(".footer:visible");
            var content = $(".content:visible");
            var viewport_height = $(window).height();
            
            var content_height = viewport_height - header.outerHeight() - footer.outerHeight();
            
            /* Trim margin/border/padding height */
            content_height -= (content.outerHeight() - content.height());
            content.height(content_height);
          }; /* fixgeometry */
          $(document).ready(function() {
            $(window).bind("orientationchange resize pageshow", fixgeometry);
          });
        posted @ 2013-01-28 10:59 The Matrix 阅读(4830) | 评论 (1)编辑 收藏
          2012年4月4日
        环境:
            
            Centos6.2(安装在Vmware7.0中)
            Magento1.6.2
            Apache Httpd Server 2.2.15
            MySql 5.1.61
            PHP5.3.3

        安装过程:

            apache http、mysql、php及相关扩展安装:
            其中apache http、Mysql、php都是利用centos的添加/?#22659;?#36719;件功能进行安装。同?#31508;?#29992;该功能安装"php-xml"、"php-gd"、"php-pdo"、"php-mbstring"、"php-mysql"扩展。
            使用chkconfig配置httpd和mysql为系统服务。命令如下:
            chkconfig httpd on
            chkconfig -add mysqld
            chkconfig mysqld on
            使用chkconfig --list 可以查看所有的服务配置状态
            使用service httpd start、service mysqld start启动httpd和mysqld服务。可以通过service httpd restart重启相关服务。
            此时访?#26102;?#26426;的http://localhost可以看到apache的欢迎界面,同时编辑index.php文件,其内容如下:
            <?php
                phpinfo();
            ?>
            并将该文件置于/var/www/html目录下,访问http://localhost/index.php,此时应该不能看到php版本信息,仅能看到index.php的静态文本内容。
            修改/etc/httpd/conf/httpd.conf文件,修改如下:
            DirectoryIndex index.html index.html.var ->  DirectoryIndex index.html index.htm index.php
            增加:
            AddType application/x-httpd-php .php
            AddDefaultCharset -> AddDefaultCharset off  (解决中文乱码问题)
            增加一段VirtualHost描述,如下(在配置文件的最后):
            <VirtualHost *:80>
                DocumentRoot /var/www/smallfive
                ServerName smallfive
                ServerAlias smallfive.com *.smallfive.com
            </VirtualHost>
            此时访问http://localhost/index.php,应该一切正常

            设置数据库:
            使用mysqladmin -u root password 'newpassword'设置mysql数据库的默认密码
            让数据库更安全:
            mysql -u root -p    进入mysql
            mysql> DROP DATABASE test;                ?#22659;齮est数据库
            mysql> DELETE FROM mysql.user WHERE user = '';       ?#22659;?#21311;名帐户
            mysql> FLUSH PRIVILEGES;                 重载权限
            创建magento数据库
            mysql> CR   访问magento数据库,确保一切正常

            配置Magento:
            解压缩magento1.6.2版本至/var/www/smallfive/magento目录
            解压命令:
           EATE DATABASE magento;
            mysql> GRANT ALL PRIVILEGES ON magento.* TO 'root'@'localhost' IDENTIFIED BY 'newpassword'; 
          tar zxvf magento1.6.2.tar.gz
            此时访问http://localhost/magento,可根据magento的设置进行配置
           
            注意如下问题:
            1、确保当前用户拥有对/var/www/smallfive/magento可读可写权限
            2、还需安装mcrypt库,安装这个库比较繁琐,mcrypt依赖于Libmcrypt库和mhash库,我?#20999;?#35201;下载Libmcrypt库和mhash库安装它们,然后再编译Mcrypt。
            在编译之前,先做好如下准备工作:
                a、安装phpize:yum -y install php-devel
                b、安装C++脚本编译模块:
                    yum -y install gcc gcc-g++
                    yum -y install gcc gcc-c++
            安装mcrypt库过程,如下:
                a、下载libmcrypt和mhash库
                    Libmcrypt:http://sourceforge.net/project/showfiles.php?group_id=87941&package_id=91774&release_id=487459
                    mhash:http://sourceforge.net/project/showfiles.php?group_id=4286&package_id=4300&release_id=645636
                b、将上述两个下载后,分别解压,并执行如下命令编译:
                    ./configure
                    make && make install
                c、下载php对应的?#21019;?#30721;,解压,
                    进入php?#21019;?#30721;的 /ext/mcrypt目录
                    执行phpize命令
                    ./configure –with-php-config=/usr/bin/php-config
                    make && make install
                d、在php.ini文件中增加如下内容:
                    extension=/usr/lib/php/modules/mcrypt.so
                    mcrypt.so文件路径在php-config文件中可以找到
                e、service httpd restart
           
            end!
             
            参考文章:
            http://www.eexu.com/article.asp?id=1730
            http://www.ruiwant.com/centos-6-0%E4%B8%8Bmagento%E7%8E%AF%E5%A2%83%E9%85%8D%E7%BD%AE%E6%80%BB%E7%BB%93.html
            http://zixun.www.net.cn/qita/2344.html
            http://os.qudong.com/Linux/2010/0210/64441.html
        posted @ 2012-04-04 17:09 The Matrix 阅读(2944) | 评论 (1)编辑 收藏
          2012年3月2日
        有时在vmware里面安装的系统或应用有License时间的限制,可以通过修改虚拟机时间的方法来防止过期,此时需在.vmx文件中加入下面的内容:
        tools.syncTime = "FALSE"
        time.synchronize.continue = "FALSE"
        time.synchronize.restore = "FALSE"
        time.synchronize.resume.disk = "FALSE"
        time.synchronize.shrink = "FALSE"
        rtc.startTime = 1183431600  #这是用来指定虚拟机启动后的时间。数字是自1970年1月1日零时零分零秒以来的秒数,可以通过如下网址将某个时间转换为该数字(Unix时间戳):http://www.onlineconversion.com/unix_time.htm

        注意:同时还需在虚拟机操作系统的服务中,停用“VMware Tools Service”的服务。
        在Windows Server 2003中操作系统自身也有时间同步功能,需在时间设定中停用,同时停用“Windows Timer”服务。
        posted @ 2012-03-02 10:51 The Matrix 阅读(7162) | 评论 (0)编辑 收藏
          2011年5月31日

        1. 打开工具Oracle SQL Plus 以dba身份登录sys用户
        sqlplus /nolog
        conn sys@url as sysdba

        2. 创建用户并指定表空间

        使用客户端工具或者Web管理控制台创建表空间以及用户
        给用户赋予connect、resource、dba权限
        grant connect,resource,dba to username;


        注意:给oracle用户分配connect、resource角色时,此时connect 角色中有一个 UNLIMITED TABLESPACE 权限,也就是username这个用户可以在其他表空间里随意建表。
        revoke unlimited tablespce from username;     --撤销username用户在任意表空间建表的权限
        alter user username quota 0 on users;      --alter username quota 0 on Users;  // 还不是很清楚具体含义???
        alter user username quota unlimited on tablespacename;   --赋予username用户在tablespacename表空间任意建表的权限;

         


        3. 使用imp工具导入dmp数据文件
        imp username/password@url file=c:\db.dmp fromuser=username1 touser=username log=c:\log.txt


        -------------------------------------------------------------------------------------------------------------
        其它命令:
        select * from dba_users;    --查询用户

        select * from dba_tables;    --查询表
        select * from dba_views;    --查询视图
        select * from dba_tablespaces;    --查询表空间


        oracle 10g,查询表空间使用率
        Select * from sys.DBA_TABLESPACE_USAGE_METRICS;
        -------------------------------------------------------------------------------------------------------------

        drop user username cascade;

        ORA-01940:无法?#22659;?#24403;前已连接的用户

        select username, sid, serial# from v$session where username='username';

        alter system kill session'sid,serial#'

         

        posted @ 2011-05-31 16:43 The Matrix 阅读(3215) | 评论 (0)编辑 收藏
          2011年5月20日
        环境:Windows7 professional

        1、下载redmine1.1.3.zip、ruby1.8.7、rubygems-1.3.7.zip、mysql 5.0

        2、安装MySQL5.0,cmd窗口下使用mysql -u root -p 登录MySQL数据库,执行如下语句创建redmine数据库及用户:
        create database redmine character set utf8;
        create user 'redmine'@'localhost' identified by 'my_password';
        grant all privileges on redmine.* to 'redmine'@'localhost';
        注:
            使用MySQL5.5在后面进行初始数据时Ruby会提示连接有问题
            在安装完MySQL后,先不要进行配置,至“MySQL安装路径\bin”目录下,修改MySQLInstanceConfig.exe为“以管理员成分执行此程序”,“以兼容模式运行该程序”
            进行数据库配置时,选择字符集为utf8

        3、运行ruby1.8.7安装包,解压至d:/ruby187,将d:/ruby187/bin添加至path环境变量中
        安装后可执行 ruby -v查看ruby版本以检验安装是否正确

        4、解压rubygems-1.3.7.zip至d:/rubygems-1.3.7
        进入d:/rubygems-1.3.7目录,执行ruby setup.rb
        注:Redmine需要rubygems 1.3.1 - 1.5.x,肯定不能用1.8.2版本

        5、执行gem install rails -v=2.3.5 远程安装rails2.3.5版本
        gem install mysql
        gem install -v=0.4.2 i18n

        6、解压缩redmine1.1.3至d:/redmine1.1.3目录
        进入d:/redmine-1.1.3/config目录,修改database.yml.example文件为database.yml,并修改该文件中的production数据库连?#20248;?#32622;为如下:
        production:
          adapter: mysql
          database: redmine
          host: localhost
          username: redmine
          password: my_password
          encoding: utf8

        进入d:/redmine1.1.3目录,执行
        rake config/initializers/session_store.rb
        rake db:migrate RAILS_ENV="production"

        7、加载默认配置数据
        rake redmine:load_default_data RAILS_ENV="production"
        默认语言选择"zh"

        8、运行
        ruby script/server webrick -e production

        9、访问:http://localhost:3000
        使用admin/admin进行登入
        进入设置,把默认语言设为“简体中文”,然后设置当前用户的默认语言设为“简体中文”,这样就是中文界面了

        -----------------------------------------

        继续,将redmine设置为windows 7的服务

        1、首先需要配置mysql为windows 7的服务

        2、Ruby提供一个安装Ruby程序为服务的包:mongrel_service。安装其实很简单,运行:gem install mongrel_service

        3、安装redmine为服务,执行mongrel_rails service::install -N RedMine -c C:\redmine-1.1.3 -p 3000 –e production
        注意:此处打开cmd窗口时,需要输入cmd后,不是直接按Enter,而是按 Ctrl+Shift+Enter打开Cmd窗口,此时以管理员身份打开,否则安装为服务时会提示拒绝访问。

        4、安装服务后,需检查服务-e后的?#38382;?#26159;不是production,如果不是production而是development,则在注册表中把?#38382;?#25163;动改为production。修改方法是:打开“注册表编辑器”,展开分支“HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services”,选择redmine服务,找到ImagePath项,修改保存后在服务列表中启动服务,并把服务设置自动启动。

        OK!
        posted @ 2011-05-20 10:25 The Matrix 阅读(2622) | 评论 (0)编辑 收藏
          2010年11月9日
        没仔细研究,先把项目地址记下:http://arshaw.com/fullcalendar/

        这个博客中另有几个推荐的类似项目:posted @ 2010-11-09 20:37 The Matrix 阅读(1072) | 评论 (0)编辑 收藏
          2010年4月14日

        这几天在看?#19978;?#24179;的?#31471;?#22312;谋杀中国经济》,这本书?#19968;?#26412;看过一遍了,认为全书的重点在于中华文化的四大茫然,整本书都是围绕这四大茫然展开论述,中华文化的四大茫然如下:
        茫然之一:就知道赚钱
        茫然之二:不了解世界
        茫然之三:不了解别人为什么那么看你
        茫然之?#27169;?#19981;了解自己的缺点

        大家有时间可以看看这本书,我觉得写的不错,至少我自己看完深有?#20889;ィ?#25105;觉得完全可以将这几点套用到我们生活的很多方面,比如对于我们搞IT的技术人员?#27492;擔?#25105;认为现在很多人也存在四大茫然:

        茫然之一:只知道完成任务。也许是我年龄大了点,但我觉得现在很多小朋友,尤其是85年以后出生的,工作的时候只是在完成任务,事情做完了,有时也不测试,或者就是匆?#20063;?#35797;,匆匆结束,并没有好好的想为什么这件事老大要让我这样做,这样做有什么好处,会不会有缺点,我是不是有更好的方法。当你不去想的时候,意味着你少了很多提高的机会。

        茫然之二:不追究为什么。很多人做事情就象第一条说的那样,只是完成任务,并不去想其中的原理是什么。面试过很多人,对于目前工作两三年的大部分人?#27492;?当然我面试的不是好的学校毕业的,基本学校为中?#32469;?#19979;点),一旦涉及到Spring、Hibernate、Struts等框架深入点东西的时候,大都回答不上来,只是对框架能熟练应用而已。这样够么?#32771;?#31639;机的很多知识,当你熟悉了其运作原理,框架对于你?#27492;擔?#21482;是手到擒来,看看学学就会用了。我问过好几个同事,平时晚上回去都干嘛,很多人都回答我晚上回去看看电视,稍微看看书就睡觉了。我有点惊讶,我想如果你想成为一个技术高手,一个能拿高薪的程序?#20445;?#20320;?#32622;?#26377;天份,又不付出超过常人的努力,凭什么你比别人强呢?

        茫然之三:不善于总结。很多人(又是很多人)过着做一天和尚撞一天钟的日子,日子一天一天过去,基本不去总结,只是过了好长一段时间会发觉,原来最近我啥也没有进步,啥也没学到,还是老样子。知识在于积累,你只有?#27426;?#24635;结,知识才能更好的积累,才能更好的为你服务。

        茫然之?#27169;好?#26377;明确的目标。一个人没有目标就决定了他不会有长足的进步。你都没有想过自己要成为一个架构师,一个项目经理,一个部门经理,一个技术总监,都没有想过要成为这样的人需要具备什么样的条件,你怎么可能知道自己欠?#31508;?#20040;?需要补充什么呢?长远目标要明确,然后根据长远目标进行分析,我要达到这样的目标,还有什么欠?#20445;?#25454;此制定短期目标,短期目标一定要可实现可操作。这样随着你目标的一步一步实现,你各方面的能力也随之提高了。

        写了几点,也作为对自己的鞭策。

        posted @ 2010-04-14 22:05 The Matrix 阅读(5710) | 评论 (10)编辑 收藏
          2010年2月3日

        2010年已经过去一个月了,赶在农历春节前列一下今年的读书清单,不能总把精力放在工作中了,也需要补充点新知?#35835;耍?#21542;则没有新东西能?#27605;?#20986;来了。

        1、《OSGI原理与最佳?#23548;罰?#32467;合这本书并研究SpringDM,做一些实例。

        2、《SQL语言?#24080;酢?/p>

        3、《Oracle9i&10g编程?#24080;酢?/font>

        4、?#37117;?#26500;之美》

        5、《UML和模式应用》

        6、《UML彩色建模》

        7、?#35835;?#22495;驱动设计与模式实战》

        8、《敏捷软件开发 原则、模式与?#23548;?/font>

        9、?#24230;?#20214;开发的边界》

        10、?#24230;?#20214;随想录》

        11、《走出软件作坊》

        就这么多了,9、10、11去年都看过一遍了,但好多地方?#25191;?#36807;了一下,还要仔细阅读。

        另外也对自己提个要求,看书要做读书笔记。

        2010年-我的读书年!

        posted @ 2010-02-03 23:27 The Matrix 阅读(2597) | 评论 (6)编辑 收藏
          2010年1月5日

        摘自?#24230;?#20214;随想录》

        看了软件随想录中下面一段话,觉得非常棒,作为一名软件从业人?#20445;?#19981;一定有机会能实?#32622;?#36848;中的优秀软件产品,但这样的理念需要贯穿我们每个人的心田,时刻记在心中:

        【创造一个有使用价值的软件,你必须?#31508;?#21051;刻都在奋斗,每一次的修补,每一个功能,每一处小小的改进,你都在奋斗,目的只是为了再多创造一点空间,可以再多吸引一个用户加入。没有捷径可走。你需要一点运气,但是这不取决于你是否?#20197;恕?#20320;之所以会有好运气,那是因为你寸土必争。

        每天你前进一小步,将一件东西做得比昨天好一点点。这样的改进几乎看不出可以让谁获益,几乎没有变化。但是,你前进了一小步。

        有无数个要做的这样微小的改进。

        为了发现可以改进的地方。你必须有一个思维定势,始终如一的用批判的眼光看世界。随便找一样东西,如果你看不出它的缺点,那么你的思维转型还没有成功。当你成功的时候,你身边亲密的人会被你逼得发疯。你的家人恨不得杀了你。当你步行上班的时候,看到一个司机漫不经心地开车,你几乎用了所有的意志力才勉强忍不住冲?#20808;?#21578;诉那个司机,他这样开车差点儿要了?#21592;?#22352;在轮椅?#31995;?#37027;个可怜小孩的命。

        当你改正了一个又一个这样的小细节后,当你磨光、定型、擦亮、修?#25991;?#30340;产品的每一个小边角后,就会有神奇的事情发生。厘米变成?#32622;祝置?#21464;成米,米变成了千?#20303;?#20320;最后拿出来的是一件真正优秀的产品。它第一眼就让人觉得震?#24120;?#20986;类拔?#20572;?#24037;作起来完全符合?#26412;酢?#23601;算100万个用户中有一个用户?#31243;?#31361;然要用到一个他100万次使用中才会用到一次的罕见功能,他发?#33267;?#36825;个功能不仅能用,而?#19968;?#24456;没:在你的软件中,即使是看门人的小屋都?#22871;?#22823;理石的地板,配有实心的橡木门和?#19968;?#24515;木的壁板。

        就是在这个时候,你意识到这是一个优秀软件。】

        posted @ 2010-01-05 21:25 The Matrix 阅读(2070) | 评论 (11)编辑 收藏
          2009年11月11日

        在Flash Builder 4 Beta 2版本中,使用mxml方式实现state的切换有了很大改进,使用起来更方便,具体可参见下文:

        http://onflex.org/learn/fx4/index.php?page=States

        看完这篇文章后,想到一个问题,如何用编程的方式实现切换呢,找了参考资料,实?#33267;?#19968;个例子,代码如下:

        开发环境:Flash Builder 4 Beta2

        <?xml version="1.0" encoding="utf-8"?>
        <s:Application
            
        xmlns:fx="http://ns.adobe.com/mxml/2009"
            xmlns:s
        ="library://ns.adobe.com/flex/spark"
            creationComplete
        ="creationCompleteHandler(event)">
            
        <fx:Script>
                
        <![CDATA[
                    import mx.core.UIComponent;
                    import mx.events.FlexEvent;
                    import mx.states.SetProperty;
                    import mx.states.State;
                    
                    import spark.components.Label;
                    import spark.components.Panel;

                    private var stateArray : Array;
                    private var state1 : State;
                    private var state2 : State;
                    
                    protected function creationCompleteHandler(event:FlexEvent):void
                    {
                        state1 = new State();
                        state1.name="state1";
                        
                        state2 = new State();
                        state2.name="state2";
                        
                        var stateArray1:Array = new Array();
                        var stateArray2:Array = new Array();
                        
                        state1.overrides = stateArray1;
                        state2.overrides = stateArray2;
                        
                        stateArray = new Array();
                        stateArray.push(state1);
                        stateArray.push(state2);
                        this.states = stateArray;
                        
                        var panel:Panel = new Panel();
                        group.addElement(panel);
                        var label:Label = new Label();
                        panel.addElement(label);
                        
                        buildStates(stateArray1, stateArray2, panel, label);
                        this.currentState = "state1";
                    }

                    private function buildStates(stateArray1:Array, stateArray2:Array,
                        compenent1:UIComponent, compenent2:UIComponent) : void{
                        
                        stateArray1.push(makeSetProp(compenent1, "title", "Panel1"));            
                        stateArray1.push(makeSetProp(compenent2, "text", "One"));
                        
                        stateArray2.push(makeSetProp(compenent1, "title", "Panel2"));
                        stateArray2.push(makeSetProp(compenent2, "text", "Two"));
                    }
                    
                    private function makeSetProp(target:UIComponent, name:String, value:*):SetProperty{
                        var sp:SetProperty = new SetProperty();
                        sp.target = target;
                        sp.name = name;
                        sp.value = value;
                        return sp;
                    } 
                
        ]]>
            
        </fx:Script>
                
            
        <s:VGroup autoLayout="true" horizontalAlign="center">
                
        <s:HGroup horizontalCenter="0">            
                    
        <s:Button label="One" 
                        click
        ="this.currentState='state1'"/>            
                    
        <s:Button label="Two" 
                        click
        ="this.currentState='state2'"/>            
                
        </s:HGroup>
                
        <s:HGroup id="group" horizontalCenter="0">            
                
        </s:HGroup>
            
        </s:VGroup>
            
        </s:Application>
        posted @ 2009-11-11 21:59 The Matrix 阅读(1478) | 评论 (0)编辑 收藏
          2009年10月22日

            这是前几天在别人的BLog上看到的一幅图,觉得不错,基本涵盖了IT人员需要掌握的基础知识这块,从这幅图中可以看出语言并不重要,关键是要搞明白整个环节,这样遇到任何问题就能有目的、有方法的学习了。

        计算机知识体系

        posted @ 2009-10-22 08:32 The Matrix 阅读(748) | 评论 (0)编辑 收藏
          2009年7月19日

        1、下载Ruby并安装,下载地址:http://rubyforge.org/frs/?group_id=167

        下载了1.8.6-27 Release Candidate 2(ruby186-27_rc2.exe)版本

        2、在windows的命令行下,输入 ruby –v,检查ruby是否正确安装,应该出现如下信息:

        ruby 1.8.6 (2008-08-11 patchlevel 287) [i386-mswin32]

        3、安装rails,执行gem install rails命令,安装成功后,执行rails -v检查。

        我安装了Rails2.3.2版本。使用gem install -version rails可以指定安装的rails版本,具体如何使用gem,可以用gem help install查看帮助。

         

        参考:Ruby On Rails(ROR)安装(http://enjoylog.cn/?p=8

         

        装好了便到Ruby On Rails的官方网站(http://rubyonrails.org/),找到了

        Getting Started with Rails(http://guides.rubyonrails.org/getting_started.html)

        开始一步一步follow up。

        RubyOnRails的中文站?#31995;?#32763;译文档没有完全跟进,还是看英文的吧。

         

        我使用的是MySQL的数据库,操作系统:Vista。

        到创建POSTS应用的时候遇到了问题,创建数据后数据库中有数据,但是到Listing posts界面无法查看,总是报错。

        网上Google了一下,果然有人遇到相同的问题,参照了如下解决方案,到

        http://instantrails.rubyforge.org/svn/trunk/InstantRails-win/InstantRails/mysql/bin/ 上下载了libmySQL.dll文件放到RUBY_HOME/bin/目录下,问题解决。

        参考:升级2.2后mysql驱动的问题(http://www.javaeye.com/topic/283871?page=1

         

        感叹一下,当Listing Posts这个CRUD小应用跑起来后,觉得Ruby On Rails的开发是比Java开发要快一些,看了一下它生成的代码,貌似也?#27426;唷?/p>

         

        今天晚了,明天继续。

        posted @ 2009-07-19 00:42 The Matrix 阅读(1631) | 评论 (0)编辑 收藏
          2009年7月6日

            最近在做一个很小的项目的功能改进,小小的项目中原来连接的是MySQL数据库,现在需要新连接一个数据库(Oracle),仅仅从一张表查询数据即可,没有添加、修改、?#22659;?#31561;等功能。本来这个小小的项目中用的是Hibernate,现在又要增加一个数据库连接,觉得配置起来有点麻?#24120;?#24573;然想起来,我干吗还要用Hibernate呢,直接用JDBC不也挺好使么,想了便做,果然写起JDBC来,很是快捷,一会就搞好了。

            做好了以后,忽然觉得有点迷茫,感觉不用Hibernate不也挺好的么,咱为什么现在开口闭口都是Hibernate呢,于是便有了今天的题目。

            很久以前没有Hibernate的时候:

            第一阶段:我?#20999;?#31243;序都是直接用JDBC,甚至在JSP页面中直接去createConnection,然后执行查询,输出到页面。

            第二阶段:后来觉得?#30475;?#37117;是创建一个连接,好像效率不高,于是看了别人的介绍,要用数据库连接池,好的,那便用数据库连接池吧,?#30475;?#37117;从pool中获得一个Connection,然后查询数据。

            第三阶段:用了连接池,还是效率不高,那怎?#31383;?#21602;?用缓存吧,自己实现缓存?可以,也可以用开源的缓存框架。

            第四阶段:到了OO大流行的时代了,一切都要OO,恰逢Hibernate降临人世,于是一切都用Hibernate来实?#33267;耍?#20854;实同期还是有不少其它ORMAP框架的,比如(TOPLINK、JDO、IBatis等,IBatis国内用的还比较多,另外两个好像用的比较少)。

            第五阶段:忽然EJB大流行,事务的概念?#36824;?#20026;传播(并不是原来没有事务的概念,只是实?#21046;?#26469;比?#19979;櫸常?#20511;助EJB的广为传播,Spring+Hibernate的组合也慢慢占据了大半市场。此?#31508;?#21153;用Spring AOP的声明式事务来解决,缓存可以用开源的缓存框架(已经和Hibernate无缝集成了),数据库连接池也是通过配置的方式在SpringContext.xml文件中配置,貌似一切都很完美。

         

            真的到了第五阶段,一切是不是真的完美了呢,如果一个很小的应用,需要从好几个数据库查询数据,但是每个数据库仅需要查询那么一两张表的数据,?#32423;?#28155;加、?#22659;?#20960;条数据,数据量也不大,此时我们是不是还用第一阶段的方式会更好呢,好像有时配置多数据源也不是那么方便的事情。或者使用Spring中的JDBCTemplate,貌似也不错。

            再往后看,难道Spring+Hibernate的组合就天下无敌了么?难道就没有新的框架了么?前段时间,JavaEye上关于充血模型、贫血模型的讨论吸引了多少眼球,以后是不是会有这么一个框架用于实现充血模型呢?

           说了这么多,最终只是想?#24471;?#30333;这么一句:用恰当的技术做恰当的事情,这真是一个艰难的选择……,至于未来,更是迷茫,因为我们只是跟随者,而不是领导者。

        posted @ 2009-07-06 22:06 The Matrix| 编辑 收藏
          2009年4月19日

        前两天出差在外,利用空余时间将《深入浅出EXT JS》这本书的前五章翻了一遍,后面的章节?#25191;?#27983;览了一下,觉得这本书写的不错,写下自己的一点感悟:

        1、适?#31995;?#35835;者

        a、是一名Java开发程序?#20445;?#20570;过WEB开发

        b、对Ajax开发的基础知识有所了解

        2、书评:

                这本书我觉得应该改成这个名字:《EXT JS CookBook》,可能使得书的内容和名称更贴切,呵?#24688;?/p>

                书中对Ext JS的基础类、Grid、Form、Tree、布局管理器、数据获取等各方面都做了详细的描述,基本上开发中需要用到的知识点,在书中都会提到,而且书中的很多例子和?#23548;使?#20316;还是非常贴切的,对于工作中需要用到EXT JS或者需要学习EXT JS的程序员?#27492;?#36824;是会很有帮助的。

                最后提点缺点,这本书中对EXT JS的知识点都做了比较详细的描述,但是缺乏对EXT JS的框架的深入分析。

        posted @ 2009-04-19 13:36 The Matrix 阅读(2226) | 评论 (2)编辑 收藏
          2009年4月12日

        前两天在InfoQ上看到一篇文章:利用Clear Toolkit连接Flex与Java开发,今天下载了?#24471;?#25991;档粗略了翻了一遍,Clear Toolkit包含五个部分,分别是:

        • Clear Data Builder,这是个Eclipse插件,可以根据SQL语句或Java数据传输对象为BlazeDS或LCDS自动生成CRUD应用。
        • DTO2Fx,该插件会根据Java类型自动生成对应的ActionScript类。
        • Log4Fx是个构建于Flex logging API之?#31995;腅clipse插件,它会自动化日志处理并且更加灵活,也更加友好。
        • Fx2Ant插件会为Flex Builder项?#21487;?#25104;优化的Ant构建脚本。
        • clear.swc是个增强的Flex组件库。

        暂时用不到这个工具,记录留待备查。

        posted @ 2009-04-12 20:57 The Matrix 阅读(531) | 评论 (0)编辑 收藏
          2009年4月7日

        这篇Blog是原来写在别的地方的,今天将其转到BlogJava上来。
        -------------------------------------------------------------------------------

        今天仔仔细细的看了一下Hibernate的缓存,并做了实例?#23548;?#20102;一?#36873;oogle一下,网?#31995;?#25945;程、文章很多。
        自己小结一下:

        Hibernate的缓存分为:

        • 一级缓存:在Session级别的,在Session关闭的时候,一级缓存就失效了。
        • 二级缓存:在SessionFactory级别的,它可以使用不同的缓存实现,如EhCache、JBossCache、OsCache等。

        缓存的注释写法如下,加在Entity的java类上:

        • @Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE)

        缓存的方式有四种,分别为:

        • CacheConcurrencyStrategy.NONE
        • CacheConcurrencyStrategy.READ_ONLY,只读模式,在此模式下,如果对数据进行更新操作,会有异常;
        • CacheConcurrencyStrategy.READ_WRITE,读写模式在更新缓存的时候会把缓存里面的数据换成一个锁,其它事务如果去取相应的缓存数据,发?#30452;?#38145;了,直接就去数据库查询;
        • CacheConcurrencyStrategy.NONSTRICT_READ_WRITE,不?#32454;?#30340;读写模式则不会的缓存数据加锁;
        • CacheConcurrencyStrategy.TRANSACTIONAL,事务模式指缓存支持事务,?#31508;?#21153;回滚时,缓存也能回滚,只支持JTA环境。

        另外还有如下注意事项:

        1、查询缓存需要在Query的相应方法执行前加上这么一句:

        query.setCacheable(true);

        在使用Hibernate时,获得的query有setCacheable方法,可以设置使用缓存,但?#31508;?#29992;JPA时,javax.persistence.Query并没有setCacheable方法,此时如果JPA的实现是Hibernate时,可以将其进行如下转化,再调用setCacheable方法(如果JPA的实现是其它ORMAP框架,就不知道怎么做了)。

        if (query instanceof org.hibernate.ejb.QueryImpl) {
            ((org.hibernate.ejb.QueryImpl) query).getHibernateQuery().setCacheable(
        true);
        }

        2、还有就是查询缓存的查询执行后,会将查询结果放入二级缓存中,但是放入的?#38382;?#26159;以ID为Key,实例作为一个Value。

        3、hibernate的配置文件中需加入如下信息:

        <property name="hibernate.cache.provider_class" value="org.hibernate.cache.EhCacheProvider" />
        <property name="hibernate.cache.use_second_level_cache" value="true" />
        <property name="hibernate.cache.use_query_cache" value="true" />


        posted @ 2009-04-07 22:54 The Matrix 阅读(9912) | 评论 (3)编辑 收藏
        仅列出标题  下一页
        11选5时时彩软件
        1. <mark id="ghavm"><button id="ghavm"></button></mark>

            <listing id="ghavm"><strong id="ghavm"></strong></listing>
            <code id="ghavm"></code><rt id="ghavm"><label id="ghavm"><legend id="ghavm"></legend></label></rt>
            1. <tt id="ghavm"><button id="ghavm"></button></tt>

              1. <mark id="ghavm"><button id="ghavm"></button></mark>

                  <listing id="ghavm"><strong id="ghavm"></strong></listing>
                  <code id="ghavm"></code><rt id="ghavm"><label id="ghavm"><legend id="ghavm"></legend></label></rt>
                  1. <tt id="ghavm"><button id="ghavm"></button></tt>

                    荒野行动女角色 围棋十诀 独行侠vs pp电子放水 巴塞罗那有名的建筑 上海法兰克福汽配展2018时间 艺伎故事电子 尖子和八1手官网 勒沃库森城市简介 周立波方舟子