SlideShare una empresa de Scribd logo
1 de 28
OSG i 動態服務模組 開發實作 詹景逸 Ching Yi, Chan. aka qrtt1 [email_address]
Agenda ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
開發環境準備 ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
開發環境準備 ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
開發環境準備 ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Felix  基本操作 ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
PART 1 Everything  is  Bundle
安裝  Bundle ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],install  http:// apache.ntu.edu.tw/felix/org.apache.felix.fileinstall-0.9.0.jar install  file:// /c:/temp /org.apache.felix.fileinstall-0.9.0.jar install  file:// /home/qrtt1/temp/ org.apache.felix.fileinstall-0.9.0.jar
建立  Bundle ,[object Object],[object Object],[object Object],mvn archetype:create -Dversion=1.0.0 -DgroupId=javatwo2009 -DartifactId=hello.bundle mvn archetype:create ^ -Dversion=1.0.0 ^ -DgroupId=javatwo2009 ^ -DartifactId=hello.bundle
Maven  專案導覽 ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
使用  Maven-Bundle-Plugin (1) ,[object Object],[object Object],[object Object],[object Object],<dependency> <groupId>org.apache.felix</groupId> <artifactId>org.osgi.core</artifactId> <version>1.0.0</version> </dependency>
使用  Maven-Bundle-Plugin (2) <build> <plugins> <plugin> <groupId>org.apache.felix</groupId> <artifactId>maven-bundle-plugin</artifactId> <extensions>true</extensions> <configuration> <instructions> <Export-Package>${pom.groupId}</Export-Package> <Bundle-SymbolicName>${pom.artifactId}</Bundle-SymbolicName> <Bundle-Activator>${pom.groupId}.Activator</Bundle-Activator> </instructions> </configuration> </plugin> </plugins> </build> Manifest-Version: 1.0 Export-Package: javatwo2009;uses:=&quot;org.osgi.framework&quot; Built-By: Administrator Tool: Bnd-0.0.308 Bundle-Name: hello.bundle Created-By: Apache Maven Bundle Plugin Bundle-Version: 1.0.0 Build-Jdk: 1.6.0_06 Bnd-LastModified: 1235833008625 Bundle-ManifestVersion: 2 Bundle-Activator: javatwo2009.Activator Import-Package: javatwo2009,org.osgi.framework;version=&quot;1.3&quot; Bundle-SymbolicName: hello.bundle
建立  Bundle Activator package  javatwo2009; import  org.osgi.framework.BundleActivator; import  org.osgi.framework.BundleContext; /** * Hello world! */ public   class  Activator  implements  BundleActivator { public   void  start(BundleContext context)  throws  Exception { System. out .println(&quot;Hey!&quot;); } public   void  stop(BundleContext context)  throws  Exception { System. out .println(&quot;Bye!&quot;); } } #12 .. #13
編譯與安裝  bundle ,[object Object],[object Object],[object Object],[object Object]
OSGi  怎麼跑? System  Bundle B B B PID  永遠為 0 JVM OSGi Framework Module Life Cycle Service
OSGi  怎麼跑? Installed Resolving & Loading Classes Resolved JVM OSGi Framework System  Bundle M O D U L E Export-Package: org.osgi.framework, org.osgi.framework.hooks.service, org.osgi.service.packageadmin, org.osgi.service.startlevel, org.osgi.service.url, org.osgi.util.tracker
OSGi  怎麼跑? Resolved public   class  Activator  implements  BundleActivator { public   void  start(BundleContext context)  throws  Exception { System. out .println(&quot;Hey!&quot;); } public   void  stop(BundleContext context)  throws  Exception { System. out .println(&quot;Bye!&quot;); } } JVM OSGi Framework System  Bundle L I F E C Y C L E Starting Active Stopping Activator.stop() Activator.start()
PART 2 Service  is  Everything
OSGi Service  在哪裡? JVM OSGi Framework SERVICE REGISTRY Bundle Activator Bundle Activator Bundle Activator publish publish publish find & bind find & bind find & bind unpublish unpublish unpublish
服務與實作角色  (1) ,[object Object],Export-Package Bundle Activator
服務與實作角色  (2) ,[object Object],Import-Package Bundle Activator
服務與實作角色  (3) ,[object Object],Import-Package ServiceRegistration registration =  bundleContext. registerService (  ServiceA .class.getName(),  new  ConcreteServiceA() , prop); Bundle Activator
服務與實作角色  (4) ,[object Object],Import-Package ServiceReference ref = bundleContext . getServiceReference ( ServiceA .class.getName()); ServiceA service =  (ServiceA) bundleContext.getService(ref); Bundle Activator
實作  TinyURL Command(1) ,[object Object],Apache Felix Shell Service Activator Apache Felix Shell TUI Activator Tinyurl Command Activator
實作  TinyURL Command(2) org.apache.felix.shell Export-Package Import-Package //  發佈  Service bundleContext.registerService( org.apache.felix.shell. Command .class.getName(), new  TinyURLCommand (), null); Apache Felix Shell Service Activator Apache Felix Shell TUI Activator Tinyurl Command Activator 實作  Service
實作  TinyURL Command(3) publish publish 追蹤  Command  服務 加入新增的  Command  服務 使用  ShellService  擁有的  Command Apache Felix Shell Service Activator Apache Felix Shell TUI Activator Tinyurl Command Activator
動手做看看 ,[object Object],[object Object],[object Object]
詹景逸 Ching Yi, Chan. aka qrtt1 [email_address] Thank You

