ImageVerifierCode 换一换
格式:PDF , 页数:15 ,大小:750.01KB ,
资源ID:4300517      下载积分:8 金币
验证码下载
登录下载
邮箱/手机:
验证码: 获取验证码
温馨提示:
支付成功后,系统会自动生成账号(用户名为邮箱或者手机号,密码是验证码),方便下次登录下载和查询订单;
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

开通VIP
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.zixin.com.cn/docdown/4300517.html】到电脑端继续下载(重复下载【60天内】不扣币)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  
声明  |  会员权益     获赠5币     写作写作

1、填表:    下载求助     索取发票    退款申请
2、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
3、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
4、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
5、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前自行私信或留言给上传者【快乐****生活】。
6、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
7、本文档遇到问题,请及时私信或留言给本站上传会员【快乐****生活】,需本站解决可联系【 微信客服】、【 QQ客服】,若有其他问题请点击或扫码反馈【 服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【 版权申诉】”(推荐),意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:4008-655-100;投诉/维权电话:4009-655-100。

注意事项

本文(J2EE学习笔记知识点精粹(servlet-websoket-webservice-Jax-rs-EJB-JPA)教材127.pdf)为本站上传会员【快乐****生活】主动上传,咨信网仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知咨信网(发送邮件至1219186828@qq.com、拔打电话4008-655-100或【 微信客服】、【 QQ客服】),核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载【60天内】不扣币。 服务填表

J2EE学习笔记知识点精粹(servlet-websoket-webservice-Jax-rs-EJB-JPA)教材127.pdf

1、说明:在编程中我们会在某个类、方法或变量前面加上说明:在编程中我们会在某个类、方法或变量前面加上x,来表明这个类、方法或变量具有,来表明这个类、方法或变量具有 x 属性。属性。1.Servlet1).Servlet 是什么?是什么?Java Servlet 是运行在 Web 服务器或应用服务器上的程序,它是作为来自 Web 浏览器或其他 HTTP 客户端的请求和 HTTP 服务器上的数据库或应用程序之间的中间层。2).Servlet 有以下几点优势 (1).性能明显更好。(2).Servlet 在 Web 服务器的地址空间内执行。这样它就没有必要再创建一个单独的进程来处理每个客户端请求。(3)

2、.Servlet 是独立于平台的,因为它们是用 Java 编写的。(4).服务器上的 Java 安全管理器执行了一系列限制,以保护服务器计算机上的资源。因此,Servlet 是可信的。(5).Java 类库的全部功能对 Servlet 来说都是可用的。它可以通过 sockets 和 RMI 机制与 applets、数据库或其他软件进行交互。3).Servlet 架构过程为:(1)客户端发送请求至服务器端;(2)服务器将请求信息发送至 Servlet;(3)Servlet 生成响应内容并将其传给服务器。响应内容动态生成,通常取决于客户端的请求;(4)服务器将响应返回给客户端。4).servlet

3、4).servlet 生命周期生命周期(1).客户端请求该 Servlet;(2).加载 Servlet 类到内存;(3).实例化并调用 init()方法初始化该 Servlet;(4).service()(根据请求方法不同调用 doGet()或者 doPost(),此外还有 doGet()、doPut()、doTrace()、doDelete()、doOptions());(5).destroy()。5).看一下老师 ppt 和教程(这个很不错 http:/ servlet-api.chm2.web socket(1).web socket:是 HTML5 一种新的协议协议。它实现了浏览器与

4、服务器全双工通信(full-duplex)。(2).websocket 的优点的优点 以前我们实现推送技术,用的都是轮询,在特点的时间间隔有浏览器自动发出请求,将服务器的消息主动的拉回来,在这种情况下,我们需要不断的向服务器 发送请求,然而 HTTP request 的 header 是非常长的,里面包含的数据可能只是一个很小的值,这样会占用很多的带宽和服务器资源。会占用大量的带宽和服务器资源。WebSocket API 最伟大之处在于服务器和客户端可以在给定的时间范围内的任意时刻,相互推送信息。在建立连接之后,服务器可以主动传送数据给客户端。此外,服务器与客户端之间交换的标头信息很小。Web

5、Socket 并不限于以 Ajax(或 XHR)方式通信,因为 Ajax 技术需要客户端发起请求,而 WebSocket 服务器和客户端可以彼此相互推送信息;WebSocket 的握手过程主要有一下两个步骤:的握手过程主要有一下两个步骤:1).WebSocket 客户端首先发起一个连接请求。请求数据中包括服务器的 IP 和端口、以及客户端随机生成的 Key 等。2).服务器端根据客户端的 key 生成密钥,并将密钥返回给客户端,握手成功。由于 WebSocket 的连接本质是一个 TCP 连接,所以与传统的浏览器轮询方式比,这种方式对于数据传输的稳定性和数据量大小方面都有一定的优势。而很多实验

