JBoss 系列九十七:JBoss MSC - 浅析 ServiceName

概述

JBoss MSC 是WildFly 8 和 JBoss 7的底层容器。它管理 JBoss 中的所有 Service,JBoss 中的每一个Service都有一个名字,JBoss MSC通过 ServiceName 对象来抽象Service的名字,ServiceName 代吗链接:ServiceName.java,类图如下:

树状结构

WildFly 中的一切都是一个Service,每个 Service 都有一个名字,Service 之间有树形关系,所以 ServiceName 也是树状结构,如下代码端:

		ServiceName root = ServiceName.JBOSS;

		ServiceName l1a = root.append("level-1-a");
		ServiceName l1b = root.append("level-1-b");

		ServiceName l2a = l1a.append("level-2-a");
		ServiceName l2b = l1a.append("level-2-b");

		System.out.println(l2a);
		System.out.println(l2a.getParent());
		System.out.println(l2a.getParent().getParent());

首先我们获取根节点,接着在根节点上添加两个子节点 level-1-a 和 level-1-b,最后在level-1-a 节点添加两个子节点 level-2-a 和 level-2-b,运行输出如下:

service jboss.level-1-a.level-2-a
service jboss.level-1-a
service jboss

如下代码可以快速创建一个 ServiceName 树:

ServiceName tree = ServiceName.of("one", "two", "three");
		System.out.println(tree);

运行如上代码输出:

service one.two.three

hashCode() 与 equals()

任何一个对象都会有一个hashcode,Wikipedia 的解释如下链接:

http://en.wikipedia.org/wiki/Java_hashCode%28%29

通常:

  • 两个对象equals,它必须有相同的hashCode,同一个对象,任何时候hashCode方法返回必须相同
  • 通常重写equals()方法时,同时重写hashCode()方法,因为两个对象equals是它的hashCode被访问,且只有两个对象的hashCode返回相同
  • hash table 等 hash 相关的数据结构需要使用 hashCode 和 equals 方法

如下代码段:

		ServiceName a = ServiceName.JBOSS.append("one", "two", "three");
		ServiceName b = ServiceName.JBOSS.append("one", "two", "three");
		System.out.println(a.equals(b));

运行输出的结果为 true,说明 ServiceName a 和 b 形同,即 a 的 equals 方法返回 true,这一输出是因为,执行equals 方法时,a 和 b 返回的 hashCode 是相同的。

如下代码段:

		ServiceName a = ServiceName.JBOSS.append("one", "two", "three");
		ServiceName b = ServiceName.JBOSS.append("one", "two", "three");
		Set<ServiceName> set = new HashSet<ServiceName>();
		set.add(a);
		set.add(b);
		System.out.println(set.size());

运行输出HashSet的 size 为 1,如上向 HashSet 中添加对象过程如下:

  • set.add(a) 执行时,a 对象的hashCode方法调运
  • set.add(b) 执行时,b 对象的hashCode方法调运;b 对象的 equals() 方法调运;a 对象的hashCode方法调运;b 对象的hashCode方法调运

由于 b 对象的 equals() 方法调运返回true,且hashCode方法返回相同,所以HashSet认为 b 对象已经存在于 HashSet中。

注意:只有当  equals() 方法返回 true且 hashCode方法返回,HashSet认为他们属于同一对象。

Comparable接口

Comparable接口使对象可以比较大小,通常用于排序,ServiceName 实现了 Comparable接口的 compareTo() 方法。通常compareTo()  方法返回 大于 0 的整数,0 或小于 0 的整数:

  • 大于 0 的整数 - 表述 a 对象 大于 b 对象
  • 0 - 表述 a 对象 小于 b 对象
  • 小于 0 的整数 - 表述 a 对象 小于 b 对象

如下代码段:

		ServiceName a = ServiceName.JBOSS.append("one");
		ServiceName b = ServiceName.JBOSS.append("one", "two");
		List<ServiceName> list = new ArrayList<ServiceName>();
		list.add(b);
		list.add(a);
		System.out.println(list);
		Collections.sort(list);
		System.out.println(list);

运行如上代码段输出结果如下:

[service jboss.one.two, service jboss.one]
[service jboss.one, service jboss.one.two]

从结果可以看出,两个对象可以排序。

JBoss 系列九十七:JBoss MSC - 浅析 ServiceName