Más contenido relacionado

La actualidad más candente

Docker 基礎介紹與實戰
Docker 基礎介紹與實戰Docker 基礎介紹與實戰
Docker 基礎介紹與實戰Bo-Yi Wu
 
微软Bot framework简介
微软Bot framework简介微软Bot framework简介
微软Bot framework简介Zhichao Liang
 
AWS EC2 for beginner
AWS EC2 for beginnerAWS EC2 for beginner
AWS EC2 for beginnerazole Lai
 
Ruby on Rails 開發環境建置 for Ubuntu
Ruby on Rails 開發環境建置 for UbuntuRuby on Rails 開發環境建置 for Ubuntu
Ruby on Rails 開發環境建置 for UbuntuMarsZ Chen
 
Ruby on Rails 開發環境建置 for Mac
Ruby on Rails 開發環境建置 for MacRuby on Rails 開發環境建置 for Mac
Ruby on Rails 開發環境建置 for MacMarsZ Chen
 
持续集成在Flex_as3应用程序中的应用v4
持续集成在Flex_as3应用程序中的应用v4持续集成在Flex_as3应用程序中的应用v4
持续集成在Flex_as3应用程序中的应用v4jexchan
 
Asp.net 5 新功能與變革
Asp.net 5 新功能與變革Asp.net 5 新功能與變革
Asp.net 5 新功能與變革Gelis Wu
 
Google雲端備份與虛擬伺服器建置工作坊
Google雲端備份與虛擬伺服器建置工作坊Google雲端備份與虛擬伺服器建置工作坊
Google雲端備份與虛擬伺服器建置工作坊Chung-Yi Huang
 
Docker 淺入淺出
Docker 淺入淺出Docker 淺入淺出
Docker 淺入淺出Miles Chou
 
現代 IT 人一定要知道的 Ansible 自動化組態技巧 Ⅱ - Roles & Windows
現代 IT 人一定要知道的 Ansible 自動化組態技巧 Ⅱ - Roles & Windows現代 IT 人一定要知道的 Ansible 自動化組態技巧 Ⅱ - Roles & Windows
現代 IT 人一定要知道的 Ansible 自動化組態技巧 Ⅱ - Roles & WindowsChu-Siang Lai
 
Mysql展示功能与源码对应
Mysql展示功能与源码对应Mysql展示功能与源码对应
Mysql展示功能与源码对应zhaolinjnu
 