6、也证明在流量比较大的情况下,使用 WebSocket 也具有很大的性能优势。(3).如何使用如何使用 websocket(分客户端和服务器端,两个启动后保持连接才能即时通信,当然了系统性能会降低分客户端和服务器端,两个启动后保持连接才能即时通信,当然了系统性能会降低)客户端客户端在支持 WebSocket 的浏览器中,在创建 socket 之后。可以通过 onopen,onmessage,onclose 即 onerror 四个事件实现对 socket 进行响应.一个简单是示例:var wsServer=ws:/localhost:8888/Demo;var websocket=new Web

7、Socket(wsServer);websocket.onopen=function(evt)onOpen(evt);websocket.onclose=function(evt)onClose(evt);websocket.onmessage=function(evt)onMessage(evt);websocket.onerror=function(evt)onError(evt);function onOpen(evt)console.log(Connected to WebSocket server.);function onClose(evt)console.log(Disconne

8、cted);function onMessage(evt)console.log(Retrieved data from server:+evt.data);function onError(evt)console.log(Error occured:+evt.data);1).var ws=new WebSocket(“ws:/localhost:8888/Demo”);申请一个 WebSocket 对象,参数是需要连接的服务器端的地址,同 http 协议使用 http:/开头一样,WebSocket 协议的 URL 使用 ws:/开头,另外安全的 WebSocket 协议使用 wss:/开

9、头。ws.send(“hello”)用于叫消息发送到服务端2).ws.onopen=function()console.log(“open”);当 websocket 创建成功时,即会触发 onopen 事件3).ws.onmessage=function(evt)console.log(evt.data);当客户端收到服务端发来的消息时,会触发 onmessage 事件,参数 evt.data 中包含 server 传输过来的数据4).ws.onclose=function(evt)console.log(“WebSocketClosed!”);当客户端收到服务端发送的关闭连接的请求时,触发

10、 onclose 事件5).ws.onerror=function(evt)console.log(“WebSocketError!”);如果出现连接,处理,接收,发送数据失败的时候就会触发 onerror 事件我们可以看出所有的操作都是采用事件的方式触发的,这样就不会阻塞 UI,使得 UI 有更快的响应时间,得到更好的用户体验。服务端服务端这里我使用的是 tomat 7.0 和 eclipse4.2在 tomcat 下使用 websocket 首先需要导入相关的 jartomcat7 提供的与 WebSocket 相关的类均位于包 org.apache.catalina.websocket

