java利用exe4j生成exe可执行文件精品资料.doc

上传人:封****n 文档编号:96698189 上传时间:2024-03-10 格式:DOC 页数:41 大小:1.02MB
返回 下载 相关 举报
java利用exe4j生成exe可执行文件精品资料.doc_第1页
第1页 / 共41页
java利用exe4j生成exe可执行文件精品资料.doc_第2页
第2页 / 共41页
点击查看更多>>
资源描述

《java利用exe4j生成exe可执行文件精品资料.doc》由会员分享,可在线阅读,更多相关《java利用exe4j生成exe可执行文件精品资料.doc(41页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、java利用exe4j生成exe可执行文件前言:我们都知道Java可以将二进制程序打包成可执行jar文件,双击这个jar和双击exe效果是一样一样的,但感觉还是不同。其实将java程序打包成exe也需要这个可执行jar文件。准备:eclipse、exe4j(网上有软件和帐号下载)第一步,将java项目打包成可执行jar文件,首先看一下我的java project结构,Main.java是程序入口类,里面有main函数,config目录是些配置文件,lib是用到的第三方类库开始打包,Simulate(Java项目)-鼠标右键-Export弹出窗口,选择“JAR file”,点击“Next”取消勾

2、选“config”和“lib”目录,以及eclipse生成的项目配置文件“.classpath”和“.project”,点击“Next”一切默认,点击“Next”在弹出窗口中,选择我们自己创建的MANIFEST.MF文件,点击“Finish”我的MANIFEST.MF文件内容为:Manifest-Version:1.0Main-Class: bing.MainClass-Path: . lib/ojdbc14.jar lib/poi-2.5.1.jar lib/jbcl.jar lib/JTattoo.jar lib/liquidlnf.jarCreated-By: IceWee通过指定“Ma

3、in-Class”来达到可执行jar文件的目的。其实我们最终是将项目打包成exe,Class-Path可以不指定,在打包exe的时候还要指定classpath的。第二步,将项目打包成exe,这里要明确一点,并不是把所有的文件都打包成一个exe,资源文件是不能包进去的,往下看首先,在任意目录创建一个文件夹,最好命名和项目名相同,我在F盘创建了一个“Simulate”文件夹,之后将所有的资源文件以及我们生成的可执行jar文件(我的Simulate.jar)都拷贝到这个文件夹里,config目录和lib目录,如果你怕执行该程序的机器上没安装jre,那么你需要将自己机器上的jre目录也拷贝进来,我安装

4、的jre5,最后的目录结构:打开exe4j,跳过欢迎,直接点击左侧导航的第二项,因为我们已经提前将java项目打包成可执行jar文件了在弹出窗口,选择“JAR in EXE mode”,点击“Next”在新窗口中,为我们的应用取个名称,之后选择exe生成目录(我的F:Simulate),点击“Next”为我们要生成的exe取名,如果想生成自定义图标,那么选择你的ico文件,如果你不想在一台电脑上运行多个你的程序,你可以勾选“Allow only a single.”,点击“Next”点击绿色“”,设置程序运行的Class Path先选择我们自己的可执行jar文件(我的Simulate.jar)

5、,点击OK我们的Simulate.jar就加到Class Path下了之后点击General中的Main Class选择按钮,在弹出窗口中,exe4j会自动搜索当前Class Path下的全部jar中包含main方法的类,并列出,因为当前我只选择了自己项目的jar,而我的项目中只有Main.jar包含了main方法,所以一目了然,直接选择它点击“OK”,程序入口类就设置完成了Main Class设置完成后,依次将所有需要的第三方类库加到Class Path下,方法同添加“Simulate.jar”一样,点击“Next”输入Java最小Jre版本号,即低于这个版本的Jre无法运行该程序,接着点击

6、“Advanced Options”-“Search sequence”,设置一下我们的JRE,之前说过,如果客户机上没装Jre咋办?,没关系我们捆绑一个进去点击绿色“”来选择捆绑的JRE位置在弹出对话框中选择“Directiony”,之后选择JRE的文件夹,注意:这个JRE目录是我们将本机的JRE目录拷贝到当前exe生成目录下的,我的目录是F:Simulatejre5,下图程序使用的是相对目录,点击OK,完成JRE的捆绑操作JRE捆绑完毕,点击“Next”默认,点击“Next”默认,点击“Next”默认,点击“Next”exe生成中OK,完成,点击“Exit”即可看看成果如何吧!我们的可执行

7、jar以及第三方jar总共还不到5M,可jre5目录就50多M,如果目标机器上有JRE环境就可以把它删掉了,lib目录是第三方jar文件,现已打包到exe中了,所以它也没有存在的理由了,那么最小配置就剩下了“Simulate.exe”和“config”目录了!附录资料:JAVA工程师EJB面试题集JAVA工程师EJB面试题集EJB (Enterprise JavaBean)是J2EE的一部分,定义了一个用于开发基于组件的企业多重应用程序的标准。其特点包括网络服务支持和核心开发工具(SDK)。 在J2EE里,Enterprise Java Beans(EJB)称为Java 企业柄,是Java的核

8、心代码,分为整体柄和片段柄和消息柄三个部分,其中的消息柄将在以后再作讨论。现在我们来看看什么是整体柄和片段柄。 整体柄是一种对象: 标准Java对象由创建它的程序创建,当程序终止时,对象也随之丢失,这就意味着当再次运行些程序时,将无法找到先前创建的柄,而整体柄会一直存在着直到它被删除。 一个程序可以创建一个整体柄,并且这个程序可以在被保存后随时停止和重启。整体柄将会依然存在。重启后,程序可以找到与之相对应的整体柄,并且会继续使用这个整体柄。 EJB实际上是SUN的J2EE中的一套规范,并且规定了一系列的API用来实现把EJB概念转换成EJB产品.EJB是BEANS,BEANS是什么概念,那就是

9、得有一个容纳她,让她可劲造腾的地方,就是得有容器.EJB必须生存在EJB容器中.这个容器可是功能强大之极!她首先要包装你BEAN,EJB的客户程序实际上从来就不和你编写的EJB直接打交道,他们之间是通过HOME/REMOTE接口来发生关系的.它负责你的BEAN的所有的吃喝拉萨睡,比如BEAN的持续化,安全性,事务管理. 一.什么是 EJB?一个技术规范:EJB 从技术上而言不是一种产品EJB 是一种标准描述了构建应用组件要解决的:可扩展 (Scalable)分布式 (Distributed)事务处理 (Transactional)数据存储 (Persistent)安全性 (Secure)二.S

10、un 对 EJB 的期望提供一个标准的分布的、基于 OO 的组件架构屏蔽复杂的系统级功能需求Write once, run anywhere与非 Java 应用之间的互操作能力兼容 CORBA 标准三.为什么选择 EJB?EJB 服务器完成繁杂的工作:应用开发人员关注于业务逻辑的实现而不是底层的实现机制(类似于 4GL 语言设计的目标)支持事务处理多个业务操作同时成功,或全部失败可以通过在代码外的描述来定义事务处理级别可扩展性EJB 可以根据您应用的增长而扩展EJB 服务器往往还提供了负载均衡和安全性:由 EJB 服务器提供资源的访问权限控制四.EJB 架构为了满足架构的目标,规范中描述了服务

11、器 (Server)容器 (Container)类 (Class) 和实例 (Instance)Home 和 Remote 接口客户端 (Client)五. 简化的编程模型关注于业务逻辑实现:EJB 负责生命周期 (lifecycle), 数据存储 (persistence), 事务处理语义 (transactional semantic), 安全(security), .通用的编程模型:各种服务的高层 APIJava 是其编程语言1.EJB 特点由一个 EJB 容器在运行时创建和管理 EJB在部署 EJB 时定制其运行方式由 EJB 容器和服务器来协调客户端的访问可以部署到任何兼容的 EJB

12、 容器中客户端对 EJB 的视图是由 Bean 开发人员决定的2.EJB 服务器管理 EJB 容器 (它管理 Bean)提供对操作系统服务的存取提供 Java 相关的服务,尤其是通过 JNDI 访问命名空间基于 OTS 的事务处理服务3.EJB 容器管理 Bean 生命周期:将 EJB 服务器提供的服务传递给 Bean生成代码来实现对 Bean 的存取访问强制事务处理的限制创建、初始化和回收 Bean管理持久数据的存储对客户端而言 EJB 容器是透明的4.在一个 EJB 服务器中的容器目前容器通常是由 EJB 服务器本身提供的在 EJB 1.0 或 1.1 规范中没有定义容器-到-服务器的接口

13、各厂商可以根据他们的见解来实现服务器和容器的各自责任5.容器提供服务: 数据存储容器决定何时载入/储存状态Container-Managed Persistence(容器管理存储/CMP)容器负责存储您的 Bean容器生成必要的类和代码Bean-Managed Persistence(Bean 管理存储/BMP)Bean 开发人员提供存储代码开发人员决定 如何存储, 容器仍然决定 何时进行6.容器提供服务: 事务处理可以由容器代理来实现容器将得到业务逻辑方法的事务处理需求容器提供事务控制代码也可以由程序员通过代码实现7.容器提供服务: 其它服务其它服务包括命名 (Naming)安全 (Secu

14、rity)线程管理 (Thread management)这些服务由容器代理完成将减少应用开发人员的负担8.分布式对象运算远程对象被作为本地对象来处理:传递信息的方式不变,但开销更大Enterprise JavaBeans 永远运行在服务器上:对 Bean 的访问永远是远程调用9.Stub 和 Skeleton由 EJB 生成:Stub 对要传递出去的信息编码Tie/Skel 将接受到的信息解码并传递给目标对象10.分类: Enterprise JavaBeans+-Entity Beans-CMP/BMPEjb-|+-Session Beans-Stateful/Stateless会话 Be

15、an (Session Bean):根据 EJB 规范,一个会话 Bean 是:代表单个客户端来执行可以参与到事务处理中不直接代表共享于数据库中的数据,但它能访问和更新这些数据相对而言是短暂存在的当 EJB 容器失效后就不存在客户端需要重新建立一个信新的会话对象来继续运算实体 Bean (Entity Bean):根据 EJB 规范,一个实体 Bean 是:提供在数据库中数据的对象视图允许被多个用户共享存取访问可以是长期存在 (只要它存在于数据库中)实体 Bean, 它的主键对象, 以及它的远程引用将能跨 EJB 容器的宕机而存在11.EJB 类和实例构建 EJB 应用包括来自三方的代码开发人

16、员编写的代码由 EJB API 定义的类和接口由容器自动生成的代码开发人员编写的代码包括Bean 类 (定义了业务逻辑)Home 接口 (如何查找或创建 bean)Remote 接口 (如何存取 bean)其它组件,根据 bean 实际要求12.EJB Home 接口每个 bean 有一个用于:创建新的 bean 实例、查找现存的 bean (只能是实体 bean)Remote 接口:定义 bean 的公共接口只有在 Remote 接口中定义的方法才能被客户端访问EJB 客户端可以为 servlet, JSP, 应用程序或其它 bean通过 JNDI 来查找 EJB home 接口,步骤为:创

17、建一个 JNDI Context (initial context)使用 JNDI Context 来查找 bean home 接口使用 bean home 接口来创建/查找 bean 实例使用 bean 实例完成业务操作实际的存取 (对 EJB) 是通过容器生成的类来完成EJB 架构客户端对 bean 访问永远不是直接的EJBObject (tie) 是由容器自身提供的:用来帮助管理 bean 的生命周期EJB 中的角色EJB 服务器供应商: 开发并销售 EJB 服务器EJB 容器供应商: 开发并销售 EJB 容器Enterprise bean 开发人员: 开发并销售 EJB应用组装人员:

18、将不同的 EJB 搭建成应用六、EJB的体系结构 目前,EJB最新的标准是2.1,EJB3.0规范正在讨论中,预计将于明年推出。EJB2.1定义了三种企业Bean,分别是会话Bean(Session Bean),实体Bean(Entity Bean)和消息驱动Bean(MessageDriven Bean)。Session Bean用于实现业务逻辑,它可以是有状态的,也可以是无状态的。每当客户端请求时,容器就会选择一个Session Bean来为客户端服务。Session Bean可以直接访问数据库,但更多时候,它会通过Entity Bean实现数据访问。Entity Bean是域模型对象,用

19、于实现O/R映射,负责将数据库中的表记录映射为内存中的Entity对象,事实上,创建一个Entity Bean对象相当于新建一条记录,删除一个Entity Bean会同时从数据库中删除对应记录,修改一个Entity Bean时,容器会自动将Entity Bean的状态和数据库同步。MessageDriven Bean是EJB2.0中引入的新的企业Bean,它基于JMS消息,只能接收客户端发送的JMS消息然后处理。MDB实际上是一个异步的无状态Session Bean,客户端调用MDB后无需等待,立刻返回,MDB将异步处理客户请求。这适合于需要异步处理请求的场合,比如订单处理,这样就能避免客户端

20、长时间的等待一个方法调用直到返回结果。调用一个EJB组件要比调用一个JavaBean麻烦些,由于EJB组件可以分布在多台服务器上,因此必须首先获得远程或本地Home接口,然后使用Home接口创建EJB之后就可以调用EJB的方法了。七、EJB设计模式常见EJB设计模式 SESsion Facade pattern 通常项目中,客户端往往需要频繁的对服务器端数据进行操作。当采用实体EJB作为数据的抽象层时,如果直接让客户端程序与实体EJB交互,会产生实现一个业务需求便需要大量的EJB属性操作(如下图)。这直接导致如下问题:网络负载大(远程客户端时)、并发性能低、客户端与服务器端关联度大、可重用性和

21、可维护性差、性能因此有必要在客户端与实体EJB层间加入SessionEJB层,在Sessino EJB中实现商业逻辑并封装对实体EJB的操作。(如下图)图:客户端直接与实体EJB交互图:通过SessionEJB层实现 Session Facade模式的好处是:降低了网络负载,SessionEjb可以调用实体EJB的本地接口;将商业逻辑与商业数据隔离;维护与开发方便;显著提高性能。 Session Facade模式因其简单使用,是目前使用很广的模式。但具体应用过程中应注意:避免将所有的操作封装到一个很大的SessionEJB内;服务器端数据结构应由实体EJB实现,除非特例否则避免直接的数据库操作

22、;SessionEjb内某些系统通用操作的代码容易重复(比如权限检查等,解决办法是将系统通用服务封装在Java Class内)。MesSAge Facade Pattern 很多时候,一次RequeST需要操作多个EJB又不需要得到即时返回。对这种异步调用,通常应用Message Fa?ade Pattern. 这种时候,如采用Session Fa?ade Pattern存在如下问题: 1. 客户端等待返回的时间过长。一个SessionEjb的实例在完成客户请求过程中中涉及到的每一次对其他实体Ejb的调用过程中都会被锁定直到得到实体EJB返回信息后才能进行下一步操作。这样造成客户不必要的等待,

23、并很容易因时间导致整个事务失败。 2. 系统可靠性和容错性低。如果需要调用不同系统或服务器上或多个异构数据源的多个EJB时,任何一个环节出错,均导致客户请求失败。以Message-Driven Bean为基础的Message Facade Pattern则可以解决上述异步请求需求。具体架构见下图图:使用Message Facade PatternMessage Facade Pattern的不足之处在于: Message-Driven Bean没有返回值。这样通知客户执行结果只能依赖于AI或人工等其他手段。 Message-Driven Bean执行过程中无法将捕获的异常直接返回给客户端,即无

24、法使客户端直接直到错误信息。 Message-Driven Bean通过接收Message响应客户请求,对Message内容的合法性(比如对象的类型等)依赖与客户端.容易产生运行时错误。Message Facade Pattern经常与Session Facade Pattern在同一个项目里共同使用。EJB Command Pattern Session Facade Pattern中将商业逻辑实现封装在Session EJB中,这种做法带来诸多益处之外也带来如下问题: 由于业务经常的变化,导致经常需要更新Session EJB代码。 客户端代码不得不包含大量EJB相关的,不利于后期项目维护

25、。 项目开发测试需要经常的EJB重部署过程。 引起上述问题的重要根结就是Session EJB本身重量级组件,其开发测试部署工作量较大,开发周期较长。以上不足可以通过EJB Command Pattern克服。 EJB Command Pattern中将商业逻辑实现封装在普通的Java ClASs(称之为Command Bean)中。该模式的具体实现有很多种,通常的框架都包括三部分: Command Bean.由应用开发者写的具体实现某商业操作的Java Class.主要包含getXXX(),setXXX(),exECute()方法。 Client-Side Routing Logic.由多个

26、Class组成,用于将请求转发至Command Sever,这个过程对客户是透明的。这部分代码可以跨项目使用。路由规则中可以考虑用XML技术。 Remote Command Server.实际执行商业操作请求。通常可以用Session EJB层实现。整个框架见下图:图:Command的基本框架 EJB Command Pattern具有如下好处: 适应与需要快速开发环境。因Command Bean是轻量级的Java Class,其编译和调试比较方便。 将表现层与商业实现层隔离,同时将客户端代码与EJB层隔离。 将客户端代码开发与服务器端代码开发相对清晰。早期可以创建空的Command Bean

27、方便客户端代码调试。EJB Command Pattern的弱处在于: Command Bean中对事务的控制不如Session EJB中。 Command Bean是无状态的。 无法将异常直接返回给客户。 在大项目中,由于商业逻辑复杂,常导致大数量的Command Bean存在. 作为Command Server的Session EJB打包时必须包含Command Bean以致存在维护上的不便。EJB Command Pattern的一个实际实现可以参考IBMs Command framework.Data Transfer object Factory 基于EJB的J2EE项目,经常需要在

28、客户端与服务器端传输大量数据。数据的组织形式常用的是DTO(Data Transfer Object,服务器端数据对象的抽象)。但因为客户端表现层经常是变化的,所需要服务器端数据也变动频繁,换句话说,DTO的数量和属性经常要更改。因此如何以及在何处生成和维护DTO便是需要考虑的问题。 一种解决方案是直接在Entity EJB中直接处理,即在Entity EJB的Bean类中加入getXXXDTO()、setXXXDTO()等。但这样做导致EJB与DTO层紧紧绑定。一旦DTO更改,与该DTO相关的EJB即需要重编译打包。EJB层与客户端层相关联不仅使维护困难而且导致EJB的重用性大大降低。 更好

29、的解决方案是利用Data Transfer Object Factory封装对DTO的操作逻辑(如下图)。图:DTO Factory示例 DTO Factory具体实现方式通常有两种: 普通Java Class实现,用于Session Facade Pattern使用DTO环境下。 Stateless Session EJB实现,用于非EJB客户端使用DTO环境下(见图)。 图:SessionEJB实现DTOFactory DTO Factory带来如下好处: 使Entity EJB的重用成为可能。由于不含DTO处理逻辑,Entity EJB功能单一化,只作为数据源。不通客户端通过各自的DTO

30、 Factory可以从同一个Entity EJB得到各自所需的个性化数据(自定义DTO)。 提高可维护性和性能。 可以根据在DTO Factory层生成很复杂的DTO结构,诸如继承、关联关系等,而对客户端提供一个透明、细化的数据接口。使用DTO Factory时需要注意的是:不需为每个Entity EJB定义一个Factory。可以为一系列相关的Entity EJB创建一个Factory,或者只创建一个Factory。Generic Attribute Access 使用Entity EJB作为商业数据层时,我们首先需要从数据库加载数据,创建对应的Entity EJB实例,之后对内存中Enti

31、ty EJB实例的属性进行相应操作。对属性的操作比较直接的做法是:直接调用Entity EJB的getXXX()/setXXX(),通常利用EJB2.0的本地接口;通过DTO Factory生成DTO。但这两种做法都存在如下问题: 当Entity EJB的属性特别多时候,以上做法会带来复杂罗嗦的代码,使EJB变的庞大无比。 使Entity EJB的客户端(比如Session EJB)和Entity EJB的接口紧密关联。Entity EJB属性的增删都需要更改客户端代码,给项目开发和维护带来不便。 事实上可以利用更通用的方式访问Entity EJB的属性,即定义Generic Attribut

32、e Access Interface。见下图:图:Generic Attribute Access Interface示例 Generic Attribute Access Interface由Entity EJB的本地或远程接口实现,并利用Hash Maps传输数据。实现方式常见如下: BMP类型实体EJB可以在Bean类中定义包含所有属性的私有成员变量HashMap。 CMP类型实体EJB可以在Bean类中可以适用Java Reflection API实现。 建立一个父类,在不同的情况下定义子类重载父类方法。使用Generic Attribute Access Interface需要在客户

33、端与服务器端对属性以及对应的关键字建立统一的命名习惯。常见的做法如下: 建立并保持良好的文档记录和命名约定。 在实体EJB的实现类中定义静态成员映射属性。 创建共享静态类,通过成员变量映射实体EJB属性。 通过JNDI在服务器端保存属性映射关系。Generic Attribute Access Interface的运用带来一下益处: 接口实现后对不通实体EJB都适用。 对属性较多实体EJB能精简代码,并更具维护性。 使运行中动态增删实体EJB属性成为可能。Generic Attribute Access Interface的缺点在于: 访问EJB属性时增加了额外的操作。需要通过关键字映射属性,

34、最后还需进行类型转换。 需要建立客户端与服务器端的命名约定。 因为通过HashMap操作时候需要进行类型转换,容易产生运行时类型不匹配异常。Business Interface EJB规范要求Bean实现类必须实现所有在远程(或本地)接口中定义的所有方法,同时不允许Bean实现类直接继承远程(或本地)接口。这就导致编译时候很容易产生两者不一致的问题,即远程(或本地)接口中定义的某方法为在Bean实现类中被实现等错误。为避免上诉错误,可以利用应用服务器厂商所提供的工具。但也可以应用EJB的设计架构来实现:定义商业接口。Business Interface即创建自定义商业接口,在接口中定义所有EJ

35、B提供的商业方法,并让Bean实现类和远程(或本地)接口都实现该商业接口。其继承关系见下图:图:商业接口的使用 Business Interface是个普通的Java Class。依赖于使用本地接口与远程接口的不通,Business Interface的定义略有不同:应用与远程接口时,在接口中的方法需要抛出java.rmi.RemoteException;而应用与本地接口时候则不需要作任何特别处理。应用Business Interface时候必须注意一点:EJB规范不允许直接EJB的实例将对自己的引用(this对象)返回给客户端,否则编译时候即报错。但使用Business Interface后

36、,编译时候无法检查出有无将this对象返回给客户端。这一点需要程序员自己保证。三 内部数据转换策略Data Transfer Object 基于EJB的J2EE多层架构应用中,经常涉及的一个问题就是如何在各层之间传递批量数据,比如客户端对服务器端数据的批量读写操作等。比如需要得到实体EJB的属性,直接的方法是多次调用不通的属性,如下图:图:低效的数据传递方式但这种方法容易导致许多问题,比如性能以及代码的复杂度等,更有效的办法是在一个调用中得到所有需要的属性。所以可以引入Data Transfer Object来封装所需要的属性,并在客户与服务器端通过传递该对象一次实现对数据的操作。如下图:图:

37、通过DTO传递数据DTO为普通的Java Class,通常是服务器端数据的快照。由于网络传输的需要,DTO应该实现java.io.Serializable接口。DTO的设计有两种模型:Domain DTO以及Custom DTO。Domain DTO仅仅实现对服务器数据的拷贝,通常与实体EJB为一对一的关系(也存在为多个相关联的实体EJB对应一个Domain DTO)。Domain DTO通常除用于读取更改实体EJB属性外也可用于创建实体EJB时候。实体EJB与Domain DTO对应关系如下图:图:Account EJB 与Account DomainDTO Domain DTO的应用除了D

38、TO所具有的一般优点外,还有别的益处: 开发迅速。因为一旦实体EJB设计好后,很容易转换得到Domain DTO。 可以利用Domain DTO的setXXX()方法在客户端进行属性有效性效验。Domain DTO的缺点有: 客户端绑定了服务器端数据模型,不利于维护。 不够灵活,无法处理客户端的多样化数据要求。对一个数百个属性的实体EJB请求一个属性时候却返回一个包含所有属性值的Domain DTO明显是笨重的实现。 导致代码的重复。 Domain DTO中如果嵌套包含了别的Domain DTO时,一旦需服务器端数据的更改而需要重定义Domain DTO模型时候异常困难。 Custom DTO

39、则可以克服上述的一些缺点。Customer DTO仅仅封装用户感兴趣的服务器数据集即可以根据客户端需求创建Customer DTO。这样作的优点是灵活高效;缺点是大项目中可能导致大量的Customer DTO存在。 通常Domain DTO可以用于数据的更新与创建;Customer DTO可以用于客户用于表现层的数据读取。两者可以相辅相成。而且使用DTO一般与DTO Factory同时使用。Domain Transfer Hash MapDTO的使用往往缺乏通用性。不通的用户案例需要创建不同的DTO。当项目很复杂时,从维护性考虑需要更好的数据传输的实现方式。Domain Transfer Ha

40、sh Map即利用HashMap作为客户所需数据集的封装。好处是: 良好的维护性。 较大的通用性。不同的客户端可以使用相同的数据传递方式。缺点是: 需要维护客户端与服务器端在属性及其对应关键字的映射关系。 当需要使用基本类型的数据时候,因为Hash Map的限制必须将基本类型先转换成对象。 使用得到的数据时,需要进行类型强制转换。Data Transfer RowSet 当需要处理直接的JDBC调用得到的结果集时,显然用DTO/Hash Map已经不合适,因为需要对大量数据进行类型转换等额外操作是很费资源和不必要的,而且最终用户常需要以表格式样显示数据。 所以对二维表式数据,更好的处理方式是利

41、用Data Transfer RowSet。Data Transfer RowSet通过将ResultSet直接转换为RowSet传递给客户端。在Session EJB中使用RowSet的一段示例代码如下图:图:使用RowSet使用RowSet的好处很多: 接口通用于各样的数据库查询操作。 当需要表格式数据显示时,因为直接从ResultSet得到,所以不需要额外的数据类型转换。缺点是: 数据库结构暴露给客户端。 不符合面向对象设计思想。 依赖于SQL。 Data Transfer RowSet通常用于只读式数据的显示操作,经常和JDBC for Reading Pattern连用。四事务和数据

42、持久机制JDBC for Reading Pattern 基于EJB的J2EE应用中,通过EJB对数据库的操作可以有两种方式:实体EJB或者Session EJB中直接利用JDBC访问。客户很多时候取出数据库中数据并以表格方式显示。这种情形如果使用实体EJB会导致如下问题: 引用服务器端频繁的数据库查询和加载操作。因为加载N个实体EJB总需要进行一次find()操作N次数据加载。 如果使用Remote接口,引起频繁的额外网络操作。 对关联关系比较复杂的数据库表结构,很难直接通过Entity EJB表现。 因此建议在只需对数据库表数据进行只读访问时候,应该采用JDBC for Reading Pattern,即通过JDBC直接访问数据库。除了避免上述使用实体EJB的缺点还带来一下好处: 充分利用数据库能力,比如数据库的缓存机制。 减少了对事务控制的资源。 利用自定义SQL可以按需要比较灵活的读取数据。 只需要一次数据查询,减少了数据库操作。 缺点是: 于J2EE应用的面向对象设计相违背。 因为Session EJB代码中包含了自定义SQL,维护性差。 Session EJB中不得不包含JDBC的API,并且需要了解数据库结构。部属人员: 使用相应工具在运行环境下配置 EJB系统管理员: 监视运行时情况

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 期刊短文 > 互联网

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