开源Pass平台flynn功能简介
开源Pass平台flynn功能简介开源Pass平台flynn功能简介
开源Pass平台flynn功能简介Zhichao Liang
 
GNU Build System
GNU Build SystemGNU Build System
GNU Build Systemimacat .
 
Continuous Delivery - Opening
Continuous Delivery - OpeningContinuous Delivery - Opening
Continuous Delivery - OpeningRick Hwang
 
中纺科技安装实施文档
中纺科技安装实施文档中纺科技安装实施文档
中纺科技安装实施文档liangsuilong
 
Lucene 全文检索实践
Lucene 全文检索实践Lucene 全文检索实践
Lucene 全文检索实践yiditushe
 
高性能Web服务器Nginx及相关新技术的应用实践
高性能Web服务器Nginx及相关新技术的应用实践高性能Web服务器Nginx及相关新技术的应用实践
高性能Web服务器Nginx及相关新技术的应用实践Frank Cai
 
高性能Web服务器Nginx及相关新技术的应用实践
高性能Web服务器Nginx及相关新技术的应用实践高性能Web服务器Nginx及相关新技术的应用实践
高性能Web服务器Nginx及相关新技术的应用实践rewinx
 
Mysql proxy cluster
Mysql proxy clusterMysql proxy cluster
Mysql proxy clusterYiwei Ma
 

La actualidad más candente (20)

Docker 基礎介紹與實戰
Docker 基礎介紹與實戰Docker 基礎介紹與實戰
Docker 基礎介紹與實戰
 
微软Bot framework简介
微软Bot framework简介微软Bot framework简介
微软Bot framework简介
 
AWS EC2 for beginner
AWS EC2 for beginnerAWS EC2 for beginner
AWS EC2 for beginner
 
Ruby on Rails 開發環境建置 for Ubuntu
Ruby on Rails 開發環境建置 for UbuntuRuby on Rails 開發環境建置 for Ubuntu
Ruby on Rails 開發環境建置 for Ubuntu
 
Ruby on Rails 開發環境建置 for Mac
Ruby on Rails 開發環境建置 for MacRuby on Rails 開發環境建置 for Mac
Ruby on Rails 開發環境建置 for Mac
 
持续集成在Flex_as3应用程序中的应用v4
持续集成在Flex_as3应用程序中的应用v4持续集成在Flex_as3应用程序中的应用v4
持续集成在Flex_as3应用程序中的应用v4
 
Asp.net 5 新功能與變革
Asp.net 5 新功能與變革Asp.net 5 新功能與變革
Asp.net 5 新功能與變革
 
Google雲端備份與虛擬伺服器建置工作坊
Google雲端備份與虛擬伺服器建置工作坊Google雲端備份與虛擬伺服器建置工作坊
Google雲端備份與虛擬伺服器建置工作坊
 
Docker 淺入淺出
Docker 淺入淺出Docker 淺入淺出
Docker 淺入淺出
 
現代 IT 人一定要知道的 Ansible 自動化組態技巧 Ⅱ - Roles & Windows
現代 IT 人一定要知道的 Ansible 自動化組態技巧 Ⅱ - Roles & Windows現代 IT 人一定要知道的 Ansible 自動化組態技巧 Ⅱ - Roles & Windows
現代 IT 人一定要知道的 Ansible 自動化組態技巧 Ⅱ - Roles & Windows
 
Mysql展示功能与源码对应
Mysql展示功能与源码对应Mysql展示功能与源码对应
Mysql展示功能与源码对应
 
开源Pass平台flynn功能简介
开源Pass平台flynn功能简介开源Pass平台flynn功能简介
开源Pass平台flynn功能简介
 
GNU Build System
GNU Build SystemGNU Build System
GNU Build System
 
Continuous Delivery - Opening
Continuous Delivery - OpeningContinuous Delivery - Opening
Continuous Delivery - Opening
 
中纺科技安装实施文档
中纺科技安装实施文档中纺科技安装实施文档
中纺科技安装实施文档
 
