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

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

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

    積累,創造,分享!

    BlogJava 首頁 新隨筆 聯系 聚合 管理
      25 Posts :: 13 Stories :: 26 Comments :: 0 Trackbacks

    #

    ????????? 本文將不涉及EJB3.0的設計以及編碼.
    ????????? 主要內容是關于JBOSS下EJB3.0的第一個例子的配置與運行。
    首先下載JBOSS4,并安裝成功。目前JBOSS提供的ejb3有2種版本,一種是Embeddable(可嵌入),一種是直接運行。這些都可以在jboss的官方網站獲得。
    Embeddable版本的主要的好處是可以獨立運行,方便測試,甚至無需部署在jboss環境當中,當然這是需要它提供的conf以及lib包里面的幾個配置來支撐的。如果是在web應用當中運行,還需要將jboss-EJB-3.0_Embeddable_ALPHA_8\conf 里面的配置文件引入到web-inf\classes下的。
    lib包里面的3個包也需要放在web-inf\lib下面。然后對web.xml進行修改,加上:
    ?? <context-param>
    ????? <param-name>jboss-kernel-deployments</param-name>
    ????? <param-value>embedded-jboss-beans.xml, jboss-jms-beans.xml</param-value>
    ?? </context-param>
    ?? <listener>
    ????? <listener-class>org.jboss.ejb3.embedded.ServletBootstrapListener</listener-class>
    ?? </listener>
    否則會報關于jndi方面的錯誤。

    ??????????前面提到的另一個版本則是需要基于JBOSS環境的完全版。它的配置相對于Embeddable來說更簡單一些。?? 實際上針對這個版本的web應用當中調用EJB3 是無需任何額外配置的.
    然而在此之前我走了一段彎路:
    比如看到網上一些介紹性的文章當中提到需要將{jboss_home}\client 當中的一些包拷到web-inf\lib的下面,然后在初始化InitialContext時需要加上java.naming.factory.initial,java.naming.factory.url.pkgs等等的參數。這樣反而會拋出CommunicationException: Receive timed out異常。實際上JBOSS都已經將初始化環境設置好了。
    以下實例是web環境下調用jboss 下ejb3的客戶端:
    http://www.myjavaserver.com/~nighthawk/EJBClient.war
    部署在jboss下的ejb3例子,以上2個客戶端都是調用的它:
    http://www.myjavaserver.com/~nighthawk/MyEJB.jar
    web環境下調用Embeddable ejb的客戶端的實例比較大,空間不夠,不往上放了。
    不過配置起來也很簡單,只需將Embeddable版本當中的conf與lib包放在war包的classed與lib下即可。
    以上例子均在jboss-4.0.4.GA下測試過。
    ???????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????? ??2006?nighthawk.All rights reserved

    posted @ 2006-07-28 16:21 nighthawk 閱讀(768) | 評論 (1)編輯 收藏

    研究spring不深,但最近在使用spring的過程中,發現它總能給人帶來點驚喜。
    相信大家在做程序的時候應該會碰到時序調度一類的問題,即希望在指定時刻執行某段程序,在spring之前我的第一反應便是在數據庫中加job。然而現在,Spring提供了支持時序調度的整合類Quartz,它把復雜的事情完全簡單化了,在此我不想再贅敘關于spring中如何去整合Quartz,具體的spring詳細配置請參照http://www.jactiongroup.net/reference/html/scheduling.html。使用過程很簡單,
    關于Quartz的說明參照官網的一段描述
    What is Quartz?
    Quartz is a full-featured, open source job scheduling system that can be integrated with, or used along side virtually any J2EE or J2SE application - from the smallest stand-alone application to the largest e-commerce system. Quartz can be used to create simple or complex schedules for executing tens, hundreds, or even tens-of-thousands of jobs; jobs whose tasks are defined as standard Java components or EJBs. The Quartz Scheduler includes many enterprise-class features, such as JTA transactions and clustering.
    您也可以參考以下鏈接進行更深入的了解http://www.opensymphony.com/quartz

    在使用的過程中,需要再對cronExpression的配置解釋一下,如果沒有使用過unix的cron,這里確實有點讓人迷惑,我便在這里迷惑了一把。
    Cron表達式是字符串,它由六個或七個子表達式組成,它描述了不同的調度細節。這些子表達式被白色表達式隔開,格式為* * * * * *
    以下的表格對表達式做出了解釋
    域          是否必須 允許的值       允許的字符
    Seconds      YES       0-59                   , - * /
    Minutes      YES       0-59                   , - * /
    Hours        YES       0-23                    , - * /
    Day of month YES       1-31              , - * ? / L W C
    Month        YES       1-12 or JAN-DEC, - * /
    Day of week  YES   1-7 or SUN-SAT , - * ? / L C #
    Year         NO         empty,1970-2099,   - * /

    比如:字符串“0 0 12 ? * WEB 意味著每周三上午12:00。
    特殊字符的一些說明:
    * 表示的是所有的值,比如在秒的位置上有* 則表示為每一秒種。所以,你在表示每5分鐘執行一次的時候便不能寫成 * 0/5 * * * ? 而應該是0 0/5 * * * ?
    ? 表示沒有指定特別的值,是允許為月的某一天或者周的某一天字段的。它被用來限定"沒有限定值"。這是有用的,當你需要限定一些事情在一個或兩個字段中,但不是這里的。
    有一個特別需要主意的地方便是*與?的搭配使用。比如在Day of month與Day of week全是* ,那邊自相矛盾了。官網中給出的例子沒出現過這種情況。
    - 表示范圍,比如Hours域中10-12,則表示 "the hours 10, 11 and 12".
    ,表示指定特別的附加值,比如"MON,WED,FRI" 在 day of week 域表示"the days Monday, Wednesday, and Friday"
    / 表示指定的增長范圍。比如"0/15" 在秒的區域表示"0, 15, 30, and 45"秒。

    "L"字符是允許用來月某天和周某天字段。這個字符是一個"last"的縮寫,但是它有不同的意義在兩個字段的其中之一。例如,這個值"L"在月字段的某一天意味著" 這個月的最后一天",31或者28等等。

    posted @ 2006-02-28 12:57 nighthawk 閱讀(1070) | 評論 (0)編輯 收藏

    看Larman的UML和模式應用,感覺渾身上下都是寶,一遍兩遍都不過癮。
    這幾天又在看GRASP(general responsibility assignment software patterns的縮寫),把該記的都記一下,加深印象,也與大家分享。網上這方面的資料并不多。
    五個基本模式:information expert,creator,High Conhersion,Low Coupling,Controller

    四個擴展模式:Polymorphism,indirection,pure fabrication,protected variations

    不想一一詳敘,挑重點看。
    1,information expert:把職責分配給具有實現這個職責所需要信息的對象。它表述的是一種“直覺”。
    2,creator:顧名思義,誰應該負責產生類的實例?類B聚合,包含,記錄,密切使用類A的數據。
    3,high conhersion與Low coupling:應該是到了面向對象的高層境界了。高耦合:依賴性過強。內聚:功能性內聚。降低一切不穩定元素之間的耦合。
    4,controller:如果直接通過UI來訪問業務層,后果是不堪想像的。C/S模式的開發中它是用來接收事件的,它通常不實現職責,只是委托給其他對象。在B/S中,我把它理解為serlvet。
    5,polymorphism:多態?這個詞很別扭,一句話解釋:多態是設計系統如何處理相似變化的基本方法。便于擴展,可嵌入。比如以下代碼:

    abstract class Square
    {…
      
    abstract void landedOn();
    …}

    class RegularSquare extends Square
    {…
      
    void landedOn()
     
    { … } // implementation
    }

    class IncomeTaxSquare extends Square
    {…
      
    void landedOn()
     
    { … } // implementation
    }


    6,indirection與pure fabrication:目的無非是為了降低耦合。對象的設計分為兩類:表示分離與行為分解。indirection與pure fabrication都是行為分解的產物。比如說我們常見的DAO模式,我認為就是很好的pure fabrication。
    7,protected variations:書中翻譯為受保護變化。叫做受保護的變化似乎更容易被理解。受保護的變化機制的具體體現:多態,接口,中介,數據封裝。與LSP(liskov替換原理)很相似。

    posted @ 2005-11-30 14:11 nighthawk 閱讀(732) | 評論 (0)編輯 收藏

    今天看struts源碼,發現了這么一個東西。在此是用來讀取struts的XML配置文件的。以前沒有大在意,現記下來,以備后用。
    Digester是Jakarta 子項目Commons下的一個模塊,是基于SAX接口的,它簡化了SAX方法的解析過程。用的時候集中精力處理XML數據而不是花太多的時間在如何解析文件本身上。
    以下是剛剛寫的一個小例子:
     1import org.apache.commons.digester.*;
     2import org.xml.sax.SAXException;
     3import java.io.*;
     4
     5public class DigesterSample {
     6  public DigesterSample() {
     7    Digester digester = new Digester();
     8    digester.push(this);
     9    digester.addCallMethod("rocket/member""print"2);
    10    digester.addCallParam("rocket/member/name"0);
    11    digester.addCallParam("rocket/member/age"1);
    12    try {
    13      digester.parse(getClass().getResourceAsStream("rocket.xml"));
    14    }

    15    catch (SAXException e) {
    16      e.printStackTrace();
    17    }

    18    catch (IOException ex) {
    19      ex.printStackTrace();
    20    }

    21
    22  }

    23
    24  public void print(String name, String age) {
    25    System.out.println("name : " + name + "  age : " + age);
    26  }

    27
    28  public static void main(String[] args) {
    29    DigesterSample dig = new DigesterSample();
    30  }

    31}
    相應的rocked.xml文件如下:
    1<rocket>
    2<member>
    3<name>YaoMing</name>
    4<age>25</age>
    5</member>
    6</rocket>
    放在編譯后的class同等目錄下即可。

    相關資源 http://jakarta.apache.org/commons/digester/
    posted @ 2005-11-21 15:42 nighthawk 閱讀(349) | 評論 (0)編輯 收藏

    用同步器令牌來防止客戶端的重復提交,這的確是個好注意!
    特別是防止用戶在瀏覽器當中點擊后退或者刷新按鈕所產生的不良影響。
    道理其實很簡單,大概流程為:輸入請求-->比較值-->處理請求-->生成令牌-->保存令牌-->
    準備響應-->外發響應。
    在客戶請求當中攜帶服務器前一次響應時發給客戶端的令牌,去與服務器端保存的令牌相比較,如果相等,則說明當前是合法提交。而不過不匹配,則可能是重復提交了。
    在具體的實現當中以jsp為例,在控制器當中采用servlet來負責管理令牌,將服務器端的令牌保存在session當中,通過每次的請求來更新這個令牌。然后在將要處理的業務邏輯之前判斷提交上來的令牌是否合法。如果合法則繼續執行,如果不合法,則避免執行正常的操作。
    servlet當中生成token代碼可如下:
    public void saveToken(HttpServletRequest request){
             HttpSession session
    =request.getSession();
             String token
    =generateToken(request);
             session.setAttribute(Constants.TOKEN,token);
    }
    檢查令牌合法性
    public boolean isTokenValid(HttpServletRequest request){
            HttpSession session
    =request.getSession();
            String saved
    =session.getAttribute(Constants.TOKEN);
            String token
    =request.getParameter(Constants.TOKEN);
    if(saved.equals(token)){
          
    return true;
    }

         
    return false;
    }


    在JSP端,通過助手類將當前生成的令牌保存在HTML的表單的隱含域當中。
    比如
    <input type="hidden" name="TOKEN" value="as8d7j3sk">

    通過這種手段實現起來并不十分復雜。當然這只是防止用戶提交的手段之一。其他的方法有待大家不斷補充。
    來源參考:Core J2ee patterns 2 


    posted @ 2005-11-15 11:14 nighthawk 閱讀(964) | 評論 (0)編輯 收藏

    僅列出標題
    共5頁: 上一頁 1 2 3 4 5 下一頁 
    主站蜘蛛池模板: 成人黄软件网18免费下载成人黄18免费视频| 亚洲一级片内射网站在线观看| 色综合久久精品亚洲国产| 久久久久亚洲AV综合波多野结衣 | 一级做a毛片免费视频| 日韩亚洲一区二区三区| 午夜爱爱免费视频| 免费网站观看WWW在线观看| 亚洲日韩精品无码专区| 国产亚洲精品自在久久| 日本免费高清一本视频| 久操免费在线观看| 日本一区二区在线免费观看| 在线观看亚洲一区二区| 亚洲狠狠爱综合影院婷婷| 亚洲一区二区三区免费视频| 一级毛片一级毛片免费毛片| 亚洲人6666成人观看| 亚洲国产精品无码成人片久久| 精品久久久久久久免费人妻| 最近免费中文字幕mv在线电影| jizz免费在线观看| 国产精品亚洲精品日韩电影| 亚洲最新在线视频| 亚洲av永久无码精品秋霞电影影院| 免费看国产一级片| 中国在线观看免费高清完整版| a毛片免费播放全部完整| 粉色视频成年免费人15次| www.亚洲成在线| 91亚洲精品视频| 亚洲免费人成在线视频观看| 午夜国产大片免费观看| 无码中文字幕av免费放| 蜜桃成人无码区免费视频网站| 国产激情久久久久影院老熟女免费 | 亚洲av永久无码一区二区三区| 亚洲成AV人综合在线观看| 亚洲第一AV网站| 亚洲精品国产综合久久一线| 日本成人在线免费观看|