日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

使用NetBeans6开发OSGi应用(3)——整合Knopflerfish![88250原创]

發布時間:2025/7/14 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 使用NetBeans6开发OSGi应用(3)——整合Knopflerfish![88250原创] 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

轉載請保留作者信息:

作者:88250

Bloghttp:/blog.csdn.net/DL88250

MSN & Gmail & QQDL88250@gmail.com


摘要

上一次,我們編寫了兩個Bundles,一個是服務提供商,一個是使用服務的客戶 ,運行得還不錯 :-)
這一次,我們先簡要分析一下KF(Knopflerfish)框架的設計,學習應用程序框架的設計。最后,結合上一次文章結尾時提到了關于控制KF框架、讓OSGi服務于我們的應用的問題,今天就圍繞這些內容展開。

關于Knopflerfish框架的設計

在開始,我們將看一下KF框架的設計。

Main

在閱讀了KF框架的一些代碼后,從KF框架的主程序入手(org.knopflerfish.framework.Main)我們可以看出,KF除了實現OSGi規范,實現了自己的framework(org.knopflerfish.framework.Framework)外,主要是圍繞它的框架啟動類:org.knopflerfish.framework.Main做了一系列的鋪墊:比如所實現的OSGi規范的版本(我的版本是OSGi 4.0.6版本),存儲Bundle的文件位置,操作系統版本,等等。
這個Main類,主要做的是命令行參數(啟動參數)的處理,因為KF框架啟動的時候可以用xargs文件(把所有參數寫成一個文件),所以處理上比較繁瑣。在Main下面的handleArgs方法可以看出,所有的Bundles的基本操作(start、stop、install、etc.)都是調用org.knopflerfish.framework.Framework這個類實現的,這個類就是KF框架的基本實現,已經把功能封裝地相當好用了!

那我們應該直接使用Framework類嗎?

我們應該直接使用KF實現的Framework類,但是整個框架的啟動鋪墊是很繁瑣的。從Main還有其相關的Utils的代碼量就可以看出。在整個框架啟動之前,要做一系列的鋪墊。
這里,結合我自己的項目,由于時間比較緊了,再重寫這些可能時間不允許,所以我選擇的是改寫Main,把那個Main類作為自己應用框架的一個對KF的基本封裝。具體做法就是委托Framework類的一些方法,暴露這些方法在Main外部。

總之,要基于Knopflerfish,完成自己的一個應用框架還是比較簡單的 :-)

讓我們簡單實踐一下!

準備

同上一次 :-)

開工:

1. 創建工程

打開NB6,創建一個普通Java應用工程——MyOSGiFramework:



注意那個version文件,這個文件是指KF實現的OSGi的版本,在OSGi框架實現里,有一個Version類,用于版本的管理。要在我們的src目下建立一個version文件。

2.改寫Knopflerfish的Main類

添加對Bundle的基本操作到Main類里,達到封裝KF框架的目的。下面是添加的一些示例方法:
/**
?????*?Get?the?bundle?context?used?by?the?system?bundle.
?????*?
@return?system?<code>BundleContext</code>
?????
*/
????
public?static?BundleContext?getBundleContext()?{
????????
return?framework.getSystemBundleContext();
????}

????
/**
?????*?Start?a?bundle.
?????*?
@param?id?Id?of?bundle?to?start
?????
*/
????
public?static?void?startBundle(long?id)?{
????????
try?{
????????????framework.startBundle(id);
????????}?
catch?(BundleException?ex)?{
????????????Logger.getLogger(Main.
class.getName()).log(Level.SEVERE,?null,?ex);
????????}
????}

????
/**
?????*?Stop?a?bundle.
?????*?
@param?id?Id?of?bundle?to?stop
?????
*/
????
public?static?void?stopBundle(long?id)?{
????????
try?{
????????????framework.stopBundle(id);
????????}?
catch?(BundleException?ex)?{
????????????Logger.getLogger(Main.
class.getName()).log(Level.SEVERE,?null,?ex);
????????}
????}

這里,做的工作就是“純”委托。

編寫我們對Main的測試類:
/*
?*?@(#)MainTest.java
?*?
?*?This?program?is?free?software;?you?can?redistribute?it?and/or?modify
?*?it?under?the?terms?of?the?GNU?General?Public?License?as?published?by
?*?the?Free?Software?Foundation;?either?version?3?of?the?License,?or
?*?(at?your?option)?any?later?version.
?*?
?*?This?program?is?distributed?in?the?hope?that?it?will?be?useful,
?*?but?WITHOUT?ANY?WARRANTY;?without?even?the?implied?warranty?of
?*?MERCHANTABILITY?or?FITNESS?FOR?A?PARTICULAR?PURPOSE.??See?the
?*?GNU?Library?General?Public?License?for?more?details.
?*?
?*?You?should?have?received?a?copy?of?the?GNU?General?Public?License
?*?along?with?this?program;?if?not,?write?to?the?Free?Software
?*?Foundation,?Inc.,?59?Temple?Place?-?Suite?330,?Boston,?MA?02111-1307,?USA.
?
*/
package?myosgiframework;

import?org.knopflerfish.framework.Main;
import?org.osgi.framework.Bundle;
import?org.osgi.framework.BundleContext;