Lucene 全文检索实践
Lucene 全文检索实践Lucene 全文检索实践
Lucene 全文检索实践
 
高性能Web服务器Nginx及相关新技术的应用实践
高性能Web服务器Nginx及相关新技术的应用实践高性能Web服务器Nginx及相关新技术的应用实践
高性能Web服务器Nginx及相关新技术的应用实践
 
高性能Web服务器Nginx及相关新技术的应用实践
高性能Web服务器Nginx及相关新技术的应用实践高性能Web服务器Nginx及相关新技术的应用实践
高性能Web服务器Nginx及相关新技术的应用实践
 
Mysql proxy cluster
Mysql proxy clusterMysql proxy cluster
Mysql proxy cluster
 
Docker應用
Docker應用Docker應用
Docker應用
 

Destacado

Java Build Tool course in 2011
Java Build Tool course in 2011Java Build Tool course in 2011
Java Build Tool course in 2011Ching Yi Chan
 
using Queue Server for batch processing
using Queue Server for batch processingusing Queue Server for batch processing
using Queue Server for batch processingChing Yi Chan
 
JCConf2015: groovy to gradle
 JCConf2015: groovy to gradle JCConf2015: groovy to gradle
JCConf2015: groovy to gradleChing Yi Chan
 
Android NDK (JUG@TW 2011, Oct.)
Android NDK (JUG@TW 2011, Oct.)Android NDK (JUG@TW 2011, Oct.)
Android NDK (JUG@TW 2011, Oct.)Ching Yi Chan
 
idea: talk about the Active Cache
idea: talk about the Active Cacheidea: talk about the Active Cache
idea: talk about the Active CacheChing Yi Chan
 
Java web programming
Java web programmingJava web programming
Java web programmingChing Yi Chan
 
JCConf2016 Jenkins Pipeline
JCConf2016 Jenkins PipelineJCConf2016 Jenkins Pipeline
JCConf2016 Jenkins PipelineChing Yi Chan
 
The journey of Moving from AWS ELK to GCP Data Pipeline
The journey of Moving from AWS ELK to GCP Data PipelineThe journey of Moving from AWS ELK to GCP Data Pipeline
The journey of Moving from AWS ELK to GCP Data PipelineRandy Huang
 

Destacado (12)

Java Build Tool course in 2011
Java Build Tool course in 2011Java Build Tool course in 2011
Java Build Tool course in 2011
 
using Queue Server for batch processing
using Queue Server for batch processingusing Queue Server for batch processing
using Queue Server for batch processing
 
Linking error
Linking errorLinking error
Linking error
 
Talk about fabric
Talk about fabricTalk about fabric
Talk about fabric
 
JCConf2015: groovy to gradle
 JCConf2015: groovy to gradle JCConf2015: groovy to gradle
JCConf2015: groovy to gradle
 
Unit Testing
Unit TestingUnit Testing
Unit Testing
 
Android NDK (JUG@TW 2011, Oct.)
Android NDK (JUG@TW 2011, Oct.)Android NDK (JUG@TW 2011, Oct.)
Android NDK (JUG@TW 2011, Oct.)
 
idea: talk about the Active Cache
idea: talk about the Active Cacheidea: talk about the Active Cache
idea: talk about the Active Cache
 
Java web programming
Java web programmingJava web programming
Java web programming
 
JCConf2016 Jenkins Pipeline
JCConf2016 Jenkins PipelineJCConf2016 Jenkins Pipeline
JCConf2016 Jenkins Pipeline
 
老舊web上雲端
老舊web上雲端老舊web上雲端
老舊web上雲端
 
The journey of Moving from AWS ELK to GCP Data Pipeline
The journey of Moving from AWS ELK to GCP Data PipelineThe journey of Moving from AWS ELK to GCP Data Pipeline
The journey of Moving from AWS ELK to GCP Data Pipeline
 

Similar a OSGi Small Lab