11、之中(包 org.apache.catalina.websocket 的实现包含于文件 catalina.jar 之中这里我们把 tomcat 的全部导入就行了在 build path-configure build path-librarise-add library-server runtime-apache tomcat v7.0 image同时需要 import 以下包import org.apache.catalina.websocket.MessageInbound;import org.apache.catalina.websocket.StreamInbound;import

12、org.apache.catalina.websocket.WsOutbound;import org.apache.catalina.websocket.WebSocketServlet;需要两个类需要两个类第一个用于处理 websocket 请求第二个用于处理每一次具体的 WebSocket 任务 第一个类第一个类public class SocketServer extends WebSocketServlet private static final long serialVersionUID=1L;/Override protected StreamInbound createWeb

13、SocketInbound(String arg0,HttpServletRequest arg1)/TODO Auto-generated method stub return new ChatWebSocket(users);这个 Servlet 继承自 WebSocketServlet,实现 createWebSocketInbound 方法。该方法返回第二个类的实例。第二个类第二个类(传统的非注解开发传统的非注解开发)public class ChatWebSocket extends MessageInbound Override protected void onTextMessa

14、ge(CharBuffer message)throws IOException Override protected void onOpen(WsOutbound outbound)Override protected void onClose(int status)Override protected void onBinaryMessage(ByteBuffer arg0)throws IOException /其余略 /文本消息响应protected void onTextMessage(CharBuffer message)throws IOException /二进制消息响应pro

15、tected void onBinaryMessage(ByteBuffer arg0)throws IOException /sendObject(envelope)/数据流getSendStream()Java InputStreamgetSendWriter()Java Writer/建立连接的触发的事件protected void onOpen(WsOutbound outbound)/关闭连接时触发的事件 protected void onClose(int status)注解开发:在类上加注解开发:在类上加ServerEndpoint,在每个方法上面写对应的注解就可以了,在每个方法

16、上面写对应的注解就可以了WebSocketEndpointClass level annotation for websocket server endpointWebSocketClient Class level annotation for websocket client endpointWebSocketOpen Method level annotation signifies a method to be called whenever a new client connects to this endpointWebSocketCloseMethod level annotat

17、ion signifies a method to be called whenever a new client is about to disconnects from this endpointWebSocketMessageMethod level annotation signifies a method to be called whenever an incoming message is received例:例:ServerEndpoint(/chat)public class ChatServer OnMessagepublic String receiveMessage(S

18、tring message)/.(4).Core WebSocket methods 流程图流程图 注:websocket 在信息传递过程支持加密、解密功能(Encode/Decode)(5).WebSockets 的应用场景的应用场景1.社交订阅社交订阅对社交类的应用的一个裨益之处就是能够即时的知道你的朋友正在做什么。虽然听起来有点可怕,但是我们都喜欢这样做。你不会想要在数分钟之后才能知道一个家庭成员在馅饼制作大赛获胜或者一个朋友订婚的消息。你是在线的,所以你的订阅的更新应该是实时的。2.多玩家游戏多玩家游戏网络正在迅速转变为游戏平台。在不使用插件(我指的是 Flash)的情况下,网络开发者

19、现在可以在浏览器中实现和体验高性能的游戏。无论你是在处理 DOM 元素、CSS 动画,HTML5 的 canvas 或者尝试使用 WebGL,玩家之间的互动效率是至关重要的。我不想在我扣动扳机之后,我的对手却已经移动位置。3.协同编辑协同编辑/编程编程我们生活在分布式开发团队的时代。平时使用一个文档的副本就满足工作需求了,但是你最终需要有一个方式来合并所有的编辑副本。版本控制系统,比如 Git 能够帮助处理某些文件,但是当 Git 发现一个它不能解决的冲突时,你仍然需要去跟踪人们的修改历史。通过一个协同解决方案,比如 WebSocket,我们能够工作在同一个文档,从而省去所有的合并版本。这样会

20、很容易看出谁在编辑什么或者你在和谁同时在修改文档的同一部分。4.点击流数据点击流数据分析用户与你网站的互动是提升你的网站的关键。HTTP 的开销让我们只能优先考虑和收集最重要的数据部分。然后,经过六个月的线下分析,我们意识到我们应该收集一个不同的判断标准一个看起来不是那么重要但是现在却影响了一个关键的决定。与 HTTP 请求的开销方式相比,使用 Websocket,你可以由客户端发送不受限制的数据。想要在除页面加载之外跟踪鼠标的移动?只需要通过 WebSocket 连接发送这些数据到服务器,并存储在你喜欢的 NoSQL 数据库中就可以了(MongoDB 是适合记录这样的事件的)。现在你可以通过

21、回放用户在页面的动作来清楚的知道发生了什么。5.股票基金报价股票基金报价金融界瞬息万变几乎是每毫秒都在变化。我们人类的大脑不能持续以那样的速度处理那么多的数据,所以我们写了一些算法来帮我们处理这些事情。虽然你不一定是在处理高频的交易,但是,过时的信息也只能导致损失。当你有一个显示盘来跟踪你感兴趣的公司时,你肯定想要随时知道他们的价值,而不是 10 秒前的数据。使用 WebSocket 可以流式更新这些数据变化而不需要等待。6.体育实况更新体育实况更新现在我们开始讨论一个让人们激情澎湃的愚蠢的东西体育。我不是运动爱好者,但是我知道运动迷们想要什么。当爱国者在打比赛的时候,我的妹夫将会沉浸于这场比

22、赛中而不能自拔。那是一种疯狂痴迷的状态,完全发自内心的。我虽然不理解这个,但是我敬佩他们与运动之间的这种强烈的联系,所以,最后我能做的就是给他的体验中降低延迟。如果你在你的网站应用中包含了体育新闻,WebSocket 能够助力你的用户获得实时的更新。7.多媒体聊天多媒体聊天视频会议并不能代替和真人相见,但当你不能在同一个屋子里见到你谈话的对象时,视频会议是个不错的选择。尽管视频会议私有化做的“不错”,但其使用还是很繁琐。我可是开放式网络的粉丝,所以用 WebSockets getUserMedia API 和 HTML5 音视频元素明显是个不错的选择。WebRTC 的出现顺理成章的成为我刚才概

23、括的组合体,它看起来很有希望,但其缺乏目前浏览器的支持,所以就取消了它成为候选人的资格。8.基于位置的应用基于位置的应用越来越多的开发者借用移动设备的 GPS 功能来实现他们基于位置的网络应用。如果你一直记录用户的位置(比如运行应用来记录运动轨迹),你可以收集到更加细致化的数据。如果你想实时的更新网络数据仪表盘(可以说是一个监视运动员的教练),HTTP 协议显得有些笨拙。借用 WebSocket TCP 链接可以让数据飞起来。9.在线教育在线教育上学花费越来越贵了,但互联网变得更快和更便宜。在线教育是学习的不错方式,尤其是你可以和老师以及其他同学一起交流。很自然,WebSockets 是个不错

24、的选择,可以多媒体聊天、文字聊天以及其它优势如与别人合作一起在公共数字黑板上画画.3.web Service个人总结:个人总结:Web Services 就是用 WSDL 语言描述的,在 UDDI 注册中心注册的,用户可以通过 SOAP 协议调用的对外接口(函数)。Web Service 也叫 XML Web Service WebService 是一种可以接收从 Internet 或者 Intranet 上的其它系统中传递过来的请求,轻量级的独立的通讯技术。是:通过 SOAP 在 Web 上提供的软件服务,使用 WSDL 文件进行说明,并通过 UDDI 进行注册。SOA(面向服务的体系结构)

25、:面向服务的体系结构是一个组件模型,它将应用程序的不同功能单元(称为服务)通过这些服务之间定义良好的接口和契约联系起来。XML:(Extensible Markup Language)扩展型可标记语言。面向短期的临时数据处理、面向万维网络,是 Soap 的基础。66Soap:(Simple Object Access Protocol)简单对象存取协议。是 XML Web Service 的通信协议。当用户通过 UDDI 找到你的 WSDL 描述文档后,他通过可以 SOAP 调用你建立的 Web 服务中的一个或多个操作。SOAP 是 XML 文档形式的调用方法的规范,它可以支持不同的底层接口,

26、像 HTTP(S)或者 SMTP。WSDL:(Web Services Description Language)WSDL 文件是一个 XML 文档,用于说明一组 SOAP 消息以及如何交换这些消息。大多数情况下由软件自动生成和使用。UDDI(Universal Description,Discovery,and Integration)是一个主要针对 Web 服务供应商和使用者的新项目。在用户能够调用 Web 服务之前,必须确定这个服务内包含哪些商务方法,找到被调用的接口定义,还要在服务端来编制软件,UDDI 是一种根据描述文档来引导系统查找相应服务的机制。UDDI 利用 SOAP 消息机制

27、(标准的 XML/HTTP)来发布,编辑,浏览以及查找注册信息。它采用 XML 格式来封装各种不同类型的数据,并且发送到注册中心或者由注册中心来返回需要的数据。实现一个完整的 Web 服务包括以下步骤:Web 服务提供者设计实现 Web 服务,并将调试正确后的 Web 服务通过 Web 服务中介者发布,并在 UDDI 注册中心注册;(发布)Web 服务请求者向 Web 服务中介者请求特定的服务,中介者根据请求查询 UDDI 注册中心,为请求者寻找满足请求的服务;(发现)Web 服务中介者向 Web 服务请求者返回满足条件的 Web 服务描述信息,该描述信息用 WSDL 写成,各种支持 Web

28、服务的机器都能阅读;(发现)利用从 Web 服务中介者返回的描述信息生成相应的 SOAP 消息,发送给 Web 服务提供者,以实现 Web 服务的调用;(绑定)Web 服务提供者按 SOAP 消息执行相应的 Web 服务,并将服务结果返回给 Web 服务请求者。(绑定)Web Service 的基本原理 (1)Service Provider 采用 WSDL 描述服务 (2)Service Provider 采用 UDDI 将服务的描述文件发布到 UDDI 服务器(Register server)(3)Service Requestor 在 UDDI 服务器上查询并 获取 WSDL 文件 (4

29、)Service requestor 将请求绑定到 SOAP,并访问相应的服务。Tips:WSDL 与 SOAP WSDL:Web Service Description Language(Web 服务描述语言)。作用:(1)描述服务是什么,服务提供的操作(方法名,方法参数,返回值,数据类型等);(2)如何访问该服务binding (3)服务访问的地址service Banding:定义 Web 服务访问采用的协议(SOAP)SOAP:Simple Object Access Protocol(简单对象访问协议)4.jax-ws(JavaTM API forXML-Based Web Serv

30、ices)是面向资源的是面向资源的1).基本概述基本概述 (1).JAX-WS 规范是一组 XML web services 的 JAVA API,JAX-WS 允许开发者可以选择 RPC-oriented 或者 message-oriented 来实现自己的 web services。(2).在 JAX-WS 中,一个远程调用可以转换为一个基于 XML 的协议例如 SOAP,在使用 JAX-WS 过程中,开发者不需要编写任何生成和处理 SOAP 消息的代码。JAX-WS 的运行时实现会将这些 API 的调用转换成为对应的 SOAP 消息。(3).在服务器端,用户只需要通过 Java 语言定义

