• 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

    參考演示样例






  • 相关阅读:
    博客
    参考博客
    KMP
    串匹配
    简单数论
    B
    各种常用函数的模板以及自己的测试数据
    header
    memcached的图形界面监控
    缓存策略
  • 原文地址:https://www.cnblogs.com/mengfanrong/p/5148664.html
Copyright © 2020-2023  润新知