sbb-classes 元素
sbb-classes 元素
在 JAIN SLEE(服务级别事件扩展)中,sbb-classes 元素用于定义服务边界组件(SBB)的类结构及其相关配置。这是每个 SBB 的必备部分,包含多个子元素,负责描述 SBB 的抽象类、接口和属性等。
sbb-classes 元素的结构
sbb-classes 元素包含以下子元素:
-
description 元素(可选)
- 提供关于 SBB 类的描述信息。
-
sbb-abstract-class 元素(必需)
- 定义 SBB 的抽象类,具有以下属性和子元素:
- reentrant 属性(可选,布尔值)
- 指示该 SBB 组件是否可重入。默认是false
true: 允许多个线程同时调用该 SBB 的方法,适用于高并发场景。false: 仅允许单个线程访问,适用于需要保护内部状态不被并发修改的场景。
- description 元素(可选)
- 提供关于抽象类的描述信息。
- sbb-abstract-class-name 元素(必需)
- 指定 SBB 抽象类的完整类名。
- cmp-field 元素(零个或多个)
- 定义抽象类中的 CMP 字段(持久性字段),每个字段需要由一个
cmp-field元素表示。
- 定义抽象类中的 CMP 字段(持久性字段),每个字段需要由一个
- get-child-relation-method 元素(零个或多个)
- 定义父子关系的方法,每个方法需要由一个
get-child-relation-method元素表示。
- 定义父子关系的方法,每个方法需要由一个
- reentrant 属性(可选,布尔值)
- 定义 SBB 的抽象类,具有以下属性和子元素:
-
sbb-local-interface 元素(可选)
- 指定 SBB 本地接口的类,允许其他 SBB 通过该接口与当前 SBB 进行交互。
-
sbb-activity-context-interface 元素(可选)
- 定义 SBB 活动上下文接口。
-
sbb-usage-parameters-interface 元素(可选)
- 定义 SBB 使用参数接口。
示例代码及功能
以下是 sbb-classes 元素的完整示例,展示了如何定义一个 SBB 类及其相关的 CMP 字段和方法:
<sbb-classes><description>Conference SBB</description><sbb-abstract-class reentrant="false"><sbb-abstract-class-name>com.example.ConferenceSBB</sbb-abstract-class-name><cmp-field><description>Participant count</description><cmp-field-name>participantCount</cmp-field-name></cmp-field><get-child-relation-method><get-child-relation-method-name>createParticipantSBB</get-child-relation-method-name><sbb-alias-ref>ParticipantSBB</sbb-alias-ref><default-priority>10</default-priority></get-child-relation-method></sbb-abstract-class><sbb-local-interface><sbb-local-interface-name>com.example.ConferenceSBBLocal</sbb-local-interface-name></sbb-local-interface>
</sbb-classes>
说明各部分的作用
-
description: 提供了关于该 SBB 的描述,帮助开发者理解 SBB 的功能。
-
sbb-abstract-class:
- reentrant=“false”: 表示该 SBB 不支持多个线程同时调用。在需要保护内部状态或资源的场景中使用,比如在处理共享数据时,防止数据竞争和不一致。使用
reentrant="false"时,只有一个线程可以访问该 SBB 的方法,这样可以避免并发导致的状态混乱。 - sbb-abstract-class-name: 定义了具体的 SBB 实现类,为其他组件提供了明确的类引用。
- cmp-field: 定义了参与者计数字段,允许 SBB 在状态中持久化该信息。在多个线程并发调用时,CMP 字段本身并不能保证每个线程都有自己的变量;这需要开发者在 SBB 中进行适当的同步,以确保数据一致性。
- reentrant=“false”: 表示该 SBB 不支持多个线程同时调用。在需要保护内部状态或资源的场景中使用,比如在处理共享数据时,防止数据竞争和不一致。使用
-
sbb-local-interface: 定义 SBB 本地接口,提供与外部 SBB 交互的入口。
CMP 字段与多线程
在高并发场景中,CMP 字段的设计需要特别注意:
- 共享状态: 如果多个线程同时访问同一个 SBB 的 CMP 字段,且没有适当的同步机制(如使用锁),可能导致数据竞争,导致状态不一致。
- 线程局部存储: 如果每个线程需要维护自己的状态,可以考虑使用线程局部存储(ThreadLocal)或其他设计模式,以确保每个线程都能安全地管理自己的变量。
使用场景及并发处理
-
reentrant 为 false 的场景:
- 当 SBB 处理共享数据或敏感状态时,使用
reentrant="false"可以确保每次调用都是顺序执行,避免并发带来的数据不一致性。例如,一个会议的参与者数量计数器在一个方法中更新时,需要防止其他线程同时修改该计数器。
- 当 SBB 处理共享数据或敏感状态时,使用
-
高并发场景:
- 如果需要同时处理多个请求,建议使用可重入的 SBB(
reentrant="true")。在一个在线聊天室应用中,用户可以同时发送多条消息,这时允许多个线程并发访问同一个 SBB 可以提高性能和响应速度。
- 如果需要同时处理多个请求,建议使用可重入的 SBB(
总结
sbb-classes 元素在 JAIN SLEE 中至关重要,定义了 SBB 的类结构、持久化字段和关系方法。通过合理的设计和配置,开发者可以实现高效的并发处理,并保持系统的清晰结构。正确使用这些元素可以有效地管理和组织服务边界组件,使得系统在复杂的业务场景中能够保持高效、稳定的运行。
相关文章:
sbb-classes 元素
sbb-classes 元素 在 JAIN SLEE(服务级别事件扩展)中,sbb-classes 元素用于定义服务边界组件(SBB)的类结构及其相关配置。这是每个 SBB 的必备部分,包含多个子元素,负责描述 SBB 的抽象类、接口…...
(作业)第三期书生·浦语大模型实战营(十一卷王场)--书生入门岛通关第3关Git 基础知识
任务编号 任务名称 任务描述 1 破冰活动 提交一份自我介绍。 2 实践项目 创建并提交一个项目。 破冰活动 提交一份自我介绍。 每位参与者提交一份自我介绍。 提交地址:https://github.com/InternLM/Tutorial 的 camp3 分支~ 安装并设置git 克隆仓库并…...
12.数据结构和算法-栈和队列的定义和特点
栈和队列的定义和特点 栈的应用 队列的常见应用 栈的定义和特点 栈的相关概念 栈的示意图 栈与一般线性表有什么不同 队列的定义和特点 队列的相关概念...
15分钟学 Python 第34天 :小项目-个人博客网站
Day 34: 小项目-个人博客网站 1. 引言 随着互联网的普及,个人博客已成为分享知识、体验和见解的一个重要平台。在这一节中,我们将使用Python的Flask框架构建一个简单的个人博客网站。我们将通过实际的项目来学习如何搭建Web应用、处理用户输入以及管理…...
从零开始实现RPC框架---------项目介绍及环境准备
一,介绍 RPC(Remote Procedure Call)远程过程调⽤,是⼀种通过⽹络从远程计算机上请求服务,⽽不需要 了解底层⽹络通信细节。RPC可以使⽤多种⽹络协议进⾏通信, 如HTTP、TCP、UDP等, 并且在 TCP/…...
论文阅读:PET/CT Cross-modal medical image fusion of lung tumors based on DCIF-GAN
摘要 背景: 基于GAN的融合方法存在训练不稳定,提取图像的局部和全局上下文语义信息能力不足,交互融合程度不够等问题 贡献: 提出双耦合交互式融合GAN(Dual-Coupled Interactive Fusion GAN,DCIF-GAN&…...
java基础 day1
学习视频链接 人机交互的小故事 微软和乔布斯借鉴了施乐实现了如今的图形化界面 图形化界面对于用户来说,操作更加容易上手,但是也存在一些问题。使用图形化界面需要加载许多图片,所以消耗内存;此外运行的速度没有命令行快 Wi…...
cpp,git,unity学习
c#中的? 1. 空值类型(Nullable Types) ? 可以用于值类型(例如 int、bool 等),使它们可以接受 null。通常,值类型不能为 null,但是通过 ? 可以表示它们是可空的。 int? number null; // …...
HTML增加文本复制模块(使用户快速复制内容到剪贴板)
增加复制模块主要是为了方便用户快速复制内容到剪贴板,通常在需要提供文本信息可以便捷复制的网页设计或应用程序中常见。以下是为文本内容添加复制按钮的一个简单实现步骤: HTML结构: 在文本旁边添加一个复制按钮,例如 <butto…...
Spring Cloud面试题收集
Spring Cloud Spring cloud 是一系列框架的有序集合。它利用 spring boot 的开发便利性巧妙地简化了分布式系统基础设施的开发,如服务发现注册、配置中心、消息总线、负载均衡、断路器、数据监控等,都可以用 spring boot 的开发风格做到一键启动和部署。…...
观测云对接 SkyWalking 最佳实践
简介 SkyWalking 是一个开源的 APM(应用性能监控)和可观测性分析平台,专为微服务、云原生架构和基于容器的架构设计。它提供了分布式追踪、服务网格遥测分析、度量聚合和可视化一体化的解决方案。如果您的应用中正在使用SkyWalking …...
AI少女/HS2甜心选择2 仿天刀人物卡全合集打包
内含AI少女/甜心选择2 仿天刀角色卡全合集打包共21张 下载地址:https://www.51888w.com/408.html 部分演示图:...
MISC - 第11天(练习)
前言 各位师傅大家好,我是qmx_07,今天继续讲解MISC的相关知识 john-in-the-middle 导出http数据文件里面logo.png 是旗帜图案,放到stegsolve查看 通过转换颜色,发现flag信息 flag{J0hn_th3_Sn1ff3r} [UTCTF2020]docx 附件信息…...
[3.4]【机器人运动学MATLAB实战分析】PUMA560机器人逆运动学MATLAB计算
PUMA560是六自由度关节型机器人,其6个关节都是转动副,属于6R型操作臂。各连杆坐标系如图1,连杆参数如表1所示。 图1 PUMA560机器人的各连杆坐标系 表1 PUMA560机器人的连杆参数 用代数法对其进行运动学反解。具体步骤如下: 1、求θ1 PMUMA56...
centos常用知识和命令
linux目录及结构 /etc #存配置文件 /var #存日志文件 /home #用户家目录 /root #root用户家目录 /bin #命令文件目录 /sbin #超级管理员命令目录 /dev #设备文件目录 /boot #系统启动核心目录 /lib #库文件目录 /mnt #挂载目录 /tmp #临时文件目录 /usr #用户程序存…...
基于yolov8调用本地摄像头并将读取的信息传入jsonl中
最近在做水面垃圾识别的智能船 用到了yolov8进行目标检测 修改并添加了SEAttention注意力机制 详情见其他大神 【保姆级教程|YOLOv8添加注意力机制】【1】添加SEAttention注意力机制步骤详解、训练及推理使用_yolov8添加se-CSDN博客 并且修改传统的iou方法改为添加了wise-io…...
Linux中的进程间通信之管道
管道 管道是Unix中最古老的进程间通信的形式。 我们把从一个进程连接到另一个进程的一个数据流称为一个“管道” 匿名管道 #include <unistd.h> 功能:创建一无名管道 原型 int pipe(int fd[2]); 参数 fd:文件描述符数组,其中fd[0]表示读端, fd[1]表示写端 …...
【Vue】vue2项目打包后部署刷新404,配置publicPath ./ 不生效问题
Vue Router mode,为 history 无效,建议使用默认值 hash;...
【PyTorch】生成对抗网络
生成对抗网络是什么 概念 Generative Adversarial Nets,简称GAN GAN:生成对抗网络 —— 一种可以生成特定分布数据的模型 《Generative Adversarial Nets》 Ian J Goodfellow-2014 GAN网络结构 Recent Progress on Generative Adversarial Networks …...
Vue3轻松实现前端打印功能
文章目录 1.前言2.安装配置2.1 下载安装2.2 main.js 全局配置3.综合案例3.1 设置打印区域3.2 绑定打印事件3.3 完整代码4.避坑4.1 打印表格无边框4.2 单选框复选框打印不选中4.3 去除页脚页眉4.4 打印內容不自动换行1.前言 vue3 前端打印功能主要通过插件来实现。 市面上常用的…...
Mastering Text Tokenization for Large Language Models: From Words to Embeddings
1. 文本标记化的核心概念 你可能已经听说过ChatGPT这类大语言模型的神奇能力,但你知道它们是如何"读懂"人类文字的吗?秘密就藏在文本标记化(Tokenization)这个关键步骤里。想象一下,我们要教一个完全不懂中…...
NumPy 应用实例:用户行为数据分析(归一化和标准化处理)
在用户行为分析中,常常需要同时处理多个特征,例如访问次数、消费金额、停留时长、收藏数量等。这些特征虽然都能反映用户活跃程度或消费倾向,但它们的单位、量纲和取值范围通常并不一致。如果直接将原始数据用于综合评分或相似度计算…...
基于51单片机与HX711的智能电子秤Proteus仿真与计价系统实现
1. 项目背景与核心功能 最近在整理实验室材料时,发现很多同学对电子秤项目的仿真实现存在困惑。这个基于51单片机和HX711的智能电子秤系统,不仅能够完成基础称重,还能实现商品计价、LCD显示等完整超市电子秤功能。我在实际调试中发现…...
别再只盯着RTK了!聊聊GNSS/INS组合导航里,紧耦合如何用1颗卫星‘吊住’你的定位
1颗卫星的逆袭:紧耦合技术如何在极端环境下守护你的定位精度 想象一下,你正驾驶一辆L4级自动驾驶汽车穿越曼哈顿的钢铁森林。高楼间的"城市峡谷"让GPS信号时断时续,传统导航系统已经开始报警——"卫星信号丢失"。但你的车…...
告别‘Hello World’:用Gin框架从零搭建一个带用户登录和文件上传的Web服务(Go 1.21+)
告别‘Hello World’:用Gin框架从零搭建一个带用户登录和文件上传的Web服务(Go 1.21) 当你已经掌握了Go语言的基础语法,接下来最令人兴奋的莫过于亲手构建一个真实的Web服务。Gin框架以其高性能和简洁的设计,成为Go开发…...
Rufus高效启动盘制作实战攻略:30分钟从入门到精通
Rufus高效启动盘制作实战攻略:30分钟从入门到精通 【免费下载链接】rufus The Reliable USB Formatting Utility 项目地址: https://gitcode.com/GitHub_Trending/ru/rufus 系统重装难题如何高效解决? 当你的电脑遭遇系统崩溃、病毒入侵或需要全…...
百川2-13B-4bits模型商用指南:OpenClaw自动化服务合规部署要点
百川2-13B-4bits模型商用指南:OpenClaw自动化服务合规部署要点 1. 商用授权与合规基础 百川2-13B-4bits模型作为国内少数明确开放商用申请的大语言模型,其授权体系与常见的开源协议有本质区别。我在实际部署过程中发现,很多开发者容易忽略一…...
Java大文件分片上传完整实现教程
解决网络不稳定、服务器内存压力和用户体验差等问题是大文件分片上传的必要性。1. 分片上传允许在网络中断后只重传失败分片,提高成功率;2. 减少服务器单次处理的数据量,减少内存和i/o压力;3. 支持断点续传和秒传功能,…...
FlowState Lab 保姆级Docker容器化部署与运维实战
FlowState Lab 保姆级Docker容器化部署与运维实战 1. 前言:为什么选择Docker部署FlowState Lab 如果你正在寻找一种简单高效的方式来部署FlowState Lab模型,Docker容器化无疑是最佳选择。想象一下,你花了一周时间在本地调试好的模型&#x…...
Nomic-Embed-Text-V2-MoE生成技术博客:以CSDN风格撰写模型评测文章
Nomic-Embed-Text-V2-MoE生成技术博客:用向量分析读懂CSDN热门文章的秘密 最近在尝试用AI辅助写技术博客,发现一个挺有意思的思路:与其让模型凭空创作,不如先让它“学习”一下社区里那些受欢迎的文章到底长什么样。这就好比你要写…...
