日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

JBoss 系列九十六:JBoss MSC - 简介及一个简单演示样例

發布時間:2024/1/17 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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 - 简介及一个简单演示样例的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。