这两天装了ubuntu系统,然后把整个开发环境都装到上面了 。 但发现一个很奇怪的问题,hibernate的事务无法会滚,这个问题困扰我好几天,今天终于解决了,原来mysql有配置有问题。mysql总共有4种存储方式,MyISAM 是默认存储方式,但是不支持事务,所以导致了我的问题,只要把默认设置成default-storage-engine=innodb就可以了,当然也可以在每个table创建的时候指定。 希望对碰到此类问题的朋友有所帮助。
今天星期六,放假。
很久没有双休日了。
本来想睡个懒觉的,但是到了正常工作时间,还是醒来睡不着了。起来开电脑是我的第一反应,那么多年的电脑和网络生活让我有了一种下意识,但是今天这个念头一闪而过,工作是为了生活,因为我想到了这句话。我们为了工作,而忘记自己的生活应该怎么样的了。我想我开始去寻找生活还有什么,有爸爸妈妈,有朋友,有痛苦和感动,有无奈和追求,突然发现生活是多么宽广,原来我把自己局限在工作这个狭窄的空间里了。好好享受我的周末巴。起来给自己弄点东西,拿本自己喜欢的书,一杯咖啡,我喜欢的生活,之一。......
这段时间发生很多的事情,也让我认识到一些事情。 罗列一下: 一天早上醒来,我突然产生一个感觉:我没有那么多的精力去研究那些深奥复杂的it技术细节!这个想法让我有点发呆 ,一直以来我都是很喜欢这个工作,以极大的热情投入到研发这个工作中,不知道怎么会产生这样的想法的。这段时间看了很多资料,也看到自己很多的不足,学的越多,知道自己越不足,难道我在这个无知面前害怕了?还是我的思维中心产生了转移,因为我在慢慢的考虑往项目管理方面发展。我也搞不清楚了。 这两天在看一本书,《第五项修炼》,很早的书 ,主要讲系统的思考方面的。其实去年已经看过,但是只看了前几章,感觉不好理解,这段时间我又拿起来了,发现里面很多概念和想法,比较容易理解了,而且可以继续看下去了。我感到很欣喜,这个算不算是一种进步呢?现在每天上班下班,因为是长期出差,平时的活动很少了,朋友接触也少,感觉有点封闭,我慢慢感到自己的激情在磨损,这个现象终于在我身上体现了 (我居然用了终于这个词)。进步了,思想在成熟,激情在减少,难道这个是反比的吗?以我现在的水平无法看清这个问题,等以后慢慢去慢慢弄清楚吧。 这段时间总的来说不是很快乐,快乐是什么?我有点模糊了,难道就是脑子中的一种蛋白质?还是我想得到的太多,而拥有的太少?这段时间烟抽的有点多,感觉嘴巴不舒服,该收敛一下了,难道是烟抽多了?这段时间喝酒很少,我是一个喜欢喝酒的人,难道是酒的缘故?细细想来,这样的状态其实已经很久了。难道是一种必经的过程,我不得而知了。 今天早上又让我看到了一句话,工作是为了生活,工作只是生活的一部分。我想我应该重新去理解这句话了,回到我自己喜欢的生活。回的去吗?不知道,还有半包烟在桌子上,不抽了。抽烟无助与生活和思考。
内容介绍
本书是名著《心灵地图》的续集。《心灵地图》从1978年出版以来,连续十多年居于美国最著名的《纽约时报》畅销书排行榜上,总发行量上千万册,在读者中产生了广泛的影响和获得了巨大的认同。 本书为《心灵地图》添了一个注脚:“人生多变”。每一个人的人生道路都得自己探索,没有任何绝对的答案可以凭借。但是,我们也不必坚持踽踽独行,可以向出现在我们生活中任何一种超过我们的力量求助。 在本书中,派克着重谈的是“宗教”,但这并不是那种扼杀个人意志的宗教团体所传播的宗教,而是作为个人信仰追求和灵魂提升的“心灵的宗教”,亦即,本书所宣传的是一种极其自省的信仰。 本书有助于你避免以偏概全的思考模式,拒绝所有以偏概全的冲动,不要钻牛角尖去寻找公式或简单的解答,而开始从多元化的角度思考,崇扬生命的神秘与矛盾,不要因为每一次经验内在的多重因果关系而惶惑不安,安心去欣赏生命的复杂多变。 愿本书与更多的读者相遇,共结一段心灵共呜的缘份!
本书精彩言论选 伊甸园的故事是神话,可是它蕴含着真理,告诉我们害羞是人性的一部分。 任何终生追求心理和心灵成长的人,都可以预防心理上的失调。 我们必须有一点罪恶感,才能在社会中生存。 不恐惧不等于有勇气;勇气是你尽管害怕、尽管痛苦,但还是继续向前。 为自己的极限辩护,你就永远受制于它们。 治疗一个受苦的人最好的法子,并不是设法消除痛苦,而是怀着愿意分享的心坐在他身旁。 愈愿意承担别人的痛苦,就愈能感受到更多的欢乐。 愤怒有其存在的必要;求生绝对少不了它。 我们必须学习一套复杂的方法,以处理愤怒的情绪。 我们的生活品质就决定于我们所作判断的品质。 人生一切际遇无非是为了帮助我们灵性的成长。 坚强的意志是人类最大的优点,虽然有了它不一定能担保成功或善良,但是少了它却几乎保证会失败。 你不能用自己的意志控制意志,因为这样等于没有控制。 归咎游戏也可称做“要不是因为你”游戏,这是所有婚姻关系中最常见的游戏。 原谅需要正视邪恶,真正的原谅是一个非常困难的过 程,但它也是你维持心里健康一个不可或缺的要素。 你不能因一个人没有犯的罪而原谅他。只有在确定他有罪以后,才能原谅。 原谅是疗伤的必要条件 我们不可忘记任何事。我们做不到真正遗忘,只可能做到真正宽赦。 死亡不仅不剥夺生命的意义,反而是意义的赋与者。 你在跟自己的死亡之秘搏斗的过程中,一定会发现人生的意义。 除非我们能坦然面对自己的死亡、否则就永远不可能 在生活中找到勇气和自信。 大多数人其实有能力选择在何时、何地、以何种方式死去。 要是世界上没有一件我们愿意为之牺牲生命的事,生命就不完整。 所有的疾病都有心理、心灵、社会、生理的因素。求 生意志能大幅延长寿命,并改善生活的品质。 学习生活一定要面对死亡。因为死亡让我们记住生命的有限。 如果你罹患严重的慢性病,倒不妨检讨一下,自问可 曾做过促使自己生病的事。 如果我们只把死亡当作一场意外,就不仅忽视了大多 数死亡的现实面,也忽视了它的神秘性。 我们遭遇的每一件事,无非是帮助我们学习,而最能 帮助我们学习的就是死亡。 只要我们向前跨出一大步,都会经过否定、愤怒、讨 价还价、沮丧、接受的过程。 信仰宗教而能承认死亡的重要性,但然面对死亡,才更勇敢。 漫无节制的自恋是心理与心灵疾病的主要前兆。健全 的心灵生活是一种脱离自恋的渐进成长。 我们对百分之九十的事物的了解还不到百分之一。 我一开始问:“我们不知道什么?”所有我以为已经关 闭的疆域就又重新开放。 我们的知识像一叶扁舟,在无知的大海、神秘的汪洋中漂泊。 现代文化有逃避痛苦的特质,对心理建康并不特别鼓励。 我们愈能适应现实,生活就愈有意义。 在现实生活里,探究神秘不仅是心理保健的目标也是心灵之旅的目的地。 有人为了逃避神秘而投身宗教,同样有人为了逃避神秘而投身科学。 迷惑是追寻清晰的第一步,在追寻过程中,你会获得很多知识。 谦逊就是确实了解自我的真相。真正的谦逊总要与实际相符。 为了生存,我们需要某种程度的罪恶感。要是我们一 直都自以为很好,当然就无法改正有缺点的部分。 我不好,你也不好,不过没关系。 我们需要破裂时刻,让我们觉悟到自己有问题,我们并不完美。 罪恶感涌现的时刻、忏悔的时刻、缺乏自信的时刻、面 对自己不喜欢自己的试炼时刻,对我们的成长都是不可或缺。 爱自己,追求自己灵魂的进步,是人生最重要的事。 准备是不能分享的。我们唯一能做的就是尽可能提供别人好好准备的动机。 神话对于了解自我可提供很大帮助,我们可以从中发掘人性的知识。 任何过于简化的思考方式都会出问题。 神话是有关人性各种矛盾、多重向度、复杂面的一个最佳知识泉源。 人不可能像神一般无所不能,我们不可能靠自己的力量上达于神。 当某种东西挡了你的路,妨碍你的心理健康或心灵成 长,你就该除掉它,不要只是坐着抱怨。 做好事的动机就是创造力的泉源。做坏事的动机只会带来毁灭,不能创造。 我们只有有学会同时发挥自身的男性和女性特质—— 左脑和右脑并用之后,才能成为英雄。 总有一天我们要放开孩子,他们是上天赐下的礼物,交 给我们照顾——但不是永远。 人的本性是汁么?我最常给的答复就是,根本没有这种东西。 我们人类最大的不同,就是在自身行为上享有完全的自由和变通可能。 大多数人当然早已脱离胚胎期。但会随着年龄增长,更 加坚持自己的方法和本性。 身体的老化不能遇阻,但人的心理不一定要变老。 触及自身生命的混沌,这可能是人类最痛苦的经验。 信奉神秘主义的人热爱神秘,喜欢解开神秘,同时也 知道,解开的愈多,发现的会更多。 处于心灵旅程不同阶段的人,相互之间会产生饱受威胁的感觉。 悔改不是一时就结束的事。它跟所有灵性成长一样,是一种持续不断的程序。 立足不够坚定时,固然可能堕落回去,但我们不可能 因此省略心灵成长过程的任何一阶段。 关于心灵成长。不论我们发展到多远,都还会保留一部分早期各阶段的痕迹。 每个圣人都有不可告人的过去,每个罪人都有美好的展望。 上瘾者有回家的渴望,证明他们比大多数人更努力追 求灵性和上帝,只不过他们搞错了方向。 西方语言传统上酒精和灵魂用同一个字表示,并非意 外,也许酗酒者比一般人更渴求灵性。 很多人听到宗教都会退避三舍,一般人都不久喜欢被 感化而改变,他们有抗拒心理。你唯一改变得了的人就是自己。 每个人都有自己的忧伤与恐惧;也许我们没有意识到,但这些情绪是存在的。 只有面临危机时,共同体才会自然发展。 健康心理一大特征就是,及早面对危机的能力。 我们亟须赋与危机应有的尊严,只有透过这些痛苦与危机,我们才会成长。 我们的生活太缺乏戏剧味,整日混沌过活,对生命的重要本质毫无觉悟。 不同的人有不同的生存使命,每个人的使命都很独特 不同的宗教往往殊途同归,只要能到达同一个目的地, 走不同的路又有什么关系。 只要你认罪、忏侮,那么所有的罪就此涤清。唯一需 要的就是为自己的所作所为。觉得难过、痛苦。 每一个人都应该尽可能从各种宗教传统中汲取智慧。 不论多么善良的人,都不免偶而因疲倦或过于自信,以至于显得不够努力。 用全部的灵魂和全部的力量,全心全意爱你的神。爱如邻己 学习把自己交给上帝,心甘情愿让他驾驭我这仍末脱离青春的人生。 或许基督教最大的罪,就是以一种独特的傲慢或自恋 心态,让许多基督徒自以为可以量身裁制一个上帝。 我对于凡是号称足以解释所有事物的观念,都采取保留的立场。 身体只是一种限制,我相信灵魂可以不靠肉体存在,它不需要肉体就能进步。 地狱的大门是敝开的,任何人都随时可以走出去,他 们之所以待在地狱是因为他们选择不离开。 追求知识最好的方法就是透过经验。 唯物主义和科学发展带来一种使人坐立难安的匾乏 感,一种对内在生命的渴望。 分化使事情容易,整合则带来痛苦。迫不经过整合,一个人永远是支离破碎。 厘清科学的领域可视为人类智慧史上最重要的事件。 整合的过程需要我们坦然面对各种互相冲突的力量、 观念,以及生活中的压力 每当面对一个号称能解决社会问题的方案,一定要问: “缺少了什么? 佛洛伊德用“爱”与“工作”界定心理健康。 为患恐惧症的人灌输比较乐视的世界观,是唯一的治疗办法。 审慎运用宗教观念,对于很多精神病例,也有加强疗效或加速痊愈的效果。 抑郁源自无礼和不肯赞美别人。 如果父母能温和的对待孩子,尽可能提供支持,孩子 就能朝脱离自恋迈出一大步。人生就是在你已定好的计划之外所发生的事。 接受人生层出不穷的矛盾,是心理健康不可或缺的要素。 新时代运动的最大特色,就是对新观念、新方法采取完全开放的态度。 救赎可以说是一种矛盾的混合,其中有恩典也有努力。 不论我们如何抉择,其他的选择并不因此被牺牲、被抛弃。 邪恶跟虚伪有很密切的关系。 从事任何冒险之前,都必须知道如何辨认对健康有益 或有害的事物,心灵旅程当然也不例外。 打好高尔夫球的原则,就是不要以一杆进洞为目标。心灵生活也应是如此。 上帝一方面是我们里面的一个小声音,但同时也存在 我们外面,无比超越、伟大。 信心若不能化为行动,还有什么价值呢? 我们需要跟自己的极限、自己的支离破碎、以及人际 关系之间无可避免的互相倚赖关系妥协。 新时代运动最大的贡献也无非是带来新鲜空气。 我们应该摆脱竞争和分化,全心追求社会生活和灵性生活各方面的整合。 根据神话的说法,性欲源自有一种不完整感,表现于追求个体完整和神性。 如果你追求最高品质的性高潮,最好的方法就是找自己深爱的人从事性行为。 对沉浸在爱情狂喜里的恋人而言,对方就像通往祭坛 的庙字大门,已经无关重要。 任何以为两性关系中可以建立永恒罗曼史的人,都注定要失望。 这世界可被当作是一个上帝设计的魔鬼训练营,其中 最难超越的一项障碍就是性。 性是上天赐与的好礼物,但这不代表它在所有季节,所 有时候都适合所有的人。 我发现了解上帝本质最有意义的方式,就是把人性中 最好的部分投射在他身上。
阮大年
生命的饥渴�����
� 《与心灵对话》是美国著名精神导师派克医生继《心灵地图》(The Road Less Traveled)而写的续集,顾名思义他所探讨的乃是一般人不常去思考的问题,也是一般认为不实际的问题。� ��中国人一向重视实用,也许是中国人的历史一直是为了生活而努力、奋斗,不得不实际的面对生存问题,在台湾的这数十年经验里,果然看到了实用主义的辉煌成果,而使台湾人民走到任何地方都感到抬头挺胸、趾高气昴,甚至表现出不可一世的气概,只是令人担心的是,经济的成就并没有带来真正生命的丰盛和愉悦,反而普遍的沉迷与失落。� ��其实台湾的问题不是偶发的,而是一味追求发达及富足之后的必然因果,一九九二年的《美国新闻与世界报导》杂志中记载︰「近来有一种饥渴,那是源自唯物主义和科学发展而来的,一种使人不安的匮乏感,一种对内在生命的渴望……愈来愈多的人亟于找寻一个从心灵与精神层次出发的答案」。同样的话可描绘在台湾的中国人,我们目前心灵的饥渴及精神的苦闷,比当时的美国人可谓有过之而无不及。� ��派克医生的主张是因应这种饥渴而写的。� ��人生是由一连串的饥渴而编织成的,一个婴孩一生下来就饥渴--需要食物及温情;稍长后又对知识、真理产生饥渴--因此要上学、读书;有生理及性的饥渴--因此进入婚姻之门;有群居及归属的饥渴--因此组织家庭、参加社团;有追求卓越的饥渴--因此努力于求名求利,著书立言等。� ��饥渴感并没什么不好,而且是使人类努力的原动力,然而吾生也有涯,往往因为忙于解决上述一般的饥渴后,人生也就在解饥止渴的过程中溜走了,而很多人一辈子都没有体会到生命中有另一种更基本及深邃的饥渴--心灵永恒的需求。� ��圣法兰西斯有言︰「神啊!我心永远不得安息(或作永远在饥渴),直到在你里面。」� ��派克医生的话,不一定能解除你我心灵中的饥渴,就像他一开始就说的「坏消息--我什么也不知道。」他的目的也不是给我们一个标准答案,虽然他承认已经寻到了自己的答案及方向。� ��派克医生提醒我们,生命是有限却又可能是永恒的,我们外在、可见的身体是会变老及消逝,但我们内心已经看见心灵是永存及可以日新又新的,只可惜我们几乎把一生的精力及时间都去改进和化装外在的形体,而忽视了对心灵的贯注及追寻。从某方面讲,外在努力是可见且容易见效的,也易引人注意,甚至功成名就还可以遗传给儿女,惠及子孙何乐而不为,反之,对心灵的追寻,是非只存乎一心,别人也体会不到,更不易传授转赠,因此在功利的环境中更加不受重视及被忽略了。� ��我推荐这本书,因为它系暮鼓晨钟,在这个多元却无目标的社会中发出了一个声音,「要追求永恒!」、「要自省!」确实,这一代可称为不多自省的一代,我们每天看到的都是批评、不满,却鲜见任何人自省。� ��派克医生认为人类的心灵有无止境求新求变的独特能力,这也是孟子所说人之异于禽兽者的「几希」,而作者认为心灵的成长可大致分为四个阶段︰� ��第一阶段的人可谓是混沌的心灵,只有生活的过程而没有明确的人生目标。� ��第二阶段的人属于需要形式才能满足的心灵,他们倚赖某些形式作为生命意义之所依,这形式可能是宗教、艺术团体,也可能是党派、社团,他们的特征是强调组织内的形式及教条,而以仪式为最高准则。� ��第三阶段的心灵较自由且理性,也许没有明显的信仰主题,但都热心积极正面的参与社会,认为生命的意义在贡献自己,使世界更美好。� ��第四阶段的心灵可以说是第三阶段努力寻求后的答案,他们不迷信宗教,却真正的可以认识上帝,生命中有不能说的真正神秘,也真正能感到天人合一的生命境地。然而这并不是一个目的地,第四阶段只是表明真正进入一个有无限发展可能的心灵之旅,也正如基督教所谓的信仰是一条路--来于信,以致于信。� ��无论如何,一个好好接纳本书的读者,对自己心灵的成长都有更高、更深一层的激励,也能认清自己内心有比目前更进步的可能,正如王尔德所说的︰「每个圣人都有不可告人的过去,每个罪人都能有美好的盼望!」�
王浩威医师(专栏作家、台大医院精神部兼任主治医师)的导读
原先翻阅派克医生着的《心灵地图》时,总有些随兴消遣的意味,毕竟市面有太多「励志」、「心理」或「心灵」的书籍了,令人觉得翻来翻去,也不过如此。偶尔拾遇了一本令我眼睛一亮的这类书籍,好不容易记住作者的大名,待他的新作出版时便赶快买一本,然而,常常原本抱着极大期待的,却一次次的失望了。
看《心灵地图》的感觉却截然不同。躺在床上翻着这本书时,睡意逐渐消失,取而代之的是对作者的好奇。「爱」是谈得令人有点厌烦的字眼,而「纪律」则是天生引人反感的,然而在这本书中,一切却有了重生的定义。
对作者而言,写作的材料原本就是源自实务的临床经验。病人或个案所陈述的生命经验,触目惊心地引发了他对自己的思考,写作也就成为另一种自我探索的纪录。
身为一位擅长精神分析的精神科医师,在学理训练的出发点上,他很明显受到佛洛伊德和荣格的影响。特别是有关自恋的理论,佛洛伊德首先提出了原初自恋和次发自恋,荣格进而将之视为自我完成的必要途径,也就是除了一般人知道的「自恋人格违常」这类负面陈述以外,其实自恋也有另一种正面的意义呈现。
在派克医师的笔下,这一切学理化为无形,取而代之的是极其平易的举例和用词。也因为对这个平易的要求,他毫不畏惧地重新用了一些已经有些俗气的字词。这时,「纪律」已经不再是团体对个人的要求,而是来自自我的要求,是自我进行着纪律,而非自我被要求守纪律;同样的,「爱」也不再是对他人的付出,而是「扩充自我的意愿」,只不过前提是「滋养个人和他人心灵成长」罢了。这是作者极其高明的地方,他用平凡得甚至有点保守的字眼,来畅谈他极其进步的观念。
到了《心灵地图2》这本书,他进而开始谈宗教。
直到今日,虽然很多人已经不再像马克思一般强烈排反宗教:但对于社会上各种宗教形式的盛行,不免还是有些担忧,从书中可以看出,派克医师也怀有这样一份隐忧,他敢于拂逆当今盛行的新世纪运动,指出各种盲点和困境,就是典型的例子。
然而作者也不忌讳宗教,甚至用信仰来解决宗教的困境。对他而言,宗教是必要的;但他指的是个人信仰的追求,而非宗派团体的遵循。
当下的宗教团体往往在无形中扼杀了个人的意志。关于这点,如果用强烈的字眼,便是常见的「宗教法西斯」:如果用派克医师的说法,就是「秘密教派」。作者不担心教派的攻击,甚至提出了它们的十大特征,认为只要符合三、四点就可以了,像对领袖魄力的偶像崇拜、地位崇高的权力核心、行政黑箱作业、隐瞒财务、鼓励教徒倚赖、强化教徒一致性、特殊语言、武断的教义、异端邪说或是自认掌握了上帝。他列出了这份标准,几乎是从新时代运动到传统的基督教或佛教,全都被击中要害了。
另一方面,他却是极力陈述个人心灵或个人信仰的重要性,虽是科学训练出身的精神科医师,他还是排斥了以科学自居的狭义心理学,从《心灵地图》到《心灵地图2》,最大的突破莫过于这种将宗教和心理学融为一体的努力,恐怕是和心理学的人格阶段相关;他对个案信仰活动发展出的兴趣,特别强调了类似艾瑞克森(Eric Erikson)「认同危机」一般的「信仰危机」。
宗教的特殊角色,一种极与自省的信仰,成为本书最大的特色。作者自己也承认,他的受洗是在《心灵地图》完成之后,《心灵地图2》是重新信仰以后写就的。因为宗教和科学(心理学和精神医学)的兼顾,让他能看见更广阔的视野。
对于不可知的世界,他永远保持必要的敬畏,像现象学常说的「划上括号」(bracketing),也就是「存而不论」;承认它的存在,但暂时不会急着说定它。因为这样的敬畏,他开始谈论密契主义和死亡,甚至认为性爱高潮和性灵经验有着一定的相关性。
如果《心灵地图》是一本有关自我心理调适和成长的书籍,那么《心灵地图2》则是自我灵性的修行和解放。这其实是很不容易的一步,然而作者平易而轻松地做到了。
春节假期结束,也告别了忙碌的2006年,迎来一个还未知的2007。想起2006年初,我给自己定的一些目标,惭愧的是大多数没有完成,有些还在进行中。但是2006,对我来说也算是个充实的一年,有了很多的第一次,对事情思考比以前深入了,不过也许到了2008回想,现在的思考也是肤浅的,我希望是如此,这样表示我在进步。
过去的2006有太多的内容,我也不想去细数了,还是在这里说说2007的目标。
- 作为一个软件开发人员,我还是一如既往地对新技术、新思想关注,并努力的应用到平时开发工作中去,让发挥其价值。
- 这一年我会更加关注敏捷管理,对于敏捷的思想和做法,我一直在徘徊在门外,不是犹豫,而是还在找哪扇门,希望今年能有机会能够在实践中应用。
- Kent有一句名言,"程序员要取得成功,关键在于程序之外的东西"。虽然平时也有这所认识,但是不够重视,比如沟通能力(特别是口头沟通和书面正式文档的编写)、全面系统思考问题的能力、组织协调能力、策划推动能力、自我管理和团队管理能力、工作的规范性和质量意识,等等。这需要我们更用心的去思考、去摸索、去提升,就是要有一个全面的提高。
- 到年底,目标是能达到一个项目经理的水平,要以一个项目经理的要求来衡量自己。
- 工作为了生活!我很喜欢这句话,但是现实和喜欢存在着很大的差距,只能在平时忙碌的工作中努力协调这个矛盾。
- 2006接触了一些健康方面的知识,人体使用手册让我初步了解了人体的奇妙,健康一生让我认识到饮食的重要性。忙碌的工作往往会把身体搞垮,不规律的饮食,不正常的加班熬夜,我们要怎么来呵护我们的身体呢?是不是工作到不惑之年后就疾病缠身呢?我不想要这样的生活,2007年我会把一些健康知识应用到实际中来,如果有效,我还会推荐给我的朋友们。这一点也是对第五点的补充。
春节在家里找到一本以前看过的书,与心灵的对话,还是高中的时候看过这本书,主要说的是人生多变,人生的目标是让自己的灵性成长,讲的非常好。当时对其中讲的很有感触,现在拿起来又读,犹如第一次读一样,引领我对人生的思考,而且比以前读更加的能理解其中的含义。2007我将细读这本书,特别在我这个年龄段,现实的冲击,生活的压力,导致我们对人生的迷惑。
2007会带来什么谁也不知道,也许这就是人生多变,我喜欢这个多变。
人生就是你计划之外发生的事情。2007,唯一现在要做的就是保持一种乐观积极的心态。
Quartz作为一个开源的作业调度框架,已经广泛应用于j2ee中。因为项目需要一个任务管理模块,所以选择了Quartz这个强大的框架,并对其进行
了扩展以适应项目的要求。首先介绍一下我们的系统构架,采用webwork,spring,hibernate整合架构,我的任务是无缝的把Quartz
加入到系统,提供一个界面,提供一些操作,使最终用户能够自己定义在什么时间对什么东西做哪些事情,“哪些事情”是预先定义的,提供给客户选择,这是客户
需求,系统地要求是能够容易的扩展,对增加一个新的任务定义提供一些简单的接口。这里不对Quartz作介绍了,想了解的人参考官方网站:http:
//www.opensymphony.com/quartz/,由于涉及的东西比较多,有些细节就带过了,我就大致的介绍一下总体的设计。
作业调度框架,主要要解决的问题是在某个时间对某些对象作某些动作。
对于某个时间,Quarta提供一个字符表达式来表示,这方面要做的是提供一个方便的界面,直观的对其进行设置,不能让最终客户看那些对客户没意义的字符
串。这个工作需要解析那些字符,做起来还是有点意思的,也是比较麻烦的,有兴趣的话可以自己去试试。
对于某些对象作和某些动作,Quartz都交给程序员自己去定义,它提供一个Job接口,对我们来说增加任务是比较简单的一件事情.既然Quartz提供
这么简单的接口,我为什么还要对其进行扩展呢?这就要来看"某些对象"了.在一般的系统来"某个动作"所操纵的对象是固定的,比如定期删除日至,定期检查
库存等.由于系统地特殊性,我们"某个动作"对哪些对象是不确定的,"哪些对象"由我提供一个界面,由最终客户去决定对一个或多个对象进行操作.
这样就引入了一个范围的概念,"某个动作"是作用在一定范围内的,这个范围就不仅仅是哪些对象了,也可能是时间范围,比如删除几天前的日志信息.到这里对
任务的定义有所改变了,一个任务包括一些范围也可以说是条件,这个条件不包括触发点这个条件),一个动作.所以系统中定义了一个IRange接口,范围的
表示都保存在一个XML字符串,XML字符串的结构和怎么解析都交给具体的子对象,这样就给了子类的灵活性.
public interface IRange {
public Map saveToMap(String strMap);//保存范围参数
public List getResult(Map map);//解析范围参数,并返回操作对象线程列表
public List getViewInfo();取得页面表示方式,结合了webwork
}
一个任务对应一个IRange的子类,IRange的子类对任务的各种参数范围,动作进行了实现.接着还加入一个IRangeManager接口,
public interface IRangeManager {
public void saveDataMap(Long jobId, String strMap)throws SchedulerException;//保存范围参数
public List getObjects(Map map);//取得对象列表,其中包括了对参数的解析
public List getViews(Map map);
}
实现的功能是对范围进行管理,包括对Quartz的操作,主要一些保存数据库等的操作,这样对于增加一个新的Range子类就可以不用知道Quartz了.
这样因为很多东西都是可配置的,增加了灵活性,对以后任务的添加定义了一些接口,考虑到了扩展性.在设计这个模块的时候,总的思路是把那些不变的东西都封装起来,把能变得东西都交给具体的任务了.
上面我只是大致讲了一下,由于水平有限,可能讲的不是清楚,比较乱,我没有提供具体的例子,只是提供了一个思路,希望对大家有所帮助,或者你还有更好的设计,请与我联系.
首先介绍一下我们的系统构架,采用webwork,spring,hibernate整合架构,现在引入Quartz框架,Quartz和
hibernate各自拥有的自己数据库配置和连接池的配置,现在的任务是把两者用同一套配置.
先谈谈Quartz,我用的版本是1.5.1,后面的版本我没去看了,没时间,接下来说的都以这个版本为准.Quartz虽然在提供一个
ConnectionProvider接口,提供给程序扩展,但是看它的StdSchedulerFactory实现类,要对它进行扩展还是一件比较麻烦
一件事情,所以我就直接修改了StdSchedulerFactory类,以达到的我的需求.
接下来的问题是既然要结合,那么让Quartz来提供连接池配置呢还是有Hibernate提供.研究了两者的连接池方面的源代码,发现
Hibernate的连接池设计远远好于Quartz,Quartz目前只提供一个连接池提供类PoolingConnectionProvider,而
且使用的连接池是dbcp,这个连接池听说问题多多,相反hibernate提供了更加灵活的配置,所以连接池由Hibernate提供.
首先实现一个Quartz中ConnectionProvider子类HibernateConnectionProvider
public class HibernateConnectionProvider implements ConnectionProvider {
private Connection con = null;
protected static ThreadLocal hibernateHolder = new ThreadLocal();
public Connection getConnection() throws SQLException {
con = null;
SessionFactoryImpl sessionFactory = null;
sessionFactory = (SessionFactoryImpl) Global.getSessionFacotry();
con = sessionFactory.getConnectionProvider().getConnection();
return con;
}
public void shutdown() throws SQLException {
// FIXME Auto-generated method stub
}
}
,然后修改StdSchedulerFactory,在不破坏其本来的逻辑和可配置性下进行了相应的修改.修改的是private Scheduler
instantiate() throws SchedulerException方法,找到//Set up any
DataSources段进行修改,代码如下:
String[] dsNames = cfg.getPropertyGroups(PROP_DATASOURCE_PREFIX);
for (int i = 0; i < dsNames.length; i++) {
PropertiesParser pp = new PropertiesParser(cfg.getPropertyGroup(
PROP_DATASOURCE_PREFIX + "." +
dsNames[i], true));
String dsDriver = pp
.getStringProperty(PROP_DATASOURCE_DRIVER, null);
String dsURL = pp.getStringProperty(PROP_DATASOURCE_URL, null);
boolean dsAlwaysLookup = pp.getBooleanProperty(
PROP_DATASOURCE_JNDI_ALWAYS_LOOKUP, false);
String dsUser = pp.getStringProperty(PROP_DATASOURCE_USER, "");
String dsPass = pp.getStringProperty(PROP_DATASOURCE_PASSWORD, "");
int dsCnt = pp.getIntProperty(PROP_DATASOURCE_MAX_CONNECTIONS, 3);
String providerClass = pp.getStringProperty(
PROP_DATASOURCE_PROVIDER_CLASS,
null);
String dsJndi = pp
.getStringProperty(PROP_DATASOURCE_JNDI_URL, null);
String dsJndiInitial = pp.getStringProperty(
PROP_DATASOURCE_JNDI_INITIAL,
null);
String dsJndiProvider = pp.getStringProperty(
PROP_DATASOURCE_JNDI_PROVDER,
null);
String dsJndiPrincipal = pp.getStringProperty(
PROP_DATASOURCE_JNDI_PRINCIPAL,
null);
String dsJndiCredentials = pp.getStringProperty(
PROP_DATASOURCE_JNDI_CREDENTIALS,
null);
String dsValidation = pp.getStringProperty(
PROP_DATASOURCE_VALIDATION_QUERY,
null);
if (providerClass == null
|| providerClass.equals("")
|| providerClass
.equals("org.quartz.utils.PoolingConnectionProvider")) {
if (dsDriver == null) {
initException = new
SchedulerException(
"Driver not specified for DataSource: "
+ dsNames[i]);
throw initException;
}
if (dsURL == null) {
initException = new
SchedulerException(
"DB URL not specified for DataSource: "
+ dsNames[i]);
throw initException;
}
try {
PoolingConnectionProvider cp =
new PoolingConnectionProvider(
dsDriver, dsURL, dsUser, dsPass, dsCnt,
dsValidation);
dbMgr =
DBConnectionManager.getInstance();
dbMgr.addConnectionProvider(dsNames[i], cp);
} catch (SQLException sqle) {
initException = new
SchedulerException(
"Could not initialize DataSource: " + dsNames[i],
sqle);
throw initException;
}
} else if (providerClass
.equals("org.quartz.utils.JNDIConnectionProvider")) {
Properties props = null;
if (null != dsJndiInitial || null != dsJndiProvider
|| null !=
dsJndiPrincipal || null != dsJndiCredentials) {
props = new Properties();
if (dsJndiInitial != null)
props.put(PROP_DATASOURCE_JNDI_INITIAL, dsJndiInitial);
if (dsJndiProvider != null)
props.put(PROP_DATASOURCE_JNDI_PROVDER, dsJndiProvider);
if (dsJndiPrincipal != null)
props.put(PROP_DATASOURCE_JNDI_PRINCIPAL,
dsJndiPrincipal);
if (dsJndiCredentials != null)
props.put(PROP_DATASOURCE_JNDI_CREDENTIALS,
dsJndiCredentials);
}
JNDIConnectionProvider cp = new
JNDIConnectionProvider(dsJndi,
props,
dsAlwaysLookup);
dbMgr = DBConnectionManager.getInstance();
dbMgr.addConnectionProvider(dsNames[i], cp);
} else if (providerClass
.equals("org.quartz.utils.HibernateConnectionProvider")) {
HibernateConnectionProvider cp = new
HibernateConnectionProvider();
dbMgr = DBConnectionManager.getInstance();
dbMgr.addConnectionProvider(dsNames[i], cp);
} else {
initException = new SchedulerException(
"Provider_Class not Supported: " + providerClass);
throw initException;
}
}
最后就是修改配置文件quartz.properties,加入
#org.quartz.dataSource.myDS.provider_class = org.quartz.utils.JNDIConnectionProvider
#org.quartz.dataSource.myDS.provider_class = org.quartz.utils.PoolingConnectionProvider
org.quartz.dataSource.myDS.provider_class = org.quartz.utils.HibernateConnectionProvider加#的供参考.
经过测试,需要对hibernate连接池的一些参数进行微调,这样就完成了Quartz与Hibernate在数据库的连接方面的结合,如果有更好的解决方案,请联系我.
|
|
| 日 | 一 | 二 | 三 | 四 | 五 | 六 |
---|
24 | 25 | 26 | 27 | 28 | 29 | 30 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 1 | 2 | 3 | 4 |
|
常用链接
留言簿(6)
随笔分类
随笔档案
文章档案
相册
我关注的文章
我听的音乐
我浏览的网站
我的好友
我看的书
我看社会
搜索
最新评论
阅读排行榜
评论排行榜
|
|