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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

服务osgi_OSGi –具有服务的简单Hello World

發(fā)布時間:2023/12/3 编程问答 43 豆豆
生活随笔 收集整理的這篇文章主要介紹了 服务osgi_OSGi –具有服务的简单Hello World 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

服務(wù)osgi

在本文中,我們將使用OSGi開發(fā)一個簡單的Hello World應(yīng)用程序。 我們將使用Felix作為OSGi容器 。 在下一篇文章中,我們將繼續(xù)使用該應(yīng)用程序,并使用Spring Dynamic Modules對其進行改進。

為了使開發(fā)有趣,我們將創(chuàng)建兩個捆綁包:

  • 提供HelloWorld服務(wù)的捆綁包
  • 消耗該服務(wù)以定期間隔打個招呼的捆綁軟件。

因此,讓我們從第一個捆綁包開始。 我們首先需要的是一個非常簡單的服務(wù),在控制臺中提供簡單的打印:

package com.bw.osgi.provider.able;public interface HelloWorldService {void hello(); }package com.bw.osgi.provider.impl;import com.bw.osgi.provider.able.HelloWorldService;public class HelloWorldServiceImpl implements HelloWorldService {@Overridepublic void hello(){System.out.println("Hello World !");} }

我們再簡單不過了。 然后,我們需要使用激活器導(dǎo)出服務(wù):

package com.bw.osgi.provider;import org.osgi.framework.BundleActivator; import org.osgi.framework.BundleContext; import org.osgi.framework.ServiceRegistration;import com.bw.osgi.provider.able.HelloWorldService; import com.bw.osgi.provider.impl.HelloWorldServiceImpl;public class ProviderActivator implements BundleActivator {private ServiceRegistration registration;@Overridepublic void start(BundleContext bundleContext) throws Exception {registration = bundleContext.registerService(HelloWorldService.class.getName(),new HelloWorldServiceImpl(),null);}@Overridepublic void stop(BundleContext bundleContext) throws Exception {registration.unregister();} }

這里有很多代碼。 對于那些對OSGi不確定的人,可以做一些解釋。 當(dāng)模塊啟動時將調(diào)用start方法,而在模塊停止時將調(diào)用stop方法。 在start方法中,我們使用接口名稱作為導(dǎo)出服務(wù)的名稱在包上下文中注冊我們的服務(wù)。 第三個參數(shù)null表示我們不為此服務(wù)提供任何配置。 在stop方法中,我們只是取消注冊服務(wù)。

現(xiàn)在,我們的第一個捆綁包已準(zhǔn)備就緒。 我們可以建立它。 為此,我們將使用Maven和maven-bundle-plugin直接構(gòu)建OSGi Bundle。 這是項目的pom.xml文件。

<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>OSGiDmHelloWorldProvider</groupId><artifactId>OSGiDmHelloWorldProvider</artifactId><version>1.0</version><dependencies><dependency><groupId>org.apache.felix</groupId><artifactId>org.osgi.core</artifactId><version>1.4.0</version></dependency></dependencies><build><plugins><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-compiler-plugin</artifactId><version>2.0.2</version><configuration><source>1.6</source><target>1.6</target></configuration></plugin><plugin><groupId>org.apache.felix</groupId><artifactId>maven-bundle-plugin</artifactId><extensions>true</extensions><configuration><instructions><Bundle-SymbolicName>OSGiDmHelloWorldProvider</Bundle-SymbolicName><Export-Package>com.bw.osgi.provider.able</Export-Package><Bundle-Activator>com.bw.osgi.provider.ProviderActivator</Bundle-Activator><Bundle-Vendor>Baptiste Wicht</Bundle-Vendor></instructions></configuration></plugin></plugins></build> </project>

然后,使用mvn install進行構(gòu)建。

我們將在一個名為osgi的文件夾中工作,因此我們會將這個新捆綁包復(fù)制到osgi文件夾中。

我們已經(jīng)可以在OSGi容器中對其進行測試。 如果您還沒有Felix,請在這里下載。 您必須選擇“ Felix分布”。

然后將其解壓縮到我們之前創(chuàng)建的osgi文件夾中。 現(xiàn)在,您必須具有以下文件夾結(jié)構(gòu):

osgi- felix- OSGiDmHelloWorldProvider-1.0.jar

這樣我們就可以進入felix文件夾并啟動Felix:

wichtounet@Linux-Desktop:~/Desktop/osgi/felix$ java -jar bin/felix.jar _______________ Welcome to Apache Felix Gogog!

并安裝我們的捆綁包:

g! install file:../OSGiDmHelloWorldProvider-1.0.jar Bundle ID: 5

該安裝已正確安裝,我們可以嘗試啟動它并查看其狀態(tài):

