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

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

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

    littleQ

    終于明白曾經(jīng)他們失落的目光,當(dāng)年的你們是否一樣;間有懈怠或有頹放,難知多久方能補(bǔ)上;今起,不再彷徨!

      BlogJava :: 首頁 :: 聯(lián)系 :: 聚合  :: 管理
      33 Posts :: 0 Stories :: 60 Comments :: 0 Trackbacks

    #

    OSGi是什么?
    OSGi是一種松散耦合的組件和服務(wù)運(yùn)行平臺(tái)規(guī)范. 簡(jiǎn)單的說, 用戶只需要修改通用的Java類庫檔案JAR文件中的META-INF下的元數(shù)據(jù)文件MANIFEST.MF, 添加必要的標(biāo)簽信息, 放置到OSGi框架的Bundle Repository中, 用戶的類庫就成了OSGi環(huán)境的一部分.

    成為OSGi環(huán)境的組件, 為其他標(biāo)準(zhǔn)的OSGi組件提供代碼功能是最為直接的一種功能. 用戶也可以將提供組件中的某種功能的接口和實(shí)現(xiàn)實(shí)例發(fā)布到OSGi服務(wù)注冊(cè)表中, 供其他組件直接查找使用. 這就是OSGi的Serivce概念. 同樣, 用戶可以查找OSGi環(huán)境中其他組件提供的接口服務(wù), 調(diào)用改服務(wù)完成必要的處理.

    OSGi組件提供的服務(wù)具有兩種層面的含義: 系統(tǒng)層面, 即一個(gè)組件為其他組件提供服務(wù), 這些服務(wù)體現(xiàn)為Java接口的實(shí)現(xiàn); 業(yè)務(wù)層面, 即一個(gè)組件為外部系統(tǒng)或用戶提供某種業(yè)務(wù)服務(wù)實(shí)現(xiàn).

    OSGi的組成.
    OSGi框架由4層組成:運(yùn)行環(huán)境、模塊、生命周期管理、服務(wù)注冊(cè).
    運(yùn)行環(huán)境是指標(biāo)準(zhǔn)的java環(huán)境. 只要具備了java2的構(gòu)造和輪廓的都是被認(rèn)可的運(yùn)行環(huán)境.
    模塊層定義了采用的ClassLoader機(jī)制.
    生命周期管理層則為bundle的安裝、啟動(dòng)、停止、更新和卸載提供了支持.
    服務(wù)注冊(cè)為Bundles提供了一個(gè)動(dòng)態(tài)的協(xié)作模型. 本來Bundles可通過傳統(tǒng)的class共享方式來實(shí)現(xiàn)協(xié)作, 但在動(dòng)態(tài)的安裝和卸載代碼的環(huán)境下這種方法是不適用的. 服務(wù)注冊(cè)為Bundles間共享Objects提供了一種可用的模型, OSGI提供了一堆的事件來通知服務(wù)的使用者關(guān)于服務(wù)的注冊(cè)和卸載, 服務(wù)其實(shí)就是簡(jiǎn)單的Java objects.
    posted @ 2008-07-30 14:18 littleQ 閱讀(477) | 評(píng)論 (0)編輯 收藏

    第一次接觸OSGi,看的第一篇資料是BlueDavy的<OSGi實(shí)戰(zhàn)>.并實(shí)踐了其中的案例.
    還沒有看完,暫時(shí)才看到把UserValidator接口和其不同的三種實(shí)現(xiàn)---FileConfigValidator, LDAPValidator, DBValidator做成bundle.
    bundle的開發(fā)和普通的java工程開發(fā)唯一的區(qū)別就是借助bundle的元數(shù)據(jù)MANIFEST.MF來實(shí)現(xiàn)工程之間package的共享.
    除了bundle之外,OSGi還有一個(gè)很重要的概念,就是service.這里的service和普通的web開發(fā)中的service不同:在OSGi框架中,service是很實(shí)在的東西,只有通過BundleContext注冊(cè)成Service才能使POJO作為Service在OSGi框架中被其他POJO使用,也只有通過BundleContext來獲取發(fā)布到框架中的Service,通過Service的方式來實(shí)現(xiàn)bundle之間的實(shí)例級(jí)依賴.如此說來,service的粒度比package,bundle都要細(xì).

    暫時(shí)對(duì)OSGi了解的不是很多,還在繼續(xù)學(xué)習(xí)中.等把<OSGi實(shí)戰(zhàn)>看完,BlueDavy還整了<OSGi進(jìn)階>,可以看一看.感謝BlueDavy!

    其實(shí)現(xiàn)在最想了解的,還是基于Spring的OSGi:前者有強(qiáng)大的低依賴性編程模型和概念,后者具有動(dòng)態(tài)性和模塊性.兩者的結(jié)合,我相信必然是更為強(qiáng)大的工具.

    posted @ 2008-07-29 22:41 littleQ 閱讀(178) | 評(píng)論 (0)編輯 收藏

    前不久在我所在的項(xiàng)目中做了一個(gè)發(fā)送html郵件模板的升級(jí)包,選一個(gè)人群,選一個(gè)模板,然后發(fā)送。
    很簡(jiǎn)單的一個(gè)小功能,可是在coding的時(shí)候還是遇到了一些小問題。其中最主要的一個(gè)問題,就是模板文件本身的字符集的問題。
            Properties props = System.getProperties();
            Session session;

            props.put(
    "mail.smtp.host", strSMTPAdress);
            props.put(
    "mail.smtp.port", strSMTPPort);

            
    if (strSenderPassword == null{
                props.put(
    "mail.smtp.auth""false");
                session 
    = Session.getDefaultInstance(props);
            }
     else {
                props.put(
    "mail.smtp.auth""true");
                MyAuthenticator myauth 
    = new MyAuthenticator(strSenderEmail, strSenderPassword);
                session 
    = Session.getDefaultInstance(props, myauth);
            }


            MimeMessage message 
    = new MimeMessage(session);

    上面的代碼創(chuàng)建一個(gè)MimeMessage,再簡(jiǎn)單不過的事情了。
    然后根據(jù)模板名稱獲取html文件內(nèi)容,接著我做了這樣一件事情,把模板內(nèi)容轉(zhuǎn)成gb2312編碼。
    try{
                temp 
    = IOUtils.toString(IOUtils.toInputStream(temp, "gb2312"));
                
    // temp = new String(temp.getBytes("gb2312"),"ISO-8859-1");
            }
     catch (IOException e){
                logger.error(
    "模板讀取后,string格式轉(zhuǎn)換時(shí)出錯(cuò).", e);
                
    return null;
            }
    設(shè)置郵件正文:
      
    message.setText(temp, "gb2312");
    message.setDataHandler(
    new DataHandler(temp, "text/html;charset=gb2312"));

    在郵件正文中,查找<title>XXX</title>,title的value就作為郵件的主題。這時(shí)候,就出問題了。
    我是這么寫的:
    message.setSubject("=?GB2312?B?" + enc.encode(title.getBytes()) + "?=");
    選了幾個(gè)郵件模板也測(cè)試過,當(dāng)時(shí)也沒發(fā)現(xiàn)問題。可是上線后,用戶使用的時(shí)候說主題出現(xiàn)亂碼。讓用戶把模板發(fā)過來,本地再進(jìn)行測(cè)試,居然發(fā)送后的郵件正文格式,都變成了純文本。
    使用下面的設(shè)置主題的方式后,就正常了:
    message.setSubject(title);

    暫時(shí)還沒有深入的去查找原因,直覺上是認(rèn)為和html文件本身的編碼有關(guān)。
    posted @ 2008-07-29 11:22 littleQ 閱讀(635) | 評(píng)論 (1)編輯 收藏

    僅列出標(biāo)題
    共4頁: 上一頁 1 2 3 4