基于Ivy ant的java构建初探
基于Ivy ant的java构建初探基于Ivy ant的java构建初探
基于Ivy ant的java构建初探Anson Yang
 
Spring4.x + hibernate4.x_配置详解
Spring4.x + hibernate4.x_配置详解Spring4.x + hibernate4.x_配置详解
Spring4.x + hibernate4.x_配置详解zany_hui
 
Maven私服安装,Maven使用教程
Maven私服安装,Maven使用教程Maven私服安装,Maven使用教程
Maven私服安装,Maven使用教程kangzj
 
Python包管理工具介绍
Python包管理工具介绍Python包管理工具介绍
Python包管理工具介绍Young King
 
使用Rpm&yum进行基础软件管理
使用Rpm&yum进行基础软件管理使用Rpm&yum进行基础软件管理
使用Rpm&yum进行基础软件管理Jason Zheng
 
使用Rpm&yum进行基础软件管理
使用Rpm&yum进行基础软件管理使用Rpm&yum进行基础软件管理
使用Rpm&yum进行基础软件管理haiyuan ning
 
六步教你学会简单Rmi
六步教你学会简单Rmi六步教你学会简单Rmi
六步教你学会简单Rmiyiditushe
 
Centos下安装apache + subversion
Centos下安装apache + subversionCentos下安装apache + subversion
Centos下安装apache + subversionYiwei Ma
 
自由軟體鑄造場_20111023_Subversion版本控制系統之操作_曾義峰(ant)
自由軟體鑄造場_20111023_Subversion版本控制系統之操作_曾義峰(ant)自由軟體鑄造場_20111023_Subversion版本控制系統之操作_曾義峰(ant)
自由軟體鑄造場_20111023_Subversion版本控制系統之操作_曾義峰(ant)OpenFoundry
 
Honey's Data Dinner#7 webpack 包達人(入門)
Honey's Data Dinner#7 webpack 包達人(入門)Honey's Data Dinner#7 webpack 包達人(入門)
Honey's Data Dinner#7 webpack 包達人(入門)beehivedata
 
Maven初级培训
Maven初级培训Maven初级培训
Maven初级培训Cody Zhang
 
项目自动化实施
项目自动化实施项目自动化实施
项目自动化实施dhlzj
 
啟動 Laravel 與環境設定
啟動 Laravel 與環境設定啟動 Laravel 與環境設定
啟動 Laravel 與環境設定Shengyou Fan
 
Puppet安装总结
Puppet安装总结Puppet安装总结
Puppet安装总结Yiwei Ma
 
在雲端上啜飲爪哇
在雲端上啜飲爪哇在雲端上啜飲爪哇
在雲端上啜飲爪哇建興 王
 
Javascript autoload
Javascript autoloadJavascript autoload
Javascript autoloadjay li
 
使用Nginx轻松实现开源负载均衡
使用Nginx轻松实现开源负载均衡使用Nginx轻松实现开源负载均衡
使用Nginx轻松实现开源负载均衡cachowu
 
Hadoop平台搭建
Hadoop平台搭建Hadoop平台搭建
Hadoop平台搭建Liyang Tang
 

Similar a OSGi Small Lab (20)

基于Ivy ant的java构建初探
基于Ivy ant的java构建初探基于Ivy ant的java构建初探
基于Ivy ant的java构建初探
 
Spring4.x + hibernate4.x_配置详解
Spring4.x + hibernate4.x_配置详解Spring4.x + hibernate4.x_配置详解
Spring4.x + hibernate4.x_配置详解
 
Maven私服安装,Maven使用教程
Maven私服安装,Maven使用教程Maven私服安装,Maven使用教程
Maven私服安装,Maven使用教程
 
Python包管理工具介绍
Python包管理工具介绍Python包管理工具介绍
Python包管理工具介绍
 
使用Rpm&yum进行基础软件管理
使用Rpm&yum进行基础软件管理使用Rpm&yum进行基础软件管理
使用Rpm&yum进行基础软件管理
 