31、远程调用所需要实现的接口 SEI(service endpoint interface),并提供相关的实现,通过调用 JAX-WS 的服务发布接口就可以将其发布为 WebService 接口。(4).在客户端,用户可以通过 JAX-WS 的 API 创建一个代理(用本地对象来替代远程的服务)来实现对于远程服务器端的调用。(5).当然 JAX-WS 也提供了一组针对底层消息进行操作的 API 调用,你可以通过 Dispatch 直接使用 SOAP 消息或XML 消息发送请求或者使用 Provider 处理 SOAP 或 XML 消息。通过 web service 所提供的互操作环境,我们可以用

32、JAX-WS 轻松实现 JAVA 平台与其他编程环境(.net 等)的互操作。2).描述了一个描述了一个 SOAP binding 的的 JAX WS 从接受到客户端的请求到返回请求给客户端的过程从接受到客户端的请求到返回请求给客户端的过程1,客户端开发者通过 URL 得到 WSDL 文件。(通过 HTTP 访问可以得到,http:/?wsdl)2,客户端根据 WSDL 的描述,通过 HTTP POST 发送 SOAP 消息给服务器端。3,服务器端 Listener 接受到 SOAP 请求消息,对 JAVA 来说,通常是一个 servlet 或者 EJB。Listener 把消息转发给 Dis

