成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

使用OSGi構(gòu)建面向服務(wù)的聯(lián)絡(luò)管理應(yīng)用程序

譯文
開發(fā) 后端
OSGi是一個十分適合SOA的架構(gòu),那么,如何使用OSGi構(gòu)建面向服務(wù)的聯(lián)絡(luò)管理應(yīng)用程序?本文通過操作一個最簡單的Hello World應(yīng)用來展示這個過程的實現(xiàn)。

【51CTO精選譯文】本文是《你好,OSGi》系列的第八部分。在之前一篇已經(jīng)使用Spring DM創(chuàng)建了Hello World應(yīng)用,下面的步驟就是要進(jìn)行服務(wù)套件的導(dǎo)入和導(dǎo)出了。簡單來說就是,構(gòu)建一個面向服務(wù)的聯(lián)絡(luò)管理應(yīng)用程序。

51CTO編輯推薦:OSGi入門與實踐全攻略

導(dǎo)入和導(dǎo)出服務(wù)套件

聯(lián)絡(luò)管理(Contact Management)應(yīng)用程序包含兩個套件。第一個套件是 ContactDAO,與數(shù)據(jù)庫進(jìn)行會話并將 ContactDAO 對象導(dǎo)出為OSGi服務(wù)。第二個套件是之前開發(fā)的 HelloWorld 應(yīng)用程序,我們將其擴(kuò)展,導(dǎo)入 ContactDAO 對象(即被導(dǎo)出的OSGi服務(wù))。

下面讓我們先從創(chuàng)建 ContactDAO 套件開始。為了簡單易行,我們不會在套件中添加真實的數(shù)據(jù)庫互動邏輯;作為替代,每個方法僅將其方法名稱寫到 Eclipse 控制臺。

首先創(chuàng)建 com.javaworld.sample.osgi.spring.contact.Contact.java 類,用來從 ontactDAO 將數(shù)據(jù)傳遞到 HelloWorld  套件。程序如代碼清單 3 所示。(Contact.java 是一個簡單的類,表示數(shù)據(jù)庫中的一個聯(lián)絡(luò)記錄。)

代碼清單 3. Contact.java

  1. package com.javaworld.sample.osgi.spring.contact;  
  2. public class Contact {  
  3. int contactId;  
  4. String firstName;  
  5. String lastName;  
  6. public int getContactId() {  
  7. return contactId;  
  8. }  
  9. public void setContactId(int contactId) {  
  10. this.contactId = contactId;  
  11. }  
  12. }  
  13.  

下一步,我們來創(chuàng)建 ContactDAO.java 接口,程序如代碼清單 4 所示。

代碼清單 4. ContactDAO 接口

  1. package com.javaworld.sample.osgi.spring.contact;  
  2. public interface ContactDAO {  
  3. public List getContactList();  
  4. public Contact getContact(int contactId);  
  5. public void insertContact(Contact contact);  
  6. public void updateContact(Contact contact);  
  7. public void deleteContact(int contactId);  
  8. }  
  9.  

ContactDAO 是一個簡單的 CRUD 接口:它定義了創(chuàng)建、更新、檢索以及刪除操作的方法。

現(xiàn)在,創(chuàng)建 ContactDAO.java 類的實現(xiàn),程序如代碼清單 5 所示。

代碼清單 5. ContactDAOImpl.java

  1. package com.javaworld.sample.osgi.spring.contact.impl;  
  2. public class ContactDAOImpl implements ContactDAO {  
  3. public Contact getContact(int contactId) {  
  4. System.out.println("Inside ContactDAOImpl.getContact()");  
  5. return null;  
  6. }  
  7. // Do nothing implementation of all other methods defined in ContactDAO  
  8. }  
  9.  

ContactDAOImpl.java 為 ContactDAO 接口提供了一個“do nothing”(返回空)的實現(xiàn)。我們所要做的是利用這個類將方法名稱寫入到 System.Out。

請注意 Contact 和 ContactDAO 都必須是公共類(為了使用 ContactDAO 服務(wù),其他套件需要訪問它們),并且位于 com.javaworld.sample.osgi.spring.contact 包之中。但是,實際的實現(xiàn)類 ContactDAOImpl.java(對于 ContactDAO 套件是一個內(nèi)部類)位于 com.javaworld.sample.osgi.spring.contact.impl 包中。