g! start 5 g! bundle 5 Location file:../OSGiDmHelloWorldProvider-1.0.jar State 32 Version 1.0.0 LastModified 1279124741320 Headers [Tool=Bnd-0.0.357, Bundle-Activator=com.bw.osgi.provider.ProviderActivator, Export-Package=com.bw.osgi.provider.able, Build-Jdk=1.6.0_20, Bundle-Version=1.0.0, Created-By=Apache Maven Bundle Plugin, Bundle-ManifestVersion=2, Manifest-Version=1.0, Bundle-Vendor=Baptiste Wicht, Bnd-LastModified=1279124686551, Bundle-Name=Unnamed - OSGiDmHelloWorldProvider:OSGiDmHelloWorldProvider:bundle:1.0, Built-By=wichtounet, Bundle-SymbolicName=OSGiDmHelloWorldProvider, Import-Package=com.bw.osgi.provider.able,org.osgi.framework;version="1.5"] BundleContext org.apache.felix.framework.BundleContextImpl@2353f67e BundleId 5 SymbolicName OSGiDmHelloWorldProvider RegisteredServices [HelloWorldService] ServicesInUse null

一切都很好。 我們的服務(wù)注冊良好

現(xiàn)在,我們將嘗試在第二個捆綁包中使用此服務(wù)。 我們的消費者類別將非常簡單:

package com.bw.osgi.consumer;import javax.swing.Timer;import java.awt.event.ActionEvent; import java.awt.event.ActionListener;import com.bw.osgi.provider.able.HelloWorldService;public class HelloWorldConsumer implements ActionListener {private final HelloWorldService service;private final Timer timer;public HelloWorldConsumer(HelloWorldService service) {super();this.service = service;timer = new Timer(1000, this);}public void startTimer(){timer.start();}public void stopTimer() {timer.stop();}@Overridepublic void actionPerformed(ActionEvent e) {service.hello();} }

現(xiàn)在,我們必須創(chuàng)建激活器以獲取服務(wù),然后將其提供給消費者。 這將使使用類似這樣的東西:

package com.bw.osgi.consumer;import org.osgi.framework.BundleActivator; import org.osgi.framework.BundleContext; import org.osgi.framework.ServiceReference;import com.bw.osgi.provider.able.HelloWorldService;public class HelloWorldActivator implements BundleActivator {private HelloWorldConsumer consumer;@Overridepublic void start(BundleContext bundleContext) throws Exception {ServiceReference reference = bundleContext.getServiceReference(HelloWorldService.class.getName());consumer = new HelloWorldConsumer((HelloWorldService) bundleContext.getService(reference));consumer.startTimer();}@Overridepublic void stop(BundleContext bundleContext) throws Exception {consumer.stopTimer();} }

我們使用類的名稱從捆綁軟件上下文中獲得服務(wù)引用。 之后,我們從包上下文獲取服務(wù)實例。

我們還創(chuàng)建了一個小的pom.xml文件來構(gòu)建捆綁包:

<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>OSGiDmHelloWorldConsumer</groupId><artifactId>OSGiDmHelloWorldConsumer</artifactId><version>1.0</version><packaging>bundle</packaging><dependencies><dependency><groupId>org.apache.felix</groupId><artifactId>org.osgi.core</artifactId><version>1.0.0</version></dependency><dependency><groupId>OSGiDmHelloWorldProvider</groupId><artifactId>OSGiDmHelloWorldProvider</artifactId><version>1.0</version></dependency></dependencies><build><plugins><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-compiler-plugin</artifactId><version>2.0.2</version><configuration><source>1.6</source><target>1.6</target></configuration></plugin><plugin><groupId>org.apache.felix</groupId><artifactId>maven-bundle-plugin</artifactId><extensions>true</extensions><configuration><instructions><Bundle-SymbolicName>OSGiDmHelloWorldConsumer</Bundle-SymbolicName><Bundle-Activator>com.bw.osgi.consumer.HelloWorldActivator</Bundle-Activator><Bundle-Vendor>Baptiste Wicht</Bundle-Vendor></instructions></configuration></plugin></plugins></build> </project>

然后,我們使用mvn install創(chuàng)建捆綁包,并將其安裝在容器中:

g! start 6 g! Hello World ! Hello World ! Hello World ! Hello World ! Hello World ! Hello World ! Hello World ! Hello World ! Hello World ! Hello World ! Hello World ! Hello World ! Hello World ! Hello World ! g! stop 6

至此,我們已經(jīng)使用OSGi創(chuàng)建了第一個應(yīng)用程序。 使用該技術(shù),您可以構(gòu)建真正獨立的模塊。

在有關(guān)OSGi的下一篇文章中,我們將看到如何使用Spring來簡化OSGi的開發(fā),并將精力集中在應(yīng)用程序而非OSGi上。

這兩個捆綁包的來源可在此處獲取:

  • OSGiDmHelloWorldProvider來源
  • OSGiDmHelloWorldConsumer

參考: OSGi –簡單的Hello World,由JCG合作伙伴 Baptiste Wicht在@Blog(“ Baptiste Wicht”)提供服務(wù) 。

相關(guān)文章 :
  • OSGi將Maven與Equinox結(jié)合使用
  • 真正的模塊化Web應(yīng)用程序:為什么沒有開發(fā)標(biāo)準(zhǔn)?
  • Java模塊化方法–模塊,模塊,模塊

翻譯自: https://www.javacodegeeks.com/2011/11/osgi-simple-hello-world-with-services.html

服務(wù)osgi

總結(jié)

以上是生活随笔為你收集整理的服务osgi_OSGi –具有服务的简单Hello World的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。