33、patcher,有时候 listener 和 Dispatcher 也可能是同一个类。Dispatcher 会把请求消息交给 WebService 的运行终端。4,这时候,服务器端会将 HTTP request 转成服务器端的消息类型,形成 javax.xml.ws.handler.MessageContext,并处理SOAP 消息的头信息,如 mustUnderstand。5,如果在服务器端配置了 handler,会调用 handler 的 handleMessage 方法,通常用 handler 来保存消息,解密或者保证消息到达的顺序。handler 通过在HandlerChain 标注配

34、置,handlers.xml 文件内容为:WSSOAPHandler com.cxf.test.WSSOAPHandler WSHandler com.cxf.test.WSHandler 6,SOAP 消息被反序列化为 JAVA 对象,传到真正的实现业务的类。7,调用真正的业务方法,执行后利用 JAXB 注解序列化成 SOAP 返回消息。8,如果配置了 handler,会调用 handler 的 handleMessage 方法。如果业务方法有异常抛出,把异常转为 SOAP fault 消息。9,Listener 通过 HTTP 把 response 返回给客户端。3).5.Jax-rs(J

35、avaTM API forRESTful Web Services)是面向资源的是面向资源的1).jax-rs 基本概念基本概念 JAX-RS 是 JAVA EE6 引入的一个新技术。JAX-RS 即 Java API for RESTful Web Services,是一个 Java 编程语言的应用程序接口,支持按照表述性状态转移(REST)架构风格创建 Web 服务。JAX-RS 使用了 Java SE5 引入的 Java 标注来简化 Web 服务的客户端和服务端的开发和部署。2).jax-rs 使用到的标注使用到的标注Path,标注资源类或者方法的相对路径GET,PUT,POST,DEL