下面,我們來修改 ContactDAO 套件的 MANIFEST.MF 文件,以導(dǎo)出 com.javaworld.sample.osgi.spring.contact 套件,這樣就可以從 HelloWorld 套件訪問它了。我們只需在 MANIFEST.MF 中添加一行代碼:Export-Package: com.javaworld.sample.osgi.spring.contact

Spring DM的 Spring 配置

下面,我們將創(chuàng)建 Spring 配置文件。Spring DM中推薦的方法是將配置劃分為兩個文件,一個用于定義 Spring bean,另一個用于將 Spring 輸出為 OSGi 服務(wù)。下面,我們也會將作為示例的應(yīng)用程序的配置劃分為兩個文件。第一步是在 META-INF/spring 文件夾中創(chuàng)建一個 contactdao-service.xml 文件,程序如代碼清單 6 所示。

代碼清單 6. Spring 語境(contex)文件

  1. < ?xml version="1.0" encoding="UTF-8"?> 
  2.  
  3. < beans xmlns="http://www.springframework.org/schema/beans" 
  4.  
  5. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
  6.  
  7. xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"> 
  8.  
  9. < bean name="contactDAOService" 
  10.  
  11. class="com.javaworld.sample.osgi.spring.contact.impl.ContactDAOImpl"> 
  12.  
  13. < /bean> 
  14.  
  15. < /beans> 
  16.  

這個簡單的 Spring 語境文件定義了 contactDAOService,指向 com.javaworld.sample.osgi.spring.contact.impl.ContactDAOImpl 類。

下一步,我們將創(chuàng)建 META-INF/spring/contactdao-osgi.xml 文件,用于將 contactDAOService 對象導(dǎo)出為 OSGi 對象:

代碼清單 7. contactdao-osgi.xml

  1. < ?xml version="1.0" encoding="UTF-8"?> 
  2. < beans xmlns="http://www.springframework.org/schema/beans" 
  3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
  4. xmlns:osgi="http://www.springframework.org/schema/osgi" 
  5. xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd  
  6. http://www.springframework.org/schema/osgi http://www.springframework.org/schema/osgi/spring-osgi.xsd"> 
  7. < osgi:service id="contactDAOOSGiService" ref="contactDAOService" 
  8. interface="com.javaworld.sample.osgi.spring.contact.ContactDAO"> 
  9. < /osgi:service> 
  10. < /beans> 
  11.  

contactdao-osgi.xml 僅包含一個 < service> 元素,用于將 Spring bean 導(dǎo)出為公共寄存器里的 OSGi 服務(wù)。服務(wù) < service>[元素]必須最少具有兩個屬性:一個是 id 屬性,包含一個與導(dǎo)出 Spring bean 的名稱相等的值,另一個是 interface 屬性,它的值應(yīng)與該接口名稱相等(該接口名稱下的服務(wù)將會被導(dǎo)出)。(< service>元素所支持屬性的完整列表,請參閱 Spring DM參考指南)。

現(xiàn)在我們的 ContactDAO 已經(jīng)準(zhǔn)備好了。下一步是對 HelloWorld 進(jìn)行擴(kuò)展,這樣它就可以使用新的服務(wù)了。

作為消費者的 HelloWorld

如果想要這個簡單的 HelloWorld 應(yīng)用程序能夠擔(dān)任消費者的角色,我們必須賦予它這樣做的權(quán)限。第一步是更改該套件的 MANIFEST.MF 文件,添加一個 Import-Package 語句,如下所示:

  1. Import-Package: com.javaworld.sample.osgi.spring.contact 

現(xiàn)在,HelloWorld 套件將能夠訪問從 ContactDAO 套件的 com.javaworld.sample.osgi.spring.contact package 導(dǎo)出的類。

下面我們將修改 HelloWorld.java 類,如代碼清單 8 所示。

