天堂国产午夜亚洲专区-少妇人妻综合久久蜜臀-国产成人户外露出视频在线-国产91传媒一区二区三区

當(dāng)前位置:主頁 > 論文百科 > 英文數(shù)據(jù)庫 >

轉(zhuǎn):Osgi實戰(zhàn)中的問題

發(fā)布時間:2016-07-20 05:06

  本文關(guān)鍵詞:OSGi實戰(zhàn),由筆耕文化傳播整理發(fā)布。


對osgi有了一個初步的了解之后,準(zhǔn)備寫段代碼跑跑,一試身手,
先下載了一份Bluedavy 的《OSGi實戰(zhàn)
里邊有可以直接運行的代碼,雙擊run.bat運行正常,暗爽!
開始練習(xí)《OSGi實戰(zhàn)》中用戶登錄驗證模塊,一行一行敲代碼,第一個變化就是工程之間相互引用不能在Build path里添加工程引用了,改成了在MANIFEST.MF當(dāng)中添加Import-Package
在學(xué)習(xí)過程當(dāng)中還是遇到了不少問題,記錄下來,幫助遇到和我同樣樣問題的少走彎路。
我用的是eclipse3.4 jdk1.6 

1.Import-Package時org.eclipse.equinox.servlet.api這個包死活找不到。
在eclipse3.4已經(jīng)不存在了直接導(dǎo)入javax.servlet_2.4.0.v200806031604.jar就可以了
如果沒有添加javax.servlet會出現(xiàn)  INSTALLED   UserValidatorWebBundle_1.0.0
強行啟動會拋出以下異常
org.osgi.framework.BundleException: The bundle could not be resolved. Reason: Missing Constraint: Require-Bundle: javax.servlet; bundle-version="2.4.0"

2.如果使用了Equinox OSGI Declarative Service需要下載 eclipse-equinox-SDK-3.4.2.zip 
因為Declarative Service實現(xiàn)并沒有包含在Eclipse的默認(rèn)軟件包中,需要單獨從 Eclipse 的的網(wǎng)站上獲得,下載包當(dāng)中的plugins和features復(fù)制到eclipse當(dāng)中重啟
org.eclipse.equinox.ds_1.0.0.v20080427-0830.jar是運行時用到的bundle
org.eclipse.equinox.ds用到了org.eclipse.equinox.util_1.0.0.v20080414.jar
都要在config.ini當(dāng)中添加并啟動

3.一切看似啟動正常了,log當(dāng)中還是有以下異常
java.lang.IllegalStateException: Unable to acquire application service. Ensure that the org.eclipse.core.runtime bundle is resolved and started (see config.ini).
還得啟動 org.eclipse.osgi.util_3.1.300.v20080303.jar 這個bundle

4.如果 這個頁面不能訪問可能org.eclipse.equinox.http_1.0.200.v20080421-2006.jar沒有啟動,如何htm能訪問了 不能訪問 可能org.eclipse.equinox.http.servlet_1.0.100.v20080427-0830.jar沒有啟動

總結(jié)一下用戶登錄驗證模塊要啟動的bundle
id State       Bundle
0 ACTIVE      org.eclipse.osgi_3.4.2.R34x_v20080826-1230
1 ACTIVE      ConfigFileValidatorBundle_1.0.0
2 ACTIVE      DBValidatorBundle_1.0.0
4 ACTIVE      UserValidatorBundle_1.0.0
5 ACTIVE      LDAPValidatorBundle_1.0.0
9 ACTIVE      UserValidatorWebBundle_1.0.0
10 ACTIVE      org.eclipse.equinox.util_1.0.0.v20080414
11 ACTIVE      org.eclipse.equinox.ds_1.0.0.v20080427-0830
12 ACTIVE      javax.servlet_2.4.0.v200806031604
13 ACTIVE      org.eclipse.osgi.services_3.1.200.v20071203
14 ACTIVE      org.eclipse.equinox.http.servlet_1.0.100.v20080427-0830
15 ACTIVE      org.eclipse.equinox.http_1.0.200.v20080421-2006
17 ACTIVE      org.eclipse.osgi.util_3.1.300.v20080303

當(dāng)缺少什么bundle時,自己去網(wǎng)上下就行,然后用導(dǎo)入Plug- ins and Fragments的方式將bundle導(dǎo)入,便可以引用了,所以別當(dāng)成什么高深的東西,別忘了在運行時用"Add Required Bundles",它幫我們加入會用的的bundles,這個就幫我們很大的忙了.

在第一個例子(源碼中的classic)中,用代碼注冊的方式來注冊服務(wù),即在每個實現(xiàn)服務(wù)接口的bundle里的Activator注冊自己的服務(wù)到指定服務(wù)名下,如

Java代碼