36、ETE,标注方法是 HTTP 请求的类型。Produces,标注返回的 MIME 媒体类型Consumes,标注可接受请求的 MIME 媒体类型PathParam,QueryParam,HeaderParam,CookieParam,MatrixParam,FormParam,分别标注方法的参数来自于 HTTP 请求的不同位置,例如PathParam 来自于 URL 的路径,QueryParam 来自于 URL 的查询参数,HeaderParam 来自于 HTTP 请求的头信息,CookieParam 来自于 HTTP 请求的 Cookie。3).看实例代码看实例代码6.EJB(Enterpr

37、ise JavaBean)4).EJB 是什么:是什么:是采用 Java 语言开发语言开发、部署服务器端的分布式组件的标准和框架。5).为什么用?为什么用?(1)大型的企业级程序分解为分层分布的应用,必须使用 EJB;(2)构建多层程序架构;(3)各层独立,专注自己擅长的领域;(4)采用 EJB 可以不用考虑中间件服务(Middleware Service)6).EJB 开发和调用步骤开发和调用步骤 (1).开发编译业务接口和 Bean 类。(加上statless/stateful 或local/remote)(2).打包部署到 JNDI 服务器。(配置 jndi.properties:giv

38、es remote URL and other info)(3).客户端通过上下文(Context),调用其接口。例如:InitialContext context=new InitialContext();InterfaceName bean=(InterfaceName)context.lookup(JNDI-Name);7).EJB 定义了三种定义了三种 Bean,分别是会话 Bean(Session Bean),实体 Bean(Entity Bean),消息驱动 Bean(MessageDrive Bean)。Session Bean:a.有状态的:该状态在客户程序和 Bean 进行会

39、话期间被保持,(激活实现),效率低。b.无状态的:不为特定的客户程序保持会话状态。(实例池实现)Entity Bean:一般实体 Bean 对应着数据库中的一张表。MessageDrive Bean:应用程序异步的接收 Java 消息服务(JMS)的消息。8).local 和和remote 接口接口(不写时默认为不写时默认为local)(1).web 层调用 app 层使用 remote 接口。session bena 和 entity bean 之间调用使用的是 local 接口。(2).remote 接口对性能的影响是很大的。所以在设计的时候我们应尽量使用 local 接口,local 运

40、行在一个 EJB 容器的JVM 中,remote 接口运行在不同的 JVM 中。(3).在一般情况下建议两种类型的接口(包括 EJBHome 与 EJBObject)都生成,尤其是 Session Bean,Entity Bean,可以只生成 local 类型的接口,如果想远程调用你的 Entity Bean 一般用 Session Bean 做代理。(4).如果你不是远程调用 EJB 的话,使用 EJB 时建议调用 local 接口,这样效率高,因为远程调用就意味着建立网络连接,效率必然不如 local 调用。9).有状态有状态(stateful)和无状态和无状态(stateless)会话会

41、话 bean 的本质区别是它们的生命期。的本质区别是它们的生命期。1)有状态会话 bean:每个用户有自己特有的一个实例,在用户的生存期内,bean 保持了用户的信息,即“有状态”;一旦用户灭亡(调用结束或实例结束),bean 的生命期也告结束。即每个用户最初都会得到一个初始的 bean。生命周期我们可以用 web 中 context 去简单认识,比如 session、request 等。在这个生命周期内,用户只会得到一个特定一个特定的 stateful 会话 bean。2)无状态会话 bean:bean 一旦实例化就被加进会话池中,各个用户都可以共用用户都可以共用。即使用户已经消亡,bean

42、 的生命期也不一定结束,它可能依然存在于会话池中,供其他用户调用。由于没有特定的用户,那么也就不能保持某一用户的状态,所以叫无状态 bean。但无状态会话 bean 并非没有状态,如果它有自己的属性(变量),那么这些变量就会受到所有调用它的用户的影响,这是在实际应用中必须注意的。bean 的生命周期是由容器决定的 这两种这两种 bean 的使用场合简析的使用场合简析:1)有状态会话 bean:用于跟踪用户数据踪用户数据,它可以在分布式中被缓存和传递,只要生命周期未被销毁(如 session 会话,前提是此会话 bean 被 session 会话管理),那么此 bean 可以在应用中随时获取,且

43、数据时被同步更新的。它就像你的“妻子”,你要你还“爱她”,她会随你“一生”场合:用户登录权限切片控制,购物车等 2)无状态会话 bean:这里你需要用 servlet 的思想去认识它,它就想 servlet 一样,为上层调用提供服务,并且是线程池的形式存在。当服务调用结束(如:获取 web 服务,查询站点数据统计),无状态会话 bean 可能被销毁但也能继续存在,取决于线程池饱和度,但它不会为你保存任何和你的调用有“个人私情”的数据。你就认为他是一个 servlet,它是提供共享服务的,它不是“老婆”,更像给你送邮件的“邮递员”,你们直接的交易,只是在你需要的时候,并以及结束。(例如转账)7)

