osgi实战学习之路:3. osgi分层概念及相互合作demo
源码下载
分层:
modual:
主要作用于包级管理与共享代码
lifecycle:
主要作用于执行期间的模块管理与訪问osgi底层框架
service:
主要作用于多模块之间的相互通信
demo:
hello-provider/pom.xml
<?xml version="1.0"?> <project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <modelVersion>4.0.0</modelVersion> <parent> <groupId>com.demo</groupId> <artifactId>pom</artifactId> <version>0.0.1-SNAPSHOT</version> </parent> <artifactId>hello-provider</artifactId> <packaging>bundle</packaging> <name>hello-provider</name> <url>http://maven.apache.org</url> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> </properties> <dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> </dependency> <dependency> <groupId>org.osgi</groupId> <artifactId>org.osgi.core</artifactId> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.apache.felix</groupId> <artifactId>maven-bundle-plugin</artifactId> <configuration> <instructions> <Export-Package>org.hello.provider</Export-Package> <Import-Package>org.osgi.framework</Import-Package> <Bundle-Activator>org.hello.provider.impl.UserServiceActivator</Bundle-Activator> <Private-Package>org.hello.*</Private-Package> </instructions> </configuration> </plugin> </plugins> </build> </project>
hello-provider/BundleActivator:package org.hello.provider.impl; import org.hello.provider.IUserService; import org.osgi.framework.BundleActivator; import org.osgi.framework.BundleContext; public class UserServiceActivator implements BundleActivator { public void start(BundleContext context) throws Exception { System.out.println("registerService......"); context.registerService(IUserService.class.getName(), new UserService(), null); } public void stop(BundleContext context) throws Exception { } }
hello-client/pom.xml:
<?xml version="1.0"?> <project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <modelVersion>4.0.0</modelVersion> <parent> <groupId>com.demo</groupId> <artifactId>pom</artifactId> <version>0.0.1-SNAPSHOT</version> </parent> <artifactId>hello-client</artifactId> <packaging>bundle</packaging> <name>hello-client</name> <url>http://maven.apache.org</url> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> </properties> <dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> </dependency> <dependency> <groupId>org.osgi</groupId> <artifactId>org.osgi.core</artifactId> </dependency> <dependency> <groupId>com.demo</groupId> <artifactId>hello-provider</artifactId> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.apache.felix</groupId> <artifactId>maven-bundle-plugin</artifactId> <extensions>true</extensions> <configuration> <instructions> <Import-Package>org.hello.provider, org.osgi.framework </Import-Package> <Bundle-Activator>org.hello.client.Client</Bundle-Activator> <Private-Package>com.demo.hello.*</Private-Package> </instructions> </configuration> </plugin> </plugins> </build> </project>hello-client/BundleActivator:
package org.hello.client; import org.hello.provider.IUserService; import org.osgi.framework.BundleActivator; import org.osgi.framework.BundleContext; import org.osgi.framework.ServiceReference; public class Client implements BundleActivator { public void start(BundleContext context) throws Exception { ServiceReference reference=context.getServiceReference(IUserService.class.getName()); System.out.println(((IUserService)context.getService(reference)).add()); } public void stop(BundleContext context) throws Exception { } }
将bundle安装到本地仓库且部署到karaf(參考前一篇)
启动bundle
通过下面命令查看bundle的id
list
通过下面命令,启动bundle
bundle:start 78
參考演示样例