




已阅读5页,还剩47页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
北京传智播客教育 ejb3 0企业开发 讲师 黎活明 北京传智播客教育 北京传智播客教育 什么是ejb enterpricejavabeans是一个用于分布式业务应用的标准服务端组件模型 采用enterpricejavabeans架构编写的应用是可伸缩的 事务性的 多用户安全的 采用ejb编写的这些应用 可以部署在任何支持enterpricejavabeans规范的服务器平台 如jboss weblogic等 北京传智播客教育 北京传智播客教育 ejb用来干什么 ejb实际上是用于编写业务层代码 如果大家对于mvc model view controller 结构的应用有所了解的话 我们知道一个基于mvc结构的应用应包含显示层 控制层和业务层 假设我们采用ejb开发基于mvc结构的应用 那么ejb就是用于开发应用的业务层 北京传智播客教育 北京传智播客教育 ejb的好处 ejb为我们提供了很多在企业开发中需要使用到的服务 如事务管理 安全 持久化 分布式等 因为这些服务由容器提供 无需我们自行开发 这样大大减少了我们的开发工作量 另外ejb提供了强制式分层解耦设计方法 北京传智播客教育 北京传智播客教育 ejb3vsspring2 5 估计有同学会问 除了ejb 像spring hibernate同样提供了事务管理 持久化服务 好像没有必要使用ejb 如果你的应用不需要分布式能力 确实没有必要使用ejb 因为spring hibernate提供了大部分原来只有ejb才有的服务 而且spring提供的有些服务比ejb做的更细致 更周到 那么是不是有了spring ejb3就没有必要存在了 这种说法是不正确的 因为ejb设计的初衷是用于分布式场合 而spring一开始就没有打算提供分布式功能 所以两者看似有竞争的关系 但实际上两者的偏重点不一样 像ejb比较适合用于大型企业 因为大型企业一般都会存在多个信息系统 而这些信息系统又相互关联 为了避免业务功能重复开发 实现最大程度的重用 有必要把业务层独立出来 让多个信息系统共享一个业务中心 这样应用就需要具备分布式能力 北京传智播客教育 北京传智播客教育 ejb3的分布式特点 北京传智播客教育 北京传智播客教育 ejb3的分布式特点 北京传智播客教育 北京传智播客教育 我是否应该学习ejb3 经常有同学会问我要不要学习ejb3 如果你学习ejb3只为了找份工作的话 那么我告诉你一个现实情况 目前使用ejb3的人数虽然有所上升 但是在关于ejb3的工作岗位并不多 所以依靠它找工作的话 恐怕会让你失望 当然如果你只是为了学习的话 那么ejb3是非常值我们学习的 因为ejb3包含的知识点非常多 学习它可以开拓我们的知识面 对于一线的java开发人员 我更是建议 不管在工作中是否用到ejb3 都应该学习一下ejb3 因为通过学习她 可以让你站在更高的台阶思考问题 北京传智播客教育 北京传智播客教育 ejb的发展前景 很多人都会问到ejb的发展前景 可以告诉大家ejb的发展前景会越来越好 目前在java社区关于ejb讨论的话题并不是很多 而且ejb占领的市场份额也很少 这种情况主要与它的定位有关 至少现在它的定位还是在分布式应用 有组织统计过在100个项目中 需要分布式的应用只占15 而85 的应用都是不需要分布式的 这个比例就决定了关注ejb的人不会很多 而且ejb所占的市场份额也不会很大 如果ejb要占领大部分市场份额就必须提供像spring这样的轻量级解决方案 好在ejb专家组已经认识到了这一点 目前正计划在ejb3 1规范中加入轻量级解决方案 ejb3 1可能会分成两个版本 一个仍然定位于分布式应用 另一个定位于轻量级应用 如果这个计划得以实现的话 恐怕到时ejb3 1将会逐步吞食由spring占领的市场份额 因为ejb3的开发和spring一样的简单 而且ejb3是javaee5规范里的技术 所以大部分项目经理都愿意选择一种开发简单 又被更多厂商兼容的标准技术 北京传智播客教育 北京传智播客教育 ejb3 0的学习资源 ejb3 0入门经典 出版书 网上卖价 45元购买地址 http www china 北京传智播客教育 北京传智播客教育 ejb3的运行环境 ejb3 0应用需要运行在jdk1 5以上版本 进入 北京传智播客教育 北京传智播客教育 ejb3的运行环境 ejb3 0应用需要运行在ejb容器里 下面是一些javaee应用服务器 javaee应用服务器包含web容器和ejb容器 jboss 4 2 x以上版本 是一个成熟的开源的准javaee应用服务器 在开源javaee应用服务器中所占市场份额第一 如果你打算选用开源的javaee应用服务器 那么jboss是最值得选择的 glassfish是一个开源的javaee应用服务器 对javaee规范的支持非常好 其运行性能比较高 因为发展时间相对较短 市场占有率比较低 另外 它能否提供稳定的运行性能 还有待时间的考验 但本人对其后期的发展非常看好 绝对跟jboss有的一拼 weblogic 10以上版本 是商业市场占有率第一的商业javaee应用服务器 它具有出色的稳定性 并提供了人性化的管理界面 还有企业需要使用到的众多功能 但在ejb3 0领域 本人认为它做的比jboss差些 bug比较多 sunapplicationserver 9 0以上版本 商业javaee应用服务器 如果你打算选用商业应用服务器运行ejb3 这个是不错的选择 oracleapplicationserver 10g以上版本 商业javaee应用服务器 如果你的数据库是oracle 要想兼容性更好 这个是不错的选择 apusic应用服务器这是国内的商业javaee应用服务器 主要在政府中占有一定的市场份额 要批评的是 其向开发人员提供的文档实在太少了 本人曾经想在其上面开发应用 结果找了大半天也没有找到需要的开发文档 注意 tomcat目前只是web容器 它不能运行ejb应用 北京传智播客教育 北京传智播客教育 下载与安装jboss 进入 北京传智播客教育 北京传智播客教育 启动jboss 进入jboss的bin目录 找到启动脚本run bat 双击run bat即可启动jboss 此时启动的配置项为default 如果启动出错 请检查下列情况 1 端口是否被占用 如 8080 10992是否为jdk设置的java home和classpath系统变量 如果没有 请按照前面视频介绍的方法设置 3 检查jboss所用的jdk是否1 5以上版本 这些信息可以在jboss的控制台观察到 4 如果启动时出现这样的错误 findstr不是内部或外部命令 也不是可运行的程序或批处理文件 那么应该在系统变量path中追加 systemroot system32 systemroot 最后的办法是重装机器上的jdk 祝你好运 北京传智播客教育 北京传智播客教育 为jboss设置jboss home系统变量 因为在后面的学习中 我们需要使用到系统变量jboss home 它指向jboss的安装路径 所以安装完后我们需要添加该变量 方法是 右键点击 我的电脑 属性 高级 环境变量 在 系统变量 里添加jboss home变量 值为jboss的安装路径 如 d javaeeserver jboss 为了方便输入jboss的命令 我们把jboss的bin目录添加到系统路径里 在系统变量一栏找到变量名为path的选项 点 编辑 在变量值的末尾添加 jboss home bin 北京传智播客教育 北京传智播客教育 ejb中的三种bean 1 会话bean sessionbean 负责与客户端交互 是编写业务逻辑的地方 在会话bean中可以通过jdbc直接操作数据库 但大多数情况下都是通过实体bean来完成对数据库的操作 2 实体bean entitybean 它实际上属于java持久化规范 简称jpa 里的技术 jpa的出现主要是为了简化现有的持久化开发工作和整合orm技术 结束现在hibernate toplink等orm框架各自为营的局面 3 消息驱动bean message drivenbean 它是专门用于异步处理java消息的组件 具有处理大量并发消息的能力 北京传智播客教育 北京传智播客教育 会话bean 无状态会话bean平常 我们使用最多的是无状态bean 因为它的bean实例可供多个用户使用 所以它的性能比有状态bean高 正因为一个bean实例被多个用户使用 那么 前一个用户设置的值有可能被后一个用户所修改 所以它无法正确保存某个用户设置的值 因此是无状态的 有状态会话bean有状态bean平常使用的并不多 因为它的一个bean实例只供一个用户使用 所以性能开销比较大 正因为它的实例只被一个用户使用 用户为它设置的值是不会被其他用户修改 所以可以正确保存用户设置的值 因此是有状态的 北京传智播客教育 北京传智播客教育 如何开发一个无状态会话bean 开发工具 eclipseideforjavaee下载地址 http www eclipse org downloads开发ejb依赖的jar文件可以在jboss安装路径的client目录下找到 通常会把client目录下的所有jar文件添加到项目的类路径下 北京传智播客教育 北京传智播客教育 如何开发一个无状态会话bean 接口 接口可以是远程接口或本地接口 实现类 北京传智播客教育 北京传智播客教育 sessionbean的客户端开发 publicstaticvoidmain string args propertiesprops newproperties props setproperty java naming factory initial org jnp interfaces namingcontextfactory props setproperty java naming provider url localhost 1099 try initialcontextctx newinitialcontext props helloworldhelloworld helloworld ctx lookup helloworldbean remote system out println helloworld sayhello 佛山 catch namingexceptione system out println e getmessage 北京传智播客教育 北京传智播客教育 设置jndi访问环境信息 在进行jndi查找前 我们必须设置应用服务器的上下文信息 主要是设置jndi驱动的类名 java naming factory initial 和命名服务提供者的url java naming provider url java naming factory initial或context initial context factory 环境属性名 用于指定initialcontext工厂 作者称它为jndi驱动更容易理解 它类似于jdbc指定数据库驱动类 因为本例子连接的是jbossns 命名服务的实现者 所以使用jboss提供的驱动类 org jnp interfaces namingcontextfactoryjava naming provider url或context provider url 环境属性名 包含提供命名服务的主机地址和端口号 它类似于jdbc指定数据库的连接url 连接到jbossns的url格式为 jnp host port 该url的 jnp 部分是指使用的协议 jboss使用的是基于socket rmi的协议 host为主机的地址 port为jndi服务的端口 除了host之外 其他部分都是可以不写的 下面是数据库访问例子 class forname org gjt mm mysql driver newinstance propertiesprops newproperties props put user root props put password 123456 connectionconn drivermanager getconnection jdbc mysql localhost 3306 itcast props 北京传智播客教育 北京传智播客教育 设置jndi访问环境信息 如同数据库一样 根据访问命名服务器的不同 为上下文设置的驱动类和url也是不同的 如下面是访问sun应用服务器的上下文信息 propertiesprops newproperties props setproperty java naming factory initial com sun enterprise naming serialinitcontextfactory props setproperty java naming provider url localhost 3700 initialcontext newinitialcontext props helloworldhelloworld helloworld ctx lookup com foshanshop ejb3 helloworld 如果客户端运行在应用服务器内 我们不需要为initialcontext设置应用服务器的上下文信息 也不建议设置 因为应用服务器启动时会把jndi驱动类等上下文信息添加进系统属性 创建initialcontext对象时如果没有指定properties参数 initialcontext内部会调用system getproperty 方法从系统属性里获取必要的上下文信息 对本例子而言 你可以省略传入props参数 之所以给initialcontext设置参数 目的是引出相关知识点 便于教学 在实际应用中 如果给initialcontext设置了参数 反而会带来不可移植的问题 注 创建initialcontext对象时如果没有指定properties参数 initialcontext还会在classpath下寻找jndi properties文件 并从该文件中加载应用服务器的上下文信息 这样避免了硬编码为initialcontext设置properties参数 jndi properties的配置如下 java naming factory initial org jnp interfaces namingcontextfactoryjava naming provider url localhost 1099java naming factory url pkgs org jboss naming org jnp interfaces 北京传智播客教育 北京传智播客教育 jboss默认生成的jndi名称 当ejb发布到jboss时 如果我们没有为它指定全局jndi名称或修改过其默认ejb名称 jboss就会按照默认的命名规则为ejb生成全局jndi名称 默认的命名规则如下 如果把ejb作为模块打包进后缀为 ear的javaee企业应用文件 默认的全局jndi名称是本地接口 ear file base name ejb class name local远程接口 ear file base name ejb class name remoteear file base name为ear文件的名称 ejb class name为ejb的非限定类名 例 把helloworld应用作为ejb模块打包进名为helloworld ear的企业应用文件 它的远程接口的jndi名称是 helloworld helloworldbean remote如果把ejb应用打包成后缀为 jar的模块文件 默认的全局jndi名称是本地接口 ejb class name local远程接口 ejb class name remote例 把helloworld应用打包成helloworld jar文件 它的远程接口的jndi名称是 helloworldbean remote 北京传智播客教育 北京传智播客教育 使用注释改变sessionbean的jndi名称 如果我们没有指定ejb的jndi名称 当ejb发布到应用服务器时 应用服务器会按默认规则为ejb生成全局jndi名称 当我们需要自定义jndi名称时 可以这样做如果ejb在jboss中使用 可以使用jboss提供的 localbinding和 remotebinding注释 localbinding注释指定sessionbean的local接口的jndi名称 remotebinding注释指定sessionbean的remote接口的jndi名称 如下 stateless remote operation class remotebinding jndibinding foshanshop remoteoperation local localoperation class localbinding jndibinding foshanshop localoperation publicclassoperationbeanimplementsoperation localoperation 北京传智播客教育 北京传智播客教育 使用xml部署描述文件改变sessionbean的jndi名称 由于jndi名称与厂商有关 如果使用注释定义jndi名称会带来移植问题 因此建议使用ejb jar xml部署描述文件进行定义 该文件必须放置在jar的meta inf目录下helloworldbeanhelloworldbeanejb name为ejb名称 mapped name为bean的jndi名称 目前jboss不支持在ejb jar xml通过mapped name指定jndi名称 但我们可以使用他专属的部署描述文件jboss xml进行定义 如下 helloworldbeanhello remote 北京传智播客教育 北京传智播客教育 开发具有local接口的sessionbean 之前 我们介绍过远程接口 在这里 我们需要了解一下通过远程接口调用ejb的过程 首先客户端需要与ejb建立起socket通信 在通信管道上他们之间需要来回发送iiop协议消息 因为数据要在网络进行传输 存放数据的java对象必须要进行序列化 socket通信iiop消息在这个过程中我们看到 有网络通信的开销 协议解析的开销 对象序列化的开销 因为ejb是分布式技术 它允许客户端与ejb应用在不同一机器上面 所以这些性能开销也是必然的 但是在实际生产中 不可避免存在这种情况 客户端与ejb应用运行在同一个jboss中 这时候客户端访问ejb是否有必要走上面的网络通信呢 据我们所知 这时候客户端与ejb是在同一个jvm内 他们之间完全可以通过内存进行交互 这样就可以避免网络通信的性能开销 既然我们都想到了这一点 ejb专家组也想到了这一点 所以引入了本地接口 通过本地接口调用ejb 直接在内存中交互 这样就能避免因网络通信所造成的各种性能开销 但是有一点 大家必须注意 只有客户端与ejb应用在同一个jvm内运行的时候 我们才能调用本地接口 否则只能调用远程接口 谈到这里 有同学会问什么情况下客户端与ejb应用是在同一个jvm 简单地说只要客户端与ejb发布在同一个jboss内 我们就认为他们是在同一个jvm 客户端 ejb 北京传智播客教育 北京传智播客教育 开发具有local接口sessionbean stateless local helloworldlocal class publicclasshelloworldbeanimplementshelloworldlocal publicstringsay stringname returnname 说 你好 世界 这是我的第一个ejb3哦 北京传智播客教育 北京传智播客教育 通过local接口访问sessionbean 北京传智播客教育 北京传智播客教育 bean实例的两种管理技术 1 无状态bean使用实例池技术管理bean2 有状态bean使用激活 activation 管理bean 北京传智播客教育 北京传智播客教育 无状态bean访问 是1号用户 指另一个用户 北京传智播客教育 北京传智播客教育 有状态bean的激活机制 每个用户都有自己的bean实例 相当于有多少个用户就有多少个bean实例为之服务 如果不采取任何机制 这样必然会导致服务器资源严重消耗 最后落个down机罢工 为了解决这个问题 ejb引入了激活机制 该机制实现的原理是这样的 在ejb服务器需要节省资源时 就从内存中收回bean实例 将其所保持的会话状态序列化到硬盘中 并且释放其所占有的内存 若此时客户端对ejb再次发起请求 ejb容器会重新实例化一个bean实例 并从硬盘中将之前的状态恢复 北京传智播客教育 北京传智播客教育 ejb调用机制 由于ejb的调用过程对开发者来说是透明的 以至于我们错误地认为 lookup 方法返回的对象就是bean实例 实际上 客户端与sessionbean交互 它并不直接与bean实例打交道 而是经由bean的远程或本地接口 当你调用远程或本地接口的方法时 接口使用的是存根 stub 对象 该存根实现了sessionbean的远程或本地接口 它负责将方法调用经过网络发送到远程ejb容器 或将请求路由到位于本地jvm内的ejb容器 存根是在部署期间使用jdk所带的java lang reflect proxy动态生成 北京传智播客教育 北京传智播客教育 ejb调用机制 第一步 客户端调用远程接口的sayhello 方法 实际上调用的是存根对象的sayhello 方法 该存根实现了helloworld的远程接口 第二步 方法调用经过iiopruntime被转换成corbaiiop消息发往应用服务器 第三步 应用服务器接收到请求消息后 交由骨架 skeleton 处理 骨架通过iiopruntime解析协议消息 并根据协议要求调用bean实例的sayhello 方法 第四步 骨架 skeleton 将sayhello 方法的返回值经过iiopruntime转换成corbaiiop应答消息发回客户端 第五步 存根对象通过iiopruntime将corbaiiop应答消息解析成返回值 北京传智播客教育 北京传智播客教育 依赖注入 dependencyinjection 注入ejb stateless remote injection class publicclassinjectionbeanimplementsinjection ejb beanname hellobean localhellohelloworld publicstringsayhello returnhelloworld sayhello 注入者 北京传智播客教育 北京传智播客教育 依赖注入 dependencyinjection 注入数据源 resource mappedname java defaultmysqlds datasourcemydb connectionconn null try conn mydb getconnection statementstmt conn createstatement resultsetrs stmt executequery selectstudentnamefromstudent if rs next str rs getstring 1 rs close stmt close catch sqlexceptione e printstacktrace finally try if null conn 北京传智播客教育 北京传智播客教育 在jboss中配置数据源 defaultmysqldsjdbc mysql localhost 3306 itcast useunicode truecharacterencoding utf 8org gjt mm mysql driverroot1234563100transaction serializable org jboss resource adapter jdbc vendor mysqlexceptionsortermysql 北京传智播客教育 北京传智播客教育 实体bean 它属于java持久化规范 简称jpa 里的技术 实体bean通过元数据在javabean和数据库表之间建立起映射关系 然后java程序员就可以随心所欲的使用面向对象的编程思想来操纵数据库 jpa的出现主要是为了简化现有的持久化开发工作和整合orm技术 目前实现的jpa规范的主流产品有hibernate toplink和openjpa 在jboss中采用了hibernate作为其持久化实现产品 北京传智播客教育 北京传智播客教育 添加jpa的配置文件persistence xml 根据jpa规范的要求 在实体bean应用中 我们需要在应用的类路径下的meta inf目录加入持久化配置文件persistence xml 北京传智播客教育 北京传智播客教育 实体bean 当插入中文字符时会报 datatoolongforcolumn 你可以使用下面的sql创建数据库 createdatabase foshanshop defaultcharset utf8 北京传智播客教育 北京传智播客教育 java消息服务 javamessageservice java消息服务 javamessageservice 简称jms 是用于访问企业消息系统的开发商中立的api 企业消息系统可以协助应用软件通过网络进行消息交互 jms的编程过程很简单 概括为 应用程序a发送一条消息到消息服务器的某个目得地 destination 然后消息服务器把消息转发给应用程序b 因为应用程序a和应用程序b没有直接的代码关连 所以两者实现了解偶 如下图 北京传智播客教育 北京传智播客教育 jms中的消息 消息传递系统的中心就是消息 一条message由三个部分组成 头 header 属性 property 和主体 body 消息有下面几种类型 他们都是派生自message接口 streammessage 一种主体中包含java基元值流的消息 其填充和读取均按顺序进行 mapmessage 一种主体中包含一组名 值对的消息 没有定义条目顺序 textmessage 一种主体中包含java字符串的消息 例如 xml消息 objectmessage 一种主体中包含序列化java对象的消息 bytesmessage 一种主体中包含连续字节流的消息 北京传智播客教育 北京传智播客教育 消息的传递模型 jms支持两种消息传递模型 点对点 point to point 简称ptp 和发布 订阅 publish subscribe 简称pub sub 这两种消息传递模型非常相似 但有以下区别 ptp消息传递模型规定了一条消息只能传递给一个接收方 采用javax jms queue表示 pub sub消息传递模型允许一条消息传递给多个接收方 采用javax jms topic表示这两种模型都通过扩展公用基类来实现 例如 javax jms queue和javax jms topic都扩展自javax jms destination类 北京传智播客教育 北京传智播客教育 点对点ptp消息传递模型 北京传智播客教育 北京传智播客教育 发布 订阅消息传递模型 北京传智播客教育 北京传智播客教育 配置目标地址 开始jms编程前 我们需要先配置消息到达的目标地址 destination 因为只有目标地址存在了 我们才能发送消息到这个地址 由于每个应用服务器关于目标地址的配置方式都有所不同 下面以jboss为例 配置一个queue类型的目标地址 queue foshanshopjboss mq service destinationmanagerjboss使用一个xml文件配置队列地址 文件的取名格式应遵守 service xml属性指定了该目标地址的全局jndi名称 如果你不指定jndiname属性 jboss会为你生成一个默认的全局jndi 其名称由 queue 目标地址名称组成 另外在任何队列或主题被部署之前 应用服务器必须先部署destinationmanagermbean 所以我们通过节点声明这一依赖 北京传智播客教育 北京传智播客教育 在java类中发送消息 一般发送消息有以下步骤 1 得到一个jndi初始化上下文 context initialcontextctx newinitialcontext 2 根据上下文查找一个连接工厂queueconnectionfactory 该连接工厂是由jms提供的 不需我们自己创建 每个厂商都为它绑定了一个全局jndi 我们通过它的全局jndi便可获取它 queueconnectionfactoryfactory queueconnectionfactory ctx lookup queueconnectionfactory 3 从连接工厂得到一个连接queueconnectionconn factory createqueueconnection 4 通过连接来建立一个会话 session session conn createqueuesession false queuesession auto acknowledge 这句代码意思是 建立不需要事务的并且能自动确认消息已接收的会话 5 查找目标地址 例子对应代码 destinationdestination destination ctx lookup queue foshanshop 6 根据会话以及目标地址来建立消息生产者messageproducer queuesender和topicpublisher都扩展自messageproducer接口 例子对应代码 messageproducerproducer session createproducer destination textmessagemsg session createtextmessage 您好 这是我的第一个消息驱动bean producer send msg 北京传智播客教育 北京传智播客教育 采用消息驱动bean messagedrivenbean 接收消息 消息驱动bean mdb 是设计用来专门处理基于消息请求的组件 它和无状态sessionbean一样也使用了实例池技术 容器可以使用一定数量的bean实例并发处理成百上千个jms消息 正因为mdb具有处理大量并发消息的能力 所以非常适合应用在一些消息网关产品 如果一个业务执行的时间很长 而执行结果无需实时向用户反馈时 也很适合使用mdb 如订单成功后给用户发送一封电子邮件或发送一条短信等 一个mdb通常要实现messagelistener接口 该接口定义了onmessage 方法 bean通过它来处理收到的jms消息 packagejavax jms publicinterfacemessagelistener publicvoidonmessage messagemessage 当容器检测到bean守候的目标地址有消息到达时 容器调用onmessage 方法 将消息作为参数传入mdb
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 护理系毕业论文8000
- 洗衣机动气来了幼儿园托班社会教案
- 毕业论文致谢放在里
- 高铁乘务专业的毕业论文设计
- 2025年住宅装饰工程实施合同模板
- 2025年植物新品种权买卖与授权协议
- 大一新生自我介绍样本(7篇)
- 2024年安全教育日班会教案
- 云南省红河哈尼族彝族自治州中级煤矿采煤机(掘进机)操作作业技能鉴定试卷(带答案)
- 我们的广告幼儿园教案
- 标准化管理意识培训课件
- 2025年幼儿教师资格保教知识与能力试题及答案
- (2025年标准)职工转岗协议书
- 2026年色彩流行趋势报告
- 2025年江苏劳动保障协理员招聘考试(劳动保障相关业务知识)历年参考题库含答案详解(5套)
- 电梯转让协议书范本
- 2025年火电电力职业技能鉴定考试-风力发电运行检修员历年参考题库含答案解析(5套典型题)
- 2025湖南省低空经济发展集团有限公司招聘12人(第二次)笔试参考题库附带答案详解(10套)
- 医患沟通技巧试题及答案
- 牛仔裤廓形趋势报告
- 2025年电动洗胃考试试题及答案
评论
0/150
提交评论