600 likes | 791 Views
软件构件与中间件技术. cb@zjut.edu.cn. 什么是EJB?. Enterprise Java Bean 开发EJB的目的 易于扩展,健壮并安全的应用程序. 传统多层应用程序. client. client. client. server. server. db. 企业级程序特点. 大量硬件和应用程序通过网络互连 应用程序在网络间共享(网络调用). 大型企业系统需要考虑的问题. 远程方法调用 事务(并发) 软件升级(重新部署)需要停机? 正确/透明关机(用户感觉不到) 系统监控(全部) 对象生命周期(客户少,用资源也少?)
E N D
软件构件与中间件技术 cb@zjut.edu.cn
什么是EJB? • Enterprise Java Bean • 开发EJB的目的 • 易于扩展,健壮并安全的应用程序
传统多层应用程序 client client client server server db
企业级程序特点 • 大量硬件和应用程序通过网络互连 • 应用程序在网络间共享(网络调用)
大型企业系统需要考虑的问题 • 远程方法调用 • 事务(并发) • 软件升级(重新部署)需要停机? • 正确/透明关机(用户感觉不到) • 系统监控(全部) • 对象生命周期(客户少,用资源也少?) • 安全和高速缓冲
中间件 • 以上工作由 • 客户端(Browser)来做? • 现成网络服务器来做?(只能做部份) • 由数据库服务器来做?(一小部份) • 由程序员自己写代码处理(困难) • 引入中间件!复杂问题由它来处理
自行开发中间件的问题 • 各人开发各人的,标准不统一,不兼容 • 开发难度大,周期太长,不符合需要 • J2EE容器是一个合适的,标准化的中间件
EJB是中间件体系的一部份 • EJB是什么? • 一个EJB是由java开发的,可以部署的,服务器端的组件 • EJB体系指的是这些组件组成的体系结构,由j2ee容器支持
EJB的优点 • 它是统一的中间件标准.按这一标准开发,容易买到合适的组件,也容易卖掉组件..有利润 • EJB有统一的规范,程序移植性非常好. • 系统开发规范,所以快速!(非常重要)
组件结构除了EJB还有.. • 比尔盖次 .net的可控组件 • 公共对象请求代理结构(CORBA)
EJB具体是什么? • 在用户看来,EJB是 • 若干.java程序 • 一个xml格式的部署文件 • 一个j2ee容器的专门部署文件 • EJB程序经过部署,在weblogic等容器上运行,自动实现中间件的特性(看前面的特性一页)
部署文件说明ejb的组成的位置 说明ejb功能的接口(哪些方法) 说明如何创建ejb的接口 Ejb的实际类 Weblogic等服务器的部署文件 至少五个部份组成一个ejb,打包成jar后发布到服务器
EJB可以做哪些业务内容? • 执行商务逻缉(算算税收,图书过期罚款等) • 数据库存取(通过jdbc),取指定图书,计算某本书的借书量 • 访问其它系统,比如erp
谁?怎么使用EJB? 网络连接 胖客户 (Applet /application) EJBS 瘦客户 Servlet/jsp EJBS SOAP,WSDL 企业客户 Web service EJBS
回顾:EJB的角色 工具提供者 系统集成者 部署者 管理维护者 Bean提供者 Ejb容器提供者
j2ee中间件必须支持的API • EJB • RMI • JNDI • JDBC • JTA • JMS • JSP/SERVLET • XML • JAAS
EJB基础结构 • Ejb的完整组成部份是 • Ejb类, • 远程接口和ejb对象 • 本地接口和本地对象 • Home接口和Home对象 • 部署描述文件 • Ejb-jar文件
EJB类型(老生常谈) • Session Bean会话bean,动词. • 处理动作:计算价格,计算罚款等 • Entity Bean实体bean.名词.是数据库数据的java对象表示 • MessageBean 也代表动作,只不过只有发消息才能驱动它们.
分布式对象(非常重要) 远程机器 i 被调用的对象 client 远程接口 映射 TCP/IP网络 远程接口 skeleton stub 代理 远程机器1 本地机器
处理事务 client object 处理安全 连接数据库 远程接口 stub skeleton net 显式中间件
显式中间件特点 • 可控制性强,一切都在掌握中.. • 代码难写.我想算一下图书罚款,可是.. • Step1 安全检查(远程调用) • Step2 事务检查(远程调用) • Step3存取数据库(远程调用) • Step4 完成调用(远程调用) • 每次都必须走stub/skeleton,非常复杂!直接指定中间件的动作...真要命
使用显式中间件的代码 • 调用安全检查 • 启动事务 • 从数据库装数据 • 数据计算罚款 • 向数据库写数据 • 结束事务 • 注销用户
显式中间件对用户要求过高 • 显式中间件有 • Tuxedo 和CICS(weblogic里专门有tuxedo连接器) • 程序必须清楚中间件的api • 程序员脑子要爆炸了..
隐式中间件非常简单 • 要算罚款么?代码只要写 • 计算罚款 • 结束. • 那么,安全检查,事务,数据库这些东西还做不做呢?
处理事务 处理安全 连接数据库 隐式中间件 client object 远程接口 请求拦截者 请求拦截者做安全, 事务,数据库 怎么做由描述文件 来指定. stub skeleton net
EJB的组成1 EJB类 • 以计算罚款处理为例,EJB类包括核心逻辑:算罚款. • 所有EJB类必须实现javax.ejb.EnterpriseBean接口 • 实际上三类ejb实现各自的接口,比如sessionBean等,而sessionBean最终实现EnterpriseBean接口
EJB组成2 EJB对象 • 还记得拦截器么? • Ejb放在远程机器上,而客户在本地机器上. • 客户不可以直接调用远程ejb,要通过网络 • 客户不希望自己控制安全,事务等 • 拦截器在j2ee里实现为一个EJB对象
EJB对象 Ejb container 事务安全数据库 client EJB对象ejb object 这给用户看见 远程接口 EJB类,缩在里面 不给用户看见 放核心逻辑 拦截器
Ejb对象,表现给用户看 这个对象由系统生成 EJB类(核心逻辑) 包括:void 罚款(…)业务 客户看不见 EJB结构
Ejb对象,表现给用户看 这个对象由系统生成 EJB类(核心逻辑) 包括:void 罚款(…)业务 客户看不见 Ejb组成3 远程接口 远程接口,EJB提供者写,表明 1 给用户看见多少业务方法 2 实现哪些系统方法 Public interface javax.ejb.EJBObject { getEJBHome,getHandle,..)
远程接口的作用 • 客户不直接和ejb或者ejb对象打交道 • Ejb有些什么方法,只能看远程接口里写了多少方法 • 远程接口是ejb的对外表现形式. • 远程接口里的业务方法全部可以通过网络远程调用.
Ejb组成之四:Home对象 • Ejb对象和远程接口都在远程机器上 • Ejb被ejb对象和远程接口封装了 • 远程机器上的远程接口表现了ejb的行为 • 可是,客户在本地..怎么办? Remote接口 Ejb Ejbobject client ?
位置透明 • Ejb可以存在任何一台机器上 • http://127.0.0.1/ejb名,这种形式不灵活 • 所以用到JNDI,要找一个ejb您必须: • 1连接到JNDI服务器 • 2查到ejb名字,再取得引用 • 3把引用返回给客户 • 4客户创建一个ejb实例
Home对象的目的 • Home对象负责在本地: • 生成ejb实例 • 删除ejb实例 • 生成和删除和容器紧密相关,所以 • Home对象由系统生成(容器)
EJB部件之五:Home接口 • Home对象用户看不见 • 创建ejb 实例的时候,需要参数初始化 • 参数通过Home接口传给容器,然后传给Home对象,然后给远程接口 • Home接口用于 • 指明定义,生成,回收查找ejb实例 • 具体工作由Home对象来做
Home接口和对象 事务安全数据库 Home对象 Home接口 Ejb核心类 EJB对象 Remote 接口 拦截器
Ejb部件六本地对象和本地接口 • Ejb的调用过程本质上还是通过stub-skeleton的. • 通过网络连接比较费时 • 本地调试时用EJBLocalHome代替EJBHome,不通过网络连接本机 • 牺牲了所有的分布网络特性,调试时用
Ejb部件之七 部署描述 • 安全性,事务,数据库都交给容器了,用户不必要编码. • 但必须告诉容器,处理的方式 • Xml来告诉容器,称为部署描述 • Bean的生命期,安全性,事务都在xml里面指定 • 和web.xml有点象.Web.xml描述web应用程序,这里是ejb-jar.xml描述.和web.xml是同一级的
Ejb部件之八 供应商文件 • Weblogic • Jboss • Websphere • 特定容器的特定描述 • Ejb-weblogic.xml? • Ejb-websphere.xml? • 告诉容器额外的信息
Ejb部件之九 ejb-jar文件 Home接口/ 对象 本地接口/ 对象* Ejb-jar Remote接口/ EJB对象 部署描述xml EJB核心类 厂商描述xml
出卖/购买ejb • 一个Ejb-jar文件打了包卖 • 每个bean单独卖 • 单独卖了以后卖服务,帮用户组装部署 • 赚钱中...
说了这么多,复习! • Ejb核心类/实例 • Remote接口和EJB对象 • Home接口和Home对象 • 本地接口和本地对象 • 部署描述文件 • 供应商文件 • Ejb-jar文件
在Weblogic中创建并调试ejb • 准备软件:jbuilder+weblogic • 目标:创建一个无状态的sessionbean • 发布到weblogic • 编一个客户程序调用bean的方法,同时输出结果。 • 注意:weblogic的jndi在t3://127.0.0.1:7001上,使用方法同一般jndi.
第一个ejb要做什么? • 有一个getName的逻辑方法,用来显示hello world的字符串
Step1建立ejb模块 • File-new-ejb module,比如叫firstEjb • 出现图形化的ejb-designer • 右键,创建一个新的ejb,指定为ejb2.0的sessionbean • 起个名字叫TestSes
Step2:给ejb加入商务逻缉方法 • 右击testSes,add ,method加入方法,方法名是getName,返回String,然后接口类型是Remote(对象自己的) • 双击左栏的testSesBean文件名,打开这个bean • 这就是核心bean,继承sessionBean,方法getName改成public java.lang.String getName() { • return “你写欢迎的话吧!";}
Step3 自动产生jar文件 • 在project上选择Make,等啊等啊。。 • 成功乐!双击jar文件。。 • anifest-Version: 1.0 • zengejb/TestSesHome.class//home接口 • Name: META-INF/ejb-jar.xml//部署文件 • Name: zengejb/TestSes.class//ejb对象 • Name: META-INF/weblogic-ejb-jar.xml//应用 • Name: zengejb/TestSesBean.class//逻缉类 • 这些是什么?全部自动产生,爽啊