时间: 2024-10-22 14:19:42

JBoss 系列九十七:JBoss MSC - 浅析 ServiceName的相关文章

JBoss 系列九十八:JBoss MSC - 浅析 ServiceContainer

ServiceContainer 接口类图 ServiceContainer 接口类图如下所示: 如图: ServiceContainer - ServiceContainer 即是 JBoss MSC 的抽象,它抽象的是一个模块化的容器,它设计用来管理一系列服务 ServiceTarget - 提供了添加服务,添加依赖等方法,另外这些添加只有在ServiceBuilder 的 install() 方法后才生效 ServiceRegistry - 服务注册接口,可根据服务名获取一个服务,或获取所

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 和 J

JBoss 系列九十九:Rest WebService jBPM 6 集成示例

概述 jBPM 6 提供 Rest API 供第三方应用整合使用 jBPM 6,本文演示如果通过 Rest API: 启动流程 获取流程实例信息 启动 User Task 完成 User Task jBPM 6 中使用 RestEasy 实现 Rest WebService ,所以我们通过 Rest 客户端 API 与 jBPM 6 所提供的 Rest API 交互. 本文所使用的流程如下 如上流程只有一个 User Task 节点,User Task 执行开始和执行结束都输出相关提示.流程 I

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 和 Jav

JBoss 系列一 O O:Maven jBPM 6 集成示例

概述 jBPM 6 中底层架构基于 Maven,所以我们可以很容易的进行 Maven jBPM 6 集成示例,本文分三个部分: 基本原理介绍 Maven jBPM 6 集成 jBPM 6 中使用 Maven 特性实时监听服务器端的更新 基本原理介绍 如下图 如图所示,我们有两台服务器,jBPM 6 服务器和客户端服务器: 首先 jBPM 6 服务器如果我们通过 Work Bench 将编辑完成的流程打包发布,它会将其发布到 jBPM 6 服务器对应的 Maven 仓库,这个仓库相比较客户端的应用

JBoss 系列十四:JBoss7/WildFly如何加载外部的文件或properties文件

http://www.tuicool.com/articles/M7ZR3y 原文 http://blog.csdn.net/kylinsoong/article/details/12623997 主题 WildFlyXMLJBoss AS 内容概述 JBoss7/WildFly设底层框架一大亮点的Module class loading,及每一个相对独立的模块看作一个Module,每个Module都有自己的class loader,Module之间可以相互依赖,如下图: 当JBoss7安装完成

struts2官方 中文教程 系列九:Debugging Struts

介绍 在Struts 2 web应用程序的开发过程中,您可能希望查看由Struts 2框架管理的信息.本教程将介绍两种工具,您可以使用它们来查看.一个工具是Struts 2的配置插件,另一个是调试拦截器.本文还讨论了如何设置日志级别以查看更多或更少的日志消息. 贴个本帖的地址,以免被爬:struts2官方 中文教程 系列九:Debugging Struts 即 http://www.cnblogs.com/linghaoxinpian/p/6916619.html 下载本章节代码 Configu

【白话经典算法系列之十七】 数组中只出现一次的数 其他三次

本文地址:http://blog.csdn.net/morewindows/article/details/12684497转载请标明出处,谢谢. 欢迎关注微博:http://weibo.com/MoreWindows 首先看看题目要求: 数组A中,除了某一个数字x之外,其他数字都出现了三次,而x出现了一次.请给出最快的方法找到x. 这个题目非常有意思,在本人博客中有<位操作基础篇之位操作全面总结>这篇文章介绍了使用位操作的异或来解决——数组中其他数字出现二次,而x出现一次,找出x.有<

C++语言笔记系列之十七——虚基类

1.虚基类 考虑这样一种情况:当某个类的部分或者全部直接基类是另一个共同基类派生而来,这些直接基类从上一级基类继承而来的成员就一定拥有相同的名称,这样就会产生二义性问题. 解决办法:当派生类和直接基类产生了二义性问题-->加类的作用域. 当派生类和间接基类产生了二义性问题-->虚基类. 2.虚基类的说明: class 派生类名:virtual 访问权限 基类名 {派生类定义}; 注意:在定义派生类时将需要继承的基类进行虚化声明,虚基类的说明在派生类的定义中完成. 作用:将基类说明为虚基类之后,