代碼清單 8. HelloWorld.java 的更改

  1. public class HelloWorld {  
  2. ContactDAO contactDAO;  
  3. public ContactDAO getContactDAO() {  
  4. return contactDAO;  
  5. }  
  6. public void setContactDAO(ContactDAO contactDAO) {  
  7. this.contactDAO = contactDAO;  
  8. }  
  9. public void start() throws Exception {  
  10. System.out.println("Hello Spring World!! " );  
  11. System.out.println(contactDAO.getContactList() );  
  12. }  
  13. public void stop() throws Exception {  
  14. System.out.println("Goodbye Spring World!!");  
  15. }  
  16. }  
  17.  

在代碼清單8 中,我們首先將 ContactDAO 作為 Java bean 屬性添加進(jìn)來,包含所有相關(guān)的 getter 和 setter 方法。接著,我們修改類的 start() 方法,來調(diào)用 ContactDAO 服務(wù)的 getContactList() 方法,以及輸出“Hello Spring World!!”消息。

Spring 配置文件

HelloWorld  套件的 Spring 配置文件分為兩個文件:helloworld.xml 和 helloworld-osgi.xml。我們先從 helloworld-osgi.xml 開始,該文件如代碼清單 9 所示。

代碼清單 9. Spring 配置- helloworld-osgi-xml

  1. < ?xml version="1.0" encoding="UTF-8"?> 
  2. < beans xmlns="http://www.springframework.org/schema/beans" 
  3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
  4. xmlns:osgi="http://www.springframework.org/schema/osgi" 
  5. xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd  
  6. http://www.springframework.org/schema/osgi http://www.springframework.org/schema/osgi/spring-osgi.xsd"> 
  7. < osgi:reference id="contactDAOService" interface="com.javaworld.sample.osgi.spring.contact.ContactDAO"/> 
  8. < /beans> 
  9.  

這個 helloworld-osgi.xml 文件聲明了一個引用元素,該元素用于索引 OSGi 服務(wù)并將其作為 Spring bean 在 HelloWorld 套件中可用。之前已經(jīng)提到,引用元素包含兩個屬性:id 和interface。在將 OSGi 服務(wù)添加為應(yīng)用程序中的 Spring bean 時,Spring DM將使用 id 屬性的值。對于這種情況,我們已經(jīng)指出,Spring DM應(yīng)使該服務(wù)作為 contactDAOService 在 HelloWorld 套件的應(yīng)用程序語境中可用。

第二個屬性是 interface。Spring DM將使用該屬性的值來查找與指定接口匹配的服務(wù)。在示例代碼中,我們已說過,我們想要一個實現(xiàn) com.javaworld.sample.osgi.spring.contact.ContactDAO 接口的服務(wù)。

Spring DM調(diào)用 BundleContext.getServiceReference() 查找實現(xiàn)了 com.javaworld.sample.osgi.spring.contact.ContactDAO 接口的服務(wù)。如果在 OSGi 框架中,與需要相匹配的服務(wù)多于一個,那么將返回具有最高等級的那個服務(wù)。此外,你還可以使用 filter 屬性來精確地定義你想要的服務(wù)。

下一步,我們將修改 helloworld.xml 文件,使它能夠?qū)?contactDAOService 對象注入到我們的 hello bean 中,如代碼清單 10 所示。

代碼清單 10. Spring 配置 - helloworld.xml

  1. < ?xml version="1.0" encoding="UTF-8"?> 
  2. < beans xmlns="http://www.springframework.org/schema/beans" 
  3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
  4. xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"> 
  5. < bean name="hello" class="com.javaworld.osgi.spring.HelloWorld" 
  6. init-method="start" destroy-method="stop" > 
  7. < property name="contactDAO" ref="contactDAOService"/> 
  8. < /bean> 
  9. < /beans> 
  10.  

一旦將 ContactDAOService 注入到套件的應(yīng)用程序語境中,你就能夠使用它作為任何你想要的其他 Spring bean。在示例代碼中,我們將該服務(wù)作為一個 HelloWorld bean 的contactDAO 屬性進(jìn)行注入。

HelloWorld 導(dǎo)入服務(wù)

