<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    J2EE劍俠行

    直覺我的J2EE應用生涯,打造我心中的一把利劍。

    常用鏈接

    統計

    技術鏈接

    最新評論

    2006年3月21日 #

    找到一個好用的UML建模工具-argouml

     很不錯的一個UML建模工具-argouml
         argouml下載地址
         我一眼就看上他的原因是:生成的用例和包圖可能直接生成JAVA代碼,而且準備無誤,這正是我要找的。
         我想:以后使用一些框架的話,可能由PD生成一些實體,然后Hibernate生成pojo等,加入到argouml,然后根據一個框架的特性生成一些包 和類.就等于詳細設計了吧.應該來說是比詳細設計還實用的東西.總比哪些WORD文檔好吧.還有讓人看不懂的概要設計.
        我想從技術出發,這個是一條比較適用的路子.下班了.我明天將會匯報一下我使用的情況和一些范例.
        反過來又想像.這好象是一個組合的腳手架.好象ROR的零星操作步驟.應該學習.ROR畢竟是一個新生事物,JAVAEYE的推廣也需要一個時間.如果像我這樣的打工,混口飯吃的人還是專心的研究J2EE好一點.否則明天就沒有飯吃了.

        呵呵.我的文章可被JAVAEYE收回到水貼里了,可能自己的能力不如人吧,好好學習,天天向上,如果看客有什么好的工具和軟件生產思路,可以共同交流。

    posted @ 2007-06-20 13:29 @家軍 閱讀(1847) | 評論 (1)編輯 收藏

    ROR:習慣約定優于配置(學習ROR的第一天)

    今天學習了一下ROR,有一些學習經驗東西要與大家分享。
    給ROR加一個座右銘--------狹窄心腸的日本產物。
    首先,不要一個一個的下載Ruby,Rails,建議使用一鍵安裝,下載地址如下:
    InstantRails-1.3-win
    版本說明:ruby 1.8.4 (2005-12-24) [i386-mswin32]
    其次,下載一個目前為止比較好的一個ROR的實踐工具:RadRails
    下載地址:radrails-0.7.1-win32
    接下來,設置一下Radrails的環境
    1)、Windows/perferences/Ruby/Installed Inteperters/ ->add ruby所在路徑:比如D:\InstantRails\ruby\bin\ruby.exe
    2)、Windows/perferences/Rails/Configuration ->Rails path:比如D:\InstantRails\ruby\bin\rails
    ->Rake path:比如D:\InstantRails\ruby\bin\rake 絕不是bat/cmd
    ->mogrel path:比如D:\InstantRails\ruby\bin\mongrel_rails絕不是bat/cmd

    有了如上的配置后,就只需要和在JAVA當中ANT一樣使用。(成功用過APPFUSE的人就不用害怕了)

    看看日本人寫的第一步:
    1),在RadRails中創建一個Rails Project,怎么樣會出來一堆的東東。
    2),進入DOS命令吧,后面的工序都是這樣的,好象買了海爾的洗衣機,第一次是送貨、第二次是用戶回訪,第三次是.....
    進入到你的項目處,運行ruby script\generate controller MyTest,
    則得到的服務如下:
    exists app/controllers/
    exists app/helpers/
    create app/views/my_test
    exists test/functional/
    create app/controllers/my_test_controller.rb
    create test/functional/my_test_controller_test.rb
    create app/helpers/my_test_helper.rb
    修改一下my_test_controller.rb

    代碼
    ?????? class ?MyTestController? < ?ApplicationController
    ??????def?index
    ????????render_text?
    " Hello?world!! "
    ??????end?
    ??????end

    在瀏覽器里輸入:http://127.0.0.1:3000/my_test/
    會出現 Hello world!!字樣,
    不過有意思的是你可以輸入:http://127.0.0.1:3000/My_test/
    http://127.0.0.1:3000/My_Test/
    http://127.0.0.1:3000/my_Test/
    都可以得到這個值,可能沒有JAVA哪樣嚴格吧。
    3)、還有對數據庫的操作,要配置一個database.yml(好象Log4j的東東)
    4)、創建數據庫表的時候只能夠使用復數起名,比如User就不行,只能夠起Users
    下面只要執行幾個命令就可以使用增刪改查了。
    如下是我的操作,下班了,就不多寫了,例子能夠說明一切問題:
    代碼
    ?1?E:\RORProject\demo>ruby?script/generate?model?user
    ?2?
    ?3???????exists??app/models/
    ?4?
    ?5???????exists??test/unit/
    ?6?
    ?7???????exists??test/fixtures/
    ?8?
    ?9???????create??app/models/user.rb
    10?
    11???????create??test/unit/user_test.rb
    12?
    13???????create??test/fixtures/users.yml
    14?
    15???????exists??db/migrate
    16?
    17???????create??db/migrate/001_create_users.rb
    18?
    19?E:\RORProject\demo>ruby?script/generate?controller?user
    20?exists?app/controllers/
    21?exists?app/helpers/
    22?create?app/views/user
    23?exists?test/functional/
    24?create?app/controllers/user_controller.rb
    25?create?test/functional/user_controller_test.rb
    26?create?app/helpers/user_helper.rb
    27?

    修改user_controller.rb如下:
    代碼
    1????class?UserController?<?ApplicationController
    2????????scaffold:user
    3????end

    最后你的瀏覽器當中輸入:http://127.0.0.1:3000/user/list,就包括了對數據庫表的四個操作.當然你也可以自己定義四個操作的任意一種.
    最后總結:
    ROR可能是敏捷開發的一個好實踐,但是我覺得他完成復雜應用進不會有大做為,而至于這一點還需要再做探究。不過現階段最好的需求就是能夠給用戶快速的寫出一個不完整的DEMO,這一點為以后打單取得主動。

    posted @ 2006-09-29 11:47 @家軍 閱讀(1995) | 評論 (1)編輯 收藏

    三個JAVA文件完成你的MVC應用

         摘要: 只需要你三個JAVA類和兩個配置文件,就可以完成你的MVC應用,我們就做一個示例吧。本文以一個登錄為例。第一個JAVA文件Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/-->/**======================================...  閱讀全文

    posted @ 2006-09-29 11:43 @家軍 閱讀(1901) | 評論 (3)編輯 收藏

    struts標簽,請你走開(系列一)

    在項目開發的很多時候,用戶需要更友好,更容易理解的操作界面,而為了能夠達到這種表現界面,struts標簽顯得力不從心,本人經過幾個項目的開發當中 逐漸的擯棄了struts標簽,而由JSTL來做為JSP頁面的表達者。
    struts標簽之死穴一 不支持嵌套
    看看這種常見的需求吧。一個用戶隸屬于一個職能部門,比如
    項目要求 職能部門有五個(亂寫的)
    1、企劃部
    2、網絡集成部
    3、行政部
    4、營銷部
    5、產品部
    項目要求 一共有二個員工
    1、張三 隸屬于行政部
    2、李四 隸屬于營銷部
    而你想把張三和李四都列表出來,顯示為如下:
    姓名 部門名稱
    張三 行政部
    李四 營銷部
    而且還需要用戶的列表鏈接到修改頁面當中(假如只修改部門)應該如何做呢。
    在使用struts標簽是很難做到的,除非你非常不在意內存的使用(亂寫技術性代碼)
    看看JSTL是如何做的吧。
    從STRUTS的ACTION當中加載兩個對象

    List?GetAllDept? = ?UserDAO.GetAllDept(); // 取得所有部門

    List?GetALLUser?
    = ?UserDAO.GetAllUser(); // 取得所有用戶

    request.setAttribute(
    " View_Dept " ,?GetAllDept);

    request.setAttribute(
    " View_User " ,?GetALLUser);
    在頁面當中加入對JSTL的引用
    <%@?taglib?uri="http://java.sun.com/jsp/jstl/core"?prefix="c"%>

    然后寫代碼如下:
    <table>

    <tr>

    <td?align="center">

    <a?href="User.do?method=EditUser&UserId=<c:out?value='${View_User.UserId}'/>">

    <c:out?value="${View_User.UserName}"?/>?</a>

    </td>

    <td?align="center">

    <c:forEach?items="${View_Dept}"?var="View_Dept">

    <c:if?test="${View_User.Dept.DeptId==View_Dept.DeptId}">

    <c:out?value="${View_Dept.DeptName}"?/>

    </c:if>????????????????????????????

    </c:forEach>

    </td>

    </tr>

    </table>

    其中View_User.Dept.DeptId表示USER表與DEPT表的一個關系(外鍵)
    你就可以看到所顯示的列表了。

    還有如果在修改用戶時,則也與上面的差不多,首先在ACTION當中加入:

    String?ModifyUserId?=?request.getParameter("GroupUserId");

    if?(ModifyUserId?==?null?&&?ModifyUserId.equals(""))?{

    //這是出錯處理

    request.setAttribute(
    "UserMsg",?"User.ValidateUser");

    return?mapping.findForward("Fail");

    }

    DynaValidatorForm?UserActionForm?
    =?(DynaValidatorForm)?form;

    User?user?
    =?UserDAO.GetUser(ModifyUserId);????????

    List?GetAllDept?
    =?UserDAO.GetAllDept();//取得所有部門

    request.setAttribute(
    "View_Dept",?GetAllDept);

    UserActionForm.set(
    "User",?User);
    然后頁面當中顯示如下(部門為LISTBOX),例子當中只顯示部門
    <html:select?property="DeptAsString">????????????

    <c:forEach?items="${View_Dept}"?var="View_Dept">????????

    <c:choose>????????????????????????

    <c:when?test="${User.Dept.DeptId==View_Dept.DeptId}">

    <option????value="<c:out?value='${View_Dept.DeptId}'?/>"selected>????

    <c:out?value="${View_Dept.DeptName}"?/>????????????

    </option>????????????????????????????

    </c:when>????????????????????????????

    <c:otherwise>????????????????????????

    <option?value="<c:out?value='${View_Dept.DeptId}'?/>">????????

    <c:out?value="${View_Dept.DeptName}"?/></option>????????

    </c:otherwise>????????????????????????

    </c:choose>

    </c:forEach>

    </html:select>

    可以看到HTML的SELECT有一個DeptAsString,你可以在FORM當中指定一個STRING的FORM屬性。
    這樣用戶的要求就可以完成了。
    本次只說明方法,而代碼沒有經過測試。希望大家多多觀注我的BLOG,下一次將臭罵ACTIONFROM不支持的DATE類型及解決方法。

    posted @ 2006-09-25 16:36 @家軍 閱讀(448) | 評論 (0)編輯 收藏

    用二維數組管理好你零亂的狀態、分類和其它常用選項

         摘要: 在大家的編碼過程當中,有沒有遇到過這么一種情況,很多零亂的狀態、分類和其它常用選項常常是定義死了。但是沒有一個完整的東東來約束他,在每個模塊當中使用相關的信息時,往往重新COPY一次,或者COPY過來修改一次。如果多人協作的話,務必會讓代碼變的零亂、不好管理等。
    本次主要是把一些靜態的分類、狀態或者其它常用選項使用二維數組管理起來。如果你是一個使用JSTL或者STRUTS做前臺表現的話,你就更應該好好關注了.......  閱讀全文

    posted @ 2006-09-05 13:31 @家軍 閱讀(1278) | 評論 (0)編輯 收藏

    如果失去工作會怎么辦?

    ??? 在工作當中,遇到了一個不明智的上級,我是劉羅鍋,但是領導不一定是乾隆。設計當中的爭執成為私下做對的理由,從此,我感覺到今年的財運不佳。
    ??? 因為工作當中的爭執,而讓領導失去了面子??我在郁悶當中,為什么呀!好事反而成了壞事。
    ??? 領導的報復心理,讓我失去了績效,所以我感覺到財運不佳。我很想跳出這個魔鬼圈,是不是能夠改善一下自己的經濟收入呢?正在想離開這個公司......
    ??? 發現自己的軟肋:UML整體設計(最好有代碼生成)和XP敏捷開發。近期需要加強這兩方面的學習,可以以權限設計為UML做為訓練(生成代碼??),以CRM->VtigerCRM為業務主線,做一個XP開發,不過VtigerCRM的表設計真是很糟糕,Indiea人呀。
    ??? 今年的公司很亂,是一個很糟糕的管理層,可能我以后離開這個公司后才感覺到領導者的“聰明才智”吧!完全在內耗當中生存。我已經被領導國邊緣化,我會在灰色的區域彷徨很長的時間,或許公司另有高人吧,我已經被領導逐漸忽視,自己發光的時間也只有一年,好象知了一樣。
    ??? “人貴有自知之明”,如果領導沒有重視,只是為了發揮自己的最低性能的話,我完全有很多的時間來學習知識,我很慶幸自己和開源代碼有很大的信心,我將在以后的時間里,為開源界展示自己的能力。
    ??? 首先要把自己學習到的知識透明化,其次我會在開源中小型的CRM軟件當中做出自己應有的貢獻。

    posted @ 2006-07-24 11:37 @家軍 閱讀(467) | 評論 (1)編輯 收藏

    struts表單 vs JSTL表現之多條件查詢示例

    ??? struts表單主要是利用actionform來取得JSP頁面所有的request的,所有的Struts標簽無非在取得request當中的所有INPUT,并賦值回標簽值的,同理,JSTL能夠在JSP表單當中輕易的表現要輸出的結果。
    ??? 如果你是高手,你就知道這個標題有誤,是的,struts表單與JSTL表現沒有可比性,但是如果我們要在實現一個多條件的查詢頁面時,這個比較就比較有效了。
    ??? 我不妨比較一下利用struts表單的查詢實現 和 利用JSTL做為表現而實現的查詢功能有什么不同,讓讀者尋其方便。
    ??? 示例說明:
    ??? 用戶表-USER
    ??? username? 用戶名稱
    ??? loginid?? 登錄ID
    ??? sex?????? 性別
    ??? 一、利用struts表單的查詢實現
    ??????? 實現步驟:
    ??????? 創建多條件的序列化對象(java)->在struts.config當中申明actionform->Action當中實現->輸出結果
    ???????
    ????/**?The?value?of?the?simple?userName?property.?*/
    ????
    private?java.lang.String?userName;
    ????
    /**?The?value?of?the?simple?loginId?property.?*/
    ????
    private?java.lang.String?loginId;
    ????
    /**?The?value?of?the?simple?sex?property.?*/
    ????
    private?java.lang.String?sex;
    ????
    /**
    ?????*?Return?the?value?of?the?USER_NAME?column.
    ?????*?
    @return?java.lang.String
    ?????
    */
    ????
    public?java.lang.String?getUserName()
    ????{
    ????????
    return?this.userName;
    ????}

    ????
    /**
    ?????*?Set?the?value?of?the?USER_NAME?column.
    ?????*?
    @param?userName
    ?????
    */
    ????
    public?void?setUserName(java.lang.String?userName)
    ????{
    ????????
    this.userName?=?userName;
    ????
    /**
    ?????*?Return?the?value?of?the?LOGIN_ID?column.
    ?????*?
    @return?java.lang.String
    ?????
    */
    ????
    public?java.lang.String?getLoginId()
    ????{
    ????????
    return?this.loginId;
    ????}

    ????
    /**
    ?????*?Set?the?value?of?the?LOGIN_ID?column.
    ?????*?
    @param?loginId
    ?????
    */
    ????
    public?void?setLoginId(java.lang.String?loginId)
    ????{
    ????????
    this.loginId?=?loginId;
    ????}
    ????
    /**
    ?????*?Return?the?value?of?the?sex?column.
    ?????*?
    @return?java.lang.String
    ?????
    */
    ????
    public?java.lang.String?getSex()
    ????{
    ????????
    return?this.sex;
    ????}

    ????
    /**
    ?????*?Set?the?value?of?the?sex?column.
    ?????*?
    @param?loginId
    ?????
    */
    ????
    public?void?setSex(java.lang.String?sex)
    ????{
    ????????
    this.sex?=?sex;
    ????}
    <!-- struts_fonfig -->
    ???????
    <form-bean?name="UserActionForm"?type="org.apache.struts.validator.DynaValidatorForm">
    <form-property?name="userCondition"?type="com.antbee.searchCondition.UserFindCondition"?/>????????
    ????????
    </form-bean>
    Action當中
    DynaValidatorForm?UserForm?=?(DynaValidatorForm)?form;
    ????????UserFindCondition?Condition?
    =?(UserFindCondition)?UserActionForm
    ????????????????.get(
    "userCondition");//?取得查詢條件
    List?user?=?userManager.find(Condition,
    ????????????????(iCurPageNo?
    -?1)?*?pageCon.PAGE_SIZE,?pageCon.PAGE_SIZE);//呵呵,加入了hibernate的分頁
    具體實現:
    ????public?List?find(UserFindCondition?Condition,?int?begin,
    ????????????
    int?count)?{
    ????????StringBuffer?sql?
    =?new?StringBuffer("from?User?as?a?where?1=1");??????????????
    ? ? ? ?
    if?(Condition?!=?null)?{
    ????????????makeSql(sql,?shipmentFindCondition);
    ????????}
    ????????String?fsql?
    =?sql.toString();
    ????????Query?query?
    =?this.getSession().createQuery(fsql);
    ????????
    if?(Condition?!=?null)?{
    ????????????setParameter(query,?Condition);
    ????????}
    ????????query.setFirstResult(begin);
    ????????query.setMaxResults(count);
    ????????List?tt?
    =?query.list();
    ????????
    return?tt;
    ????}

    --
    ??? /**
    ??? ?* 根據條件生成一個sql語句
    ??? ?*
    ??? ?* @author 和
    ??? ?* @param sql
    ??? ?*??????????? 初始的sql語句(一般為select a from A as a where 1=1)
    ??? ?* @param condition
    ??? ?*??????????? 查詢的條件
    ??? ?* @return
    ??? ?* @version 1.0
    ??? ?*/
    private
    ?void?makeSql(StringBuffer?sql, UserFindCondition?condition)?{
    ????????
    if?(condition.getUsername()?!=?null
    ????????????????
    &&?!condition.getUsername().toString().equals(""))?{
    ????????????sql
    ????????????????????.append(
    "?and a.username like?:username");
    ????????}

    ????????
    if?(condition.getLoginid()?!=?null
    ????????????????
    &&?!condition.getLoginid(().equals(""))?{
    ????????????sql
    ????????????????????.append(
    "?and a.loginid( =?:loginid(");
    ????????}

    ????????
    if?(condition.getSex()?!=?null
    ????????????????
    &&?!condition.getSex().equals(""))?{
    ????????????sql.append(
    "?and a.sex =?:sex");
    ????????}


    ????}

    ????
    /**
    ?????*?根據條件設置query的值
    ?????*?
    ?????*?
    @author?和
    ?????*?
    @param?query
    ?????*????????????一個hibernate的Query對象
    ?????*?
    @param?condition
    ?????*????????????查詢的條件
    ?????*?
    @return
    ?????*?
    @version?1.0
    ?????
    */
    ????
    private?void?setParameter(Query?query, UserFindCondition?condition)?{

    ????????
    if?(condition.getUsername()?!=?null
    ????????????????
    &&?!condition.getUsername().equals(""))?{
    ????????????query.setString(
    "username",?"%"?+?condition.getUsername()
    ????????????????????
    +?"%");
    ????????}

    ????????
    if?(condition.getLoginid()?!=?null
    ????????????????
    &&?!condition.getLoginid().equals(""))?{
    ????????????query.setString(
    "loginid",?condition.getLoginid());
    ????????}

    ????????
    if?(condition.getSex()?!=?null
    ????????????????
    &&?!condition.getSex().equals(""))?{
    ????????????query.setString(
    "sex",?condition.getSex());
    ????????}?????

    ????}

    呵呵,笑死人了,這個方法很通用,我才在我的第二個項目當中才用到,真是可惜,當然了,使用Actionform有一個毛病就是對date類型要轉換成STRING類型來處理,這是actionform的一個死穴。還有對Actionform不能夠重置,只能夠回來從前。不知道這群設計者怎么想的,真是由于這一點,所以我們有必要使用最原始的方法來解決問題了。使用頁面當中的input,我們來拼request如何?
    ?? 二、利用JSTL做為表現而實現的查詢功能
    ???? 步驟:在JSP頁面布置很多的input,當然,你可以加入value了。(省略了...)
    ?????????? 創建查詢條件的序列化對象(同樣user.java)
    ?????????? 在action當中拼個condition了,做為查詢條件,后面的處理類同第一種方式。
    ?????UserSearchCondition?userSearchCondition?=?null;
    ?????userSearchCondition?
    =?makeUserSearchCondition(request);

    private UserSearchCondition?makeUserSearchCondition(HttpServletRequest?request)?throws?Exception{
    ???????
    UserSearchCondition userSearchCondition?=?new?OrderSearchCondition();
    ????????String username
    =?request.getParameter("Username");
    ????????String loginid
    =?request.getParameter("Loginid");
    ????????String sex
    =?request.getParameter("Sex");??
    ???????

    ????????????????
    ????????
    if(username!=?null?&&?!username.trim().equals("")){
    ???????????
    usernameSearchCondition.setUsername(username);
    ????????}
    ????????
    ????????
    if(loginid? !=?null?&&?!loginid.trim().equals("")){
    ??????????? userSearchCondition.set
    Loginid (loginid );
    ????????}
    ????????
    ????????
    if(sex !=?null?&&?!sex.trim().equals("")){????????
    ??????????? userSearchCondition.setSex(
    sex);
    ????????}??????

    ????????
    ????????
    return userSearchCondition;
    ????}

    ???? 以后的方法,我就不用再做舉例了吧,可以參考如上第一種方法的實現.
    ???? 第二種方法的好處就是:在頁面上比較好控制,比如重置,又比如日期性數據等。
    ???? (所有過程當中的代碼沒有經過測試,只是說明這種方法而已)

    posted @ 2006-07-21 11:20 @家軍 閱讀(2712) | 評論 (1)編輯 收藏

    hibernate的延遲加載通用方法

    呵呵,在忙一個項目,潛水很久,現在冒個泡:
    (本文適用在struts+spring+hibernate3上做開發的蟲蟲們)
    類名:HibernateUtil

    package?com.antbee.j2eemodel.util;

    import?java.lang.reflect.InvocationTargetException;
    import?java.lang.reflect.Method;
    import?java.util.Collection;
    import?java.util.Iterator;

    import?org.springframework.orm.hibernate3.support.HibernateDaoSupport;

    public?class?HibernateUtil?extends?HibernateDaoSupport?{

    /**
    *?初始化POJO類
    *?
    @author?@家軍
    *?
    @param?object?POJO對象
    *?
    @param?methodName?方法名稱
    *?
    @return
    *?
    @version?1.0
    */
    public?void?initialize(Object?object,?String?methodName)?throws?SecurityException,?NoSuchMethodException,?IllegalArgumentException,?IllegalAccessException,?InvocationTargetException?{

    String[]?methodArray?
    =?methodName.split("\\.");
    Method?method?
    =?null;
    Object?initializeObject?
    =?object;

    if(methodArray.length?==?1){
    this.getHibernateTemplate().lock(initializeObject,?org.hibernate.LockMode.NONE);
    method?
    =?object.getClass().getMethod(methodArray[0],?new?Class[]?{});
    initializeObject?
    =?method.invoke(initializeObject,?new?Object[]?{});
    this.getHibernateTemplate().initialize(initializeObject);
    }
    else{
    for(int?i=0;i<methodArray.length;i++){
    method?
    =?initializeObject.getClass().getMethod(methodArray[i],?new?Class[]?{});
    initializeObject?
    =?method.invoke(initializeObject,?new?Object[]?{});
    }
    this.getHibernateTemplate().lock(initializeObject,?org.hibernate.LockMode.NONE);
    this.getHibernateTemplate().initialize(initializeObject);
    }
    }

    /**
    *?初始化POJO類
    *?
    @author?@家軍
    *?
    @param?object?POJO對象
    *?
    @param?methodName?方法名稱數組
    *?
    @return
    *?
    @version?1.0
    */
    public?void?initialize(Object?object,?String?methodName[])
    throws?SecurityException,?NoSuchMethodException,
    IllegalArgumentException,?IllegalAccessException,?InvocationTargetException?{

    for?(int?i?=?0;?i?<?methodName.length;?i++)?{
    String[]?methodArray?
    =?methodName[i].split("\\.");
    Method?method?
    =?null;
    Object?initializeObject?
    =?object;

    if(methodArray.length?==?1){
    this.getHibernateTemplate().lock(initializeObject,?org.hibernate.LockMode.NONE);
    method?
    =?object.getClass().getMethod(methodArray[0],?new?Class[]?{});
    initializeObject?
    =?method.invoke(initializeObject,?new?Object[]?{});
    this.getHibernateTemplate().initialize(initializeObject);
    }
    else{
    for(int?j=0;j<methodArray.length;j++){
    method?
    =?initializeObject.getClass().getMethod(methodArray[j],?new?Class[]?{});
    initializeObject?
    =?method.invoke(initializeObject,?new?Object[]?{});
    }
    this.getHibernateTemplate().lock(initializeObject,?org.hibernate.LockMode.NONE);
    this.getHibernateTemplate().initialize(initializeObject);
    }
    }

    }

    /**
    *?初始化POJO類
    *?
    @author?@家軍
    *?
    @param?object?POJO對象
    *?
    @return
    *?
    @version?1.0
    */
    public?void?initialize(Object?object)?throws?SecurityException,?NoSuchMethodException,?IllegalArgumentException,?IllegalAccessException,?InvocationTargetException?{
    this.getHibernateTemplate().lock(object,?org.hibernate.LockMode.NONE);
    this.getHibernateTemplate().initialize(object);
    }

    /**
    *?初始化POJO類
    *?
    @author?@家軍
    *?
    @param?collection?POJO對象集合
    *?
    @param?methodName?方法名稱數組
    *?
    @return
    *?
    @version?1.0
    */
    public?void?initialize(Collection?collection,?String?methodName[])
    throws?SecurityException,?NoSuchMethodException,
    IllegalArgumentException,?IllegalAccessException,?InvocationTargetException?{

    for(Iterator?i=collection.iterator();i.hasNext()Wink{
    Object?object?
    =?i.next();
    this.initialize(object,methodName);
    }
    }

    /**
    *?初始化POJO類
    *?
    @author?@家軍
    *?
    @param?collection?POJO對象集合
    *?
    @param?methodName?方法名稱
    *?
    @return
    *?
    @version?1.0
    */
    public?void?initialize(Collection?collection,?String?methodName)
    throws?SecurityException,?NoSuchMethodException,
    IllegalArgumentException,?IllegalAccessException,?InvocationTargetException?{

    for(Iterator?i=collection.iterator();i.hasNext()Wink{
    Object?object?
    =?i.next();
    this.initialize(object,methodName);
    }
    }
    }?

    這個方法的好外是:可以不在hbm.xml的文件當中,指定為lazy=true這個模式,可以直接使用。使用方法如下:
    如果你使用SPRING,則需要把hibernateUtil注入其中:
    ?<bean?id="hibernateUtilTarget"?class="com.antbee.j2eemodel.util.HibernateUtil">
    <property?name="sessionFactory">
    <ref?local="mssqlSessionFactory"?/>
    </property>
    </bean>

    <bean?id="hibernateUtil"?parent="BaseTransactionProxy"?class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">
    <property?name="target">
    <ref?local="hibernateUtilTarget"?/>
    </property>
    </bean>
    <!--配置基礎事務-->
    <bean?id="BaseTransactionProxy"?class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean"?abstract="true">
    <property?name="transactionManager">
    <ref?bean="mssqltransactionManager"?/>
    </property>
    <property?name="proxyTargetClass">
    <value>true</value>
    </property>
    <property?name="transactionAttributes">
    <props>
    <prop?key="*">PROPAGATION_REQUIRED</prop>
    </props>
    </property>
    </bean>?

    使用示例:
    如果你使用STRUTS,則需要這樣:
    List?what_ur_view?=?XXXManager.find(.);//取得你要展示的對象
    //如果這個對象當中有延遲加載的對象(SET)時,則需要如下加載就行
    this.hibernateUtil.initialize(what_ur_view,?"getTbShipmentSale");
    //其中getTbShipmentSale是其對象(SET也可以操作)?

    在頁面顯示的時候,你就可以使用JSTL如下表述:
    <c:out?value="${what_ur_view.tbShipmentSale.goodsReceivePersonPhone}"?/>//呵呵,是不是很爽呀。?

    同樣的方法,我們也可以對一個SET在頁面進行顯示,方法如下:
    <c:forEach?items="${what_ur_view.tbShipmentProductMappingSet}"?var="ProductMapping"?varStatus="status">
    <c:out?value="${ProductMapping.productNum}"?/>
    <c:out?value="${ProductMapping.tbOutOfWarehouse.outOfWarehouseNum}"?/>
    </c:forEach>
    //呵呵,支持多級嵌套,?

    在ACTION當中則需要加入
    hibernateUtil.initialize(what_ur_view.getTbShipmentProductMappingSet(),
    new?String[]?{?"getTbProduct",?"getTbOutOfWarehouse",
    "getTbProductConfigure"?});?
    呵,如果你要是在HIBERNATE當中使用,這個就太簡單了吧。

    怎么樣?呵呵呵,
    從此,我對STRUTS的標簽深惡痛絕,而對JSTL情有獨鐘了。

    posted @ 2006-07-21 10:09 @家軍 閱讀(5595) | 評論 (2)編輯 收藏

    成功是一種病態的堅持!

    ?? 很長的時間陷入到與同事上級的斗爭當中,無聊死了,今天回來看看自己書簽當中的網站,感覺到自己是小人了。我不應該留戀明爭暗斗,我應該自立自強,永不停息。
    ?? 在年前的時候我曾經非常看好compiere的應用,想不到今天再看看國內使用的形勢,長三角和珠三角的廣泛應用,還有ORACLE免費數據庫的推出,更加印證了我錯誤的做法。
    ?? 一個人最重要的事情就是三個字:做決定。
    ?? 一個人想要成功,尤其像我這樣不甘愿給別人打工又有很多想法的人,除非是一種病態的堅持才能夠取得成功。
    ?? 我很討厭公司現行的CRM系統,簡單的說一句就是:簡直就是一個糊人的、丑陋的MIS系統,一點設計思想都沒有,一點產品理念都沒有。最重要的設計者在拼命的逃脫自己的責任,開發者在忍受莫大的痛苦,業務在每一個開發者思想里扭曲......唉,想抽出一點時間來都難。
    ?? 我要在以后的時候里,一則增加自己的業務能力,以compiere的應用為主;二則要增強我的技術能力,以 vTigerCRM為藍本,做一個J2EE的產品移植。
    ?? 在今年年底以前,自己必須要做到對compiere的應用熟練,能夠完成 vTigerCRM的J2EE實現。所以自己最重要要做的事是:時間安排,

    posted @ 2006-07-19 16:35 @家軍 閱讀(393) | 評論 (0)編輯 收藏

    轉摘:從一個笑話看軟件開發管理

    來自于:http://blog.csdn.net/Raptor/archive/2006/05/13/727299.aspx

    關于軟件開發的笑話有很多,下面這個是我剛在QQ群里的看到的:

    1. 程序員寫出自認為沒有Bug的代碼。
    2. 軟件測試,發現了20個Bug。
    3. 程序員修改了10個Bug,并告訴測試組另外10個不是Bug。
    4. 測試組發現其中5個改動根本無法工作,同時又發現了15個新Bug。
    5. 重復3次步驟3和步驟4。
    6. 鑒于市場方面的壓力,為了配合當初制定的過分樂觀的發布時間表,產品終于上市了。
    7. 用戶發現了137個新Bug。
    8. 已經領了項目獎金的程序員不知跑到哪里去了。
    9. 新組建的項目組修正了差不多全部137個Bug,但又發現了456個新Bug。
    10. 最初那個程序員從斐濟給飽受拖欠工資之苦的測試組寄來了一張明信片。整個測試組集體辭職。
    11. 公司被競爭對手惡意收購。收購時,軟件的最終版本包含783個Bug。
    12. 新CEO走馬上任。公司雇了一名新程序員重寫該軟件。
    13. 程序員寫出自認為沒有Bug的代碼。

    要我說,如果真有這樣的公司,不倒閉對不起人民。

    這個笑話從程序員開始,到程序員結束,從頭到尾都在說程序員的不是。但是我要說的是,這完全是管理者的失敗,從整個過程中,看不到任何管理工作。這種管理者不但無知無能,還很無恥——將自己的失敗責任推給程序員。

    1、程序員憑什么證明他的代碼沒有BUG?有Test case嗎?有Code review嗎?這個環節管理缺失。

    2、測試發現BUG有進行BUG管理嗎?有跟蹤嗎?這個環節管理缺失。

    3、憑什么證明程序員已經把那10個BUG修改好了?另10個又為什么不是BUG?BUG的評價標準難道是程序員說了算?這個環節管理缺失。

    4、5個不能工作的BUG修改問題有沒有追究責任?增加新BUG是修改過程中不可避免的事情,但是如果有有效的單元測試機制,可以大大減少這種情況。這個環節管理缺失。

    5、迭代是正常的,但是問題處理于發散而不是收斂發展,可見沒有有效的管理調控。這個環節管理缺失。

    6、過于樂觀的時間表和不可能達到的最后期限,都表現出管理者的無知和無能。而在這樣的情況下強行推出產品,那就是無知者無畏了。

    7、這是對用戶的不負責任,管理者要負最大的責任。

    8、這樣的情況還能發項目獎金,只能說管理者不是一般的愚蠢。

    9、管理工作沒有任何的改進,問題仍然處于發散迭代狀態。管理工作依然沒有到位。

    10、拖欠測試部門工資體現出管理者對質量管理工作的忽視以及對人力資源管理方面一無所知。

    11、送被收購者兩個字:活該。送收購者兩個字:瞎眼。

    12、可見新管理者與原管理者半斤八兩,都沒有認識到問題的根本所在。不過也只有這樣的管理者才會作出收購這種公司的決策。

    13、歷史的重演是必然的。

    一個正常的企業或是項目,其運作必須應該是循環向上進行的。而保障這種運行的工作就是管理。而管理工作的主要內容就是控制,包括控制循環的節奏——不能太快也不能太慢,控制發展的方向——只能向上不能向下,控制運作的穩定——不能大起大落或時聚時散等。

    而這一切,在這個例子中都看不到。

    在 這個笑話的例子中,一切都是以開發工作在驅動,這首先就是一個方向性錯誤,產品是為用戶服務的,當然應該是以用戶和市場作為驅動,并且結合自身的能力最終 確定工作的重點。這一錯誤折射出管理者對被管理的內容很不了解,只好任由比較了解的程序員擺布——事實上他們除了技術,并不會了解更多。

    一個管理者如果對自己所管理的內容不了解,他就不可能管理得好。

    這是一件毫無疑問的事,可是國內的軟件業似乎總是不相信這一點。中國軟件業中流毒最深的謊言之一就是:

    管理者只要懂管理就可以,不需要懂技術。

    其實這不過是那些無知無能無恥的管理者為了騙錢而編出來的,相信這句話的人必將付出金錢的代價。

    其 次是質量管理。基本的質量管理常識告訴我們,每次循環結束前,最重的工作就是總結改進。只有這樣才能保證循環運作是向上發展,而不是失去控制地向下發展。 也只有有效的質量管理,才能保證迭代過程是收斂發展,并最終達到目標。但在這個例子中,這個部分顯然是缺失的——其中雖然有測試部門,但是他們的作用僅僅 是質量管理中的質量檢測環節,管理部分還是缺失的。

    然后是人力資源管理。軟件開發是一項勞動密集型的工作,雖然這是腦力勞動,但同樣意味著人在因素在其中占有決定性的地位。而例子中未改完BUG的程 序員拿到項目獎金,而同樣辛苦工作的測試人員卻被拖欠薪資,除了表現出管理者對他們的工作內容的不了解,以及對質量管理工作的不重視以外,還表現出管理者 完全不會管人,這是一種謀殺團隊的行為——謀殺一個團隊遠比建設要容易得多。

    最后,這個失敗的管理者把他的經歷編成這個笑話,讓大家看到他被程序員們害得多慘,把程序員妖魔化為一群騙子。但只要稍懂管理的人簡單分析一下就可以看出來,只不過是這個人的無知和無能造成了他現在的結果,而把責任推給別人的行為更是表現出他的無恥。

    作為身居高位的管理者,如果連應該承擔的責任都要推卸,他們還能勝任什么事情呢?

    posted @ 2006-05-15 15:53 @家軍 閱讀(352) | 評論 (0)編輯 收藏

    我向百度公司進軍!

    ???? 百度公司今天搬到我們這幢樓內,更加刺激了我去百度的念頭,因為我喜歡創新的工作,所以我將為這一點而去努力奮斗。
    ???? 不是說百度公司有多好,主要是想穩定上幾年,有一點積蓄了,就可以自己出來自謀生路。呵呵??匆姲俣燃夹g的職位只有無線搜索技術用到了JAVA,呵呵,不會灰心,其實,PYTHON或者RUR都將是以后的方向,至于PHP,我感覺百度會在不遠的將來拋棄掉的。在服務器的性能和安全爭端上我只相信JAVA,百度只不過把這一種技術很快轉化成了資本,如果百度想要和GOOGLE一爭高下,實質性的工作--技術上必須上要勝出GOOGLE一籌才行。而這一點只有行家才知道。

    ???? 我在北京的這幾年都是為代碼,或者就是為純粹的技術而奮斗,其實做為軟件公司,其起步主要是靠技術,但是他成名或者有所富裕后,就覺得人情是一個比技術還好玩的東西時,這個公司就開始有了差距,不過,這個公司就開始危險了,或者是窮途末路,只能鉆到錢眼里去了。如果管理層(其實就是和有權的腐敗工廠DANG有關系的人)沒有動靜的話,這個公司必死。這就是中國的國情。
    ? ?
    ???? 工廠DANG叫嚷的中國國情就是要隱含有權層的灰色收入,況且五千年的封建文化完全可以掩蓋這一點。否則,會把老祖宗也搬出來。孔子曰:孟子說:還有什么孫子談兵什么的。
    ?? ?
    ???? 從程序員的角度思索一下,如上是IF.....ELSE....的語句后,final,工廠DANG治理的天下亂七八糟。

    posted @ 2006-05-08 15:50 @家軍 閱讀(381) | 評論 (0)編輯 收藏

    我將成為一個快樂的房奴

    ??? 呵呵,我在北京買到房子了,貸款了40萬元,在簽訂了很多的不平等條約后,我成為了一個正式的房奴了,但是我很高興。
    ??? 我來自于農村,我最原始的生活憧憬就是改變農村這種生活方式,我在很小的時候就不喜歡農村的黃昏,因為夕陽照著我疲背一天身體時,我感覺到生命的絕望。于是我要改變自己,改變整個家庭的命運。
    ??? 父親很努力,在我懂事的時候就進入了縣城,我的心理比較的蹋實了,好象有了可以驕傲的資本,雖然家庭的收入很拮據,但是我認為自己要改變的不只是這一點。
    ??? 于是我只身來到北京,舉目無親的可憐像和在火車站睡覺的經歷更加激勵了我,我要生活下去,我從上大學的時候就有一個始終不愈的信念:打不死的精神活到老。
    ??? 我對生命很是無所謂,因為我知道自己已經在階級社會的最低層,我不害怕自己的失敗,我也不在乎錢,錢對于我來說只是肯定我的成績,肯定我的所有為是有效的。
    ??? 呵呵,我成為了北京的一員了,我的想法很簡單,當我20年后,如果我的兒子不在北京發展了,我將買掉我的房子,回家后,我也應該成為自由的生活者了,我已經能夠讓我的晚年有所事事了。
    ??? 這一段時間主要在忙一個緊急的項目和公積金貸款,我將撰寫一個比較權威詳細的的貸款程序、
    ??? 博客將給我一個表現自己全新的舞臺,我將為生命之花綻放。

    posted @ 2006-05-08 15:29 @家軍 閱讀(668) | 評論 (5)編輯 收藏

    危險的中國經濟

    ?? 說起來危險吧,就是對納稅人的不滿,如果納稅人有追求自由的念頭,那么你就知道中國的經濟有多危險。
    ?? 呵呵,危險的中國樓市
    ???????? 危險的就業大軍
    ???????? 危險的新農村政策
    ? 新農村的建設就是廢除個人承包制,恢復現代地主制。看小X忙的不亦樂乎,他在干著財富分裂的現代社會主義建設。好象農民脫離了土地,浮萍會被枯葉敗枝聚集,壯觀的讓人壓抑。
    ? 程序員不談政治了。否則,后果不好。

    posted @ 2006-04-28 20:01 @家軍 閱讀(257) | 評論 (0)編輯 收藏

    快被尖刻的客戶托垮了!

    ? 最近沒有時間寫BLOG,雖然心理有很多想法想寫,想努力的推進開源代碼的實施,但是被尖刻的客戶托垮了。
    ?? 可能是我目前見到最尖刻的客戶吧,用戶在使用軟件當中,遇到任何一點可疑的問題就打電話“責令”修改,否則沒有快速響應,最高的領導就出面給我施加壓力。我CALL,我真是對這群濫人生氣。所以我不得不打斷所有的工作而快速響應,于是晚上自愿加班到9-10點,已經有三周沒有休息了。最要命的這個項目的設計者、編碼者、測試者和實施者就我一個人,而我上面有項目經理、銷售、部門經理、副總,一有問題,四個經理就在一旁看結果,呵呵,壓的人喘不過氣來。
    ?? 我也很氣憤這個鬼公司,老板小氣的要死,實施時連個筆記本都沒有,而且前一段時間說為了實施方便才剛剛搞了一個移動硬盤,這才把我的老式的MP3(U盤)才換下來。所有給客戶的演示的第一步驟就是搬機器,最后一個步驟也是搬機器。唉,這么詭異的公司!!!!!!!!!!!!!!!
    ?? 現在客戶系統要上線,說不允許出現BUG,我沒有敢承諾,所以我也不說話,所有上面的領導都告訴我,不允許出現錯誤,你說我應該怎么說,我也沒有說,只是和最小的頭說:我盡量吧,錯應該不是錯,以后就是布丁了。
    ? 果然,正式上線的系統出現錯誤了,果然領導生氣了,果然領導給我委派了一個測試人員(普通員工臨時調配),果然我想離開這個詭異的公司。果然開源代碼的推廣又一步的延遲.........
    ? 不過,我覺得我還是很自信,因為我已經盡了自己的最大努力,還有積累了很多的軟件工程的經驗,還有快速開發的經驗。
    ? 呵呵,出去混又何妨,方正我已經有了項目經理證,方正也實施了這個近百萬的項目了。還是一個人執政,呵呵,和尚養大了,又覺得廟門小了。
    ?
    ?

    posted @ 2006-04-28 11:03 @家軍 閱讀(293) | 評論 (0)編輯 收藏

    開源代碼的盈利模式是什么?

     已經有很長時間沒有寫日記了,公司的活太累了,所以沒有清閑的時間和清靜的心情來寫BLOG。
     我現在還深學陷入到開源代碼的實現當中,我感覺不到開源代碼將對以后的生活帶來什么實質的影響,可能就是能夠加快軟件生產的效率而已,在IT界,開源代碼的商業模式有過很多的探討,這也證明了開源代碼的魅力所在。因為她很深,所以以傳統的專業精神是很難很快的了解開源代碼。因為研究所化費的代價很大,所以她的存在價值就越來越高。
     從很多的資料和個人的體驗當中,我深深感覺到開源代碼的盈利就是服務,而這個服務應該是多元化、多層面的服務體系,這個就好象是一個宗教一樣,像是道教,人之初,性本善,開源代碼的開源之初總是最好的,以后可能會魚龍混雜,現在已經有這種跡象了。
     從理論上進行分析,以后對開源代碼進行管理的企業將是一個可以盈利的企業,對開源代碼提供規則的將也是商家,在一定實踐基礎上對開源代碼進行分級,將是另外一個視角看開源代碼的方式,這個對開源代碼的成長起輔助作用。
     開源代碼對軟件的生產將提供最大的技術支持,這只是給有心人的。
     開源代碼也將指導企業應用的先進化生產,風險和效率將同時存在。將來對開源代碼這種生產力的風險減低和效率提高的服務型企業將是開源代碼的最大受益者。
     我現在在拼命的研究AJAX技術,感覺用戶體驗是有了,但是又增加了寫程序的能力,頁面和實際業務不能夠完全分離,不知道這個東東能生存多久。AJAX的出生和用戶對“點擊->返回”的上網體驗都是不久的事,哪個將取得領導地位,還拭目以待。

    posted @ 2006-03-30 13:43 @家軍 閱讀(806) | 評論 (0)編輯 收藏

    我的信仰地圖[引用 zbw25]

    {只為學習,并無其它目的}
    一、概念界定
      前一段時間在和李杜韓兄討論儒家是否宗教的問題,當時我答應他,要好好想一想,給出一個自己的關于宗教的定義。在這段時間里,我 始終在思考這個問題。終于我決定將問題放在一個更加廣闊的范圍內來進行思考,這就是,什么是宗教?什么是科學?這個問題似乎反而簡單了。在不進行更加深入 地思考的情況下,我可以先給出科學的定義:科學是用理性的、邏輯的方式看待世界的觀點,以及方法論。也可以這樣說:科學就是以理性和邏輯的方法為特征的世 界觀和方法論。這樣的定義還可以進一步解釋為,以理性和邏輯的態度,來探索世界,形成結論,并以此指導自己的生活。那么宗教呢,宗教同樣對世界進行探索, 形成結論,并以此指導自己的生活。馬克思主義的說法是:宗教的顛倒了的世界觀,我并不如此認為,這是完全站在以我為中心的立場來對宗教信仰的評價。這個問 題,我下面還要詳細分析。因此,我對宗教的定義是:以一種崇拜的、神秘主義的心態,來探索世界,形成結論,并以此來指導自己的生活。這樣就稱之為宗教。?
       這里要解釋一下理性的、邏輯的心態與崇拜的、神秘主義的心態的區別,前者相信,人類對世界的探索,將不斷的接近真理,也就是說,世界是可知的,我們所生 存的世界,對于科學來說,就是各種各樣可以研究的對象,可以看成一個整體,也可以分別研究,從科學研究的可行性角度來看,對世界的研究首先意味著對問題的 分解,也可以說是對世界的分解。因此,科學很容易的就導向無神論(無神論與科學并不等同,這一點下面再詳細分析)。而崇拜的、神秘主義的心態,首先就認為 這個世界是一個整體,而且是一個人類永遠無法徹底把握的整體。面對浩淼蒼穹,無盡時空,人類唯有贊嘆造化的神奇,并越發深切的意識到自己的渺小。但是這樣 的態度并非不可知論,因為,以宗教的態度看待世界的人,同樣在探索世界,而且從未停止。?
      在這樣一個框架下,我們同樣可以定義哲學,哲學是另 一種態度,面對世界萬物,哲學家是思辨的。他們以一種思辨的心態來探索世界,形成結論,并以此來指導生活。思辨與邏輯不同,對于邏輯來說,對就是對,錯就 是錯。而對于思辨來說,對也可能是錯,錯也可能是對。在我看來,一切哲學都是思辨的,這與馬克思哲學中的形而上學/辯證法的概念,并不一致。思辨、狡辯、 詭辯等等都只有一線之隔,而真正的哲人,因為一定可以繼續思辨而否定自己,所以最終的結果要么是發瘋;要么是停止思辨,開始建立自己的理論體系。而后來的 哲學家,就可以在他的思考、思辨停止的地方,開始對他的反駁。也正是由于哲學的思辨的本質,因此哲學體系的種類最多,最為千差萬別,有的像科學,有的像宗 教,有的什么都不像,而自成一家。?
      再界定兩個概念,知道與信仰。我可以知道自己有左右兩只手,而無需信仰自己有兩只手。所謂信仰,可以定義 為對于無法證明的命題的確信。我們知道,宗教中的絕大多數命題都是無法證明的,因此我們同樣都將宗教和信仰連起來表達。而對于科學,我們往往會認為這不是 信仰,因為科學結論都是可以證明的,但是問題并沒有這么簡單,因為科學體系是建立在公理體系的基礎上的,而公理體系是無法證明的,因此對科學的信心,也可 以稱之為信仰,當然這樣的信仰需要“糊弄過去”的地方只有少數的一些公理和常數。相對來說比宗教要“好”很多。但是無神論并不是這樣,我們可以馬馬虎虎不 將科學算成信仰的一種,但是無神論,卻一定是一種信仰,因為這同樣是對無法證明的命題的確信。?

    二、儒家的定位?
      現在,基于 已經明確的定義,我們可以繼續回到對儒家問題的討論上來了。儒家肯定不是科學,也不是單純的宗教,我們可以很清楚地界定,儒家同樣是以一種崇拜的、神秘主 義的心態,來探索世界,形成結論,并以此來指導自己的生活。儒家對天的崇拜,以及對天道、天命的近乎神秘主義的信仰,可以說是一種很典型的宗教的心態。?
       但是,問題到這里并沒有結束,因為我們還需要區分儒家這樣的宗教,與其他的宗教有什么區別,為什么對于儒家是否宗教的問題,有著如此多的爭論,而在其他 的宗教上幾乎沒有這樣的疑問。按照李杜韓兄的理解,認為儒家是一種“準宗教”,但是什么是“準”呢?為什么會“準”呢?為什么就不能明確的分析出,儒家與 其他的宗教的真正的區別所在呢??
      在我看來,絕大多數的宗教,都是起源于人類對于“生死”問題的思考,個人問題,是宗教探討的當然的出發點。 但是,這正是儒家與其他宗教的區別所在。在基督教的論述中,“永生”是一個重要的命題,進天國,得永生,是基督徒所能得到的最大的恩典;而在佛教的論述 中,“出六道輪回”是每個佛教徒的追求—即使不是最高追求;而在道教的論述中,“長生不老”是值得追求,也是可能達到的目標。這些宗教—我對其他的宗教不 太熟悉—所共有的特征是面向個人的,是“我”的追求目標,或是“我”能得到的恩典。這些宗教對人的教導中都有“向善”的成分,但是都是達到目標的手段—甚 至在基督教不承認任何手段的有效性,只要求絕對的信仰—或方法。因此通常的表述是:“如果你如何如何,你就能怎樣怎樣”。?
      但是在儒家,個人 問題幾乎是完全不被考慮的,社會、他人、國家、天下才是真正重要的。正心、誠意是為了修身,而修身是為了齊家、治國、平天下。對自己下功夫,并不是為了自 己,而是為了比自己更加廣大的,更加重要的事情。天理是重要的,人欲是可以忽略的。這樣的區別非常明顯,其他的宗教,一切的追求、行為,無論是對他人、社 會還是對自己,最終的目的都是為了“自己”。所有的努力,甚至“熄滅自己欲望”的努力,也是為了實現自己最大的欲望。但是,儒家從來就不告訴你:“信了我 的教,你能如何如何”。也可以這樣說,儒家從來都不會“利用一個人的私人欲望,來引人入教”。這也就是為什么歷史上有這么多的邪教,而這些邪教的理論根 源,或借鑒者,可能是基督教、佛教、道教或者其他的什么宗教,但從來沒有借鑒過儒教,因為在儒家的理論中,不提供“滿足個人欲望的可能性”。儒家從來只告 訴他的信徒:“你要成為君子,你要憂國憂民,你要……”,卻從來沒有告訴他的信徒:“成為君子后,你有什么樣的好處……”。?

    三、三種宗教的區別?
      在論證了儒家與其他宗教的重大區別之后,我們可以來討論一下道教、佛教與基督教之間的區別所在。?
      他們之間的相似之處是很明顯的,這三種宗教都非常的關注“生死”問題,但是如何解決這個問題呢?三種宗教卻給出了不同的答案。?
       為了解答“生死”問題,這三種宗教都非常的關注“時間”、“始終”等等命題,但是對于道教來說:“道生一、一生二、二生三、三生萬物”,可以說是一個無 窮無盡的過程,因此在道教看來,“時間是有始無終的”。而對于佛教來說,時間即沒有開始,也沒有結束,因此“時間是無始無終的”。對于基督教來說,上帝是 一切的創造者,當然也包括時間,一直到最終的審判,“時間是有始有終的”。?
      因為“時間是有始無終的”,所以對于道教來說,向前看是沒有意義 的,回去是唯一有意義的事,在老子的“小國寡民”的理想確定無法實現之后,作為個人回到過去,回到道,成為唯一的出路。因此,在道家看來,不斷的修煉自 己,最終成仙,并不是向前的進步,而是回到了本源,回到了自己的出發點。?
      因為“時間是無始無終的”,所以對于佛教來說,這世間的一切都沒有意義,因為如果有無限的時間,那么世界一定會不斷的重復,人就在六道中輪回,承受著永遠的痛苦。唯一的出路,是跳出來,不但要跳出這個世界,甚至要跳出所有的“時間和空間”。?
      因為“時間是有始有終的”,所以對于基督教來說,一切都是掌握在上帝的手中,沒有人能夸耀自己的努力,沒有人能憑借自己的奮斗而找到出路,唯一的道路就是“信”,其他的一切作為,都只具備世間的意義,而沒有永恒的價值。?
      三種宗教的理論基礎,已經如上所分析,而作為世界上的真實存在的宗教,一定會面臨具體的“實踐”問題,或者說如何判斷一個實踐是否符合理論的問題。?
       判斷的困難在道教基本上不存在,因為這是一個明確的以目的為導向的宗教,是否正確,只看你是否有效果,這樣的“實用主義”,避免了很多理論上的爭論,乃 至人格上的判斷。只要成了仙,就一定得了道。甚至煉丹都可以由別人來進行,自己只要吃了就可以。因此道教的基本發展歷程,就是一個不斷探索的過程,如何才 能更有效地成仙,不妨百家爭鳴,不妨百花齊放,只要有效,一切都是值得的。這也就是為什么道教的歷史最少爭論,也最少理論派別的原因。而這樣的弊端就是什 么歪門邪道都有可能混入道教,使得道教成為一個名副其實的大雜燴。?
      佛教對于判斷的問題,存在兩面性,既有很多外在的判斷標準,又相信“如人 飲水,冷暖自知”的最高境界。佛陀的“相貌、神通、舍利子”乃至“智慧”,成為常用的外部標準。而在佛教中又有很多關于“次第”的論述,似乎成佛是可以循 序漸進,有跡可查的。然而事情并非如此簡單,因為,外在的標準并不符合佛教的基本教義,因為一切表象,皆是因緣合和而成,并非根本,所以是否成佛,還需要 某種“未知的”方法的驗證。這種方法沒有人知道如何描述,但是已經公認的大師,則有權通過這樣的方法來作出判斷。所以在佛教會出現比道教多得多的派別,特 別是到了禪宗以后,佛教的派別、分化就會越來越多,因為判斷沒有公認的標準,只以權威的意見為轉移。?
      基督教對于判斷的問題,最為頭疼,因為 根據基督教的基本教義,人的一切行為,表象,都不能成為判斷的依據,這一點基督教比佛教執行的嚴格得多。而這樣導致的后果就是無休止的爭論與不斷的分化。 基督教對于教會的純潔性是最為注重的,這樣導致的結果,并不是教會的純潔,而是不同教派之間的“水火不容”,甚至“你死我活”。因為我無法從理論上駁倒 你,又無法實際的證明給你看,只能殺了你,才能證明上帝是站在我這一邊的。但是這樣不能解決任何問題,所以現在基督教的派別是世界上最多的,而這些派別之 間的矛盾,也是最為尖銳的。?

    四、無用的哲學?
      之所以說“無用的哲學”,其實并沒有什么貶義,而是我認為,從哲學的本質來說,他就應該是“無用的”。如果哲學變得很有用,就會十分危險,非人類之福。?
       根據我前面的定義,哲學是一種以思辨的心態,來探索世界,形成結論,并以此來指導自己的生活的方式。出于這樣的一種心態,哲學成為人類智力的終極樂園, 古往今來,無數的人思考哲學問題,并沉醉其中,而哲學的問題沒有一個得到解決—在科學意義上的得到最終答案—或者獲得公認。我們甚至可以斷言,一切的哲學 問題,都永遠不可能有最終的確定的答案,這也正是哲學的魅力所在。?
      為什么哲學不能得出公認的結果呢?這有兩個方面的原因,一方面是由于哲學的本質,另一方面是由于人的本性。?
       從哲學的本質來說,這是一種心態,一種永遠試圖再換一種方式思考的心態,或者我們可以褒義的稱之為:“不斷思考得更加深入?!倍軐W的思考對象又是全世 界,如此的復雜,如此的難以概括,如此的千差萬別。而哲學又試圖從整體上來把握整個世界,因此一定會有無數個答案,而且一定無法確定哪一種答案是最優解 答。?
      對于人的本性來說,哲學思考是一種最好的智力游戲。因為不需要站在巨人的肩膀上,不需要繼承已有的哲學,最值得贊賞的努力是開創全新的 體系,如果做不到,也可以創造全新的表述方式。前人的努力,與其說是繼承的財富,到不如說是批判的目標。能夠批判前人,提出自己的觀點,能夠使人得到最大 的滿足,因為哲學是回答最重要的問題的學問。?
      似乎我這樣講,將哲學過于貶低了,其實并不是這樣,因為這正是哲學的偉大所在。只有了解的哲學 的本質,才會相信,人人都能進行自己的思考,得出自己的結論,有這樣的心態人,我們稱之為有哲學精神的人,如果將這樣的精神貫穿整個人生,我們就稱之為 “哲人”,例如我們所尊敬的偉大的蘇格拉底。哲學的最大的用處是作為“解毒劑”,但是哲學不能變成有用的結論,哲學會變質,有可能變成宗教,有可能變成政 治,有可能冒充科學,這樣的有用,非常危險。?

    五、有限的科學?
      說科學是有限的,同樣沒有貶低的意思。因為根據科學的本質,他就一定是有限的。?
       科學作為一種以理性和邏輯的態度,來探索世界,形成結論,并以此指導自己的生活的學問,他的本質就是不斷的懷疑與驗證,如果有人為了懷疑而懷疑,毫無意 義,而為了驗證而驗證,只能說是迷信或者說是偽科學。既然科學是一個不斷懷疑與驗證的過程,而且出于理性與統一的邏輯,科學必然是一個整體。打個簡單的比 方,當年亞里斯多德在地上畫的那個關于知識的圈,是一個而且只能是一個圈。如果在這個知識的圓圈之外另有一個“飛地”,那只能稱之為科學猜想,只有在將來 的某個時刻,這個猜想得到了驗證,這塊“飛地”才能和大圈連在一起,成為科學知識的一部分。?
      附帶說一句,我并不認為社會科學是科學的一種,在我看來,所有的社會科學,只是哲學思考擴大化之后對科學的模仿。這也就是為什么自然科學基本上沒有什么派別,而社會科學卻流派紛呈的原因。?
       科學是有限的,而世界是無限的—也正是由于科學,我們才能像今天這樣深切的認識到世界的無限性—這就意味著科學永遠也無法窮盡整個世界,科學的有限性不 但是必然的,而且是絕對的。真正的科學家,或者具有科學精神的人,永遠都遵循著懷疑、驗證的規律,而不會混淆知識與假想的界線。?
      說到這里, 我倒是想起了一件很有趣的事情,當年特異功能流行的時候,錢學森與**之間有一場激烈的爭論,我們知道,錢學森是一個科學家,而**是一個—怎么說呢,就 算是—社會科學家吧。他們的態度截然不同,錢學森認為這種現象值得研究,而**則大力反對,或者說科學立場比錢學森還要堅定。這就是科學家與信仰科學者的 區別。?
      現在我們開始大力提倡尊重科學,學習科學知識。但是真正要學習的是什么呢?是科學精神,一種偉大的,永遠不自以為是的精神。而不是為了維護某種“科學結論”卻喪失了進一步探索的勇氣。?

    六、我的信仰選擇?
       對于我來說,選擇一種信仰其實分為兩個階段,在寫這篇文章之前,我處在一種漫無目的的摸索階段,就好像一個叢林中的迷路者,找不到方向,更不要說出路。 但是通過前面的思考,我為自己的畫出了地圖—一幅關于信仰的地圖。于是在我來說,選擇信仰的問題變得簡單,并且有效。?
      當然,這個問題也可以 反過來看,就是我首先是確定了自己的信仰,然后開始尋找理論上的支撐,通過論證自己的信仰選擇的合理性,使我可以更加有把握的走下去。不管怎么說,這是一 個良性循環的開始,信仰堅定了理論,而理論又更加堅定了信仰。也可以說,這樣的方式才是信仰式、而非思辨式的。?
      首先要做的第一個選擇題是, 是否需要信仰,也可以說,這個世界存在著兩種人,有信仰的人和沒有信仰的人,我要選擇做什么樣的人,我要選擇一種什么樣的生活。有兩種人可以沒有信仰,一 種是混混僵僵的人,這種狀態可以簡單的稱之為“快樂的豬”,如果一個沒有開始思考信仰的問題,他可以停留在這個狀態,但是一旦他開始思考,就再也沒有可能 回到混混僵僵的狀態,對于我來說,這是一個不可能的選擇。?
      另一種沒有信仰的人,是有著各式各樣?“現實追求”的人,這樣的可以一輩子的不考 慮信仰問題,而生活得很充足,很忙碌。但是這樣的人,他的目標是否達到,并不取決于自己,而是取決于別人的評價,所有的“成功、金錢、地位、名譽”,如果 不被別人承認,就什么都不是。我并不虛偽的反對這樣的追求,但是如果只有這樣的追求,人生是不完整的,可以說這樣的人完全是為了別人的評價而活著,卻沒有 為自己而活著。這樣的人,尼采稱之為“駱駝”。我不愿意做這樣的“駱駝”,因此需要繼續作下面的選擇題。?
      在我的“信仰地圖”中,有三個大的 方向,科學、哲學與宗教。有人選擇科學作為信仰,也有人選擇哲學作為信仰,但是在我看來,無論是科學還是哲學,其基本的精神,都與信仰格格不入。當你成為 科學的信徒,你就違背了科學的精神;當你成為哲學的信徒,你就違背了哲學的精神。這樣的人,在世界上的確不少,而且也的確在為害著這個世界。從歷史上來 看,科學的信徒與哲學的信徒,為害世界的事情還真不少。也許有人要問,宗教的信徒不也一樣為害世界嗎?但是區別在于,宗教的信徒只是“可能”為害世界,而 科學與哲學的信徒,則一定會為害世界。?
      有人也許還要問,我是科學的信徒,但是我信仰的是科學的精神,難道也會為害世界嗎?科學的精神,當然不會為害世界,但是這樣的精神只是探索世界的一種方法,他只需要遵循,而不需要信仰。只存在是否嚴格遵循的問題,而不存在是否相信的問題。?
       同樣的問題,也會有人問出來而為哲學辯護,在我看來,最好的哲學與最好的科學一樣,一個使人奮進,一個使人冷靜??茖W的生命力在于始終遵循科學的精神, 而哲學的生命力在于不斷的反思自身,甚至于整個哲學的基礎??茖W如果被人信仰,最多是科學的發展受阻,哲學如果被人信仰,整個社會的發展都有可能受阻。?
      既然科學和哲學都不可能成為我的選擇,那么選擇題就要繼續進行,在我的“信仰地圖”中,宗教又分為兩個大類,一種是以個人為中心,另一種則是以社會為中心。前者包括了佛教、道教以及基督教等等眾多宗教,后者則主要以儒家為代表。?
       以個人為中心的宗教很容易吸引人,因為這樣的宗教討論的問題是以“我”為中心的,解決的也是“我”的問題。當一個發現自己不應該為了別人的評價而活著的 時候,首先會想到的選擇就是為了自己而活。當一個人發現對于外在的追求不再有吸引力的時候,走向自己的內心就成為唯一的方向。?
      在中國古代, 儒家遭受了普遍的誤解,就是因為儒家的追求很像是向外的追求,讀四書五經是為了做官,參加科舉是為了功名利祿,所有的這些追求都可以說是外在的,世間的, 無常的。但是儒家信仰,與功名利祿追求,存在著重大的區別,一種是為了別人的評價而活,另一種卻只是純粹的為了別人而活,別人的評價是指向自己的,說到底 是為了滿足自己的欲望,只不過這樣的欲望需要通過別人的評價而得到滿足。而儒家的信仰不是這樣的一種個人欲望,這樣的追求中沒有一個“我”的存在。?
       無論是對世間功名利祿的追求,還是對于宗教的、出世間的追求,核心的理由都是為了“我”,只不過追求的目標一則現實,一則縹緲而已。因此,到了現在這個 社會,當儒家學說失去了科舉做官的現實用途之后,要想使人信仰他,就變得非常的困難,因為他從不滿足“我”的欲望,也從不許諾各種個人的好處。他的吸引力 就幾乎不存在了,而現在的儒家信徒也就幾乎不存在了,除了一些大專院校的儒家學說研究者,幾乎沒有人還會再接觸儒家的思想,更不要說產生信仰了。?
      但是,我的選擇,最終還是儒家信仰,有很多可以說的理由,而最大的理由,就是因為這種信仰不是為了自己。有很多名人名言深深地打動了我,例如:“先天下之憂而憂,后天下之樂而樂”、“為國為民,俠之大者”、“為天地立心、為生民立命、為往圣繼絕學、為萬世開太平”。?
      說到這里,我的這篇文章也就算結束了,但是關于儒家的話題,這卻只是一個開始,畢竟可以討論的東西,真的很多。

    posted @ 2006-03-24 11:22 @家軍 閱讀(479) | 評論 (1)編輯 收藏

    世界不在意你的自尊

    (考慮再三,還是要轉貼一些有用的話)
    比爾蓋茨十條職場箴言曝光:世界不在意你的自尊
    1.生活是不公平的,要去適應它;
    2.這世界并不會在意你的自尊,這世界指望你在自我感覺良好之前先要有所成就;
    3.高中剛畢業你不會成為一個公司的副總裁,直到你將此職位掙到手;
    4.如果你認為你的老師嚴厲,等你當了老板再這樣想;
    5.如果你陷入困境,不要尖聲抱怨錯誤,要從中吸取教訓;
    6.在你出生之前,你的父母并非像現在這樣乏味。他們變成今天這個樣子是因為這些年來他們一直在為你付賬單,給你洗衣服,聽你大談你是如何的酷;
    7.你的學校也許已經不再分優等生和劣等生,但生活卻仍在作出類似區分;
    8.生活不分學期,你并沒有暑假可以休息,也沒有幾個人樂于幫你發現自我;
    9.電視并不是真實的生活,在現實生活中,人們實際上得離開咖啡屋去干自己的工作;
    10.善待乏味的人,有可能到頭來會為一個乏味的人工作。

    posted @ 2006-03-21 11:06 @家軍 閱讀(331) | 評論 (0)編輯 收藏

    主站蜘蛛池模板: 女人隐私秘视频黄www免费| 国拍在线精品视频免费观看| 91大神亚洲影视在线| 无码乱肉视频免费大全合集| 精品亚洲国产成人av| 亚洲色婷婷一区二区三区| 免费h片在线观看网址最新| 国产精品日本亚洲777| 亚洲国产精品自在线一区二区 | 99在线视频免费观看| 亚洲日本乱码一区二区在线二产线 | 亚洲国产精品久久久久| 日本不卡视频免费| 国产一区二区三区免费| 亚洲AV无码XXX麻豆艾秋| 亚洲AV无码一区二区二三区软件| 亚洲免费综合色在线视频| 久久最新免费视频| 亚洲一区二区三区在线观看网站| 亚洲精品乱码久久久久久中文字幕| 青娱乐免费视频在线观看| 国产免费播放一区二区| 中文日韩亚洲欧美制服| 久久久亚洲精品蜜桃臀| 搡女人免费视频大全| 三年片在线观看免费观看大全动漫 | 免费无码国产V片在线观看| 亚洲色av性色在线观无码| 亚洲精品成人在线| 成人免费看黄20分钟| 91大神在线免费观看| 国产精品无码免费专区午夜| 亚洲成a∧人片在线观看无码| 久久亚洲精品无码aⅴ大香| 亚洲综合色成在线播放| 暖暖免费高清日本中文| 成人浮力影院免费看| 久久青草国产免费观看| 最近中文字幕大全免费版在线| 四虎精品免费永久免费视频| 亚洲一本一道一区二区三区|