JBoss 系列九十六:JBoss MSC - 简介及一个简单演示样例
什么是?JBoss MSC?
JBoss MSC 即?JBoss Modular Service Container,是第三代 JBoss 產品 JBoss 7和WildFfly的內核,JBoss MSC 替換了之前的?JMX Kernel 和?MicroContainer,它主要特定能夠總結例如以下三點:
- 高并發容器(A?highly concurrent state machine)
- 無多相位,設計簡單(No multiple phases, much simpler)
- 不依賴 JMX 和 Java EE
JBoss MSC 它管理一系列?Service,WildFly中不論什么東西都是一個Service,如 EJB,JCA等,接下來我們說明說明是Service。
什么是?Service
JBoss 7/WildFfly 中?Service 的定義:一個可相互依賴的 POJO 類。
Service 的狀態例如以下圖所看到的:
JBoss MSC Service?的狀態比較簡單,和之前的JMX Kernel 和?MicroContainer相比,沒有多相位設計,如圖:
- Service 在 DOWN 狀態時能夠從容器中移除,從而進入 REMOVED 狀態
- Service 在 DOWN 狀態時能夠載入啟動,啟動成功進入 STARTING 狀態,啟動失敗進入 START_FAILED 狀態
- Service 在?START_FAILED 狀態時能夠嘗試重新啟動,嘗試失敗后能夠退回 DOWN 狀態
- Service 在?STARTING 狀態后進入 UP 狀態
- Service 在 UP 狀態時能夠停止進入 STOPPING 狀態
一個簡單演示樣例
本演示樣例簡介怎樣啟動?JBoss MSC 并載入一個?Service。
Service 實現
一個?Service 必須實現?org.jboss.msc.service.Service<T> 接口,例如以下?MyService 的實現例如以下:
package org.jboss.msc.quickstart;import org.jboss.msc.service.Service; import org.jboss.msc.service.ServiceName; import org.jboss.msc.service.StartContext; import org.jboss.msc.service.StartException; import org.jboss.msc.service.StopContext;public class MyService implements Service<MyServiceManager> {final static ServiceName SERVICE = ServiceName.of("service");private MyServiceManager manager;public MyService(MyServiceManager manager) {this.manager = manager;}public MyServiceManager getValue() throws IllegalStateException, IllegalArgumentException {return manager;}public void start(StartContext context) throws StartException {manager.initialize("init");}public void stop(StopContext context) {manager.cleanup();}}相關?MyServiceManager 實現例如以下:package org.jboss.msc.quickstart;public class MyServiceManager {private String description;public void initialize(String description) {this.description = description;}public void cleanup() {this.description = null;}public String getDescription() {return description;}}
啟動 JBoss MSC 載入?MyService
我們能夠在Main方法中啟動載入MyService,例如以下所看到的:
ServiceContainer serviceContainer = ServiceContainer.Factory.create();Service<MyServiceManager> service = new MyService(new MyServiceManager());ServiceBuilder<MyServiceManager> builder = serviceContainer.addService(MyService.SERVICE, service);ServiceController<MyServiceManager> controller = builder.install();思考
如上代碼啟動了JBoss MSC,JBoss 7啟動時也啟動了?JBoss MSC,然后逐一載入Service。執行如上代碼后,我們收集線程 Dump?分析啟動的線程,我們會發現例如以下線程:
"MSC service thread 1-1" prio=10 tid=0x6b904400 nid=0x14fa waiting on condition [0x6b55a000]java.lang.Thread.State: WAITING (parking) "MSC service thread 1-2" prio=10 tid=0x6b904400 nid=0x14fa waiting on condition [0x6b55a000]java.lang.Thread.State: WAITING (parking) "MSC service thread 1-3" prio=10 tid=0x6b904400 nid=0x14fa waiting on condition [0x6b55a000]java.lang.Thread.State: WAITING (parking) "MSC service thread 1-4" prio=10 tid=0x6b904400 nid=0x14fa waiting on condition [0x6b55a000]java.lang.Thread.State: WAITING (parking) "MSC service thread 1-5" prio=10 tid=0x6b904400 nid=0x14fa waiting on condition [0x6b55a000]java.lang.Thread.State: WAITING (parking) "MSC service thread 1-6" prio=10 tid=0x6b904400 nid=0x14fa waiting on condition [0x6b55a000]java.lang.Thread.State: WAITING (parking) "MSC service thread 1-7" prio=10 tid=0x6b904400 nid=0x14fa waiting on condition [0x6b55a000]java.lang.Thread.State: WAITING (parking) "MSC service thread 1-8" prio=10 tid=0x6b904400 nid=0x14fa waiting on condition [0x6b55a000]java.lang.Thread.State: WAITING (parking)假設熟悉 JBoss 7或 WildFLy 線程,我們會發現這些線程和?JBoss 7或 WildFLy 同樣,實際上它們都執行相似的代碼。
總結
以上是生活随笔為你收集整理的JBoss 系列九十六:JBoss MSC - 简介及一个简单演示样例的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Gitlab7.0通知邮箱的配置(smt
- 下一篇: Obejctive-C 中定义可变参函数