




免费预览已结束,剩余28页可下载查看
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
OSBOSB WebServiceWebService 场景配置报告场景配置报告 目 录 1目的目的 3 2工具介绍工具介绍 3 2 1OSB ORACLE SERVICE BUS 3 2 2OSB WORKSHOP 3 3OSB 工程工程 4 3 1概要 4 3 2WSDL 和 BUSISERVICES目录 4 3 3PROXYSERVICES目录 5 3 4PLUGIN SERVICES目录 5 3 5XQUERY RESOURCES目录 6 3 6OTHER目录 8 4GENERALSERVICE 服务的消息流服务的消息流 8 4 1OSB 消息流简介 8 4 2消息流概览 10 4 3具体节点和阶段举例 12 4 4管道对节点的阶段列表 21 4 5路由节点 22 5OSB 工程自动部署工程自动部署 23 5 1目标 23 5 2步骤 23 6遗留问题遗留问题 33 7附录附录 33 7 1参考资料 33 1 1目的目的 根据 应用集成平台 TS AIP 系统设计书 中的消息流的设计 通过 OSB Workshop 配置该消息流 并调研相关的问题 消息流设计图如下 初始化 权限验证流量控制 动态路由 请求服务处理响应Reply 异常处理 异常 验证失败 过流量 异常 异常 异常 2 2工具介绍工具介绍 2 1 OSB Oracle Service Bus Oracle Service Bus OSB 是轻型 SOA 集成平台 旨在用于连接 调解和管理异 类服务 不只是 Web 服务 还包括 Java 和 Net 消息发送服务和原有终端 之间的交 互 本次调研的 OSB 版本是 OSB10gR3 2 2 OSB Workshop Workshop for WebLogic 10gR3 对 Eclipse 进行了扩展 可用于开发 OSB 服务 Web 服务 Java JavaEE 对象关系映射 Spring Beehive 和 Web 应用程序等 3 3OSBOSB 工程工程 3 1 概要概要 通过 OSB Workshop 或者 OSB 控制台创建一个 OSB 工程 名为 WsAppScenarios Demo 其目录结构如下 其中 BusiServices 目录中保存业务服务也就是外部服务 Plugin Services 中保 存插件代理服务 ProxyServices 中保存代理服务 WSDL 中保存外部服务的 WSDL Xquery Resources 中保存 Xquery 资源 Xquery 资源主要作用是构建调用插件服务 的请求参数 Other 目录主要保存一些其他的服务和资源 3 2 WSDL 和和 BusiServices 目录目录 WSDL 和 BusiServices 目录如下 这两个目录存放外部服务的 WSDL 和对应的业务服务 这里只有两个测试 WebService 服务 3 3 ProxyServices 目录目录 ProxyServices 目录如下 其中 GeneralService 即为本次 OSB Webservice 场景配置的核心代理服务 为所有服务的 调用入口点 3 4 Plugin Services 目录目录 Plugin Services 目录如下 这里的插件服务皆为代理服务 通过这些代理服务 完成数据适配 再调用插件业务 服务 以达到插件业务服务和具体的 ESB 平台分离的目的 具体的插件代理服务定义如下 插件代理服务名称插件代理服务名称插件具体作用插件具体作用是否需要调是否需要调 用外部插件用外部插件 服务服务 abnormal persistence proxy 异常消息持久化是 authentication proxy 权限验证是 dynamic route getter proxy 动态路由信息获取是 env var init proxy 环境变量初始化否 env var set at busi req proxy 业务服务请求时的环境变量设置 目前主要是业务服务请求时的 时间设置 否 env var set at busi response proxy 业务服务响应时的环境变量设置否 env var set at proxy response proxy 代理服务响应时的环境变量设置否 esbid generator proxy esbid 的生成平台自带 flow control proxy 流量控制是 normal persistence proxy 正常消息持久化是 service status querying proxy 服务状态查询是 以上表格中 是否需要调用外部插件服务 项中选择是的插件代理服务对应的业务服务应 该都是可以跨平台共用的 3 5 Xquery Resources 目录目录 Xquery Resources 目录如下 OSB 中的 xquery 资源可以利用 xquery 语法和函数 完成 xml 与 xml xml 与非 xml 非 xml 与非 xml 等数据类型之间的映射和转换 在这里 我们主要用来生成 service callout publish route 等 action 的请求数据 Xquery Resources 里的文件的命名规范是 generate 为生成 req var 表示请求变量 4serv 是 for service 的简写 4serv 后面跟的是具体的服务的名称 这里的 xq 文件基本 和之前的插件代理服务是一一对应的 例如 generate req var 4serv abnormal persistence xq 就是用来生成调用异常消息持久化 服务的请求变量的 之所以不利用 Message Processing 中的 assign replace insert 等 action 直接在 消息流中构件调用服务的请求变量 而是在 xq 中生成 有以下几点好处 1 避免在消息流中使用过多的 action 使得消息流难以阅读 2 将请求变量的生成统一到一个地方编写 与在消息流中用可视化的 action 编程比较 易读易改 3 只要对消息流中的变量做良好的规划 可以实现当服务的请求消息需要变动时 xquery transformation 的输入和输出不需要变动 只需要修改函数中的代码即可 3 6 Other 目录目录 Other 目录如下 Other 目录在这里主要是存放了一些相关的 jms 资源和 jar 包资源 4 4GeneralServiceGeneralService 服务的消息流服务的消息流 在 OSB 中 主要通过 GeneralService 代理服务的消息流来实现了之前应用集成平台 中的消息流设计 4 1 OSB 消息流简介消息流简介 4 1 1 概述概述 OSB 将服务分为两类 业务服务业务服务 Business Service 和代理服务代理服务 Proxy Service 业务服务是在 OSB 中定义的 代表 OSB 以外的服务 代理服务则是发布在 OSB 上的服务 客户端通过 OSB 调用的都不是业务服务 而是代理服务 代理服务是由消息流定义的 一个消息流由一系列节点组成 节点有 4 种类型 启 动节点 Start 管道对节点 Pipeline Pair 路由节点 Route 和分支节点 Branch 启动节点启动节点无法编辑 只是标识了消息流的入口 分支节点分支节点是在消息流中根据消息内容进行判断 包括操作分支和条件分支 分支节 点可以把消息路由到任意数目的其他节点上 管道对节点管道对节点显式的描述了一个代理服务的请求和响应的消息路径 管道对节点之后 最多可以有一个其他节点 管道对节点可以包含一些列阶段 Stage 每个阶段中包含了 一组操作 Action 路由节点路由节点用于将请求消息路由到相应的业务服务或者其他的代理服务 路由节点之 后不能再有其他节点 路由节点中不包含任何阶段 4 1 2 错误处理错误处理 可以对节点以及相应的阶段添加一个错误处理程序 错误处理程序可以嵌套 其处理 方式类似 Java 的异常处理方式 即当某个节点以及该节点中某个阶段都有错误处理程序 时 该阶段发生错误时 首先被阶段的错误处理程序捕获并处理 但是和 Java 的异常处理方式还是有区别 Java 的某个代码段捕获异常后 除非再 次主动抛出异常 否则外部的异常处理无法再次捕获该异常 而 OSB 的某个阶段的错误被 阶段的错误处理程序捕获并处理后 除非使用 resume skip 等特殊的操作以回到正常消 息流 否则该异常会接着被外部的节点的错误处理程序捕获并处理 4 2 消息流概览消息流概览 说明 对于管道对节点中的阶段 无论是请求管道还是响应管道 都是自上而下执行的 即 对请求管道 最先执行的是 环境变量初始化 阶段 而对于响应管道 最先执行的 是 业务请求 响应 设置环境变量 阶段 对于管道对节点中的响应管道的阶段 都是在路由节点之后执行的 对于持久化 共有 4 个时间点 代理服务 请求 业务服务 请求 业务服务 响应 代理服务 响应 这四个时间点的界定如下 代理服务 请求 指的是客户端调用 ESB 上的代理服务的时间点 业务服务 请求 指的是 ESB 经过一系列对请求的处理后 调用外部服务的时间点 业务服务 响应 指的是外部服务对 ESB 的响应时间点 代理服务 响应 指的是 ESB 代理服务对客户端的响应时间点 4 3 具体节点和阶段举例具体节点和阶段举例 4 3 1 环境变量初始化环境变量初始化 阶段阶段 该阶段的主要特征是没有调用外部服务 4 3 1 1环境变量初始化环境变量初始化 该阶段配置如下 该阶段主要调用了一个 Service Callout 操作 具体调用的服务是 Plugin Services env var init proxy 即环境变量初始化服务 Service Callout 的输入为 temp in 变量 输出为 esb data bus 变量 esb data bus 变量即作为消息流设计中 的环境树 所有的需要保存的非系统变量和数据 全部挂在 esb data bus 节点下 Service Callout 的具体配置如下 在 Service Callout 的 request action 中 使用了 Assign 操作 在这个操作中 利 用调用 Xquery Resources generate req var 4serv env var init xq 生成调用 env var init 服务需要的请求数据 赋值给 temp in 变量 这种使用 Assign 结合 Xquery Resources 资源生成请求变量的方法将在后面所有涉及到 Service Callout 和 Publish 等操作的阶段中使用 Assgin 操作的配置如下 该阶段完成后 会得到 esb data bus 变量 OSB 的变量无论是系统变量还是用户定义 的变量 全都是全局变量 即变量的作用域为整个消息流 但是不包括 Service Callout Publish Route 等操作调用的业务服务和代理服务的消息流 目前环境树主要记录了 esbid 代理服务请求和响应的时间点 业务服务请求和响应 的时间点以及服务路由信息 环境树的示例如下 4 3 1 2错误处理错误处理 目前的错误处理较简单 如果在阶段中出现问题 则通过 Raise Error 抛出一个代 码为 proxy request init error 的错误 标识了错误的类型和发生阶段 4 3 2 服务状态查询服务状态查询 阶段阶段 设计中是把服务状态查询和环境变量的生成放在一起作为初始化环节 但因为环境变 量的生成可能并不牵扯到外部服务的调用 且其和服务状态查询的业务功能也不太相同 因此在这里分成了两个阶段 该阶段的主要特征是调用了外部服务 4 3 2 1服务状态查询服务状态查询 Service Callout 调用了 Plugin Services service status querying 这个插件业务 服务 在实际情况中 这个插件代理服务应该再调用外部的业务服务进行服务状态的 查询 Service Callout 配置如下 4 3 2 2错误处理错误处理 这里和之前的环境变量初始化阶段相比的另一个不同之处在于 针对服务状态的不 同返回值 可以 Raise 不同的 Error 具体就体现在阶段中的 4 个 If Then 操作 而阶段中的错误处理没有做任何的操作 直接将错误抛给更上面一层的错误处理程 序去处理 4 3 3 代理服务请求持久化代理服务请求持久化 阶段阶段 4 3 3 1代理服务请求持久化代理服务请求持久化 该阶段调用了一个 Publish 操作 Publish 操作和 Service Callout 操作都可以调 用其他的业务服务和代理服务 不同点在于 Service Callout 是同步阻塞 请求和响应都 存在的服务调用 而 Publish 则是异步的 只存在请求的服务调用 对于服务查询 权限验证 流量控制等需要等待服务返回值的调用 适用 Service Callout 而对于持久化这样的服务调用 则适用 Publish 这样的非阻塞调用 该阶段的配置如下 这里的 Publish 操作调用了 Plugin Services normal persistence proxy 即正常 消息持久化代理服务 该服务的 Message Type 为 Any Soap Service 在该代理服务的消 息流中 又通过一个 Publish 操作将需要持久化的数据发送给了一个 jms 队列 该代理服 务的配置如下 4 3 3 2错误处理错误处理 由于持久化的成功失败不应影响服务的正常调用 因此在该阶段的错误处理中 当错 误处理程序捕获到错误时 调用了一个 resume 操作 resume 操作会将忽略错误 并跳到 下一个阶段即权限验证阶段继续正常执行消息流 4 4 管道对节点的阶段列表管道对节点的阶段列表 由于阶段很多 而同质性较强 不再一一详述 而是在此以列表的方式将管道对节点 OSB 请求及响应处理过程节点 的所有阶段列出来 依据调用次序 阶段名称调用的插件服务调用方式错误处理 环境变量初始 化 env var init proxyService Callout 向外抛错误 服务状态查询 service status querying proxyService Callout 向外抛错误 代理服务 请 求 持久化 normal persistence proxyPublish 忽略错误 恢 复到下一环节 权限验证 authentication proxyService Callout 向外抛错误 代理服务 请 求 流量控制 flow control proxyService Callout 向外抛错误 动态路由信息 获取 dynamic route getter proxyService Callout 向外抛错误 业务服务 请 求 设置环境 变量 env var set at busi req proxyService Callout 向外抛错误 业务服务 请 求 持久化 normal persistence proxyPublish 忽略错误 恢 复到下一环节 业务服务 响 应 设置环境 变量 env var set at busi response proxyService Callout 向外抛错误 业务服务 响 应 持久化 normal persistence proxyPublish 忽略错误 恢 复到下一环节 业务服务 响 应 流量控制 无 不知道是否需要此阶段 业务服务 响 应 OSB 再处 理 无 不知道是否需要此阶段 代理服务 响 应 设置环境 变量 env var set at proxy response proxyService Callout 向外抛错误 代理服务 响 应 持久化 normal persistence proxyPublish 忽略错误 恢 复到下一环节 4 5 路由节点路由节点 路由节点配置如下 OSB 可以通过 Dynamic Routing 操作 很容易的实现了动态路由功能 只要在 Dynamic Routing 中给出如下输入即可 其中 isProxy 为 Y 表示调用代理服务 为 N 表示调用业务服务 服务名必须用 OSB 工程内的该代理服务或业务服务的全名 例如要调用 WsAppScenarios Demo 工程内的 BusiServices 文件夹下的 CRMBusiService 则服务名应为 WsAppScenarios Demo BusiServices CRMBusiService Dynamic Routing 的配置如下 5 5OSBOSB 工程自动部署工程自动部署 5 1 目标目标 假设本机安装了 Workshop 远程机器 A 上安装有 OSB 服务 IP 和端口号为 192 168 20 12 7201 远程机器 B 上安装有 OSB 服务 IP 和端口号为 192 168 20 13 7301 可以称 A 上的服务对应的域为源域 而 B 上的为目标域 现在需要 将源域上部署的 OSB 工程 WsAppScenarios Demo 部署到目标域上 5 2 步骤步骤 5 2 1 创建创建 Java 工程工程 在 OSB WorkShop 中创建一个 Java 工程 名为 Auto Deploy eg 在该工程下创建一 个文件夹 可以命名为 ExportImport 5 2 2 创建创建 build xml 在 ExportImport 新建 build xml 文件 内容如下 注意 上文用红色重体标注的部分诸如 name bea home weblogic home 以及 fileset 的几个 path 必须根据本机 Workshop 所在的 OSB 对应的实际情况做修改 5 2 3 创建创建 export properties 在 ExportImport 新建 export properties 文件 内容如下 ALSB Admin Security Configuration adminUrl t3 192 168 20 12 7201 exportUser weblogic exportPassword weblogic ALSB Jar to be exported exportJar myexport jar Optional passphrase and project name passphrase aqualogic project WsAppScenarios Demo Optional create a dummy customization file customizationFile customize xml 注意 上文用红色重体标注的部分必须根据源域对应的实际情况做修改 5 2 4 创建创建 export py 在 ExportImport 新建 export py 文件 内容如下 from java io import FileInputStream from java io import FileOutputStream from java util import ArrayList from java util import Collections from com bea wli sb util import EnvValueTypes from com bea wli config env import EnvValueQuery from com bea wli config import Ref from com bea wli config customization import Customization from com bea wli config customization import FindAndReplaceCustomization import sys Exports a project def exportAll exportConfigFile try print Loading export config from exportConfigFile exportConfigProp loadProps exportConfigFile adminUrl exportConfigProp get adminUrl exportUser exportConfigProp get exportUser exportPasswd exportConfigProp get exportPassword exportJar exportConfigProp get exportJar customFile exportConfigProp get customizationFile passphrase exportConfigProp get passphrase project exportConfigProp get project connectToServer exportUser exportPasswd adminUrl ALSBConfigurationMBean findService ALSBConfiguration com bea wli sb management configuration ALSBConfigurationMBean print ALSBConfiguration MBean found print project if project None ref Ref DOMAIN collection Collections singleton ref if passphrase None print Export the config theBytes ALSBConfigurationMBean export collection true None else print Export and encrypt the config theBytes ALSBConfigurationMBean export collection true passphrase else ref Ref makeProjectRef project print Export the project project collection Collections singleton ref theBytes ALSBConfigurationMBean exportProjects collection passphrase aFile File exportJar out FileOutputStream aFile out write theBytes out close print ALSB Configuration file exportJar has been exported if customFile None print collection customList ArrayList query EnvValueQuery None Collections singleton EnvValueTypes WORK MANAGER collection false None false customEnv FindAndReplaceCustomization Set the right Work Manager query Production System Work Manager customList add customEnv Uncomment the next three lines to update the server and port to the alsb30 prod environment correctly query EnvValueQuery None Collections singleton EnvValueTypes SERVICE URI collection false 192 168 20 12 7201 false customEnv FindAndReplaceCustomization Update to the correct server and port number query 192 168 20 13 7301 customList add customEnv print EnvValueCustomization created print customList aFile File customFile out FileOutputStream aFile Customization toXML customList out out close print ALSB Customization file customFile has been created except raise Utility function to load properties from a config file def loadProps configPropFile propInputStream FileInputStream configPropFile configProps Properties configProps load propInputStream return configProps Connect to the Admin Server def connectToServer username password url connect username password url domainRuntime EXPORT script init try exportAll sys argv 1 except print Unexpected error sys exc info 0 dumpStack raise 注意 上文用红色重体标注的部分必须根据源域对应的实际情况做修改 上文通过绿色重体标出的 EnvValueQuery 方法 其中第二个参数 Collections singleton EnvValueTypes SERVICE URI 说明了是要找到环境变量中 服务的 URI 的值 通过这个方法 找到包含 localhost 7001 的 uri 第二个重要的方法是 FindAndReplaceCustomization 此方法有三个参数 定制描 述 用做替换的查询条件和新字符串值 通过以上两个方法 把 uri 中为 192 168 20 12 7201 的部分替换成 192 168 20 13 7301 这样部署到目标域时 与目标域才会一致 export py 文件的目的是当项目部署到一个新环境时指定定制化的信息类型 定制 化信息保存到由 export py 脚本创建的 customize xml 文件中 5 2 5 源域导出源域导出 进入 cmd 窗口 到 build xml 所在目录下 运行 ant export 命令 ExportImport 文 件夹多出两个文件 export jar 和 customize xml 其中 customize xml 为空 而如果你 把 myexport jar 用 winrar 打开可以看到 里面就包含了 WsAppScenarios Demo 工程 5 2 6 创建创建 import properties 在 ExportImport 新建 import properties 文件 内容如下 ALSB Admin Security Configuration adminUrl t3 192 168 20 13 7301 importUser weblogic importPassword weblogic ALSB Jar to be exported optional customization file importJar myexport jar customizationFile customize xml Optional passphrase and project name passphrase aqualogic project WsAppScenarios Demo 注意 上文用红色重体标注的部分必须根据源域对应的实际情况做修改 5 2 7 创建创建 import py 在 ExportImport 新建 import py 文件 内容如下 from java util import HashMap from java util import HashSet from java util import ArrayList from java io import FileInputStream from com bea wli config import TypeIds from com bea wli sb util import Refs from com bea wli config customization import Customization from com bea wli sb management importexport import ALSBImportOperation from com bea wli sb management configuration import SessionManagementMBean from com bea wli sb management configuration import ALSBConfigurationMBean import sys Entry function to deploy project configuration and resources into a ALSB domain def importToALSBDomain importConfigFile try SessionMBean None print Loading Deployment config from importConfigFile exportConfigProp loadProps importConfigFile adminUrl exportConfigProp get adminUrl importUser exportConfigProp get importUser importPassword exportConfigProp get importPassword importJar exportConfigProp get importJar customFile exportConfigProp get customizationFile passphrase exportConfigProp get passphrase project exportConfigProp get project connectToServer importUser importPassword adminUrl print Attempting to import importJar on ALSB Admin Server listening on adminUrl theBytes readBinaryFile importJar print Read file importJar sessionName createSessionName print Created session sessionName SessionMBean getSessionMBean sessionName print SessionMBean started session ALSBConfigurationMBean findService String ALSBConfiguration concat sessionName com bea wli sb management configuration ALSBConfigurationMBean print ALSBConfiguration MBean found ALSBConfigurationMBean ALSBConfigurationMBean uploadJarFile theBytes print Jar Uploaded if project None print No project specified additive deployment performed importResult ALSBConfigurationMBean importUploaded None false true passphrase SessionMBmitSession sessionName else print ALSB project project will get overlaid alsbJarInfo ALSBConfigurationMBean getImportJarInfo alsbImportPlan alsbJarInfo getDefaultImportPlan alsbImportPlan setPassphrase passphrase operationMap HashMap operationMap alsbImportPlan getOperations print print Default importPlan printOpMap operationMap set operationMap entrySet alsbImportPlan setPreserveExistingEnvValues true boolean abort false list of created ref createdRef ArrayList for entry in set ref entry getKey op entry getValue set different logic based on the resource type type ref getTypeId print got a ref TypeId of type if type Refs SERVICE ACCOUNT TYPE or type Refs SERVICE PROVIDER TYPE if op getOperation ALSBImportOperation Operation Create print Unable to import a service account or a service provider on a target system ref abort true elif op getOperation ALSBImportOperation Operation Create keep the list of created resources createdRef add ref if abort true print This jar must be imported manually to resolve the service account and service provider dependencies SessionMBean discardSession sessionName raise print print Modified importPlan printOpMap operationMap importResult ALSBConfigurationMBean importUploaded alsbImportPlan printDiagMap importResult getImportDiagnostics if importResult getFailed isEmpty false print One or more resources could not be imported properly raise customize if a customization file is specified affects only the created resources if customFile None print Loading customization File customFile print Customization applied to the created resources only createdRef iStream FileInputStream customFile customizationList Customization fromXML iStream filteredCustomizationList ArrayList setRef HashSet createdRef apply a filter to all the customizations to narrow the target to the created resources for customization in customizationList print customization newcustomization customization clone setRef filteredCustomizationList add newcustomization ALSBConfigurationMBean customize filteredCustomizationList SessionMBmitSession sessionName SessionMBean activateSession sessionName active session from import py print Deployment of importJar successful except print Unexpected error sys exc info 0 if SessionMBean None SessionMBean discardSession sessionName raise Utility function to print the list of operations def printOpMap map set map entrySet for entry in set op entry getValue print op getOperation ref entry getKey print ref print Utility function to print the diagnostics def printDiagMap
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 脉冲电刺激康复-洞察及研究
- 租赁市场监管创新-洞察及研究
- 预设触发词的类型学比较-洞察及研究
- 2025年事业单位工勤技能-重庆-重庆经济岗位工四级(中级工)历年参考题库含答案解析
- 2025年事业单位工勤技能-贵州-贵州防疫员二级(技师)历年参考题库含答案解析
- 2026届内蒙古太仆寺旗宝昌第一中学化学高三第一学期期末学业质量监测试题含解析
- 外卖人员面试题目及答案
- 泸县中考题目数学试卷
- 七年级广东数学试卷
- 实践队面试题目及答案
- 消防桌面应急预案方案(3篇)
- 山区救援网2025年灾害救援装备研发趋势分析报告
- (2025年标准)校车修理协议书
- 服装厂 安全生产管理制度
- 2025年山东省教育厅直属事业单位招聘18人笔试模拟试题带答案详解
- 2025年汽车驾驶员(高级)考试题及汽车驾驶员(高级)试题及答案
- 2025年“艾梅乙”母婴阻断培训试题(附答案)
- 2025年中小学体育教师招聘考试专业基础知识考试题库及答案(共2687题)
- Unit1SectionA1a-1c课件-人教版九年级英语全册
- 360上网行为管理系统产品白皮书
- 酒店股东消费管理办法
评论
0/150
提交评论