隨筆-314  評論-209  文章-0  trackbacks-0
           
          ?

          一、讀大學(xué),究竟讀什么?
          大學(xué)生和非大學(xué)生最主要的區(qū)別絕對不在于是否掌握了一門專業(yè)技能……一個(gè)經(jīng)過獨(dú)立思考而堅(jiān)持錯(cuò)誤觀點(diǎn)的人比一個(gè)不假思索而接受正確觀點(diǎn)的人更值得肯定……草木可以在校園年復(fù)一年地生長,而我們卻注定要很快被另外一群人替代……盡管每次網(wǎng)到魚的不過是一個(gè)網(wǎng)眼,但要想捕到魚,就必須要編織一張網(wǎng)……

          二、人生規(guī)劃:三岔路口的抉擇

          不走彎路就是捷徑……仕途,商界,學(xué)術(shù)。在這人生的三岔路口,你將何去何從……與其跟一百個(gè)人去競爭五個(gè)職位,不如跟一個(gè)人去競爭一個(gè)職位……學(xué)術(shù)精神天然的應(yīng)當(dāng)與塵囂和喧嘩保持足夠的距離……商場不忌諱任何神話。你也完全可能成為下一個(gè)傳奇……

          三、專業(yè)無冷熱,學(xué)校無高低

          沒有哪個(gè)用人單位會認(rèn)為你代表了你的學(xué)校或者你的專業(yè)……既然是概率,就存在不止一種可能性……如果是選擇學(xué)術(shù),冷門專業(yè)比熱門專業(yè)更容易獲得成就……跨專業(yè)幾乎早已成為一種流行一種時(shí)尚……大學(xué)之間的實(shí)力之爭到了考研考場和人才市場原來是那樣的微不足道……

          四、不可一業(yè)不專,不可只專一業(yè)

          千招會,不如一招熟……十個(gè)百分之十并不是百分之百,而是零……在這個(gè)現(xiàn)實(shí)的社會,真正實(shí)現(xiàn)個(gè)人價(jià)值才是最體面最有面子最有尊嚴(yán)的事情……要想知道需要學(xué)什么,最好的方式就是留意招聘信息……很多專業(yè)因?yàn)椴痪邆鋵iL的有效性,所以成為了屠龍之術(shù)……為什么不將“買一送一”的促銷思維運(yùn)用到求職應(yīng)聘的過程中來呢……

          五、不逃課的學(xué)生不是好學(xué)生

          什么課都不逃,跟什么課都逃掉沒什么兩樣……讀大學(xué),關(guān)鍵是學(xué)會思考問題的方法……逃課沒有錯(cuò),但是不要逃錯(cuò)課……英語角絕對不是學(xué)英語的地方……為了英語丟了專業(yè),那就舍本逐末了……招聘單位是用人才的地方,而不是培養(yǎng)人才的地方……既要逃課,又要讓老師給高分……

          六、勤工儉學(xué)的辯證法

          對于貧困生來說,首先要做的不是掙錢,而是省錢……大部分女生將電腦當(dāng)成了影碟機(jī),大部分男生將電腦當(dāng)成了游戲機(jī)……在這個(gè)處女膜都可以隨意偽造的年代,還有什么值得輕易相信……態(tài)度決定一切……當(dāng)學(xué)習(xí)下降到次要的地位,大學(xué)生就只能說是兼職的學(xué)生了……

          七、做事不如做人,人脈決定成敗

          學(xué)問好不如做事好,做事好不如做人好……會說話,就能減少奮斗三十年……一個(gè)人有多少錢并不是指他擁有多少錢的所有權(quán),而是指他擁有多少錢的使用權(quán)……一個(gè)人賺的錢,12.5%是靠自身的知識,87.5%則來自人脈關(guān)系……三十歲以前靠專業(yè)賺錢,三十歲以后拿人脈賺錢……你和世界上的任何一個(gè)人之間只隔著四個(gè)人
          ……
          八、互聯(lián)網(wǎng):倚天劍與達(dá)摩克利斯之劍

          花兩個(gè)小時(shí)就寫出一篇天衣無縫的優(yōu)秀畢業(yè)論文……在互聯(lián)網(wǎng)領(lǐng)域創(chuàng)業(yè)的技術(shù)門檻并不高,關(guān)鍵的是市場眼光和營銷能力……輕舞飛揚(yáng)已經(jīng)紅顏薄命了,而痞子蔡卻繼續(xù)跟別的女孩發(fā)生著一次又一次的親密接觸……很多大學(xué)生的網(wǎng)友遍布祖國大江南北,可他們卻從未主動向周圍的人說一聲:你好,我們可以聊聊嗎…

          九、戀愛:花開堪折方須折
          愛情是不期而至的,可以期待,但不可以制造……越是寂寞,越要警惕愛情……既然單身是可恥的,那西門慶是不是應(yīng)該被評為宋朝十大杰出青年……花開堪折方須折,莫讓鮮花敗殘枝……一個(gè)有一萬塊錢的人為你花掉一百元,你只占了他的百分之一;而一個(gè)只有十塊錢的人為你花掉十塊,你就成了他的全部……

          十、性:上帝死了,眾神在墮落

          愛要說,愛要做……我只有在肉體一下一下的撞擊中才感到快樂。經(jīng)過之后,將是更大的寂寞更大的空虛……為何要讓別人的虛榮成為對自己的傷害……當(dāng)她機(jī)械地躺在床上張開雙腿,她的父母正在憧憬著女兒的未來……一朝春盡紅顏老,花落人亡兩不知……

          十一、考研:痛苦的安樂死

          沒有比浪費(fèi)青春更失敗的事情了……研究生擴(kuò)招的速度是30%,也就意味著碩士學(xué)歷貶值的速度是30%……同樣是付出三年的努力,你可以讓E1的值增加1,也可以讓E2的值增加2甚至增加3……讀完碩士或博士并不等于工作能力更強(qiáng)……面對13.54萬的成本,你還會毫不猶豫地投資讀研究生嗎……努力就會有結(jié)果,但不一定是好結(jié)果
          ……
          十二、留學(xué):“海龜”變“海帶”

          月薪2500元的工作,居然引得三個(gè)海歸碩士爭相競聘……對于某些專業(yè)而言,去美國留學(xué)和去埃塞俄比亞留學(xué)沒什么兩樣……既然全世界的公司都想到中國的市場上來瓜分蛋糕,為什么中國人還要一門心思到國外去留學(xué)然后給外國人打工
          ……
          十三、非統(tǒng)招:養(yǎng)卑照樣處優(yōu)

          她在中國信息產(chǎn)業(yè)界創(chuàng)下了幾項(xiàng)紀(jì)錄。她被稱為中國的“打工皇后”。而她不過是一名自考大專生……要想把曾經(jīng)輸?shù)舻臇|西贏回來,就必須把自己比別人少付出的努力補(bǔ)上來……非統(tǒng)招生不但要有一定的實(shí)力,而且必須掌握一定的技巧,做到揚(yáng)長避短出奇制勝……路在腳下。好走,走好……


          十四、畢業(yè):十面埋伏的陷阱

          母校不把自己當(dāng)母親,你又何必把自己當(dāng)兒女……聽輔導(dǎo)班不過是花錢買踏實(shí)……人才市場就是一個(gè)地雷陣……通過多種方式求職固然沒有錯(cuò),但是千萬不要饑不擇食……只要用人單位一說要你交錢,你掉頭就走便是了……這年頭立字尚且不足以為據(jù),更何況一個(gè)口頭約定……


          十五、求職:做人不要太厚道

          求職簡歷必須突出自己的核心競爭力……求職的時(shí)候大可不必像嚴(yán)守一那樣“有一說一”……一個(gè)人說假話并不難,難的是把假話說到底,并且不露一絲破綻……在填寫自己的特長時(shí),一定要盡可能詳細(xì)……一份求職簡歷只要用一張A4紙做個(gè)表格就足夠了……面試其實(shí)是有規(guī)律的,每次面試的時(shí)候只要背標(biāo)準(zhǔn)答案就行了
          ……

          十六、騎一頭能找千里馬的驢

          美國鐵路兩條鐵軌之間的標(biāo)準(zhǔn)距離是4英尺8.5英寸,為什么呢?因?yàn)閮善ヱR臀部之間的寬度是4英尺8.5英寸……垃圾是放錯(cuò)位置的人才……世界上最大的悲劇莫過于有太多的年輕人從來沒有發(fā)現(xiàn)自己真正想做什么……中小型企業(yè)或許能夠讓你得到更充分的鍛煉……從基層做起并不意味著可以從基層的每一個(gè)職位做起……錢途,更要前途……

          十七、寫字樓政治:白領(lǐng)必修課
          大公司是做人,小公司是做事……職員能否得到提升,很大程度不在于是否努力,而在于老板對你的賞識程度……公司的事情和秘密永遠(yuǎn)比你想象的還要復(fù)雜和深?yuàn)W……在適當(dāng)?shù)臅r(shí)候裝糊涂不但是必要的,而且是睿智的……就把你的同事當(dāng)成一群你可以叫得出名字的陌生人好了……

          十八、創(chuàng)業(yè) -做富翁

          瘦死的駱駝比馬大……撐死膽大的,餓死膽小的……不再是“大魚吃小魚”,而是“快魚吃慢魚”……對于趨勢的把握是一個(gè)創(chuàng)業(yè)者最重要的能力……高科技行業(yè)留給畢業(yè)生的空間已經(jīng)很小……欲速則不達(dá)。在創(chuàng)業(yè)以前通過給別人打工而積累經(jīng)驗(yàn)是非常必要的……市場永遠(yuǎn)比產(chǎn)品更重要……錢不夠花,怎么辦?第一,看菜吃飯;第二,借雞生蛋……

          posted @ 2006-11-04 11:30 xzc 閱讀(321) | 評論 (0)編輯 收藏
          賺錢第一定律:你要做羊,還是做狼?

            永遠(yuǎn)是10%的人賺錢,90%的人賠錢,這是市場的鐵律,不論是股市,還是開公司、辦企業(yè),都不會改變。

            如果人人都賺錢,那么誰賠錢,錢從何處來?

            天下人不可能都是富人,也不可能都是窮人!

            但富人永遠(yuǎn)是少數(shù),窮人永遠(yuǎn)是多數(shù)!

            這是上帝定的,誰也沒辦法。

            但賺錢總是有辦法,就是你去做10%的人,不要去做大多數(shù)人。

            做少數(shù)富人,你需要換思想,轉(zhuǎn)變觀念,擁有富人的思維,就是和大多數(shù)人不一樣的思維。

            有人說得好:“換個(gè)方向,你就是第一。”因?yàn)榇蠖鄶?shù)人都是一個(gè)方向,千軍萬馬都一樣的思維,一樣的行為,是群盲,就象羊群一樣。

            你要做羊,還是做狼?

            數(shù)英雄,論成敗,天下財(cái)富在誰手?10%的人擁有90%的財(cái)富,90%的人擁有10%的財(cái)富。你要想富,你就得研究富的辦法,研究富翁的思想和行為,象富人那樣做,立下雄心壯志,做出不凡的業(yè)績,很快你就是富翁!

            “富人思來年,窮人思眼前”,這就是賺錢第一定律!

          賺錢第二定律:金錢遍地都是,賺錢很容易!

            問蒼茫大地,誰主財(cái)富!為什么他能賺錢,你不能賺錢。追根求源,想賺錢——首先你要對錢有興趣,對錢有一個(gè)正確的認(rèn)識,不然錢不會找你。錢不是罪惡,她是價(jià)值的化身,是業(yè)績的體現(xiàn),是智慧的回報(bào)。

            物以類聚,錢以人分。你必須對錢有濃厚的興趣,感覺賺錢很有意思,很好玩,你喜歡錢,錢才能喜歡你。這決不是拜金主義,而是金錢運(yùn)行的內(nèi)在規(guī)律,不信你看那些富翁都喜歡錢,都能把錢玩得非常了得,看看比爾蓋茨,看看沃倫巴菲特,看看喬治索羅斯。

            金錢遍地都是,賺錢很容易。你必須確立這樣的觀念。如果你覺得賺錢很難,那么賺錢真的很難。那些大富翁沒有一個(gè)認(rèn)為賺錢難的,反倒認(rèn)為花錢太難。你要牢記,賺錢真的很容易,隨便動動腦筋就能來錢。這可不是教你吹牛,這是賺大錢,當(dāng)富翁的思想基礎(chǔ),你不得不信!

            股市賺錢難嗎?不難,其實(shí)股市賺錢就6個(gè)字:“低點(diǎn)買,高難賣”。你只要用好這6個(gè)字,保你日進(jìn)斗金,富得流油。華爾街經(jīng)營之神巴菲特,就是善用這6字真言的世界級大師。說句實(shí)話,用活6字真言,你可以不用看K線圖,不用盯著大盤,邊玩邊賺錢,這叫休閑貿(mào)易!

            眼見他高樓起,氣得你心口疼。你仇富嗎,千萬別。仇富說明你還不富,說明你還有窮人思維,賺錢第一定律怎么講的,趕快重溫。

            如今經(jīng)濟(jì)全球化車輪勢不可擋,市場經(jīng)濟(jì)大潮波瀾壯闊,中國將飛速發(fā)展,風(fēng)景這邊獨(dú)好,我們是遇到了“千年未遇之變局”,真是生逢良時(shí),你不賺錢,干啥?賺錢玩唄!

            正確認(rèn)識錢,樹立正確的金錢觀念,這是賺錢的第二定律!

           賺錢第三定律:最簡單的方法最賺錢!

            天下賺錢方法千千萬,但最簡單的方法最賺錢。

            雖說條條大路通羅馬,但萬法歸一,簡單的才是最好的。

            復(fù)雜的方法只能賺小錢,簡單的方法才能賺大錢,而且方法越簡單越賺大錢。

            比如,比爾蓋茨只做軟件,就做到了世界首富;沃倫巴菲特專做股票,很快做到了億萬富翁;

            喬治索羅斯一心搞對沖基金,結(jié)果做到金融大鱷;英國女作家羅琳,40多歲才開始寫作,而且專寫哈里波特,竟然寫成了億萬富婆。

            具體講,每個(gè)行業(yè)都有賺大錢的方法:在商品零售業(yè),沃爾瑪始終堅(jiān)持“天天平價(jià)”的理念,想方設(shè)法靠最低價(jià)取勝,結(jié)果做成了世界最大;在股市,沃倫巴菲特一直堅(jiān)持“如果一只股票我不想持有10年,那我根本就不碰它一下”的原則炒股;在日本戰(zhàn)敗后,美國品質(zhì)大師戴明博士應(yīng)邀到日本給松下、索尼、本田等許多家企業(yè)講課,他只講了最簡單的方法——“每天進(jìn)步1%”,結(jié)果日本這些企業(yè)家真照著做了,并取得了神效,可以說日本戰(zhàn)后經(jīng)濟(jì)的崛起有戴明博士的功勞。你說明他們的方法簡單不簡單?

            炒股賺錢也有簡單的方法。現(xiàn)在大多數(shù)人炒股都是“不要把所有的雞蛋放在一個(gè)籃子里”,實(shí)行“多樣化”,但沃倫巴菲特告訴你“不要多樣化,要把所有的雞蛋放在一個(gè)籃子里,然后密切關(guān)注它。”炒股其實(shí)真的就這么簡單。

            我的炒股原則是“一年操作一兩次,低點(diǎn)買、高點(diǎn)賣”,集中資金買3支以內(nèi)的股票,有時(shí)每年只買一支股票天津磁卡(600800),結(jié)果每年都賺得缽滿盆盈。我從不看K線圖,也不盯大盤,只是偶爾看一眼行情,簡單判斷一下,就萬事大吉了。

            世界沒有免費(fèi)的午餐,也沒有天上掉下來的餡餅。你要研究賺錢,總結(jié)自己的簡單賺錢方法,然后堅(jiān)持它,不要輕易改變。現(xiàn)在大多數(shù)人沒有主心骨,炒股太善變了,今天炒長線,明天炒短線,今天聽個(gè)消息就買,明天聽個(gè)消息就賣,結(jié)果六心不定,輸?shù)酶筛蓛魞簟_@個(gè)教訓(xùn)要切記!

            簡單的方法賺大錢,復(fù)雜的方法賺小錢,這是賺錢的第三定律。

          賺錢第四定律:賺大錢一定要有目標(biāo)!

            年年歲歲花相似,賺錢方法各不同。

            但有一點(diǎn)是相同的,就是你要賺錢一定要有目標(biāo)。

            成功的道路是由目標(biāo)鋪成的。沒有目標(biāo)的人是在為有目標(biāo)的人完成目標(biāo)的。
            
            有大目標(biāo)的人賺大錢,有小目標(biāo)的人賺小錢,沒有目標(biāo)的人永遠(yuǎn)為衣食發(fā)愁。你是哪類人?

            沒有目標(biāo),欲說還休,欲說還休,卻道賺錢真憂愁!

            要賺錢,你必須有賺錢的野心。野心是什么?野心就是目標(biāo),就是理想,就是夢想,就是企圖,就是行動的動力!

            試看天下財(cái)富英雄,都是野心家,比如洛克菲勒、比爾蓋茨、孫正義等等。沒有財(cái)富野心,就沒有財(cái)富。

            有野心不是壞事,有野心才有動力、有辦法、有行動。

            賺錢的野心要越大越好,這不是教你干壞事,干壞事的野心要越小越好。

            從現(xiàn)在開始,你要立即“做夢”,當(dāng)一個(gè)野心家,設(shè)定賺錢的大目標(biāo):終生目標(biāo),10年目標(biāo),5年目標(biāo),3年目標(biāo),以及年度目標(biāo)。然后制定具體計(jì)劃,開始果敢的行動。

            萬事開頭難,有目標(biāo)就不難,創(chuàng)富是從制定目標(biāo)開始的。天下沒有不賺錢的行業(yè),沒有不賺錢的方法,只有不賺錢的人。

            “人窮燒香,志短算命。”要賺錢,你一定要有目標(biāo),一定要有野心,這是賺錢的第四定律。

          賺錢第五定律:一定要用腦子賺錢!

            天下熙熙皆為名來,天下攘攘皆為利往。在財(cái)富時(shí)代,你一定要用腦子賺錢。

            你見過誰用四肢賺大錢的?一些運(yùn)動員賺錢不菲,但邁克爾喬丹說:“我不是用四肢打球,而是用腦子打球。”用四肢不用腦子只能是別人的工具,是別人大腦的奴隸,是賺不了大錢的!

            用四肢只能賺小錢,用腦子才能賺大錢。

            人的想像力太偉大了,愛因斯坦說過:“想象力比知識更重要”,美國通用電器公司前總裁杰克韋爾奇說過:“有想法就是英雄”。人類如果沒有想像力就如同猿猴和黑猩猩。

            賺錢始于想法,富翁的錢都是“想”出來的!

            想當(dāng)初,比爾蓋茨怎么就會做軟件,怎么就會搞視窗,因?yàn)樗氲搅耍缢约赫f的“我眼光好”。亞洲首富孫正義在美國讀書時(shí)沒錢就發(fā)明翻譯機(jī),一下賣了一百萬美元,后來開辦軟件銀行,他的頭腦和眼光也了不得。好孩子集團(tuán)老板宋鄭還是靠賣發(fā)明專利起家的,第一項(xiàng)發(fā)明賣了4萬元,第二項(xiàng)發(fā)明別人出價(jià)8萬元要買,但他不賣,自己投入生產(chǎn),結(jié)果成了世界童車大王。

            現(xiàn)在有的人確實(shí)靠嘴巴賺了錢,但他說話之前首先必須想好說什么。也有些人企圖靠耳朵賺錢,自己不動腦,到處打聽消息,特別在股市里,今天聽個(gè)內(nèi)幕消息就買,明天聽個(gè)小道消息就賣,跟風(fēng)頭,隨大流,最后被套賠錢,現(xiàn)在大多數(shù)股民都這樣,不知道自己的腦子是干什么的!

            世界上所有富翁都是最會用腦子賺錢的,你就是把他變成窮光蛋,他很快又是富翁,因?yàn)樗麜媚X。洛克菲勒曾放言:“如果把我所有財(cái)產(chǎn)都搶走,并將我扔到沙漠上,只要有一支駝隊(duì)經(jīng)過,我很快就會富起來。”讓我們再來看看腦白金和黃金搭檔,史玉柱的東山再起啟示我們,只要把腦子用活,失敗了還會成功,再賺錢是不成問題的。

            我鄭重地告訴大家:你要賺錢你就想吧,想好了就行動,保準(zhǔn)你有好收成。

            莎仕比亞在《哈姆雷特》中講過:“你就是把我關(guān)在胡桃盒子里,我也是無限想像空間的君主。”展開你想像的翅膀吧,賺錢的第五定律是,你一定要用腦子賺錢!

          賺錢第六定律:要賺大錢一定要敢于行動!

            天下財(cái)富遍地流,看你敢求不敢求。金錢多么誘人啊,但要賺大錢一定要敢于行動!

            世界沒有免費(fèi)的午餐,也沒有天上掉下來的餡餅。

            不行動你不可能賺錢,不敢行動你賺不了大錢。敢想還要敢干,不敢冒險(xiǎn)只能小打小鬧,賺個(gè)小錢。

            我行我富!試看天下財(cái)富英雄都是有膽有識有行動力的,想當(dāng)年比爾蓋茨放棄哈佛大學(xué)學(xué)業(yè),白手起家創(chuàng)辦微軟,是何等的膽識和行動力。美國最年輕的億萬富翁邁克戴爾,在大學(xué)讀書時(shí)就組裝電腦賣,感到不過癮便開辦電腦公司,是何等另人欽佩。

            甲骨文公司老板埃里森不僅放哈佛學(xué)業(yè),賺取260億美金,還回哈佛演講,鼓動學(xué)生退學(xué),被警察拖下講壇。還有網(wǎng)易丁磊、健力寶張海、實(shí)德徐明等等,他們之所以有今天的業(yè)績,就在于他們當(dāng)初敢于冒險(xiǎn),敢于行動。

            你敢富嗎?絕大多數(shù)人不敢!其實(shí)大多數(shù)人都沒想富,別說敢富。

            現(xiàn)在人們談?wù)撠?cái)富越來越多,但許多人說得多,做得少。

            要知道:“說是做的仆人,做是說的主人”。我們許多經(jīng)濟(jì)學(xué)家談財(cái)富頭頭是道,但他們誰富了?中國的股評家評起股來夸夸其談,但他們誰炒股賺大錢了?如果他們能賺大錢,就不會當(dāng)股評家了!所以你要炒股,千萬不要相信股評家!

            德國行動主義哲學(xué)家費(fèi)希特說過:“行動,行動,這是我們最終目的。”要想富,快行動,不要怕,先邁出一小步,然后再邁出一大步。記住:“利潤和風(fēng)險(xiǎn)是成正比的”。

          賺錢第七定律:想賺大錢一定要學(xué)習(xí)賺錢!

            天下聰明人很多,但為什么絕大多數(shù)聰明人都不富?在財(cái)智時(shí)代,要賺大錢一定要學(xué)習(xí)賺錢!

            你學(xué)過賺錢嗎?絕大多數(shù)人沒有,所以絕大多數(shù)人還不會賺錢。我們在小學(xué)沒學(xué)過賺錢,在中學(xué)沒學(xué)過賺錢,在大學(xué)還是沒學(xué)過賺錢,就連金融、財(cái)經(jīng)類的大學(xué)也學(xué)不到真正賺錢的知識,看來我們的教育確實(shí)有了大問題!

            聰明的窮人們啊,你們的智商很高,但你們的財(cái)商太低,你們窮得太可憐了!不過高爾基說過:“自學(xué)是沒有圍墻的大學(xué)”,你們可以自學(xué)賺錢知識。

            人非生而知之,誰天生就會賺錢?財(cái)商和智商不同,智商有天生的成份,而財(cái)商100%需要后天學(xué)習(xí)提高。孫正義、李嘉誠、史玉柱等所有大富翁,都不是一生下來就會賺錢,但他們都有兩個(gè)共同特點(diǎn):一是有強(qiáng)烈的賺錢企圖心,二是有很強(qiáng)的學(xué)習(xí)力,正是由于他們善于學(xué)習(xí)賺錢,所以他們超越常人,登上財(cái)富巔峰。

            聰明不等于智慧,聰明賺不到錢,智慧能賺大錢。真正白手起家的富豪,學(xué)歷不一定高,但一定很有智慧,他們是最善于學(xué)習(xí)賺錢的一族,他們都有學(xué)習(xí)賺錢的不凡歷程,他們通過學(xué)習(xí)摸到了賺錢的規(guī)律,掌握了賺錢門道,執(zhí)掌了賺錢的牛耳,成為財(cái)富英雄!

            英雄起于草莽,英雄不問出處。真正的賺錢者,都是閱讀者。你想當(dāng)富翁嗎?你想跨入財(cái)富英雄行列嗎?那你就趕快學(xué)習(xí)賺錢:讀賺錢書報(bào)、聽賺錢講座、向財(cái)富精英學(xué)習(xí)、向身邊高人請教等等。比如,炒股你要學(xué)習(xí)沃倫巴菲特,尤其學(xué)他簡單的投資理念。創(chuàng)業(yè)你要學(xué)習(xí)孫正義,他在兩年之內(nèi)讀了4000本書(不知道是怎么讀的)。還有李嘉誠,他為了創(chuàng)業(yè)專門到別的公司打工偷藝。向成功者學(xué),像成功者那樣干,增長你的智慧,提高你的財(cái)商,總結(jié)賺錢的秘笈,很快你就會富。

            賺錢的第七定律是,要賺大錢一定要學(xué)習(xí)賺錢!

          賺錢的第八定律:賺大錢一定要選擇!

            風(fēng)水輪流轉(zhuǎn),今天到你家。如今金錢遍地都是,賺錢方法多如牛毛,但要賺大錢一定要選擇。

            選擇就是命運(yùn),選擇就是財(cái)富。不選擇你就會迷失,財(cái)富就會與你擦肩而過。

            你是命運(yùn)的主宰,你是財(cái)富的上帝。在二十多年前,美國一個(gè)17歲少年,一頭亂發(fā),一身臟衣,戴著一付高度近視眼鏡,但他竟選擇了編寫軟件,創(chuàng)辦軟件公司,正是由于這一選擇,才有今天的微軟和今天的比爾蓋茨!

            亞洲首富孫正義19歲開始創(chuàng)業(yè),一年之內(nèi)制定了40個(gè)創(chuàng)業(yè)計(jì)劃,但他只選擇其中一個(gè)最好的計(jì)劃——開辦軟件銀行,由此登上了財(cái)富的天梯!

            在市場多樣化加速、越來越細(xì)分的時(shí)代,只有選擇才能成功。沃爾瑪只選擇做商品零售,可口可樂只賣飲料,肯德基、麥當(dāng)勞只賣漢堡,日本的松下、索尼、三洋只做電器。

            選擇的目的就是專一和專注。我國許多知名大企業(yè)現(xiàn)在開始走多元化的路子,包括海爾在內(nèi),其實(shí)多元化之路危機(jī)四伏,很有可能要失敗,四通、飛龍、輕騎的失敗就是例證。史玉柱做保健品很成功,剛一多元化就失敗,現(xiàn)在他吸取教訓(xùn),做保健品重新獲得成功。

            你要?jiǎng)?chuàng)業(yè),你選擇什么?根據(jù)多年對世界財(cái)富精英的分析,富豪們大多涉獵股票和地產(chǎn)。事實(shí)上美國和歐洲60%以上的人投資股票。

            炒股也需要選擇,例如選擇什么投資理念和原則,選擇長線還是短線,選擇什么股票,是組合投資還是專一投資。

            現(xiàn)在許多人熱衷炒短線,在股市頻繁進(jìn)出,頻繁換股,一年到頭忙忙碌碌,很象操盤高手,結(jié)果不僅賺不到錢,還深套其中,既辛苦又心酸。

            炒股一定要專一,就象對老婆一樣。中外股市大贏家很少是短線高手,大多是長線老牛,沃倫巴菲特是其中最著名的。他告訴我們:“如果一只股票我不想持有10年,我就根本不碰它一下”;“不要多樣化,要把所有雞蛋放到一個(gè)籃子里,然后密切關(guān)注它。”我國一些莊家多年來專做幾只股票,有的甚至2、3年內(nèi)只炒一只股票,結(jié)果贏利甚豐。

            你要炒股千萬別花心,精心選擇好股去愛她,她會為你下金蛋!

            賺錢的第八定律是,賺大錢一定要選擇!

          posted @ 2006-11-04 11:29 xzc 閱讀(428) | 評論 (0)編輯 收藏

          有狗死于沙漠。好事者經(jīng)過分析發(fā)現(xiàn),狗的死因與找不到可供便溺的樹或者墻有關(guān)。人類似乎有些時(shí)候做出這種被一泡尿憋死的事情來,所以關(guān)于情商管理方面的研究大行其道頗具規(guī)模。甚至有人認(rèn)為,IQ高的人經(jīng)過努力成了醫(yī)生、科學(xué)家和技術(shù)專家,而EQ高的人經(jīng)過努力成了醫(yī)生、科學(xué)家和技術(shù)專家們的管理者。電影里那個(gè)大智若愚的家伙一臉嚴(yán)肅地喊:IP、IC、IQ統(tǒng)統(tǒng)給我密碼,我想也許世界上真的存在打開一個(gè)人智力之門的鑰匙,同時(shí)也一定有破解人類情商之迷的超級密碼。
          1、世事洞明皆學(xué)問,人情練達(dá)即文章
          經(jīng)常讀的人知道這是紅樓夢里面的一副對聯(lián)。這應(yīng)該是對做人處世之道概括得最好的一句話了,世事洞明說的是智商能力,人情練達(dá)說的則是情商能力,需二者兼修決不可偏廢。
          2、我們每個(gè)人都守著一扇只能自內(nèi)開啟的改變之門
          一個(gè)人需要有對于變化的因應(yīng)能力,而最積極的因應(yīng)態(tài)度則是預(yù)知變化并主動尋求改變,倘倘若等到變化來敲你的門時(shí)恐怕為時(shí)已晚。同時(shí)也因?yàn)槿魏胃淖冏詢?nèi)開啟,其決心愈堅(jiān)則其效果愈明顯。
          3、生氣就是拿別人的過錯(cuò)來懲罰自己
          情緒失控已經(jīng)成了我們最危險(xiǎn)的職業(yè)病,據(jù)說我們正在變得越來越容易發(fā)脾氣,而幸福指數(shù)越來越低。聰明的人不一定都念過佛,但往往比我們更能夠展現(xiàn)寬容和豁達(dá)。不會生氣的人一定是笨蛋,不去生氣的人才聰明。
          4、成功的人不在于摸到了一副好牌,而在于打好一副壞牌
          不管是作為自我安慰還是自我激勵(lì),這句話都應(yīng)該能夠幫得上忙。英雄不問出處,我們雖然不能決定自己出身在什么樣的家庭,但我們可以決定一生中可以達(dá)到的高度;我們之所以會有成就感,那是因?yàn)槲覀兺瓿商魬?zhàn)了一個(gè)需要跳一跳才夠得著的目標(biāo)。
          5、如果要等到所有的燈都變成綠燈才行動,那永遠(yuǎn)別想有開始
          同樣是砍一顆樹,有人說我哪有時(shí)間磨刀呢忙著砍樹呢,而另一種人則光磨刀不砍樹。這第二種人要么是磨刀主義者,要么完美主義者。有一個(gè)開著車子的女人停在路口,眼看紅燈變成黃燈又變成綠燈卻依然一動不動,無奈的交警走過來問:怎么啦,沒有你喜歡的顏色嗎?
          6、將80%的時(shí)間關(guān)注在20%的事情的,因?yàn)檫@20%的事情會給你帶來80%的效果
          合理的運(yùn)用二八法則可以規(guī)劃好你的時(shí)間,因而可以讓生活看起來更有質(zhì)量,讓你的努力更容易接近理想和目標(biāo)。所以我們至少要學(xué)會在所有的目標(biāo)中找到那些將要影響我們一生的關(guān)鍵的少數(shù),然后有效地進(jìn)行時(shí)間和資源的傾斜和投資。
          7、把船泊在港口時(shí)是安全的,但那并不是造船的目的
          人生的價(jià)值又如一尾船的價(jià)值。過于擔(dān)心未來不可知的風(fēng)險(xiǎn),那么失去的將不只是風(fēng)景,而是價(jià)值實(shí)現(xiàn)的機(jī)會和可能。期待遠(yuǎn)航不如現(xiàn)在就啟航,如果要飛得高,就該把地平線忘掉,歌里面都已經(jīng)有了很好的解釋。
          8、未來成功的典范,不在于你贏過多少人,而在于你幫助過多少人,服務(wù)過多少地方
          人脈無疑是重要的情商能力之一。上帝給了我們手和腳,我們可以用腳跑過別人甚至伴倒別人,但也可以用手來援助別人。一心想要贏過別人的我們,不如從現(xiàn)在開始換一種贏法,在開放和合作中實(shí)現(xiàn)雙贏甚至多贏。
          9、沒有追趕不會奔跑,沒有競爭不會進(jìn)步
          草食動物不用為了食物而奔跑,卻要為了避免成為別人的食物而跑;動物世界里為了生存而進(jìn)行的競爭遠(yuǎn)比人類進(jìn)行的商業(yè)競爭殘酷多了,正如那只被獵狗追趕的狐貍對另一只狐貍所說的,我不一定跑得過獵狗,但一定要跑過你。

          posted @ 2006-11-04 11:29 xzc 閱讀(252) | 評論 (0)編輯 收藏

          作者:薛谷雨

          作者簡介


          薛谷雨,NORDSAN(北京)信息科技開發(fā)有限公司高級JAVA研發(fā)工程師,正致力于企業(yè)級異構(gòu)數(shù)據(jù)交換的服務(wù)器產(chǎn)品的研發(fā),在J2EE和WEB SERVICE方面有較為豐富的開發(fā)經(jīng)驗(yàn),您可以通過rainight@126.com與他聯(lián)系。

          前言


          代碼生成器(code generator,CG),顧名思義就是生成代碼的工具。有了它,你就可以從一組簡單的設(shè)定或者數(shù)據(jù)庫設(shè)計(jì)中獲得幾百、幾千行代碼。如果不采用這項(xiàng)技術(shù)的話,開發(fā)者就不得不花上幾個(gè)小時(shí)或者幾天的時(shí)間來手工編寫這些代碼。另一方面,優(yōu)秀的開發(fā)工具為了提供其獨(dú)特的功能或者屏蔽一些容易出錯(cuò)的細(xì)節(jié),也往往采用代碼生成技術(shù)為使用者提供一個(gè)程序的模板框架,其目的也是為了提高編程的效率。以上觀點(diǎn)僅是對代碼生成器的一般理解,換句話說,這似乎是一個(gè)可有可無的東西,沒有它,不過是多費(fèi)一些人工而已。然而,本文要介紹的這套名為ASM的JAVA工具類的功能非同小可,它可以生成JAVA字節(jié)碼,也就是class文件。你可以在應(yīng)用程序中根據(jù)情況動態(tài)生成各式各樣的class,然后就調(diào)用,達(dá)到一種近乎上帝造物般的神奇。心動不如行動,如果你也想在自己的開發(fā)中引入這一超前的編程技術(shù),請看此文。

          小巧而神奇的ASM


          ASM是一套JAVA字節(jié)碼生成架構(gòu)。它可以動態(tài)生成二進(jìn)制格式的stub類或其他代理類,或者在類被JAVA虛擬機(jī)裝入內(nèi)存之前,動態(tài)修改類。ASM 提供了與 BCEL( http://jakarta.apache.org/bcel )和SERP( http://serp.sourceforge.net/ )相似的功能,只有22K的大小,比起350K的BCEL和150K的SERP來說,是相當(dāng)小巧的,并且它有更高的執(zhí)行效率,是BCEL的7倍,SERP的11倍以上。ASM一貫的設(shè)計(jì)思想就是將其應(yīng)用于動態(tài)生成領(lǐng)域,因此小巧和快捷一直是這個(gè)產(chǎn)品的設(shè)計(jì)和實(shí)現(xiàn)的指導(dǎo)思想。

          此產(chǎn)品由法國電信公司的研發(fā)工程師Eric Bruneton負(fù)責(zé)。從2002年7月ASM的第一個(gè)版本發(fā)布至今,此產(chǎn)品已經(jīng)升級了五次,日臻完美。到目前為止,ASM最新的版本是1.3.5,你可以去 http://asm.objectweb.org/ 下載。

          ASM的最終目標(biāo)是創(chuàng)建一個(gè)生成工具,可以被用來執(zhí)行對任何類的處理操作(不像一些工具,比如Javassit,它只支持預(yù)先定義的類操作,然而在許多場合這一功能是有局限性的)。

          JAVA的CLASS文件格式


          要想駕馭ASM,先要了解一下JAVA的CLASS文件格式。JAVA的CLASS文件通常是樹型結(jié)構(gòu)。根節(jié)點(diǎn)包含以下元素:

          • ConstantPool:符號表;
          • FieldInfo:類中的成員變量信息;
          • MethodInfo:類中的方法描述;
          • Attribute:可選的附加節(jié)點(diǎn)。

          FieldInfo節(jié)點(diǎn)包含成員變量的名稱,諸如public,private,static等的標(biāo)志。ConstantValue屬性用來存儲靜態(tài)的不變的成員變量的值。Deprecated和Synthetic被用來標(biāo)記一個(gè)成員變量是不被推薦的或由編譯器生成的。

          MethodInfo節(jié)點(diǎn)包含方法的名稱,參數(shù)的類型和和它的返回值,方法是公有的,私有的或靜態(tài)的等標(biāo)志。MethodInfo包含可選的附加屬性,其中最重要的是Code屬性,它包含非抽象的方法的代碼。Exceptions屬性包含方法將拋出的Exception的名稱。Deprecated和Synthetic屬性的信息同上面的FieldInfo的定義一樣。

          根節(jié)點(diǎn)的可選屬性有SourceFile,InnerClasses和Deprecated。SourceFile用來存儲被編譯成字節(jié)碼的源代碼文件的原始名稱;InnerClasses存儲內(nèi)部類的信息。由于這些屬性的存在,java 的類格式是可以擴(kuò)展的,也就是說可以在一個(gè)class中附加一些非標(biāo)準(zhǔn)的屬性, java虛擬機(jī)會忽略這些不可識別的屬性,正常的加載這個(gè)class。

          ConstantPool是一個(gè)由數(shù)字或字符串常量的索引組成的隊(duì)列,或由此類的樹的其他節(jié)點(diǎn)引用的,由其他對象創(chuàng)建的被引用常量的索引組成的隊(duì)列。這個(gè)表的目標(biāo)是為了減少冗余。例如,F(xiàn)ieldInfo節(jié)點(diǎn)不包含節(jié)點(diǎn)的名稱,只包含它在這一表中的索引。同樣的,GETFIELD和PUTFIELD不直接包含成員變量的名稱,只包含名稱的索引。

          精通ASM


          Asm架構(gòu)整體都圍繞著兩個(gè)接口,即ClassVisitor 和 CodeVisitor,它們能訪問每個(gè)類的方法,成員變量,包含在每個(gè)方法中的字節(jié)碼指令。ClassReader用來讀取class文件;ClassWriter類用來寫生成的Class文件。

          為了修改已經(jīng)存在的class,你必須使用分析class文件的ClassReader,類的修正器和寫class文件的ClassWriter。類的修正器就是一個(gè)ClassVisitor,它可以委派一部分工作到其他的ClassVisitor,但是為了實(shí)現(xiàn)預(yù)期的修改步驟,它將改變一些參數(shù)的值,或者調(diào)用一些其他方法。為了比較容易的實(shí)現(xiàn)這種類的修正器,ASM提供了一個(gè)ClassAdapter和CodeAdapter,這兩個(gè)適配器類分別實(shí)現(xiàn)了ClassVistor和CodeVistor接口。

          HelloWorld,體驗(yàn)造類的神奇


          下面是一個(gè)應(yīng)用ASM動態(tài)生成字節(jié)碼的類,并調(diào)用其中方法的完整的HelloWorld 程序,程序的功能是動態(tài)生成一個(gè)Example.class類,并實(shí)例化一個(gè)Example對象,調(diào)用對象的main函數(shù),在屏幕上打印出"Hello world!"

          import org.objectweb.asm.*;
          import java.lang.reflect.*;
          import java.io.FileOutputStream;
          
          public class Helloworld extends ClassLoader implements Constants {
          
            public static void main (final String args[]) throws Exception {
          
              /*
               * 此程序?qū)⑸梢粋€(gè)class,對應(yīng)的java源代碼是:
               *
               * public class Example {
               *   public static void main (String[] args) {
               *     System.out.println("Hello world!");
               *   }
               * }
               *
               */
          
              // 創(chuàng)建一個(gè)ClassWriter
              ClassWriter cw = new ClassWriter(false);
              cw.visit(ACC_PUBLIC, "Example", "java/lang/Object", null, null);
          
              // 創(chuàng)建一個(gè) MethodWriter
              CodeVisitor mw = cw.visitMethod(ACC_PUBLIC, "", "()V", null);
              // 推入 'this' 變量
              mw.visitVarInsn(ALOAD, 0);
              //  創(chuàng)建父類的構(gòu)造函數(shù)
              mw.visitMethodInsn(INVOKESPECIAL, "java/lang/Object", "", "()V");
              mw.visitInsn(RETURN);
              // 這段代碼使用最多一個(gè)棧元素和一個(gè)本地變量
              mw.visitMaxs(1, 1);
          
              // 為main方法創(chuàng)建一個(gè)MethodWriter
              mw = cw.visitMethod(
                ACC_PUBLIC + ACC_STATIC, "main", "([Ljava/lang/String;)V", null);
              // 使用System類的out成員類
              mw.visitFieldInsn(
                GETSTATIC, "java/lang/System", "out", "Ljava/io/PrintStream;");
              // pushes the "Hello World!" String constant
              mw.visitLdcInsn("Hello world!");
              // 調(diào)用System.out的'println' 函數(shù)
              mw.visitMethodInsn(
                INVOKEVIRTUAL, "java/io/PrintStream", "println", "(Ljava/lang/String;)V");
              mw.visitInsn(RETURN);
              // 這段代碼使用最多兩個(gè)棧元素和兩個(gè)本地變量
              mw.visitMaxs(2, 2);
          
              // 生成字節(jié)碼形式的類
              byte[] code = cw.toByteArray();
          
              FileOutputStream fos = new FileOutputStream("Example.class");
              //寫文件
              fos.write(code);
              //關(guān)閉輸出流
              fos.close();
          
              //實(shí)例化剛剛生成的類
              Helloworld loader = new Helloworld();
              Class exampleClass = loader.defineClass("Example", code, 0, code.length);
          
              // 使用動態(tài)生成的類打印 'Helloworld'
              Method main = exampleClass.getMethods()[0];
              main.invoke(null, new Object[] {null});
            }
          }
          
          posted @ 2006-11-04 11:05 xzc 閱讀(442) | 評論 (0)編輯 收藏
               摘要: 雖然對 Spring 不熟悉,又不懂 iBatis ,而且對模式的概念還沒有弄清楚,但也硬著頭皮去讀 Spring 包自帶的 Jpetstore ...  閱讀全文
          posted @ 2006-11-02 09:41 xzc 閱讀(315) | 評論 (0)編輯 收藏
          最近由于工作原因在研究、應(yīng)用Maven,有了一些體會就寫成了此文。本文雖然是Maven2的入門文章,但并不涉及Maven的歷史、下載與安裝,這些內(nèi)容可以到Maven的官方網(wǎng)站上了解。本文主要是關(guān)注Maven中的重要概念,并以一個(gè)實(shí)例來闡述使用Maven的基本方法。文末有例子代碼下載的鏈接。(2006.10.29最后更新)
          1 關(guān)鍵名詞
              Project:任何您想build的事物,Maven都可以認(rèn)為它們是工程。這些工程被定義為工程對象模型(POM,Poject Object Model)。一個(gè)工程可以依賴其它的工程;一個(gè)工程也可以由多個(gè)子工程構(gòu)成。
              POM:POM(pom.xml)是Maven的核心文件,它是指示Maven如何工作的元數(shù)據(jù)文件,類似于Ant中的build.xml文件。POM文件位于每個(gè)工程的根目錄中。
              GroupId:groupId是一個(gè)工程的在全局中唯一的標(biāo)識符,一般地,它就是工程名。groupId有利于使用一個(gè)完全的包名,將一個(gè)工程從其它有類似名稱的工程里區(qū)別出來。
              Artifact:artifact是工程將要產(chǎn)生或需要使用的文件,它可以是jar文件,源文件,二進(jìn)制文件,war文件,甚至是pom文件。每個(gè)artifact都由groupId和artifactId組合的標(biāo)識符唯一識別。需要被使用(依賴)的artifact都要放在倉庫(見Repository)中,否則Maven無法找到(識別)它們。
              Dependency:為了能夠build或運(yùn)行,一個(gè)典型的Java工程會依賴其它的包。在Maven中,這些被依賴的包就被稱為dependency。dependency一般是其它工程的artifact。
              Plug-in:Maven是由插件組織的,它的每一個(gè)功能都是由插件提供的。插件提供goal(類似于Ant中的target),并根據(jù)在POM中找到的元數(shù)據(jù)去完成工作。主要的Maven插件要是由Java寫成的,但它也支持用Beanshell或Ant腳本寫成的插件。
              Repository:倉庫用于存放artifact,它可以是本地倉庫,也可以是遠(yuǎn)程倉庫。Maven有一個(gè)默認(rèn)的遠(yuǎn)程倉庫--central,可以從http://www.ibiblio.org/maven2/下載其中的artifact。在Windows平臺上,本地倉庫的默認(rèn)地址是User_Home\.m2\repository
              Snapshot:工程中可以(也應(yīng)該)有一個(gè)特殊版本,它的版本號包括SNAPSHOT字樣。該版本可以告訴Maven,該工程正處于開發(fā)階段,會經(jīng)常更新(但還未發(fā)布)。當(dāng)其它工程使用此類型版本的artifact時(shí),Maven會在倉庫中尋找該artifact的最新版本,并自動下載、使用該最新版。
          2 Maven Build Life Cycle
              軟件項(xiàng)目一般都有相似的開發(fā)過程:準(zhǔn)備,編譯,測試,打包和部署,Maven將上述過程稱為Build Life Cycle。在Maven中,這些生命周期由一系列的短語組成,每個(gè)短語對應(yīng)著一個(gè)(或多個(gè))操作;或?qū)?yīng)著一個(gè)(或多個(gè))goal(類似于Ant中的target)。
              如編譯源文件的命令mvn compile中的compile是一個(gè)生命周期短語。同時(shí)該命令也可以等價(jià)于mvn compiler:compile,其中的compiler是一個(gè)插件,它提供了compile(此compile與mvn compile中的compile意義不同)goal;compiler還可提供另一個(gè)goal--testCompile,該goal用于編譯junit測試類。
              在執(zhí)行某一個(gè)生命周期時(shí),Maven會首先執(zhí)行該生命周期之前的其它周期。如要執(zhí)行compile,那么將首先執(zhí)行validate,generate-source,process-source和generate-resources,最后再執(zhí)行compile本身。關(guān)于Maven中默認(rèn)的生命周期短語,請見參考資源[6]中的附錄B.3
          3 標(biāo)準(zhǔn)目錄布局
              Maven為工程中的源文件,資源文件,配置文件,生成的輸出和文檔都制定了一個(gè)標(biāo)準(zhǔn)的目錄結(jié)構(gòu)。Maven鼓勵(lì)使用標(biāo)準(zhǔn)目錄布局,這樣就不需要進(jìn)行額外的配置,而且有助于各個(gè)不同工程之間的聯(lián)接。當(dāng)然,Maven也允許定制個(gè)性的目錄布局,這就需要進(jìn)行更多的配置。關(guān)于Maven的標(biāo)準(zhǔn)目錄布局,請見參考資源[6]中的附錄B.1
          4 Maven的優(yōu)點(diǎn)
              [1]build邏輯可以被重用。在Ant中可能需要多次重復(fù)地寫相同的語句,但由于POM的繼承性,可以復(fù)用其它的POM文件中的語句。這樣既可以寫出清晰的build語句,又可以構(gòu)造出層次關(guān)系良好的build工程。
              [2]不必關(guān)注build工作的實(shí)現(xiàn)細(xì)節(jié)。我們只需要使用一些build生命周期短語就可以達(dá)到我們的目標(biāo),而不必管Maven是如何做到這些的。如,只需要告訴Maven要安裝(install),那么它自然就會驗(yàn)證,編譯,打包,及安裝。
              [3]Maven會遞歸加載工程依賴的artifact所依賴的其它artifact,而不用顯示的將這些artifact全部寫到dependency中。
              [4]如果完全使用Maven的標(biāo)準(zhǔn)目錄布局,那么可以極大地減少配置細(xì)節(jié)。
          5 實(shí)例
          5.1 構(gòu)想
              由于只是闡述Maven的基本使用方法,所以本文將要設(shè)計(jì)的實(shí)例,只是一個(gè)簡單的Maven demo。該實(shí)例包含兩個(gè)工程:普通應(yīng)用程序工程(app)和Web應(yīng)用工程(webapp)。app工程提供一個(gè)簡單的Java類;webapp工程只包含一個(gè)Servlet,并將使用app中的Java類。
              該Demo的目標(biāo)是能夠正確地將webapp制成war包,以供部署時(shí)使用。要能夠正確制作war,自然首先就必須要能夠正確的編譯源代碼,且要將App模塊制成jar包。本文創(chuàng)建的工程所在的目錄是D:\maven\demo
          5.2 App工程
              可以使用Maven的archetype插件來創(chuàng)建新工程,命令如下:
              D:\maven\demo>mvn archetype:create -DgroupId=ce.demo.mvn -DartifactId=app
          該工程的groupId是ce.demo.mvn,那么該工程的源文件將放在Java包c(diǎn)e.demo.mvn中。artifactId是app,那么該工程根目錄的名稱將為app。
              當(dāng)?shù)谝淮螆?zhí)行該命令時(shí),Maven會從central倉庫中下載一些文件。這些文件包含插件archetype,以及它所依賴的其它包。該命令執(zhí)行完畢后,在目錄D:\maven\demo下會出現(xiàn)如下目錄布局:
          app
          |-- pom.xml
          `-- src
              |-- main
              |   `-- java
              |       `-- ce
              |           `-- demo
              |               `-- mvn
              |                   `-- App.java
              `-- test
                  `-- java
                      `-- ce
                          `-- demo
                              `-- mvn
                                  `-- AppTest.java
          因本文暫時(shí)不涉及JUnit測試,故請將目錄app\src\test目錄刪除(不刪除也沒關(guān)系 ^_^)。然后再修改App.java文件,其完全內(nèi)容如下:
          package ce.demo.mvn;
          public class App {
              
          public String getStr(String str) {
                  
          return str;
              }

          }
          其實(shí),如果我們能夠清楚地知道Maven的標(biāo)準(zhǔn)目錄布局,就可以不使用archetype插件來創(chuàng)建工程原型;如果我們要定制個(gè)性的目錄布局,那么就更沒有必要使用archetype插件了。
          5.3 WebApp工程
              我們?nèi)匀蝗鐒?chuàng)建app工程一樣使用archetype插件來創(chuàng)建webapp工程,命令如下:
             
          D:\maven\demo>mvn archetype:create -DgroupId=ce.demo.mvn -DartifactId=webapp -DarchetypeArtifactId=maven-archetype-webapp
              第一次運(yùn)行此命令時(shí),也會從central倉庫中下載一些與Web應(yīng)用相關(guān)的artifact(如javax.servlet)。此命令與創(chuàng)建app的命令的不同之處是,多設(shè)置了一個(gè)屬性archetypeArtifacttId,該屬性的值為maven-archetype-webapp。即告訴Maven,將要?jiǎng)?chuàng)建的工程是一個(gè)Web應(yīng)用工程。創(chuàng)建app工程時(shí)沒有使用該屬性值,是由于archetype默認(rèn)創(chuàng)建的是應(yīng)用程序工程。同樣的,執(zhí)行完該命令之后,會出現(xiàn)如下標(biāo)準(zhǔn)目錄布局:
          webapp
          |-- pom.xml
          `-- src
              `-- main
                  `-- webapp
                     
          |-- index.jsp
                      |-- WEB-INF
                          `-- web.xml
              根據(jù)5.1節(jié)的構(gòu)想,webapp工程將只包含一個(gè)Servlet,所以我們不需要index.jsp文件,請將其刪除。此時(shí)大家可以發(fā)現(xiàn),目前的目錄布局中并沒有放Servlet,即Java源文件的地方。根據(jù)參考資源[6]中的附錄B.1,以及app工程中Java源文件的布局,可以知道Servlet(它仍然是一個(gè)Java類文件)仍然是放在webapp\src\main\java目錄中,請新建該目錄。此處的Servlet是一個(gè)簡單HelloServlet,其完整代碼如下:
          package hello;

          import java.io.IOException;
          import java.io.PrintWriter;
          import javax.servlet.ServletException;
          import javax.servlet.http.HttpServlet;
          import javax.servlet.http.HttpServletRequest;
          import javax.servlet.http.HttpServletResponse;

          import ce.demo.mvn.App;  // 引用app工程中的App類

          public class HelloServlet extends HttpServlet {
              
          private static final long serialVersionUID = -3696470690560528247L;
              
          public void doGet(HttpServletRequest request, HttpServletResponse response)
                      
          throws ServletException, IOException {
                  App app 
          = new App();
                  String str 
          = app.getStr("CE Maven Demo");
                  PrintWriter out 
          = response.getWriter();
                  out.print(
          "<html><body>");
                  out.print(
          "<h1>" + str);
                  out.print(
          "</body></html>");
              }

          }
          5.4 POM文件
              大家可以發(fā)現(xiàn),在前面新建工程時(shí),我們并沒有提到各個(gè)工程中的pom.xml文件。現(xiàn)在將要討論這個(gè)問題。我們先看看app工程中的POM文件,其完整內(nèi)容如下:
          <project>
            
          <modelVersion>4.0.0</modelVersion>
            
          <groupId>ce.demo.mvn</groupId>
            
          <artifactId>app</artifactId>
            
          <packaging>jar</packaging>
            
          <version>1.0</version>
            
          <name>CE Maven Demo -- App</name>
          </project>
              大家可以發(fā)現(xiàn)此我帖出來的內(nèi)容與實(shí)際由archetype插件生成的POM文件的內(nèi)容有些不同,但基本上是一致的。只是為了使文件中的語句更清晰,此處刪除了一些冗余的內(nèi)容,并修改了該工程的version和name的值,以與此例子的背景來符合。在目前情況下modelVersion值將被固定為4.0.0,這也是Maven2唯一能夠識別的model版本。groupId,artifactId的值與創(chuàng)建工程時(shí)使用的命令中的相關(guān)屬性值是一致的。packaging的值由工程的類型決定,如應(yīng)用程序工程的packaging值為jar,Web應(yīng)用工程的packaging值為war。上述情況也可以從webapp的POM文件中看出,下面將看看這個(gè)pom的完整內(nèi)容。
          <project>
            
          <modelVersion>4.0.0</modelVersion>
            
          <groupId>ce.demo.mvn</groupId>
            
          <artifactId>webapp</artifactId>
            
          <packaging>war</packaging>
            
          <version>1.0</version>
            
          <name>CE Maven Demo -- WebApp</name>
            
            
          <dependencies>
                
          <dependency>
                    
          <groupId>ce.demo.mvn</groupId>
                    
          <artifactId>app</artifactId>
                    
          <version>1.0</version>
                
          </dependency>
              
          <dependency>
                  
          <groupId>javax.servlet</groupId>
                  
          <artifactId>servlet-api</artifactId>
                  
          <version>2.4</version>
                  
          <scope>provided</scope>
              
          </dependency> 
            
          </dependencies>
          </project>
              比較app與webapp中的POM,除前面已經(jīng)提過的packaging的差別外,我們還可以發(fā)現(xiàn)webapp中的POM多了dependencies項(xiàng)。由于webapp需要用到app工程中的類(見HelloServlet源代碼),它還需要javax.servlet包(因?yàn)樵摪⒉荒J(rèn)存在于jsdk中)。故,我們必須要將它們聲明到依賴關(guān)系中。
          5.5 執(zhí)行
              上述兩個(gè)工程創(chuàng)建完畢后,就需要執(zhí)行一些命令來看看會有什么結(jié)果出現(xiàn)。我們首先進(jìn)入app目錄,并執(zhí)行命令mvn compile,然后會在該目錄下發(fā)現(xiàn)新生成的目錄target\classes,即編譯后的class文件(包括它的包目錄)就放在了這里。再執(zhí)行命令mvn package,在目錄target中就會生成app-1.0.jar文件。該文件的全名由如下形式確定:artifactId-version.packaging。根據(jù)第2章的敘述可以知道,執(zhí)行命令mvn package時(shí),將首先將產(chǎn)生執(zhí)行命令mvn compile之后的結(jié)果,故如果要打包,那么只需要執(zhí)行mvn package即可。
              在app工程中執(zhí)行完之后,就需要進(jìn)入webapp工程了。進(jìn)入webapp目錄,此次將只執(zhí)行mvn package命令(隱示地執(zhí)行了compile過程)。此次命令的執(zhí)行并不成功,會出現(xiàn)如下問題:
          D:\maven\demo\webapp>mvn package
          ……
          Downloading: http://repo1.maven.org/maven2/ce/demo/mvn/app/
          1.0/app-1.0.pom
          [INFO] ------------------------------------------------------------------------
          [ERROR] BUILD ERROR
          [INFO] ------------------------------------------------------------------------
          [INFO] Error building POM (may not be this project's POM).
          Project ID: ce.demo.mvn:app
          Reason: Error getting POM for 'ce.demo.mvn:app' from the repository: Error transferring file
            ce.demo.mvn:app:pom:
          1.0
          from the specified remote repositories:
            central (http://repo1.maven.org/maven2)
          ……
              由粗體內(nèi)容可知,Maven正試圖從central倉庫下載app工程的artifact,但central倉庫肯定不會有這個(gè)artifact,其結(jié)果只能是執(zhí)行失敗!由第1章artifact名詞的解釋可知,被依賴的artifact必須存在于倉庫(遠(yuǎn)程或本地)中,但目前webapp所依賴的app必不存在于倉庫中,所以執(zhí)行只能失敗。
              解決這個(gè)問題有兩種方法:[1]將app-1.0.jar安裝到倉庫中,使它成為一個(gè)artifact;[2]構(gòu)建一個(gè)更高層次的工程,使app和webapp成為這個(gè)工程的子工程,然后從這個(gè)更高層次工程中執(zhí)行命令。
              第一種方法比較簡單(
          http://www.aygfsteel.com/jiangshachina/admin/EditPosts.aspx中的第一個(gè)主題),此處將詳細(xì)討論第2種方法(見5.6節(jié))。
          5.6 更高層次工程
              我們可以將app和webapp的上一級目錄demo作為這兩個(gè)工程的 一個(gè)
          更高層次工程,即使用app和webapp成為這個(gè)工程的子工程。為了使demo目錄成為一個(gè)demo工程,只需要在這個(gè)目錄下添加一個(gè)pom.xml文件,該文件內(nèi)容如下:
          <project>
              
          <modelVersion>4.0.0</modelVersion>
              
          <groupId>ce.demo</groupId>
              
          <artifactId>mvn-demo</artifactId>
              
          <packaging>pom</packaging>
              
          <version>1.0</version>
              
          <name>CE Maven Demo</name>
              
              
          <modules>
                  
          <module>app</module>
                  
          <module>webapp</module>
              
          </modules>
          </project>
              與app和webapp中的POM相比,demo的POM使用了modules項(xiàng),modules用于聲明本工程的子工程,module中的值對應(yīng)于子工程的artifact名。而且該P(yáng)OM的packaging類型必須為pom。
              有了demo工程后,我們只需要在demo目錄下執(zhí)行相關(guān)命令就可以了。通過如下命令即可驗(yàn)證:
              [1]mvn clean – 消除工程(包括所有子工程)中產(chǎn)生的所有輸出。這本文的實(shí)例中,實(shí)際上是刪除target目錄。由于之前的操作只有app工程產(chǎn)生了target目錄,而webapp并沒有,所以將只會刪除app工程中的target目錄。
              [2]mvn package – 將工程制作成相應(yīng)的包,app工程是作成jar包(app-1.0.jar),webapp工程是作成war包(webapp-1.0.war)。打開webapp-1.0.war包,可以發(fā)現(xiàn)app-1.0.jar被放到了WEB-INF的lib目錄中。
          6 小結(jié)
              通過以上的敘述與實(shí)例,應(yīng)該可以對Maven有一個(gè)粗略的認(rèn)識了。使用Maven關(guān)鍵是要弄清楚如何寫pom.xml文件,就如同使用Ant要會寫build.xml文件一樣。在POM中可以直接寫入Ant的task腳本,也可以調(diào)用Ant的build.xml文件(推薦),所以Maven也可以完成Ant的絕大多數(shù)工作(但不必安裝Ant)。注意:使用Maven就不要再過多的使用Ant腳本
              利用好Maven的繼承特性及子工程的關(guān)系,可以很好地簡化POM文件,并能夠構(gòu)建層次結(jié)構(gòu)良好的工程,有利于工程的維護(hù)。
          7 參考資源
          [1]Maven官方網(wǎng)站. http://maven.apache.org
          [2]Maven POM文件參考結(jié)構(gòu). http://maven.apache.org/ref/current/maven-model/maven.html
          [3]Super POM. http://maven.apache.org/guides/introduction/introduction-to-the-pom.html
          [4]Maven主要插件的列表. http://maven.apache.org/plugins
          [5]Maven基本使用指南. http://maven.apache.org/guides/index.html
          [6]Better Build with Maven. http://www.mergere.com/m2book_download.jsp -- 強(qiáng)烈推薦
          [7]介紹Maven2. http://www.javaworld.com/javaworld/jw-12-2005 /jw-1205-maven_p.html
          [8]揭秘Maven2 POM. http://www.javaworld.com/javaworld/jw-05-2006/jw-0529-maven.html
          [9]Maven讓事情變得簡單. http://www-128.ibm.com/developerworks/cn/java/j-maven
          [10]Maven文檔集. http://docs.codehaus.org/display/MAVENUSER/Home
          [11]有效利用Maven2的站點(diǎn)生成功能. http://www.matrix.org.cn/resource/article/44/44491_Maven2.html
          文中例子程序下載:http://www.aygfsteel.com/files/jiangshachina/maven.rar
          posted @ 2006-10-29 16:29 xzc 閱讀(1253) | 評論 (0)編輯 收藏
          僅僅憑著熟練的技能和勤懇的工作,就在職場游刃有余,未免有些天真。俗話說得好:會干的不如會說的。你想僅僅憑著熟練的技能和勤懇的工作,就在職場游刃有余、出人頭地,未免有些天真了。雖然能力加勤奮很重要,但會說話,卻能讓你工作起來更輕松,并且可能幫助你加薪、升職。

          ??? 1、應(yīng)答上司交代的工作:我立即去辦。

          ????冷靜、迅速地做出這樣的回應(yīng),會讓上司直觀地感覺你是一個(gè)工作講效率、處理問題果斷,并且服從領(lǐng)導(dǎo)的好下屬。如果你猶豫不決,只會讓上司不快,會給上司留下優(yōu)柔寡斷的印象,下次重要的機(jī)會可能就輪不到你了。

          ????2、傳遞壞消息時(shí):我們似乎碰到一些情況……

          ????一筆業(yè)務(wù)出現(xiàn)麻煩,或市場出現(xiàn)危機(jī),如果你立刻沖到上司的辦公室報(bào)告這個(gè)壞消息,就算不關(guān)你的事,也會讓上司懷疑你對待危機(jī)的能力,弄不好還會惹得上司的責(zé)罵,成為出氣筒。

          ????正確的方式是你可以從容不迫地說:我們似乎碰到一些情況……千萬不要亂了陣腳,要讓上司覺得事情并沒有到不可收拾的地步,并且感到你會與他并肩作戰(zhàn),解決問題。

          ????3、體現(xiàn)團(tuán)隊(duì)精神:XX的主意真不錯(cuò)!

          ????小馬的創(chuàng)意或設(shè)計(jì)得到了上司的欣賞,雖然你心里為自己不成功的設(shè)計(jì)而難過,甚至有些妒忌,你還是要在上司的聽力范圍內(nèi)夸夸小馬:小馬的主意真不錯(cuò)。在明爭暗斗的職場,善于欣賞別人,會讓上司認(rèn)為你本性善良,并富有團(tuán)隊(duì)精神,從而給你更多的信任。

          ????4、如果你不知道某件事:讓我再認(rèn)真地想一想,2點(diǎn)前答復(fù)您好嗎?

          ????上司問了你某個(gè)與業(yè)務(wù)有關(guān)的問題,你不知道如何作答,千萬不要說“不知道”。而“讓我再認(rèn)真地想一想,2點(diǎn)前答復(fù)您好嗎?”不僅暫時(shí)讓你解圍,也讓上司認(rèn)為你不輕率行事,而是個(gè)三思而后行的人。當(dāng)然,要記得按時(shí)給出答復(fù)。

          ????5、請同事幫忙:這個(gè)策劃沒有你真不行啊!

          ????有個(gè)策劃,你一個(gè)人搞不定,得找個(gè)比較內(nèi)行的人幫忙,怎么開口呢?你可以誠懇地說:這個(gè)策劃沒有你真不行啊!同事為了不負(fù)自己內(nèi)行的形象,通常是不會拒絕的。當(dāng)然,事后要記得感謝人家。


          6、拒絕黃段子:這種話好像不適合在辦公室講哦!

          ????男人有時(shí)總喜歡說些黃段子,并且不大注意場合。如果有男同事對你開“黃腔”,讓你無法忍受,這句話可以讓他們識趣地閉嘴。

          ????7、減輕工作量:我知道這件事很重要,我們不妨先排一排手頭的工作,按重要性排出先后順序。

          ????首先,強(qiáng)調(diào)你了解這項(xiàng)工作的重要性,然后請求上司指示,將這項(xiàng)工作與其它工作一起排出先后順序,不露痕跡地讓上司知道你的工作量其實(shí)很大,如果不是非你不可,有些事就可交給其他人或延期處理。

          ????8、承認(rèn)過失:是我一時(shí)疏忽,不過幸好……

          ????犯錯(cuò)誤在所難免,所以勇于承認(rèn)自己的過失很重要,推卸責(zé)任只會使你錯(cuò)上加錯(cuò)。不過,承認(rèn)過失也有訣竅,就是不要讓所有的錯(cuò)誤都自己扛,這句話可以轉(zhuǎn)移別人的注意力,淡化你的過失。

          ????9、打破冷場的話題:我很想知道您對這件事的看法……

          ????當(dāng)你與上司相處時(shí),有時(shí)不得不找點(diǎn)話題,以打破冷場。不過,這正是你贏得上司青睞的好機(jī)會,最恰當(dāng)?shù)脑掝}就是談一些與公司有關(guān)、上司很關(guān)心又熟悉的話題。當(dāng)上司滔滔不絕地發(fā)表看法時(shí),也會對你這樣一個(gè)謙虛的聽眾欣賞有加。

          ????10、面對批評:謝謝你告訴我,我會仔細(xì)考慮你的建議的。

          ????面對批評或責(zé)難,不管自己有沒有不當(dāng)之處,都不要將不滿寫在臉上,但要讓對方知道,你已接受到他的信息,不卑不亢讓你看起來又自信又穩(wěn)重,更值得敬重。

          posted @ 2006-10-24 15:39 xzc 閱讀(292) | 評論 (0)編輯 收藏
          牛津管理評論(oxford.icxo.com),為職業(yè)經(jīng)理人提供全方位的管理資訊服務(wù)。服務(wù)項(xiàng)目涵蓋管理文庫、管理工具、在線培訓(xùn)、職場測試、人力資源、企業(yè)管理、案例分析等,是經(jīng)理人能力提升的最佳學(xué)習(xí)平臺。職場人際交往28招實(shí)用技巧:

          ??? 1.長相不令人討厭,如果長得不好,就讓自己有才氣;如果才氣也沒有,那就總是微笑。

          ??? 2.氣質(zhì)是關(guān)鍵。如果時(shí)尚學(xué)不好,寧愿純樸。

          ??? 3.與人握手時(shí),可多握一會兒。真誠是寶。

          ??? 4.不必什么都用“我”做主語。

          ??? 5.不要向朋友借錢。

          ??? 6.不要“逼”客人看你的家庭相冊。

          ??? 7.與人打“的”時(shí),請搶先坐在司機(jī)旁。

          ??? 8.堅(jiān)持在背后說別人好話,別擔(dān)心這好話傳不到當(dāng)事人耳朵里。

          ??? 9.有人在你面前說某人壞話時(shí),你只微笑。

          ??? 10.自己開小車,不要特地停下來和一個(gè)騎自行車的同事打招呼。人家會以為你在炫耀。

          ??? 11.同事生病時(shí),去探望他。很自然地坐在他病床上,回家再認(rèn)真洗手。

          ??? 12.不要把過去的事全讓人知道。

          ??? 13.尊敬不喜歡你的人。

          ??? 14.對事不對人;或?qū)κ聼o情,對人要有情;或做人第一,做事其次。

          ??? 15.自我批評總能讓人相信,自我表揚(yáng)則不然。

          ??? 16.沒有什么東西比圍觀者們更能提高你的保齡球的成績了。所以,平常不要吝惜你的喝彩聲。

          ??? 17.不要把別人的好,視為理所當(dāng)然。要知道感恩。

          ??? 18.榕樹上的“八哥”在講,只講不聽,結(jié)果亂成一團(tuán)。學(xué)會聆聽。

          ??? 19.尊重傳達(dá)室里的師傅及搞衛(wèi)生的阿姨。

          ??? 20.說話的時(shí)候記得常用“我們”開頭。?
          ???
          ??? 21.為每一位上臺唱歌的人鼓掌。

          ??? 22.有時(shí)要明知故問:你的鉆戒很貴吧!有時(shí),即使想問也不能問,比如:你多大了?

          ??? 23.話多必失,人多的場合少說話。

          ??? 24.把未出口的“不”改成:“這需要時(shí)間”、“我盡力”、“我不確定”、“當(dāng)我決定后,會給你打電話”……

          ??? 25.不要期望所有人都喜歡你,那是不可能的,讓大多數(shù)人喜歡就是成功的表現(xiàn)。

          ??? 26.當(dāng)然,自己要喜歡自己。

          ??? 27.如果你在表演或者是講演的時(shí)候,如果只要有一個(gè)人在聽也要用心的繼續(xù)下去,即使沒有人喝采也要演,因?yàn)檫@是你成功的道路,是你成功的搖籃,你不要看的人成功,而是要你成功。

          ??? 28.如果你看到一個(gè)貼子還值得一看的話,那么你一定要回復(fù),因?yàn)槟愕幕貜?fù)會給人繼續(xù)前進(jìn)的勇氣,會給人很大的激勵(lì)。同時(shí)也會讓人感激你。

          posted @ 2006-10-24 15:36 xzc 閱讀(257) | 評論 (0)編輯 收藏
          本文介紹怎樣把jBPM組件添加到Web應(yīng)用程序中。所需要用到的資源,可以在jbpm-starters-kit-3.1.2中找到。
          一、首先安裝jBPM數(shù)據(jù)庫。jBPM是一個(gè)停止?fàn)顟B(tài)的組件,需要數(shù)據(jù)庫表持久化保存:1)業(yè)務(wù)程序定義和業(yè)務(wù)程序?qū)嵗跋嚓P(guān)的工作流數(shù)據(jù)。保障工作流引擎的執(zhí)行。2)異步系統(tǒng)使用數(shù)據(jù)庫表來模擬消息系統(tǒng)的功能。需要把消息到數(shù)據(jù)庫表中,由消息系統(tǒng)的命令執(zhí)行器異步查詢和執(zhí)行。不像專業(yè)的消息系統(tǒng)那樣是遠(yuǎn)程的。它僅僅使用數(shù)據(jù)庫模擬消息系統(tǒng)。
          1,打開MySQL的命令執(zhí)行工具Query Browser。
          2,當(dāng)前選定應(yīng)用程序的數(shù)據(jù)庫,如wcms。
          3,導(dǎo)入腳本文件:mysql.drop.create.sql
          4,執(zhí)行該腳本。會在當(dāng)前數(shù)據(jù)庫中增加jBPM的數(shù)據(jù)庫表。
           
          二、導(dǎo)入jBPM所需的.jar文件
          1,jbpmlib目錄中包含了jBPM所需的全部jar包。包括MySQL的jdbc包。
          2,把它整個(gè)復(fù)制到應(yīng)用程序的lib目錄下。
          3,應(yīng)用程序的構(gòu)建器路徑的“庫”中,把這些jar都加進(jìn)來。
          這些classpath下的jar包,都會被該Web應(yīng)用程序的類載入器載入。
           
          三、創(chuàng)建config.files和processes目錄,并加入classpath的源代碼路徑
          (一)config.files目錄的功能
              這個(gè)目錄存放jBPM的各類配置文件。放在這里(就是classpath頂層)的配置文件會取代jBPM的jar包中各處的配置文件。
          這里,由于需要使用mysql,而不是內(nèi)置的hsql內(nèi)存數(shù)據(jù)庫。所以我們提供了一個(gè)修改過的配置文件:hibernate.cfg.xml。這里提供了Hibernate3的配置。
          hibernate.cfg.xml配置文件的部分內(nèi)容
          <hibernate-configuration>
            <session-factory>
              <!-- jdbc connection properties
          原來的HSQL配置被注釋掉,使用MySQL數(shù)據(jù)庫的配置
            <property name="hibernate.dialect">org.hibernate.dialect.HSQLDialect</property>
              <property name="hibernate.connection.driver_class">org.hsqldb.jdbcDriver</property>
              <property name="hibernate.connection.url">jdbc:hsqldb:mem:.;sql.enforce_strict_size=true</property>
              <property name="hibernate.connection.username">sa</property>
              <property name="hibernate.connection.password"></property>
                    -->
              <property name="hibernate.dialect">org.hibernate.dialect.MySQLInnoDBDialect</property>
              <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
              <property name="hibernate.connection.url">jdbc:mysql://localhost:3306/wcms</property>
              <property name="hibernate.connection.username">root</property>
              <property name="hibernate.connection.password">root</property>
          (二)processes目錄的功能
          這個(gè)目錄存放process流程定義。如:manageNews\內(nèi)有3個(gè)文件。
          在jBPM應(yīng)用程序?qū)?par或.xml文件時(shí),使用相對路徑(如:withubCMS/processdefinition.xml)來定位業(yè)務(wù)程序定義資源文件。
           
          怎樣把它們放到classpath下,需要根據(jù)不同的環(huán)境進(jìn)行不同的處理。
          一、一般Java程序
              1,創(chuàng)建config.files和processes目錄。
          2,配置構(gòu)建器路徑,將這2個(gè)目錄設(shè)為到classpath的源代碼路徑。
          這樣,運(yùn)行時(shí),會把它們中的內(nèi)容復(fù)制到classpath目錄下。
          二、Eclipse下的Web程序
          我們使用Eclipse自帶的功能發(fā)布Web程序。
              1,創(chuàng)建config.files和processes目錄。
          2,配置構(gòu)建器路徑,將這2個(gè)目錄設(shè)為到classpath的源代碼路徑。
          3,配置classpath,也就是“缺省輸出文件夾”,為:
          內(nèi)容管理(應(yīng)用程序根路徑名)/webapps/WEB-INF/classes
          4,這樣,在Eclipse編譯時(shí)(默認(rèn)是保存即編譯),把這2個(gè)文件夾中的內(nèi)容復(fù)制到classpath下。
          5,然后,使用Eclipse自帶的功能,發(fā)布該Web應(yīng)用程序。
          Eclipse會把/webapps/文件夾下的所有內(nèi)容復(fù)制到Web服務(wù)器下,并且把webapps改名為該Web應(yīng)用程序的Eclipse項(xiàng)目名字。
          這樣,我們的配置,對于classpath來說也是正確的!Web應(yīng)用程序可以順利地運(yùn)行。
          三、Ant發(fā)布的Web程序
          可以和上面一樣。把這些classpath的源文件,編譯,然后把內(nèi)部的內(nèi)容復(fù)制到classpath下。
          Web項(xiàng)目運(yùn)行時(shí)的classpath是classes和lib。當(dāng)然也需要把jar包都復(fù)制到lib下。
           
          最后,在內(nèi)容管理\webapps\WEB-INF\jbpm\下放置那2個(gè)目錄。并把它們設(shè)為classpath的源路徑。
          目標(biāo)classpath路徑是內(nèi)容管理\webapps\WEB-INF\classes。
           
           
          四、測試jBPM和數(shù)據(jù)庫
          建立test源文件夾。提供一個(gè)junit測試類:org.jbpm.test.db.HelloWorldDbTest
          這個(gè)類使用字符串定義了一個(gè)簡單的業(yè)務(wù)程序,然后在數(shù)據(jù)庫上完整的執(zhí)行它。
          執(zhí)行該單元測試。在應(yīng)用程序的數(shù)據(jù)庫中的2個(gè)表:
          SELECT * FROM jbpm_processdefinition j;
          SELECT * FROM jbpm_processinstance j;
          應(yīng)該有數(shù)據(jù)。
           
              至此,jBPM組件就成功地加入到Web應(yīng)用程序中了!
          附錄:HelloWorldDbTest.java源代碼
          package org.jbpm.test.db;
          import java.util.List;
          import junit.framework.TestCase;
          import org.jbpm.JbpmConfiguration;
          import org.jbpm.JbpmContext;
          import org.jbpm.db.GraphSession;
          import org.jbpm.graph.def.ProcessDefinition;
          import org.jbpm.graph.exe.ProcessInstance;
          import org.jbpm.graph.exe.Token;
          public class HelloWorldDbTest extends TestCase {
           
            static JbpmConfiguration jbpmConfiguration = null;
            static {
              // An example configuration file such as this can be found in
              // 'src/config.files'.  Typically the configuration information is in the
              // resource file 'jbpm.cfg.xml', but here we pass in the configuration
              // information as an XML string.
             
              // First we create a JbpmConfiguration statically.  One JbpmConfiguration
              // can be used for all threads in the system, that is why we can safely
              // make it static.
             /**
              *單例對象。
              *JbpmConfiguration能夠被系統(tǒng)中所有線程所使用。
              *jbpm.cfg.xml這個(gè)命名方式和Hibernate配置文件的命名方式一致。
              *
              */
              jbpmConfiguration = JbpmConfiguration.parseXmlString(
                "<jbpm-configuration>" +
               
                // A jbpm-context mechanism separates the jbpm core
                // engine from the services that jbpm uses from
                // the environment.
                /*jbpm-context機(jī)制在環(huán)境中把jbpm核心引擎和jbpm使用的服務(wù)分開。
                 * 持久化服務(wù)是jbpm核心引擎使用的一個(gè)服務(wù)。
                 *
                 * */
               
                "  <jbpm-context>" +
                "    <service name='persistence' " +
                "             factory='org.jbpm.persistence.db.DbPersistenceServiceFactory' />" +
                "  </jbpm-context>" +
               
                // Also all the resource files that are used by jbpm are
                // referenced from the jbpm.cfg.xml
                /*
                 *string,配置了所有jbpm使用的資源文件的路徑。
                 * */
               
                "  <string name='resource.hibernate.cfg.xml' " +
                "          value='hibernate.cfg.xml' />" +
                "  <string name='resource.business.calendar' " +
                "          value='org/jbpm/calendar/jbpm.business.calendar.properties' />" +
                "  <string name='resource.default.modules' " +
                "          value='org/jbpm/graph/def/jbpm.default.modules.properties' />" +
                "  <string name='resource.converter' " +
                "          value='org/jbpm/db/hibernate/jbpm.converter.properties' />" +
                "  <string name='resource.action.types' " +
                "          value='org/jbpm/graph/action/action.types.xml' />" +
                "  <string name='resource.node.types' " +
                "          value='org/jbpm/graph/node/node.types.xml' />" +
                "  <string name='resource.varmapping' " +
                "          value='org/jbpm/context/exe/jbpm.varmapping.xml' />" +
                "</jbpm-configuration>"
              );
            }
           
            public void setUp() {
             //創(chuàng)建數(shù)據(jù)庫表
              //jbpmConfiguration.createSchema();
            }
           
            public void tearDown() {
             //刪除數(shù)據(jù)庫表
              //jbpmConfiguration.dropSchema();
            }
            public void testSimplePersistence() {
              // Between the 3 method calls below, all data is passed via the
              // database.  Here, in this unit test, these 3 methods are executed
              // right after each other because we want to test a complete process
              // scenario情節(jié).  But in reality, these methods represent different
              // requests to a server.
             
              // Since we start with a clean, empty in-memory database, we have to
              // deploy the process first.  In reality, this is done once by the
              // process developer.
             /**
              *  這個(gè)方法把業(yè)務(wù)處理定義通過Hibernate保存到數(shù)據(jù)庫中。
              */
              deployProcessDefinition();
              // Suppose we want to start a process instance (=process execution)
              // when a user submits a form in a web application...
              /*假設(shè)當(dāng)一個(gè)用戶提交一個(gè)表單時(shí),我們要開始一個(gè)業(yè)務(wù)處理的實(shí)例/執(zhí)行。
               * 這可以在Action中執(zhí)行處理。
               */
              processInstanceIsCreatedWhenUserSubmitsWebappForm();
              // Then, later, upon the arrival of an asynchronous message the
              // execution must continue.
              /*
               * 然后,直到異步消息來到,才繼續(xù)執(zhí)行業(yè)務(wù)處理實(shí)例的余下的工作流程。
               * */
              theProcessInstanceContinuesWhenAnAsyncMessageIsReceived();
            }
            public void deployProcessDefinition() {
              // This test shows a process definition and one execution
              // of the process definition.  The process definition has
              // 3 nodes: an unnamed start-state, a state 's' and an
              // end-state named 'end'.
             /*
              * 這個(gè)方法把業(yè)務(wù)處理定義通過Hibernate保存到數(shù)據(jù)庫中。
              *
              * */
              ProcessDefinition processDefinition = ProcessDefinition.parseXmlString(
                "<process-definition name='hello world'>" +
                "  <start-state name='start'>" +
                "    <transition to='s' />" +
                "  </start-state>" +
                "  <state name='s'>" +
                "    <transition to='end' />" +
                "  </state>" +
                "  <end-state name='end' />" +
                "</process-definition>"
              );
              // Lookup the pojo persistence context-builder that is configured above
              JbpmContext jbpmContext = jbpmConfiguration.createJbpmContext();
              try {
                // Deploy the process definition in the database
                jbpmContext.deployProcessDefinition(processDefinition);
              } finally {
                // Tear down the pojo persistence context.
                // This includes flush the SQL for inserting the process definition 
                // to the database.
               /*
                * 關(guān)閉jbpm上下文。刪除pojo持久化上下文。
                * 這包括刷新SQL來真正的把業(yè)務(wù)處理定義插入到數(shù)據(jù)庫中。
                * */
                jbpmContext.close();
              }
            }
            public void processInstanceIsCreatedWhenUserSubmitsWebappForm() {
              // The code in this method could be inside a struts-action
              // or a JSF managed bean.
              // Lookup the pojo persistence context-builder that is configured above
              JbpmContext jbpmContext = jbpmConfiguration.createJbpmContext();
              try {
          /*
           * 圖表會話,是圖表定義/業(yè)務(wù)處理定義 相關(guān)的數(shù)據(jù)庫層面的會話。應(yīng)該也是一個(gè)Hibernate會話。
           * 可以從JBpm上下文這個(gè)數(shù)據(jù)庫----業(yè)務(wù)處理定義、實(shí)例等 得到 業(yè)務(wù)處理定義會話。
           *
           * */
                GraphSession graphSession = jbpmContext.getGraphSession();
                //從數(shù)據(jù)庫中根據(jù)業(yè)務(wù)處理定義的名字得到一個(gè)業(yè)務(wù)處理定義。
                ProcessDefinition processDefinition =
                    graphSession.findLatestProcessDefinition("hello world");
             
                // With the processDefinition that we retrieved from the database, we
                // can create an execution of the process definition just like in the
                // hello world example (which was without persistence).
                /*
                 * 創(chuàng)建業(yè)務(wù)處理定義的一個(gè)實(shí)例。
                 *
                 * */
                ProcessInstance processInstance =
                    new ProcessInstance(processDefinition);
               
                Token token = processInstance.getRootToken();
                assertEquals("start", token.getNode().getName());
                // Let's start the process execution
                token.signal();
                // Now the process is in the state 's'.
                assertEquals("s", token.getNode().getName());
               
                // Now the processInstance is saved in the database.  So the
                // current state of the execution of the process is stored in the
                // database.
                /*
                 * 執(zhí)行一步工作流程后,使用jbpmContext保存這個(gè)業(yè)務(wù)處理實(shí)例進(jìn)數(shù)據(jù)庫。
                 *    所以現(xiàn)在就把業(yè)務(wù)處理實(shí)例的執(zhí)行狀態(tài)也保存進(jìn)了數(shù)據(jù)庫。
                 *  因?yàn)椋瑯I(yè)務(wù)處理定義的實(shí)例  這個(gè)類也是一個(gè)Model類,用于管理一個(gè)業(yè)務(wù)處理定義的執(zhí)行的所有信息,
                 *  是一個(gè)多例模式的Model。
                 *
                 * */
                jbpmContext.save(processInstance);
                // The method below will get the process instance back out
                // of the database and resume execution by providing another
                // external signal.
              } finally {
                // Tear down the pojo persistence context.
                jbpmContext.close();
              }
            }
            public void theProcessInstanceContinuesWhenAnAsyncMessageIsReceived() {
              // The code in this method could be the content of a message driven bean.
              //這個(gè)方法可能在消息驅(qū)動Bean這個(gè)遠(yuǎn)程業(yè)務(wù)代理類中。
              // Lookup the pojo persistence context-builder that is configured above
              JbpmContext jbpmContext = jbpmConfiguration.createJbpmContext();
              try {
                GraphSession graphSession = jbpmContext.getGraphSession();
                // First, we need to get the process instance back out of the database.
                // There are several options to know what process instance we are dealing
                // with here.  The easiest in this simple test case is just to look for
                // the full list of process instances.  That should give us only one
                // result.  So let's look up the process definition.
               
                ProcessDefinition processDefinition =
                    graphSession.findLatestProcessDefinition("hello world");
                // Now, we search for all process instances of this process definition.
                /*
                 * 根據(jù)業(yè)務(wù)處理定義的id得到數(shù)據(jù)庫中所有的業(yè)務(wù)處理實(shí)例。這表明,數(shù)據(jù)庫中應(yīng)該存在2張表
                 * 它們是  一對多  的關(guān)系。
                 *
                 * */
                List processInstances =
                    graphSession.findProcessInstances(processDefinition.getId());
               
                // Because we know that in the context of this unit test, there is
                // only one execution.  In real life, the processInstanceId can be
                // extracted from the content of the message that arrived or from
                // the user making a choice.
                ProcessInstance processInstance =
                    (ProcessInstance) processInstances.get(0);
               
                // Now we can continue the execution.  Note that the processInstance
                // delegates signals to the main path of execution (=the root token).
                processInstance.signal();
                // After this signal, we know the process execution should have
                // arrived in the end-state.
                assertTrue(processInstance.hasEnded());
               
                // Now we can update the state of the execution in the database
                jbpmContext.save(processInstance);
              } finally {
                // Tear down the pojo persistence context.
                jbpmContext.close();
              }
            }
          }
           

          Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=1346877

          posted @ 2006-10-24 14:18 xzc 閱讀(1016) | 評論 (0)編輯 收藏
          一,為減小 build.xml 文件的大小,使用XML實(shí)體

           

          把屬性的設(shè)置都放一個(gè) XML 文件中

          props.xml 文件

          < property name ="build.dir" value ="build" />

          然后在 build.xml 文件中加入如下

          <! DOCTYPE project [ <!ENTITY properties SYSTEM "file:props.xml"> ]>

           

          二,將多個(gè)目錄的源文件編譯到一個(gè)地方

           

          < javac destdir ="build/classes">

              < src path ="src1"/>

              < src path ="src2"/>

          </ javac >

           

          三,保存構(gòu)建時(shí)的信息

           

          < project default ="init">

              < target name ="init"></ target >

              < property environment ="env" />

              < property name ="env.COMPUTERNAME" value ="${env.HOSTNAME}" />

              < propertyfile comment ="Build Information" file ="./buildinfo.properties">

                  < entry key ="build.host" value ="${env.COMPUTERNAME}" />

                  < entry key ="build.user.name" value ="${user.name}" />

                  < entry key ="build.os.name" value ="${os.name}" />

              </ propertyfile >

          </ project >

           

          四,去除屬性文件的注釋

           

          屬性文件:

          # 這里是注釋,會給過濾掉

          build.dir =build

          build 文件:

          < copy file ="props.properties" todir ="sample">

              < filterchain >

                  < striplinecomments >

                      < comment value ="#" />

                  </ striplinecomments >

              </ filterchain >

          </ copy >

           

          五,兩個(gè)花俏的功能

           

          1. 聲音提示

          < project name ="Sound" default ="all">

              < property file ="build.properties" />

              < target name ="init">

                  < sound >

                      < success source ="${sound.dir}/success.wav" duration ="500" />

                      < fail source ="${sound.dir}/fail.wav" loops ="2" />

                  </ sound >

              </ target >

              < target name ="fail" depends ="init">

                  < fail />

              </ target >

              < target name ="success" depends ="init" />

              < target name ="all" depends ="success" />

          </ project >

           

          2. 進(jìn)度條提示

          < project name ="splash" default ="init">

              < target name ="init">

                  < splash imageurl ="http://java.chinaitlab.com/UploadFiles_8734/200610/20061021103415601.gif" showduration ="5000" />

                  < sleep seconds ="1" />

                  < sleep seconds ="1" />

                  < sleep seconds ="1" />

                  < sleep seconds ="1" />

                  < sleep seconds ="1" />

                  < sleep seconds ="1" />

              </ target >

          </ project >

          posted @ 2006-10-23 13:40 xzc 閱讀(346) | 評論 (0)編輯 收藏
          僅列出標(biāo)題
          共32頁: First 上一頁 23 24 25 26 27 28 29 30 31 下一頁 Last 
          主站蜘蛛池模板: 永嘉县| 中宁县| 古蔺县| 驻马店市| 巴东县| 贵溪市| 开原市| 南漳县| 个旧市| 嘉定区| 颍上县| 铅山县| 瓮安县| 买车| 巍山| 论坛| 萨迦县| 海淀区| 金秀| 昭平县| 保靖县| 梅河口市| 曲麻莱县| 马关县| 高唐县| 河北省| 资兴市| 上蔡县| 丹东市| 遂宁市| 如皋市| 神农架林区| 梨树县| 津市市| 长治县| 巴彦县| 乐清市| 章丘市| 南乐县| 兴安县| 泸定县|