可以访问国外网站的dns,温州企业网站建设公司,广州产品网站设计,广州企业网站建设多少钱服务osgi在本文中#xff0c;我们将使用OSGi开发一个简单的Hello World应用程序。 我们将使用Felix作为OSGi容器 。 在下一篇文章中#xff0c;我们将继续使用该应用程序#xff0c;并使用Spring Dynamic Modules对其进行改进。 为了使开发有趣#xff0c;我们将创建两个捆… 服务osgi 在本文中我们将使用OSGi开发一个简单的Hello World应用程序。 我们将使用Felix作为OSGi容器 。 在下一篇文章中我们将继续使用该应用程序并使用Spring Dynamic Modules对其进行改进。 为了使开发有趣我们将创建两个捆绑包 提供HelloWorld服务的捆绑包 消耗该服务以定期间隔打个招呼的捆绑软件。 因此让我们从第一个捆绑包开始。 我们首先需要的是一个非常简单的服务在控制台中提供简单的打印 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 !);}
} 我们再简单不过了。 然后我们需要使用激活器导出服务 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不确定的人可以做一些解释。 当模块启动时将调用start方法而在模块停止时将调用stop方法。 在start方法中我们使用接口名称作为导出服务的名称在包上下文中注册我们的服务。 第三个参数null表示我们不为此服务提供任何配置。 在stop方法中我们只是取消注册服务。 现在我们的第一个捆绑包已准备就绪。 我们可以建立它。 为此我们将使用Maven和maven-bundle-plugin直接构建OSGi Bundle。 这是项目的pom.xml文件。 ?xml version1.0 encodingUTF-8?
project xmlnshttp://maven.apache.org/POM/4.0.0xmlns:xsihttp://www.w3.org/2001/XMLSchema-instancexsi:schemaLocationhttp://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsdmodelVersion4.0.0/modelVersiongroupIdOSGiDmHelloWorldProvider/groupIdartifactIdOSGiDmHelloWorldProvider/artifactIdversion1.0/versiondependenciesdependencygroupIdorg.apache.felix/groupIdartifactIdorg.osgi.core/artifactIdversion1.4.0/version/dependency/dependenciesbuildpluginsplugingroupIdorg.apache.maven.plugins/groupIdartifactIdmaven-compiler-plugin/artifactIdversion2.0.2/versionconfigurationsource1.6/sourcetarget1.6/target/configuration/pluginplugingroupIdorg.apache.felix/groupIdartifactIdmaven-bundle-plugin/artifactIdextensionstrue/extensionsconfigurationinstructionsBundle-SymbolicNameOSGiDmHelloWorldProvider/Bundle-SymbolicNameExport-Packagecom.bw.osgi.provider.able/Export-PackageBundle-Activatorcom.bw.osgi.provider.ProviderActivator/Bundle-ActivatorBundle-VendorBaptiste Wicht/Bundle-Vendor/instructions/configuration/plugin/plugins/build
/project 然后使用mvn install进行构建。 我们将在一个名为osgi的文件夹中工作因此我们会将这个新捆绑包复制到osgi文件夹中。 我们已经可以在OSGi容器中对其进行测试。 如果您还没有Felix请在这里下载。 您必须选择“ Felix分布”。 然后将其解压缩到我们之前创建的osgi文件夹中。 现在您必须具有以下文件夹结构 osgi- felix- OSGiDmHelloWorldProvider-1.0.jar 这样我们就可以进入felix文件夹并启动Felix wichtounetLinux-Desktop:~/Desktop/osgi/felix$ java -jar bin/felix.jar
_______________
Welcome to Apache Felix Gogog! 并安装我们的捆绑包 g! install file:../OSGiDmHelloWorldProvider-1.0.jar
Bundle ID: 5 该安装已正确安装我们可以尝试启动它并查看其状态 g! start 5
g! bundle 5
Location file:../OSGiDmHelloWorldProvider-1.0.jar
State 32
Version 1.0.0
LastModified 1279124741320
Headers [ToolBnd-0.0.357, Bundle-Activatorcom.bw.osgi.provider.ProviderActivator, Export-Packagecom.bw.osgi.provider.able, Build-Jdk1.6.0_20, Bundle-Version1.0.0, Created-ByApache Maven Bundle Plugin, Bundle-ManifestVersion2, Manifest-Version1.0, Bundle-VendorBaptiste Wicht, Bnd-LastModified1279124686551, Bundle-NameUnnamed - OSGiDmHelloWorldProvider:OSGiDmHelloWorldProvider:bundle:1.0, Built-Bywichtounet, Bundle-SymbolicNameOSGiDmHelloWorldProvider, Import-Packagecom.bw.osgi.provider.able,org.osgi.framework;version1.5]
BundleContext org.apache.felix.framework.BundleContextImpl2353f67e
BundleId 5
SymbolicName OSGiDmHelloWorldProvider
RegisteredServices [HelloWorldService]
ServicesInUse null 一切都很好。 我们的服务注册良好 现在我们将尝试在第二个捆绑包中使用此服务。 我们的消费者类别将非常简单 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();}
} 现在我们必须创建激活器以获取服务然后将其提供给消费者。 这将使使用类似这样的东西 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();}
} 我们使用类的名称从捆绑软件上下文中获得服务引用。 之后我们从包上下文获取服务实例。 我们还创建了一个小的pom.xml文件来构建捆绑包 ?xml version1.0 encodingUTF-8?
project xmlnshttp://maven.apache.org/POM/4.0.0xmlns:xsihttp://www.w3.org/2001/XMLSchema-instancexsi:schemaLocationhttp://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsdmodelVersion4.0.0/modelVersiongroupIdOSGiDmHelloWorldConsumer/groupIdartifactIdOSGiDmHelloWorldConsumer/artifactIdversion1.0/versionpackagingbundle/packagingdependenciesdependencygroupIdorg.apache.felix/groupIdartifactIdorg.osgi.core/artifactIdversion1.0.0/version/dependencydependencygroupIdOSGiDmHelloWorldProvider/groupIdartifactIdOSGiDmHelloWorldProvider/artifactIdversion1.0/version/dependency/dependenciesbuildpluginsplugingroupIdorg.apache.maven.plugins/groupIdartifactIdmaven-compiler-plugin/artifactIdversion2.0.2/versionconfigurationsource1.6/sourcetarget1.6/target/configuration/pluginplugingroupIdorg.apache.felix/groupIdartifactIdmaven-bundle-plugin/artifactIdextensionstrue/extensionsconfigurationinstructionsBundle-SymbolicNameOSGiDmHelloWorldConsumer/Bundle-SymbolicNameBundle-Activatorcom.bw.osgi.consumer.HelloWorldActivator/Bundle-ActivatorBundle-VendorBaptiste Wicht/Bundle-Vendor/instructions/configuration/plugin/plugins/build
/project 然后我们使用mvn install创建捆绑包并将其安装在容器中 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 至此我们已经使用OSGi创建了第一个应用程序。 使用该技术您可以构建真正独立的模块。 在有关OSGi的下一篇文章中我们将看到如何使用Spring来简化OSGi的开发并将精力集中在应用程序而非OSGi上。 这两个捆绑包的来源可在此处获取 OSGiDmHelloWorldProvider来源 OSGiDmHelloWorldConsumer 参考 OSGi –简单的Hello World由JCG合作伙伴 Baptiste Wicht在Blog“ Baptiste Wicht”提供服务 。 相关文章 OSGi将Maven与Equinox结合使用 真正的模块化Web应用程序为什么没有开发标准 Java模块化方法–模块模块模块 翻译自: https://www.javacodegeeks.com/2011/11/osgi-simple-hello-world-with-services.html服务osgi