使用Rpm&yum进行基础软件管理
使用Rpm&yum进行基础软件管理使用Rpm&yum进行基础软件管理
使用Rpm&yum进行基础软件管理
 
六步教你学会简单Rmi
六步教你学会简单Rmi六步教你学会简单Rmi
六步教你学会简单Rmi
 
Centos下安装apache + subversion
Centos下安装apache + subversionCentos下安装apache + subversion
Centos下安装apache + subversion
 
运维自动化
运维自动化运维自动化
运维自动化
 
自由軟體鑄造場_20111023_Subversion版本控制系統之操作_曾義峰(ant)
自由軟體鑄造場_20111023_Subversion版本控制系統之操作_曾義峰(ant)自由軟體鑄造場_20111023_Subversion版本控制系統之操作_曾義峰(ant)
自由軟體鑄造場_20111023_Subversion版本控制系統之操作_曾義峰(ant)
 
Honey's Data Dinner#7 webpack 包達人(入門)
Honey's Data Dinner#7 webpack 包達人(入門)Honey's Data Dinner#7 webpack 包達人(入門)
Honey's Data Dinner#7 webpack 包達人(入門)
 
Maven初级培训
Maven初级培训Maven初级培训
Maven初级培训
 
项目自动化实施
项目自动化实施项目自动化实施
项目自动化实施
 
啟動 Laravel 與環境設定
啟動 Laravel 與環境設定啟動 Laravel 與環境設定
啟動 Laravel 與環境設定
 
Puppet安装总结
Puppet安装总结Puppet安装总结
Puppet安装总结
 
Docker
DockerDocker
Docker
 
在雲端上啜飲爪哇
在雲端上啜飲爪哇在雲端上啜飲爪哇
在雲端上啜飲爪哇
 
Javascript autoload
Javascript autoloadJavascript autoload
Javascript autoload
 
使用Nginx轻松实现开源负载均衡
使用Nginx轻松实现开源负载均衡使用Nginx轻松实现开源负载均衡
使用Nginx轻松实现开源负载均衡
 
Hadoop平台搭建
Hadoop平台搭建Hadoop平台搭建
Hadoop平台搭建
 

Último

1.🎉“入侵大学入学考试中心修改成绩”来袭!ALEVEL替考大揭秘,轻松搞定考试成绩! 💥你还在为无法进入大学招生系统而烦恼吗?想知道如何通过技术手段更改...
1.🎉“入侵大学入学考试中心修改成绩”来袭!ALEVEL替考大揭秘,轻松搞定考试成绩! 💥你还在为无法进入大学招生系统而烦恼吗?想知道如何通过技术手段更改...1.🎉“入侵大学入学考试中心修改成绩”来袭!ALEVEL替考大揭秘,轻松搞定考试成绩! 💥你还在为无法进入大学招生系统而烦恼吗?想知道如何通过技术手段更改...
1.🎉“入侵大学入学考试中心修改成绩”来袭!ALEVEL替考大揭秘,轻松搞定考试成绩! 💥你还在为无法进入大学招生系统而烦恼吗?想知道如何通过技术手段更改...黑客 接单【TG/微信qoqoqdqd】
 
哪里可以购买日本筑波学院大学学位记/做个假的文凭可认证吗/仿制日本大学毕业证/意大利语CELI证书定制
哪里可以购买日本筑波学院大学学位记/做个假的文凭可认证吗/仿制日本大学毕业证/意大利语CELI证书定制哪里可以购买日本筑波学院大学学位记/做个假的文凭可认证吗/仿制日本大学毕业证/意大利语CELI证书定制
哪里可以购买日本筑波学院大学学位记/做个假的文凭可认证吗/仿制日本大学毕业证/意大利语CELI证书定制jakepaige317
 
EDUC6506_ClassPresentation_TC330277 (1).pptx
EDUC6506_ClassPresentation_TC330277 (1).pptxEDUC6506_ClassPresentation_TC330277 (1).pptx
EDUC6506_ClassPresentation_TC330277 (1).pptxmekosin001123
 