package org.riawork.demo.user.validator; /* * RIAWork.org * * OSGI Opendoc Demo */ import org.osgi.framework.BundleActivator; import org.osgi.framework.BundleContext; import org.osgi.framework.ServiceRegistration; import org.riawork.demo.service.user.Validator; import org.riawork.demo.service.user.impl.ConfigFileValidatorImpl; /** * desc: ConfigFileBundle Activator,采用傳統(tǒng)的方式完成服務(wù)的注冊 * * @author jerry */ public class Activator implements BundleActivator { // --------------------------------------------Instance Variables private ServiceRegistration serviceReg=null; // --------------------------------------------Public Method /* (non-Javadoc) * @see org.osgi.framework.BundleActivator#start(org.osgi.framework.BundleContext) */ //實現(xiàn)Validator的Bunble都會在Activator里將自己的新的實現(xiàn)注冊到Validator.class.getName()名下,這樣Validator.class.getName()為名的服務(wù)就有多個了 public void start(BundleContext context) throws Exception { serviceReg=context.registerService(Validator.class.getName(), new ConfigFileValidatorImpl(), null); } /* (non-Javadoc) * @see org.osgi.framework.BundleActivator#stop(org.osgi.framework.BundleContext) */ public void stop(BundleContext context) throws Exception { if(serviceReg!=null) serviceReg.unregister(); } }

在第二個例子(源碼中的ds),采用的是在配置文件里聲明的方式來發(fā)布一個bundle里的服務(wù)的,即在 ConfigFileValidatorBundle,DBValidatorBundle,LDAPValidatorBundle這三個實現(xiàn) UserValidatorBundle接口的bundle里沒有Activator來注冊它們的實現(xiàn)服務(wù),而是在MANIFEST.MF配置文件里加入 Service-Component: OSGI-INF/component.xml來發(fā)布聲明在項目目錄下的OSGI-INF/component.xml配置文件的服務(wù)。

    打包時,按著文檔來做是不行的,打包的時候,org.eclipse.osgi的jar包和run.bat是在一個目錄里,而在它們目錄下再建 configuration目錄(存放config.ini文件)和bundles目錄(存放自己打包出來的bundle和它們運行依賴的 bundle),還有一點在注意的是拷貝文檔里的config.ini內(nèi)容到config.ini文件是不能運行的,可以是有中文字符在里面。

我這里能運行的如下:

Xml代碼

osgi.noShutdown=true # 當(dāng)前系統(tǒng)下運行的 Bundle,可以在此指定 Bundle 的啟動順序,,在后續(xù)的 # StartLevel Service章節(jié)中會詳細(xì)的介紹 #避免Unable to acquire application service. Ensure that the org.eclipse.core.runtime錯誤 eclipse.ignoreApp=true #osgi.bundles=reference\:file\:bundles/ConfigFileValidatorBundle_1.0.0.jar@start,reference\:file\:bundles/DBValidatorBundle_1.0.0.jar@start,reference\:file\:bundles/LDAPValidatorBundle_1.0.0.jar@start,reference\:file\:bundles/org.eclipse.equinox.http_1.0.301.R35x_v20090728.jar@start,reference\:file\:bundles/javax.servlet_2.5.0.v200806031605.jar@start,reference\:file\:bundles/org.eclipse.osgi.services_3.2.0.v20090520-1800.jar@start,reference\:file\:bundles/UserValidatorBundle_1.0.0.jar@start, reference\:file\:bundles/UserValidatorWebBundle_1.0.0.jar@start osgi.bundles=plugins/ConfigFileValidatorBundle_1.0.0.jar@start,\ plugins/DBValidatorBundle_1.0.0.jar@start,\ plugins/LDAPValidatorBundle_1.0.0.jar@start,\ plugins/org.eclipse.equinox.http_1.0.301.R35x_v20090728.jar@start,\ plugins/javax.servlet_2.5.0.v200806031605.jar@start,\ plugins/org.eclipse.osgi.services_3.2.0.v20090520-1800.jar@start,\ plugins/UserValidatorBundle_1.0.0.jar@start,\ plugins/UserValidatorWebBundle_1.0.0.jar@start,\ plugins/org.eclipse.equinox.ds_1.1.1.R35x_v20090806.jar@start,\ plugins/org.eclipse.equinox.util_1.0.100.v20090520-1800.jar@start osgi.bundles.defaultStartLevel=4

這里不要忘記加入ds的bundle不然用Service-Component: OSGI-INF/component.xml配置就不起作用了,發(fā)布不了服務(wù)的,因為是由ds的bundle來掃描發(fā)現(xiàn)相應(yīng)的服務(wù),并加于管理的。


  本文關(guān)鍵詞:OSGi實戰(zhàn),由筆耕文化傳播整理發(fā)布。



本文編號:73906

資料下載
論文發(fā)表

本文鏈接:http://sikaile.net/wenshubaike/mishujinen/73906.html


Copyright(c)文論論文網(wǎng)All Rights Reserved | 網(wǎng)站地圖 |

版權(quán)申明:資料由用戶891d0***提供,本站僅收錄摘要或目錄,作者需要刪除請E-mail郵箱bigeng88@qq.com