/**
?*?A?test?case?of?<code>org.knopflerfish.framework.Main</code>.
?*?<p>
?*?Base?on?knopflerfish?framework,?modify?some?source?in?<code>Main</code>,
?*?annotate?these?modifications?with?<code>
@since</code>?mark,?
?*?mark?as?<tt>
@since?4.0.6</tt>.
?*?</p>
?*?
@author?88250
?*?
@version?1.0.0.0,?Feb?15,?2008
?
*/
public?class?MainTest?{

????
/**
?????*?Program?entry?point.
?????*?
@param?args?should?be?<code>null</code>
?????
*/
????
public?static?void?main(String[]?args)?{
????????Main.main(args);
????????Main.startBundle(
1);
????????displayBundlesStatus();
????????Main.stopBundle(
1);
????????displayBundlesStatus();
????????Main.shutdown(
0);
????}

????
private?static?void?displayBundlesStatus()?{
????????BundleContext?bc?
=?Main.getBundleContext();

????????Bundle[]?b?
=?bc.getBundles();
????????
for?(int?i?=?0;?i?<?b.length;
????????????????i
++)?{
????????????Bundle?bundle?
=?b[i];
????????????System.out.println(
"ID:?#"?+?bundle.getBundleId()?+
???????????????????????????????
"????????Location:?"?+?bundle.getLocation()?+
???????????????????????????????
"????????Status:?"?+?bundle.getState());
????????}
????}
}

3. 測試

還記得上一次我們的那個Bundle嗎?
為了它啟動在我們的框架里,編寫一個啟動參數文件secondosgi.xargs:
-istart?/home/daniel/Work/Sources/Java/SecondOSGi/dist/SecondOSGi.jar

然后,修改啟動參數:

測試輸出:



總結

這一次,我們簡單地分析了KF框架的啟動,還有一些設計。并修改了KF框架的啟動類,作為了我們自己的一個底層應用框架封裝。下一次,我們將結合具體的一個項目(把OSGi作為整個項目的實現基礎,支持插件的辭典——StoneAgeDict)實踐OSGi!

轉載于:https://www.cnblogs.com/lanzhi/archive/2008/02/15/6470594.html

總結

以上是生活随笔為你收集整理的使用NetBeans6开发OSGi应用(3)——整合Knopflerfish![88250原创]的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 亚洲精品99999 | 免费在线观看国产精品 | 日本一本在线 | 人人爽在线 | 久久性爱视频网站 | 日韩1区| 久爱视频在线观看 | 亚洲图片欧美另类 | 国产网站精品 | 91性色| 性欧美日本 | 色妇网 | 黄色大片免费看 | 一本大道综合伊人精品热热 | 影音先锋丝袜美腿 | 男人的天堂aa | 无人在线观看高清视频 | 天天色天天射天天操 | 色a视频| 夜夜cao | 女人张开腿让男人桶爽 | 亚洲经典一区二区三区四区 | 亚洲综合五月天婷婷丁香 | 色性网站 | 激情小说亚洲图片 | 日韩91精品 | 高清国产mv在线观看 | 中国大陆毛片 | 亚洲欧美自拍一区 | 亚洲精品成人 | 嫩草视频在线观看 | 日韩视频精品一区 | 荡女精品导航 | av在线资源播放 | 国产精品69毛片高清亚洲 | 偷拍自拍一区 | 欧美激情一级 | 在线激情| 91欧美一区二区三区 | 日韩免费一级 | xxxwww在线观看 | aise爱色av | 无码国产69精品久久久久网站 | 99re99热| www.jizzjizz.com| 亚洲丝袜中文字幕 | 无码精品一区二区三区在线播放 | 日韩中文字幕在线免费观看 | 日韩高清影院 | 日韩在线精品视频一区二区涩爱 | 色老板精品凹凸在线视频观看 | 精品免费在线 | www.黄色在线观看 | 软萌小仙自慰喷白浆 | 精品国产一区二区视频 | 91色爱| 黑料视频在线观看 | 国产无遮挡一区二区三区毛片日本 | 激情婷婷在线 | 日本熟伦人妇xxxx | 欧美乱妇狂野欧美视频 | 日韩最新av| 国产精品一区二区三区久久 | 国产一线天粉嫩馒头极品av | 国产午夜在线一区二区三区 | 日韩精品免费一区 | 一区二区三区在线看 | 国产精品成人69xxx免费视频 | 日韩精品一区二区三 | 校园春色中文字幕 | 色一情一乱一伦一区二区三区 | 在线看污片 | 日韩精品无码一区二区三区久久久 | 在线观看亚洲一区二区 | 亚洲成年人免费观看 | 嫩草懂你 | 亚洲av无码专区在线播放中文 | 日本一区二区免费电影 | 美丽的姑娘在线观看免费 | a在线视频 | 人妻一区二区视频 | 朝桐光av在线 | 色老板精品凹凸在线视频观看 | 看日本黄色录像 | 亚洲精品国产美女 | 少妇2做爰交换朴银狐 | 偷拍夫妻性生活 | 一区二区久久久 | 日本一区二区网站 | 欧美日韩一区二区在线观看 | 丰满少妇高潮久久三区 | 手机看片1024日韩 | 亚洲综合国产精品 | 老熟妻内射精品一区 | av日日操 | 国产不卡网 | 91蝌蚪视频在线 | 色片网站在线观看 | 亚洲成人精品一区二区 |