44、.Session Beans vs.Message-Driven Beans(MDBs)8).1.JPA(Java Persistence API)1).ORM(Object Relational Mapping 对象关系映射)Entity 是一个 POJO,JPA(Java Persistence API)可以使用实体来持久化。2).JPA 的特点的特点 1).JPA 是一种标准的持久化机制 2).在容器内外均可以运行 3).持久化提供者(Hibernate 等)不影响 JPA 的使用3).JPA 概述概述JPA 维护一个 Persistence Context(持久化上下文),在持久化上下

45、文中维护实体的生命周期。主要包含三个方面的内容:1.ORM 元数据。JPA 支持 annotion 或 xml 两种形式描述对象-关系映射。2.实体操作 API。实现对实体对象的 CRUD 操作。3.查询语言。约定了面向对象的查询语言 JPQL(Java Persistence Query Language)。4).实体生命周期实体生命周期1.New,新创建的实体对象,没有主键(identity)值2.Managed,对象处于 Persistence Context(持久化上下文)中,被 EntityManager 管理3.Detached,对象已经游离到 Persistence Contex

46、t 之外,进入 Application Domain4.Removed,实体对象被删除EntityManager 提供一系列的方法管理实体对象的生命周期,包括:1.persist,将新创建的或已删除的实体转变为 Managed 状态,数据存入数据库。2.remove,删除受控实体3.merge,将游离实体转变为 Managed 状态,数据存入数据库。如果使用了事务管理,则事务的 commit/rollback 也会改变实体的状态。4.refresh,从数据库中从新加载实体状态注:注:EJB 容器中容器中获获得得 EntityManager 对对象主要有两种方式,即象主要有两种方式,即Persi

47、stenceContext 注注释释注入和注入和 JNDI 方式方式获获得。得。org.hibernateorg.hibernatejavax.persistencejavax.persistence说明说明cfg.Configuration Persistence读取配置信息SessionFactoryEntityManagerFactory用于创建会话/实体管理器的工厂类SessionEntityManager提供实体操作 API,管理事务,创建查询TransactionEntityTransaction管理事务QueryQuery执行查询5).Persistence context 与与

48、 Entity manager(1).Persistence context(持久化上下文持久化上下文)一个持久化单元(Persistence Unit)就是关于一组 Entity 类的命名配置。持久化单元是一个静态的概念。一个持久化上下文(Persistence Context)就是一个受管的 Entity 实例的集合。每一个持久化上下文都关联一个持久化单元,持久化上下文不可能脱离持久化单元独立存在。持久化上下文中的 Entity 实例就是相关联的持久化单元中的若干 Entity 的实例。持久化上下文是一个动态的概念。一个 Entity 实例处于受管状态,其实质是:该实例存在于某个持久化上下

49、文中,并且可能被某个 EntityManager 处理,也因为这个原因,所以我们说一个 EntityManager 管理一个持久化上下文。尽管持久化上下文非常重要,但是开发者不直接与之打交道,持久化上下文在应用程序中是透明的,我们需要通过EntityManager 间接管理它。(2).Entity manager(实体管理器)(实体管理器)通过将PersistenceContext 注解标注在 EntityManager 类型的字段上,这样得到的 EntityManager 就是容器管理的EntityManager。由于是容器管理的,所以我们不需要也不应该显式关闭注入的 EntityManag

50、er 实例。容器管理的 EntityManager 又细分为两种类型:事务范围(Transaction)的和扩展的(Extended)。若PersistenceContext 未指定 type 属性,或者指定为 PersistenContextType.TRANSACTION,则表示该 EntityManager是事务范围的;若指定为 PersistenContextType.EXTENDED 的,则表示该 EntityManager 是扩展的。事务范围:事务范围的 EntityManager 是无状态的,可用在无状态会话 Bean 和有状态会话 Bean 中。事务范围的 EntityMana

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        获赠5币

©2010-2024 宁波自信网络信息技术有限公司  版权所有

客服电话:4008-655-100  投诉/维权电话:4009-655-100

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :gzh.png    weibo.png    LOFTER.png 

客服