在 Eclipse IDE 中執(zhí)行你的套件,當(dāng)你啟動 HelloWorld 套件時,在你的控制臺里應(yīng)顯示“Hello Spring World!! Inside ContactDAOImpl.getContactList()”消息。在后臺,一旦 Spring extender 套件被啟動,它將看到存在兩個 Spring 提供的套件。作為響應(yīng),它將首先為 ContactDAO 套件創(chuàng)建一個應(yīng)用程序語境。同時,它查找 contactdao-osgi.xml 文件并將 ContactDAO  作為公共寄存器中的 OSGi 服務(wù)進(jìn)行導(dǎo)出。接著,它將試圖為 HelloWorld 套件創(chuàng)建一個應(yīng)用程序語境??吹剿哂幸粋€引用元素,extender 調(diào)用 BundleContext.getService("com.javaworld.sample.osgi.spring.contact.ContactDAO") 方法,目的在于查找實現(xiàn) com.javaworld.sample.osgi.spring.contact.ContactDAO 接口的類服務(wù)。

在示例代碼(見代碼清單 5)中,ContactDAOImpl 是唯一實現(xiàn)了該接口的服務(wù),因此 extender 將返回 ContactDAOImpl 的一個對象。一旦該對象被返回,Spring DM就會將其作為 contactDAO 屬性 注入到 HelloWorld bean 中。

【編輯推薦】

  1. 你好,OSGi!OSGi入門必讀系列
  2. 使用Spring DM創(chuàng)建Hello World,以及OSGi服務(wù)
  3. OSGi與Spring:設(shè)置Spring DM開發(fā)環(huán)境
  4. OSGi和Spring入門:什么是Spring動態(tài)模型(Spring DM)?
  5. OSGi是什么:Java語言的動態(tài)模塊系統(tǒng)
責(zé)任編輯:yangsai 來源: 51CTO.com
相關(guān)推薦

2012-06-07 09:15:14

ibmdw

2017-03-07 14:48:53

應(yīng)用運維CMDB

2022-01-04 13:54:57

應(yīng)用程序IT監(jiān)測

2016-11-25 09:10:39

運維管理新思維

2009-06-01 11:37:46

EquinoxOSGi服務(wù)器

2009-11-06 12:49:11

WCF面向服務(wù)

2024-05-27 00:00:00

C# 類參數(shù)數(shù)據(jù)

2015-08-17 17:57:43

IT性能運維

2009-10-22 11:03:20

OSGi Web應(yīng)用程

2009-01-03 14:25:10

ibmdwWeb

2012-12-20 11:14:44

IBMdW

2010-06-13 09:22:37

jQuery

2021-11-10 05:30:21

Windows 11操作系統(tǒng)微軟

2010-02-26 14:40:15

Python應(yīng)用程序

2024-01-03 11:44:26

開發(fā)云服務(wù)

2009-09-22 12:59:07

ibmdwWeb

2010-05-22 11:21:51

綠色智能城市信息化建設(shè)華為

2012-08-15 10:02:50

搜索引擎

2013-06-24 10:21:47

面向?qū)ο?/a>Web應(yīng)用JavaScript

2010-04-28 16:32:11

互聯(lián)網(wǎng)
點贊
收藏

51CTO技術(shù)棧公眾號

主站蜘蛛池模板: 亚洲精品久久区二区三区蜜桃臀 | 日本手机在线 | 日韩欧美网 | 国产黄色av电影 | 日韩欧美亚洲一区 | 久久久激情 | 欧美国产视频 | 正在播放国产精品 | 免费看的av| 精品一区二区三区在线观看 | 国产精品久久久久aaaa九色 | 韩日精品一区 | 夫妻午夜影院 | 91精品一区二区三区久久久久久 | 91社区在线观看播放 | 精品三级在线观看 | 国产一区二区三区高清 | 一区二区在线不卡 | 成人精品鲁一区一区二区 | 成人二区 | 国产精品免费一区二区三区 | 婷婷在线视频 | 91精品国产91综合久久蜜臀 | 视频二区 | 久久精品国产a三级三级三级 | 国产精品久久久久久久久久久久久 | 伊人免费在线观看 | 国产精品波多野结衣 | 国内精品久久精品 | 一区二区三区av | 亚洲一区国产精品 | 7777精品伊人久久精品影视 | 欧美激情一区二区 | 精品国产乱码久久久 | 成年人网站在线观看视频 | 中文字幕成人av | 精品一区二区电影 | 欧美八区 | 国产精品久久久久久久7777 | 亚洲 自拍 另类 欧美 丝袜 | 亚洲一二三区不卡 |