泽兰应用科学大学毕业证制作/定制国外大学录取通知书/购买一个假的建国科技大学硕士学位证书
泽兰应用科学大学毕业证制作/定制国外大学录取通知书/购买一个假的建国科技大学硕士学位证书泽兰应用科学大学毕业证制作/定制国外大学录取通知书/购买一个假的建国科技大学硕士学位证书
泽兰应用科学大学毕业证制作/定制国外大学录取通知书/购买一个假的建国科技大学硕士学位证书jakepaige317
 
educ6506presentationtc3302771-240427173057-06a46de5.pptx
educ6506presentationtc3302771-240427173057-06a46de5.pptxeduc6506presentationtc3302771-240427173057-06a46de5.pptx
educ6506presentationtc3302771-240427173057-06a46de5.pptxmekosin001123
 
EDUC6506(001)_ClassPresentation_2_TC330277 (1).pptx
EDUC6506(001)_ClassPresentation_2_TC330277 (1).pptxEDUC6506(001)_ClassPresentation_2_TC330277 (1).pptx
EDUC6506(001)_ClassPresentation_2_TC330277 (1).pptxmekosin001123
 

Último (6)

1.🎉“入侵大学入学考试中心修改成绩”来袭!ALEVEL替考大揭秘,轻松搞定考试成绩! 💥你还在为无法进入大学招生系统而烦恼吗?想知道如何通过技术手段更改...
1.🎉“入侵大学入学考试中心修改成绩”来袭!ALEVEL替考大揭秘,轻松搞定考试成绩! 💥你还在为无法进入大学招生系统而烦恼吗?想知道如何通过技术手段更改...1.🎉“入侵大学入学考试中心修改成绩”来袭!ALEVEL替考大揭秘,轻松搞定考试成绩! 💥你还在为无法进入大学招生系统而烦恼吗?想知道如何通过技术手段更改...
1.🎉“入侵大学入学考试中心修改成绩”来袭!ALEVEL替考大揭秘,轻松搞定考试成绩! 💥你还在为无法进入大学招生系统而烦恼吗?想知道如何通过技术手段更改...
 
哪里可以购买日本筑波学院大学学位记/做个假的文凭可认证吗/仿制日本大学毕业证/意大利语CELI证书定制
哪里可以购买日本筑波学院大学学位记/做个假的文凭可认证吗/仿制日本大学毕业证/意大利语CELI证书定制哪里可以购买日本筑波学院大学学位记/做个假的文凭可认证吗/仿制日本大学毕业证/意大利语CELI证书定制
哪里可以购买日本筑波学院大学学位记/做个假的文凭可认证吗/仿制日本大学毕业证/意大利语CELI证书定制
 
EDUC6506_ClassPresentation_TC330277 (1).pptx
EDUC6506_ClassPresentation_TC330277 (1).pptxEDUC6506_ClassPresentation_TC330277 (1).pptx
EDUC6506_ClassPresentation_TC330277 (1).pptx
 
泽兰应用科学大学毕业证制作/定制国外大学录取通知书/购买一个假的建国科技大学硕士学位证书
泽兰应用科学大学毕业证制作/定制国外大学录取通知书/购买一个假的建国科技大学硕士学位证书泽兰应用科学大学毕业证制作/定制国外大学录取通知书/购买一个假的建国科技大学硕士学位证书
泽兰应用科学大学毕业证制作/定制国外大学录取通知书/购买一个假的建国科技大学硕士学位证书
 
educ6506presentationtc3302771-240427173057-06a46de5.pptx
educ6506presentationtc3302771-240427173057-06a46de5.pptxeduc6506presentationtc3302771-240427173057-06a46de5.pptx
educ6506presentationtc3302771-240427173057-06a46de5.pptx
 
