2011-01-12 118 views
21

我希望能夠輕鬆啓動OSGi框架(最好是Equinox),並從java main中加載我的pom中列出的任何bundle。以編程方式啓動OSGi(Equinox)?

這可能嗎?如果是這樣,怎麼樣?

看來像pax工具會這樣做,但我似乎無法找到任何文件指出這樣的。我知道我可以啓動春分像這樣:

BundleContext context = EclipseStarter.startup((new String[] { "-console" }), null); 

但我想做得更多 - 就像我說的:加載多個軟件集,也許開始有些服務等

回答

45

可以使用FrameworkFactory API以編程方式啓動任何OSGi框架(R4.1或更高版本):

ServiceLoader<FrameworkFactory> ffs = ServiceLoader.load(FrameworkFactory.class); 
FrameworkFactory ff = ffs.iterator().next(); 
Map<String,Object> config = new HashMap<String,Object>(); 
// add some params to config ... 
Framework fwk = ff.newFramework(config); 
fwk.start(); 

OSGi框架現在正在運行。由於Framework擴展Bundle你可以打電話getBundleContext,並呼籲所有的正常API的方法來操作束,註冊服務等。例如

BundleContext bc = fwk.getBundleContext(); 
bc.installBundle("file:/path/to/bundle.jar"); 
bc.registerService(MyService.class.getName(), new MyServiceImpl(), null); 
// ... 

最後,你應該簡單地等待框架關機:

fwk.stop(); 
fwk.waitForStop(0); 

重申,這種方法適用於任何OSGi框架,包括Equinox和Felix,只需將框架JAR放在類路徑上即可。

2

編輯:意識到你想從java內部開始。對我來說因爲讀書不夠近而感到羞恥

看看這個鏈接。 http://www.eclipsezone.com/eclipse/forums/t93976.rhtml

本質

public static void main(String args[]) throws Exception { 
    String[] equinoxArgs = {"-console","1234","-noExit"}; 
    BundleContext context = EclipseStarter.startup(equinoxArgs,null); 
    Bundle bundle = context.installBundle(
    "http://www.eclipsezone.com/files/jsig/bundles/HelloWorld.jar"); 
    bundle.start(); 
} 

編輯:Maven的

似乎https://groups.google.com/group/spring-osgi/web/maven-url-handler?pli=1包含一個OSGi URL處理器服務,可以採取以下格式和負載束的URLS從它們(MVN://回購/ bundle_path)

+0

我已經得到了大部分,並考慮過從http url加載 - 你碰巧知道如何從maven加載包? – javamonkey79 2011-01-12 21:30:59

+0

@ javamonkey79我從未使用過maven。但是,https://groups.google.com/group/spring-osgi/web/maven-url-handler?pli=1看起來有保證 – KitsuneYMG 2011-01-12 21:32:55

5

此線程可能是有點陳舊,但無論如何...

大同有行家網址很好的支持,它甚至有一個包裹URL處理程序允許您非OSGi的罐子動態轉換成漂亮整潔的捆綁。

http://wiki.ops4j.org/display/paxurl/Mvn+Protocol

<dependency> 
     <groupId>org.ops4j.pax.url</groupId> 
     <artifactId>pax-url-wrap</artifactId> 
     <version>1.2.5</version>   
    </dependency> 
    <dependency> 
     <groupId>org.ops4j.pax.url</groupId> 
     <artifactId>pax-url-mvn</artifactId> 
     <version>1.2.5</version>   
    </dependency> 

該命令將被:

install -s mvn:groupId:artifactId:version:classifier 

注:雞 - 蛋的場景 - 你必須使用一個文件來安裝這些:第一URL處理器或把它們放到一個自動部署目錄。

卡拉夫這一切都建立在它的發行版,所以也許看看卡拉夫發射源?

第二注:部署快照通過附加@snapshots到回購URL啓用,配置是通過ConfigAdmin

管理在管理你所有的POM定義的依賴方面看看Karaf特點 - 有一個插件,將使產生,然後可以用於部署整個應用程序一個功能的XML文件: http://karaf.apache.org/manual/2.1.99-SNAPSHOT/developers-guide/features-maven-plugin.html

進一步此XML製品可以被部署到您的OBR,這樣你就可以採取香草費利克斯/春分/ Karaf設置,添加mvn url處理程序並配置您公司的mvn repo,然後配置整個應用程序=)