EDUC6506(001)_ClassPresentation_2_TC330277 (1).pptx
EDUC6506(001)_ClassPresentation_2_TC330277 (1).pptxEDUC6506(001)_ClassPresentation_2_TC330277 (1).pptx
EDUC6506(001)_ClassPresentation_2_TC330277 (1).pptx
 

OSGi Small Lab

  • 1. OSG i 動態服務模組 開發實作 詹景逸 Ching Yi, Chan. aka qrtt1 [email_address]
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7. PART 1 Everything is Bundle
  • 8.
  • 9.
  • 10.
  • 11.
  • 12. 使用 Maven-Bundle-Plugin (2) <build> <plugins> <plugin> <groupId>org.apache.felix</groupId> <artifactId>maven-bundle-plugin</artifactId> <extensions>true</extensions> <configuration> <instructions> <Export-Package>${pom.groupId}</Export-Package> <Bundle-SymbolicName>${pom.artifactId}</Bundle-SymbolicName> <Bundle-Activator>${pom.groupId}.Activator</Bundle-Activator> </instructions> </configuration> </plugin> </plugins> </build> Manifest-Version: 1.0 Export-Package: javatwo2009;uses:=&quot;org.osgi.framework&quot; Built-By: Administrator Tool: Bnd-0.0.308 Bundle-Name: hello.bundle Created-By: Apache Maven Bundle Plugin Bundle-Version: 1.0.0 Build-Jdk: 1.6.0_06 Bnd-LastModified: 1235833008625 Bundle-ManifestVersion: 2 Bundle-Activator: javatwo2009.Activator Import-Package: javatwo2009,org.osgi.framework;version=&quot;1.3&quot; Bundle-SymbolicName: hello.bundle
  • 13. 建立 Bundle Activator package javatwo2009; import org.osgi.framework.BundleActivator; import org.osgi.framework.BundleContext; /** * Hello world! */ public class Activator implements BundleActivator { public void start(BundleContext context) throws Exception { System. out .println(&quot;Hey!&quot;); } public void stop(BundleContext context) throws Exception { System. out .println(&quot;Bye!&quot;); } } #12 .. #13
  • 14.
  • 15. OSGi 怎麼跑? System Bundle B B B PID 永遠為 0 JVM OSGi Framework Module Life Cycle Service
  • 16. OSGi 怎麼跑? Installed Resolving & Loading Classes Resolved JVM OSGi Framework System Bundle M O D U L E Export-Package: org.osgi.framework, org.osgi.framework.hooks.service, org.osgi.service.packageadmin, org.osgi.service.startlevel, org.osgi.service.url, org.osgi.util.tracker
  • 17. OSGi 怎麼跑? Resolved public class Activator implements BundleActivator { public void start(BundleContext context) throws Exception { System. out .println(&quot;Hey!&quot;); } public void stop(BundleContext context) throws Exception { System. out .println(&quot;Bye!&quot;); } } JVM OSGi Framework System Bundle L I F E C Y C L E Starting Active Stopping Activator.stop() Activator.start()
  • 18. PART 2 Service is Everything
  • 19. OSGi Service 在哪裡? JVM OSGi Framework SERVICE REGISTRY Bundle Activator Bundle Activator Bundle Activator publish publish publish find & bind find & bind find & bind unpublish unpublish unpublish
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25. 實作 TinyURL Command(2) org.apache.felix.shell Export-Package Import-Package // 發佈 Service bundleContext.registerService( org.apache.felix.shell. Command .class.getName(), new TinyURLCommand (), null); Apache Felix Shell Service Activator Apache Felix Shell TUI Activator Tinyurl Command Activator 實作 Service
  • 26. 實作 TinyURL Command(3) publish publish 追蹤 Command 服務 加入新增的 Command 服務 使用 ShellService 擁有的 Command Apache Felix Shell Service Activator Apache Felix Shell TUI Activator Tinyurl Command Activator
  • 27.
  • 28. 詹景逸 Ching Yi, Chan. aka qrtt1 [email_address] Thank You